diff options
author | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-10-01 13:40:35 +0000 |
---|---|---|
committer | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-10-01 13:40:35 +0000 |
commit | 6d7105fe4a7d259ce5b9d2d1f90282a45d82af07 (patch) | |
tree | 3d1a42a39b3f8ad8f92b0f63c0dbd403f943ed08 | |
parent | cf4089a8eb480cd4e6f1f5e78e249072a4b986c9 (diff) | |
download | gcc-6d7105fe4a7d259ce5b9d2d1f90282a45d82af07.tar.gz |
* tree.h (copy_mem_ref_info): Delete.
* tree-ssa-address.c (copy_mem_ref_info): Likewise.
(maybe_fold_tmr): Copy flags manually.
* tree-ssa-loop-im.c (simple_mem_ref_in_stmt): Rewrite.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191924 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/tree-ssa-address.c | 21 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-im.c | 23 | ||||
-rw-r--r-- | gcc/tree.h | 1 |
4 files changed, 21 insertions, 31 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 35c062c5979..020892bdf39 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2012-10-01 Eric Botcazou <ebotcazou@adacore.com> + + * tree.h (copy_mem_ref_info): Delete. + * tree-ssa-address.c (copy_mem_ref_info): Likewise. + (maybe_fold_tmr): Copy flags manually. + * tree-ssa-loop-im.c (simple_mem_ref_in_stmt): Rewrite. + 2012-10-01 Marc Glisse <marc.glisse@inria.fr> * simplify-rtx.c (simplify_binary_operation_1) <VEC_SELECT>: diff --git a/gcc/tree-ssa-address.c b/gcc/tree-ssa-address.c index caa51be6a5d..c5b8ff1056b 100644 --- a/gcc/tree-ssa-address.c +++ b/gcc/tree-ssa-address.c @@ -821,16 +821,6 @@ get_address_description (tree op, struct mem_address *addr) addr->offset = TMR_OFFSET (op); } -/* Copies the additional information attached to target_mem_ref FROM to TO. */ - -void -copy_mem_ref_info (tree to, tree from) -{ - /* And the info about the original reference. */ - TREE_SIDE_EFFECTS (to) = TREE_SIDE_EFFECTS (from); - TREE_THIS_VOLATILE (to) = TREE_THIS_VOLATILE (from); -} - /* Copies the reference information from OLD_REF to NEW_REF, where NEW_REF should be either a MEM_REF or a TARGET_MEM_REF. */ @@ -901,7 +891,7 @@ maybe_fold_tmr (tree ref) { struct mem_address addr; bool changed = false; - tree ret, off; + tree new_ref, off; get_address_description (ref, &addr); @@ -962,10 +952,11 @@ maybe_fold_tmr (tree ref) ended up folding it, always create a new TARGET_MEM_REF regardless if it is valid in this for on the target - the propagation result wouldn't be anyway. */ - ret = create_mem_ref_raw (TREE_TYPE (ref), - TREE_TYPE (addr.offset), &addr, false); - copy_mem_ref_info (ret, ref); - return ret; + new_ref = create_mem_ref_raw (TREE_TYPE (ref), + TREE_TYPE (addr.offset), &addr, false); + TREE_SIDE_EFFECTS (new_ref) = TREE_SIDE_EFFECTS (ref); + TREE_THIS_VOLATILE (new_ref) = TREE_THIS_VOLATILE (ref); + return new_ref; } /* Dump PARTS to FILE. */ diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c index e76e64398ea..ac5353905df 100644 --- a/gcc/tree-ssa-loop-im.c +++ b/gcc/tree-ssa-loop-im.c @@ -638,29 +638,22 @@ outermost_indep_loop (struct loop *outer, struct loop *loop, mem_ref_p ref) static tree * simple_mem_ref_in_stmt (gimple stmt, bool *is_store) { - tree *lhs; - enum tree_code code; + tree *lhs, *rhs; - /* Recognize MEM = (SSA_NAME | invariant) and SSA_NAME = MEM patterns. */ - if (gimple_code (stmt) != GIMPLE_ASSIGN) + /* Recognize SSA_NAME = MEM and MEM = (SSA_NAME | invariant) patterns. */ + if (!gimple_assign_single_p (stmt)) return NULL; - code = gimple_assign_rhs_code (stmt); - lhs = gimple_assign_lhs_ptr (stmt); + rhs = gimple_assign_rhs1_ptr (stmt); - if (TREE_CODE (*lhs) == SSA_NAME) + if (TREE_CODE (*lhs) == SSA_NAME && gimple_vuse (stmt)) { - if (get_gimple_rhs_class (code) != GIMPLE_SINGLE_RHS - || !is_gimple_addressable (gimple_assign_rhs1 (stmt))) - return NULL; - *is_store = false; - return gimple_assign_rhs1_ptr (stmt); + return rhs; } - else if (code == SSA_NAME - || (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS - && is_gimple_min_invariant (gimple_assign_rhs1 (stmt)))) + else if (gimple_vdef (stmt) + && (TREE_CODE (*rhs) == SSA_NAME || is_gimple_min_invariant (*rhs))) { *is_store = true; return lhs; diff --git a/gcc/tree.h b/gcc/tree.h index 0130ce464ee..1217cc008de 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -6266,7 +6266,6 @@ tree target_for_debug_bind (tree); /* In tree-ssa-address.c. */ extern tree tree_mem_ref_addr (tree, tree); -extern void copy_mem_ref_info (tree, tree); extern void copy_ref_info (tree, tree); /* In tree-vrp.c */ |