Commit 8d6419db by Richard Biener Committed by Richard Biener

re PR tree-optimization/89789 (Compile time hog during RPO VN)

2019-03-25  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/89789
	* tree-ssa-sccvn.c (set_ssa_val_to): Do not allow lattice
	changes from non-undefined back to undefined.

	* gcc.dg/torture/pr89789.c: New testcase.

From-SVN: r269917
parent be5ce04a
2019-03-25 Richard Biener <rguenther@suse.de>
PR tree-optimization/89789
* tree-ssa-sccvn.c (set_ssa_val_to): Do not allow lattice
changes from non-undefined back to undefined.
2019-03-25 Thomas Otto <thomas.otto@pdv-fs.de> 2019-03-25 Thomas Otto <thomas.otto@pdv-fs.de>
* dwarf2out.c (comp_dir_string): cached_wd could be set to both a * dwarf2out.c (comp_dir_string): cached_wd could be set to both a
......
2019-03-25 Richard Biener <rguenther@suse.de>
PR tree-optimization/89789
* gcc.dg/torture/pr89789.c: New testcase.
2019-03-25 Nathan Sidwell <nathan@acm.org> 2019-03-25 Nathan Sidwell <nathan@acm.org>
* g++.dg/abi/lambda-static-1.C: New. * g++.dg/abi/lambda-static-1.C: New.
......
/* { dg-do compile } */
int x2;
void
m2 (void)
{
goto gg;
int fz, vh = 0;
for (fz = 0; fz < 1; ++fz)
{
vh ^= x2;
if (0)
{
gg:
x2 %= 1;
x2 += vh;
}
}
}
...@@ -3746,10 +3746,13 @@ set_ssa_val_to (tree from, tree to) ...@@ -3746,10 +3746,13 @@ set_ssa_val_to (tree from, tree to)
} }
return false; return false;
} }
else if (currval != VN_TOP bool curr_invariant = is_gimple_min_invariant (currval);
&& ! is_gimple_min_invariant (currval) bool curr_undefined = (TREE_CODE (currval) == SSA_NAME
&& ! ssa_undefined_value_p (currval, false) && ssa_undefined_value_p (currval, false));
&& is_gimple_min_invariant (to)) if (currval != VN_TOP
&& !curr_invariant
&& !curr_undefined
&& is_gimple_min_invariant (to))
{ {
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
{ {
...@@ -3764,6 +3767,24 @@ set_ssa_val_to (tree from, tree to) ...@@ -3764,6 +3767,24 @@ set_ssa_val_to (tree from, tree to)
} }
to = from; to = from;
} }
else if (currval != VN_TOP
&& !curr_undefined
&& TREE_CODE (to) == SSA_NAME
&& ssa_undefined_value_p (to, false))
{
if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "Forcing VARYING instead of changing "
"value number of ");
print_generic_expr (dump_file, from);
fprintf (dump_file, " from ");
print_generic_expr (dump_file, currval);
fprintf (dump_file, " (non-undefined) to ");
print_generic_expr (dump_file, to);
fprintf (dump_file, " (undefined)\n");
}
to = from;
}
else if (TREE_CODE (to) == SSA_NAME else if (TREE_CODE (to) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (to)) && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (to))
to = from; to = from;
......
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