This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix PR70115


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]