Commit c94f2d84 by Richard Biener Committed by Richard Biener

re PR tree-optimization/82276 (-O2: ICE: SSA corruption during RTL pass: expand;…

re PR tree-optimization/82276 (-O2: ICE: SSA corruption during RTL pass: expand; at tree-ssa-coalesce.c:1010)

2017-09-21  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/82276
	PR tree-optimization/82244
	* tree-vrp.c (build_assert_expr_for): Set
	SSA_NAME_OCCURS_IN_ABNORMAL_PHI if the variable we assert on
	has it set.
	(remove_range_assertions): Revert earlier change.

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

From-SVN: r253062
parent 817221cc
2017-09-21 Richard Biener <rguenther@suse.de>
PR tree-optimization/82276
PR tree-optimization/82244
* tree-vrp.c (build_assert_expr_for): Set
SSA_NAME_OCCURS_IN_ABNORMAL_PHI if the variable we assert on
has it set.
(remove_range_assertions): Revert earlier change.
2017-09-21 Wilco Dijkstra <wdijkstr@arm.com>
PR target/71951
2017-09-21 Richard Biener <rguenther@suse.de>
PR tree-optimization/82276
PR tree-optimization/82244
* gcc.dg/torture/pr82276.c: New testcase.
2017-09-21 Richard Biener <rguenther@suse.de>
PR tree-optimization/71351
* gfortran.dg/graphite/pr71351.f90: New testcase.
* gfortran.dg/graphite/interchange-3.f90: Adjust.
......
/* { dg-do compile } */
typedef struct a {
struct a *b;
} a;
extern int d(void);
extern int g(void);
extern int h(void);
extern int _setjmp();
extern int i(void);
void c(void) {
1 ? d() : 0;
a *e;
while (e) {
e = (e == (a *) c) ? 0 : e->b;
while (e) {
unsigned int f = 0;
g();
_setjmp(f);
if (f & 6) {
;
} else if (f & 2) {
;
} else {
h();
}
i();
}
}
}
......@@ -4520,7 +4520,12 @@ build_assert_expr_for (tree cond, tree v)
operand of the ASSERT_EXPR. Create it so the new name and the old one
are registered in the replacement table so that we can fix the SSA web
after adding all the ASSERT_EXPRs. */
create_new_def_for (v, assertion, NULL);
tree new_def = create_new_def_for (v, assertion, NULL);
/* Make sure we preserve abnormalness throughout an ASSERT_EXPR chain
given we have to be able to fully propagate those out to re-create
valid SSA when removing the asserts. */
if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (v))
SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_def) = 1;
return assertion;
}
......@@ -7041,14 +7046,6 @@ remove_range_assertions (void)
FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
SET_USE (use_p, var);
}
/* But do not propagate constants as that is invalid. */
else if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs))
{
gassign *ass = gimple_build_assign (lhs, var);
gsi_replace (&si, ass, true);
gsi_next (&si);
continue;
}
else
replace_uses_by (lhs, var);
......
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