tree-ssa-address.c (260073) | tree-ssa-address.c (260194) |
---|---|
1/* Memory address lowering and addressing mode selection. 2 Copyright (C) 2004 Free Software Foundation, Inc. 3 4This file is part of GCC. 5 6GCC is free software; you can redistribute it and/or modify it 7under the terms of the GNU General Public License as published by the 8Free Software Foundation; either version 2, or (at your option) any --- 555 unchanged lines hidden (view full) --- 564 computations are emitted in front of BSI. TYPE is the mode 565 of created memory reference. */ 566 567tree 568create_mem_ref (block_stmt_iterator *bsi, tree type, 569 struct affine_tree_combination *addr) 570{ 571 tree mem_ref, tmp; | 1/* Memory address lowering and addressing mode selection. 2 Copyright (C) 2004 Free Software Foundation, Inc. 3 4This file is part of GCC. 5 6GCC is free software; you can redistribute it and/or modify it 7under the terms of the GNU General Public License as published by the 8Free Software Foundation; either version 2, or (at your option) any --- 555 unchanged lines hidden (view full) --- 564 computations are emitted in front of BSI. TYPE is the mode 565 of created memory reference. */ 566 567tree 568create_mem_ref (block_stmt_iterator *bsi, tree type, 569 struct affine_tree_combination *addr) 570{ 571 tree mem_ref, tmp; |
572 tree atype; | 572 tree addr_type = build_pointer_type (type), atype; |
573 struct mem_address parts; 574 575 addr_to_parts (addr, &parts); 576 gimplify_mem_ref_parts (bsi, &parts); 577 mem_ref = create_mem_ref_raw (type, &parts); 578 if (mem_ref) 579 return mem_ref; 580 --- 11 unchanged lines hidden (view full) --- 592 593 mem_ref = create_mem_ref_raw (type, &parts); 594 if (mem_ref) 595 return mem_ref; 596 } 597 598 if (parts.symbol) 599 { | 573 struct mem_address parts; 574 575 addr_to_parts (addr, &parts); 576 gimplify_mem_ref_parts (bsi, &parts); 577 mem_ref = create_mem_ref_raw (type, &parts); 578 if (mem_ref) 579 return mem_ref; 580 --- 11 unchanged lines hidden (view full) --- 592 593 mem_ref = create_mem_ref_raw (type, &parts); 594 if (mem_ref) 595 return mem_ref; 596 } 597 598 if (parts.symbol) 599 { |
600 tmp = build_addr (parts.symbol, current_function_decl); 601 gcc_assert (is_gimple_val (tmp)); | 600 tmp = fold_convert (addr_type, 601 build_addr (parts.symbol, current_function_decl)); |
602 603 /* Add the symbol to base, eventually forcing it to register. */ 604 if (parts.base) 605 { | 602 603 /* Add the symbol to base, eventually forcing it to register. */ 604 if (parts.base) 605 { |
606 gcc_assert (TREE_TYPE (parts.base) == sizetype); 607 | |
608 if (parts.index) | 606 if (parts.index) |
609 { 610 atype = TREE_TYPE (tmp); 611 parts.base = force_gimple_operand_bsi (bsi, 612 fold_build2 (PLUS_EXPR, atype, 613 fold_convert (atype, parts.base), | 607 parts.base = force_gimple_operand_bsi (bsi, 608 fold_build2 (PLUS_EXPR, addr_type, 609 fold_convert (addr_type, parts.base), |
614 tmp), 615 true, NULL_TREE); | 610 tmp), 611 true, NULL_TREE); |
616 } | |
617 else 618 { 619 parts.index = parts.base; 620 parts.base = tmp; 621 } 622 } 623 else 624 parts.base = tmp; --- 181 unchanged lines hidden --- | 612 else 613 { 614 parts.index = parts.base; 615 parts.base = tmp; 616 } 617 } 618 else 619 parts.base = tmp; --- 181 unchanged lines hidden --- |