Commit 28c4b740 by Richard Biener Committed by Richard Biener

re PR tree-optimization/87266 (ICE: Segmentation fault (in…

re PR tree-optimization/87266 (ICE: Segmentation fault (in useless_type_conversion_p, tree_nop_conversion_p, or is_gimple_reg_type))

2018-09-12  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/87266
	* tree-ssa-sccvn.c (do_rpo_vn): Always iterate to not yet
	visited blocks.

	* gcc.dg/torture/pr87266-1.c: New testcase.
	* gcc.dg/torture/pr87266-2.c: Likewise.
	* gcc.dg/torture/pr87266-3.c: Likewise.
	* gcc.dg/torture/pr87266-4.c: Likewise.

From-SVN: r264237
parent ced8d882
2018-09-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/87266
* tree-ssa-sccvn.c (do_rpo_vn): Always iterate to not yet
visited blocks.
2018-09-12 Andreas Krebbel <krebbel@linux.ibm.com> 2018-09-12 Andreas Krebbel <krebbel@linux.ibm.com>
* config/s390/s390.md (PFPO_RND_MODE_DFP, PFPO_RND_MODE_BFP): New * config/s390/s390.md (PFPO_RND_MODE_DFP, PFPO_RND_MODE_BFP): New
......
2018-09-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/87266
* gcc.dg/torture/pr87266-1.c: New testcase.
* gcc.dg/torture/pr87266-2.c: Likewise.
* gcc.dg/torture/pr87266-3.c: Likewise.
* gcc.dg/torture/pr87266-4.c: Likewise.
2018-09-12 Andreas Krebbel <krebbel@linux.ibm.com> 2018-09-12 Andreas Krebbel <krebbel@linux.ibm.com>
* gcc.target/s390/dfp_to_bfp_rounding.c: New test. * gcc.target/s390/dfp_to_bfp_rounding.c: New test.
......
/* { dg-do compile } */
/* { dg-additional-options "-fno-tree-ccp -fno-tree-forwprop" } */
void
iw (int gu, int mq, int r2)
{
int yn = 0;
while (gu < 1)
{
for (;;)
;
bb:;
int ay = 0;
while (ay < 1)
++mq;
}
if (yn != 0)
goto up;
if (0)
{
up:
if (r2 == 0)
goto bb;
}
goto up;
}
/* { dg-do compile } */
/* { dg-additional-options "-fno-tree-ccp -fno-tree-forwprop" } */
void
iw (int gu, int mq, int r2)
{
int yn = 0;
while (gu < 1)
{
for (;;)
;
bb:;
int ay = 0;
while (yn < 1)
++mq;
}
if (yn != 0)
goto up;
if (0)
{
up:
if (r2 == 0)
goto bb;
}
goto up;
}
/* { dg-do compile } */
/* { dg-additional-options "-fno-tree-ccp -fno-tree-forwprop" } */
void
iw (int gu, int mq, int r2)
{
int yn = 0;
while (gu < 1)
{
int ay = 0;
for (;;)
;
bb:
while (ay < 1)
++mq;
}
if (yn != 0)
goto up;
if (0)
{
up:
if (r2 == 0)
goto bb;
}
goto up;
}
/* { dg-do compile } */
/* { dg-additional-options "-fno-tree-dominator-opts -fno-tree-forwprop" } */
unsigned long int
re (long int j9)
{
if (j9 == 0)
return 1;
return j9;
}
void
zq (int bt, int yy)
{
int p3 = 0, go = 4, ez = go;
while (go != 0)
{
if (ez + !!bt - re (bt) != 0 && go != 0)
{
if (yy != 0)
p3 = yy;
}
else
return;
go = 2;
}
}
void
my (unsigned long int n6, int bt, int yy)
{
zq (bt, yy);
n6 = n6 == bt;
zq (bt, yy);
}
...@@ -6471,6 +6471,17 @@ do_rpo_vn (function *fn, edge entry, bitmap exit_bbs, ...@@ -6471,6 +6471,17 @@ do_rpo_vn (function *fn, edge entry, bitmap exit_bbs,
== (EDGE_DFS_BACK|EDGE_EXECUTABLE) == (EDGE_DFS_BACK|EDGE_EXECUTABLE)
&& rpo_state[bb_to_rpo[e->dest->index]].iterate) && rpo_state[bb_to_rpo[e->dest->index]].iterate)
{ {
int destidx = bb_to_rpo[e->dest->index];
if (!rpo_state[destidx].visited)
{
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "Unvisited destination %d\n",
e->dest->index);
if (iterate_to == -1
|| destidx < iterate_to)
iterate_to = destidx;
continue;
}
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "Looking for changed values of backedge " fprintf (dump_file, "Looking for changed values of backedge "
"%d->%d destination PHIs\n", "%d->%d destination PHIs\n",
...@@ -6497,7 +6508,6 @@ do_rpo_vn (function *fn, edge entry, bitmap exit_bbs, ...@@ -6497,7 +6508,6 @@ do_rpo_vn (function *fn, edge entry, bitmap exit_bbs,
&& dump_file && (dump_flags & TDF_DETAILS)) && dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "PHI was CSEd and hashtable " fprintf (dump_file, "PHI was CSEd and hashtable "
"state (changed)\n"); "state (changed)\n");
int destidx = bb_to_rpo[e->dest->index];
if (iterate_to == -1 if (iterate_to == -1
|| destidx < iterate_to) || destidx < iterate_to)
iterate_to = destidx; iterate_to = destidx;
......
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