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> 2017-09-21 Wilco Dijkstra <wdijkstr@arm.com>
PR target/71951 PR target/71951
2017-09-21 Richard Biener <rguenther@suse.de> 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 PR tree-optimization/71351
* gfortran.dg/graphite/pr71351.f90: New testcase. * gfortran.dg/graphite/pr71351.f90: New testcase.
* gfortran.dg/graphite/interchange-3.f90: Adjust. * 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) ...@@ -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 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 are registered in the replacement table so that we can fix the SSA web
after adding all the ASSERT_EXPRs. */ 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; return assertion;
} }
...@@ -7041,14 +7046,6 @@ remove_range_assertions (void) ...@@ -7041,14 +7046,6 @@ remove_range_assertions (void)
FOR_EACH_IMM_USE_ON_STMT (use_p, iter) FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
SET_USE (use_p, var); 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 else
replace_uses_by (lhs, var); 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