+2014-06-26 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/61607
+ * tree-ssa-copy.c (copy_prop_visit_phi_node): Adjust comment
+ explaining why we restrict copies on loop depth.
+ * tree-ssa-dom.c (cprop_operand): Remove restriction on
+ on loop depth.
+ (record_equivalences_from_phis): Instead add it here.
+
2014-06-26 Bernd Schmidt <bernds@codesourcery.com>
* Makefile.in (COLLECT2_OBJS): Add collect-utils.o.
+2014-06-26 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/61607
+ * gcc.dg/tree-ssa/ssa-dom-thread-5.c: New testcase.
+
2014-06-26 Vidya Praveen <vidyapraveen@arm.com>
* gcc.dg/inline-22.c: Add bind_pic_locally.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-Os -fno-tree-fre -fdump-tree-dom1-details" } */
+
+void foo(int *);
+void f2(int dst[3], int R)
+{
+ int i, inter[2];
+ _Bool inter0p = 0;
+ _Bool inter1p = 0;
+ for (i = 1; i < R; i++)
+ {
+ inter0p = 1;
+ inter1p = 1;
+ }
+ if (inter0p)
+ inter[0] = 1;
+ if (inter1p)
+ inter[1] = 1;
+ foo(inter);
+}
+
+/* { dg-final { scan-tree-dump "Threaded jump" "dom1" } } */
+/* { dg-final { cleanup-tree-dump "dom1" } } */
arg_value = valueize_val (arg);
/* Avoid copy propagation from an inner into an outer loop.
- Otherwise, this may move loop variant variables outside of
- their loops and prevent coalescing opportunities. If the
- value was loop invariant, it will be hoisted by LICM and
- exposed for copy propagation.
- ??? The value will be always loop invariant.
+ Otherwise, this may introduce uses of loop variant variables
+ outside of their loops and prevent coalescing opportunities.
In loop-closed SSA form do not copy-propagate through
PHI nodes in blocks with a loop exit edge predecessor. */
if (TREE_CODE (arg_value) == SSA_NAME
this, since this is a true assignment and not an equivalence
inferred from a comparison. All uses of this ssa name are dominated
by this assignment, so unwinding just costs time and space. */
- if (i == gimple_phi_num_args (phi) && may_propagate_copy (lhs, rhs))
+ if (i == gimple_phi_num_args (phi)
+ && may_propagate_copy (lhs, rhs)
+ /* Do not propagate copies if the propagated value is at a deeper loop
+ depth than the propagatee. Otherwise, this may introduce uses
+ of loop variant variables outside of their loops and prevent
+ coalescing opportunities. */
+ && !(loop_depth_of_name (rhs) > loop_depth_of_name (lhs)))
set_ssa_name_value (lhs, rhs);
}
}
if (!may_propagate_copy (op, val))
return;
- /* Do not propagate copies if the propagated value is at a deeper loop
- depth than the propagatee. Otherwise, this may move loop variant
- variables outside of their loops and prevent coalescing
- opportunities. If the value was loop invariant, it will be hoisted
- by LICM and exposed for copy propagation. */
- if (loop_depth_of_name (val) > loop_depth_of_name (op))
- return;
-
/* Do not propagate copies into simple IV increment statements.
See PR23821 for how this can disturb IV analysis. */
if (TREE_CODE (val) != INTEGER_CST