diff options
author | Andrey Belevantsev <abel@ispras.ru> | 2009-05-06 18:27:10 +0400 |
---|---|---|
committer | Andrey Belevantsev <abel@gcc.gnu.org> | 2009-05-06 18:27:10 +0400 |
commit | fff1894cd63f0bf02a87c2284a7ae60bc08c70fe (patch) | |
tree | f42b7e6ad28124b32fb513b6b602ef7474fb842e /gcc/tree-ssa.c | |
parent | 700ae70ccd0670e450e76529e413cbb5e14c72f4 (diff) | |
download | gcc-fff1894cd63f0bf02a87c2284a7ae60bc08c70fe.zip gcc-fff1894cd63f0bf02a87c2284a7ae60bc08c70fe.tar.gz gcc-fff1894cd63f0bf02a87c2284a7ae60bc08c70fe.tar.bz2 |
tree-ssa.c (execute_update_address_taken): Handle TARGET_MEM_REF when processing for not_regs_needed bitmap.
* tree-ssa.c (execute_update_address_taken): Handle TARGET_MEM_REF
when processing for not_regs_needed bitmap.
* gimple.c (walk_stmt_load_store_addr_ops): When visiting address,
handle TARGET_MEM_REF in lhs. Check TMR_BASE for NULL while
handling it for rhs.
From-SVN: r147179
Diffstat (limited to 'gcc/tree-ssa.c')
-rw-r--r-- | gcc/tree-ssa.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 10ec35b..10f8482 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1518,14 +1518,20 @@ execute_update_addresses_taken (bool do_optimize) a local decl that requires not to be a gimple register. */ if (code == GIMPLE_ASSIGN || code == GIMPLE_CALL) { - tree lhs = gimple_get_lhs (stmt); - /* A plain decl does not need it set. */ - if (lhs && handled_component_p (lhs)) - { - var = get_base_address (lhs); - if (DECL_P (var)) - bitmap_set_bit (not_reg_needs, DECL_UID (var)); - } + tree lhs = gimple_get_lhs (stmt); + + /* We may not rewrite TMR_SYMBOL to SSA. */ + if (lhs && TREE_CODE (lhs) == TARGET_MEM_REF + && TMR_SYMBOL (lhs)) + bitmap_set_bit (not_reg_needs, DECL_UID (TMR_SYMBOL (lhs))); + + /* A plain decl does not need it set. */ + else if (lhs && handled_component_p (lhs)) + { + var = get_base_address (lhs); + if (DECL_P (var)) + bitmap_set_bit (not_reg_needs, DECL_UID (var)); + } } } |