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  <rguent...@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++)
+       ;
+     }
+ }

Reply via email to