This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix PR70115
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 7 Mar 2016 15:12:34 +0100 (CET)
- Subject: [PATCH] Fix PR70115
- Authentication-results: sourceware.org; auth=none
This fixes the PR by removing an incomplete duplicate implementation.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
Richard
2016-03-07 Richard Biener <rguenther@suse.de>
PR tree-optimization/70115
* tree-ssa-loop-ivcanon.c (propagate_into_all_uses): Remove.
(propagate_constants_for_unrolling): Use replace_uses_by.
* gcc.dg/torture/pr70115.c: New testcase.
Index: gcc/tree-ssa-loop-ivcanon.c
===================================================================
*** gcc/tree-ssa-loop-ivcanon.c (revision 233964)
--- gcc/tree-ssa-loop-ivcanon.c (working copy)
*************** canonicalize_induction_variables (void)
*** 1164,1201 ****
return 0;
}
- /* Propagate VAL into all uses of SSA_NAME. */
-
- static void
- propagate_into_all_uses (tree ssa_name, tree val)
- {
- imm_use_iterator iter;
- gimple *use_stmt;
-
- FOR_EACH_IMM_USE_STMT (use_stmt, iter, ssa_name)
- {
- gimple_stmt_iterator use_stmt_gsi = gsi_for_stmt (use_stmt);
- use_operand_p use;
-
- FOR_EACH_IMM_USE_ON_STMT (use, iter)
- SET_USE (use, val);
-
- if (is_gimple_assign (use_stmt)
- && get_gimple_rhs_class (gimple_assign_rhs_code (use_stmt))
- == GIMPLE_SINGLE_RHS)
- {
- tree rhs = gimple_assign_rhs1 (use_stmt);
-
- if (TREE_CODE (rhs) == ADDR_EXPR)
- recompute_tree_invariant_for_addr_expr (rhs);
- }
-
- fold_stmt_inplace (&use_stmt_gsi);
- update_stmt (use_stmt);
- maybe_clean_or_replace_eh_stmt (use_stmt, use_stmt);
- }
- }
-
/* Propagate constant SSA_NAMEs defined in basic block BB. */
static void
--- 1164,1169 ----
*************** propagate_constants_for_unrolling (basic
*** 1212,1218 ****
&& gimple_phi_num_args (phi) == 1
&& TREE_CODE (arg) == INTEGER_CST)
{
! propagate_into_all_uses (result, arg);
gsi_remove (&gsi, true);
release_ssa_name (result);
}
--- 1180,1186 ----
&& gimple_phi_num_args (phi) == 1
&& TREE_CODE (arg) == INTEGER_CST)
{
! replace_uses_by (result, arg);
gsi_remove (&gsi, true);
release_ssa_name (result);
}
*************** propagate_constants_for_unrolling (basic
*** 1231,1237 ****
&& (lhs = gimple_assign_lhs (stmt), TREE_CODE (lhs) == SSA_NAME)
&& !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs))
{
! propagate_into_all_uses (lhs, gimple_assign_rhs1 (stmt));
gsi_remove (&gsi, true);
release_ssa_name (lhs);
}
--- 1199,1205 ----
&& (lhs = gimple_assign_lhs (stmt), TREE_CODE (lhs) == SSA_NAME)
&& !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs))
{
! replace_uses_by (lhs, gimple_assign_rhs1 (stmt));
gsi_remove (&gsi, true);
release_ssa_name (lhs);
}
Index: gcc/testsuite/gcc.dg/torture/pr70115.c
===================================================================
*** gcc/testsuite/gcc.dg/torture/pr70115.c (revision 0)
--- gcc/testsuite/gcc.dg/torture/pr70115.c (working copy)
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+
+ typedef int size_t;
+ char a;
+ int main()
+ {
+ size_t b, c;
+ for (;;)
+ {
+ b = 0;
+ for (; c;)
+ ;
+ for (; b < sizeof(long); b++)
+ ;
+ for (; b < c; b++)
+ a++;
+ for (; c < b; c++)
+ ;
+ }
+ }