Commit 57548bf5 by Richard Biener Committed by Richard Biener

re PR tree-optimization/70115 (gcc ICE at -O2 (seg fault) and above on valid…

re PR tree-optimization/70115 (gcc ICE at -O2 (seg fault) and above on valid code on x86_64-linux-gnu)

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.

From-SVN: r234027
parent 4ae13300
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.
2016-03-07 Nathan Sidwell <nathan@codesourcery.com> 2016-03-07 Nathan Sidwell <nathan@codesourcery.com>
PR middle-end/69916 PR middle-end/69916
......
2016-03-07 Richard Biener <rguenther@suse.de>
PR tree-optimization/70115
* gcc.dg/torture/pr70115.c: New testcase.
2016-03-07 Nathan Sidwell <nathan@codesourcery.com> 2016-03-07 Nathan Sidwell <nathan@codesourcery.com>
PR middle-end/69916 PR middle-end/69916
......
/* { 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++)
;
}
}
...@@ -1164,38 +1164,6 @@ canonicalize_induction_variables (void) ...@@ -1164,38 +1164,6 @@ canonicalize_induction_variables (void)
return 0; 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. */ /* Propagate constant SSA_NAMEs defined in basic block BB. */
static void static void
...@@ -1212,7 +1180,7 @@ propagate_constants_for_unrolling (basic_block bb) ...@@ -1212,7 +1180,7 @@ propagate_constants_for_unrolling (basic_block bb)
&& gimple_phi_num_args (phi) == 1 && gimple_phi_num_args (phi) == 1
&& TREE_CODE (arg) == INTEGER_CST) && TREE_CODE (arg) == INTEGER_CST)
{ {
propagate_into_all_uses (result, arg); replace_uses_by (result, arg);
gsi_remove (&gsi, true); gsi_remove (&gsi, true);
release_ssa_name (result); release_ssa_name (result);
} }
...@@ -1231,7 +1199,7 @@ propagate_constants_for_unrolling (basic_block bb) ...@@ -1231,7 +1199,7 @@ propagate_constants_for_unrolling (basic_block bb)
&& (lhs = gimple_assign_lhs (stmt), TREE_CODE (lhs) == SSA_NAME) && (lhs = gimple_assign_lhs (stmt), TREE_CODE (lhs) == SSA_NAME)
&& !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs)) && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs))
{ {
propagate_into_all_uses (lhs, gimple_assign_rhs1 (stmt)); replace_uses_by (lhs, gimple_assign_rhs1 (stmt));
gsi_remove (&gsi, true); gsi_remove (&gsi, true);
release_ssa_name (lhs); release_ssa_name (lhs);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment