Commit 8af01c66 by Jeff Law Committed by Jeff Law

re PR tree-optimization/71272 (internal compiler error: in operator[], through…

re PR tree-optimization/71272 (internal compiler error: in operator[], through tree-ssa-threadupdate.c:1981)

	PR tree-optimization/71272
	* tree-ssa-threadbackward.c (convert_and_register_jump_thread_path):
	Update comments.  Add test for empty path.

	PR tree-optimization/71272
	* gcc.c-torture/compile/pr71272.c: new test.

From-SVN: r236755
parent f9d6ce73
2016-05-25 Jeff Law <law@redhat.com>
PR tree-optimization/71272
* tree-ssa-threadbackward.c (convert_and_register_jump_thread_path):
Update comments. Add test for empty path.
2016-05-25 Bill Seurer <seurer@linux.vnet.ibm.com>
* config/rs6000/altivec.h (vec_cmpne): Add #define for vec_cmpne.
......
2016-05-25 Jeff Law <law@redhat.com>
PR tree-optimization/71272
* gcc.c-torture/compile/pr71272.c: new test.
2016-05-25 Bill Seurer <seurer@linux.vnet.ibm.com>
* gcc.target/powerpc/vec-cmpne.c: New test.
......
int a, b, c, d;
int
f1 (int p1, int p2)
{
return p1 - p2;
}
void
f2 (short p1, short p2)
{
for (;;)
{
if (5 < (1 ^ p2))
for (; a;)
for (;;)
{
b = 0xE7BC92A3EDA01CD8 < (d = p2) || (0, 0);
break;
}
if (p1)
break;
p2 = 5;
}
}
void
f3 (int x)
{
int tmp = -2L;
c = f1 (90, x != 10);
f2 (c, tmp);
}
......@@ -373,6 +373,10 @@ convert_and_register_jump_thread_path (vec<basic_block, va_gc> *&path,
{
basic_block bb1 = (*path)[path->length () - j - 1];
basic_block bb2 = (*path)[path->length () - j - 2];
/* This can happen when we have an SSA_NAME as a PHI argument and
its initialization block is the head of the PHI argument's
edge. */
if (bb1 == bb2)
continue;
......@@ -382,6 +386,22 @@ convert_and_register_jump_thread_path (vec<basic_block, va_gc> *&path,
jump_thread_path->safe_push (x);
}
/* As a consequence of the test for duplicate blocks in the path
above, we can get a path with no blocks. This happens if a
conditional can be fully evaluated at compile time using just
defining statements in the same block as the test.
When we no longer push the block associated with a PHI argument
onto the stack, then this as well as the test in the loop above
can be removed. */
if (jump_thread_path->length () == 0)
{
jump_thread_path->release ();
delete jump_thread_path;
path->pop ();
return;
}
/* Add the edge taken when the control variable has value ARG. */
jump_thread_edge *x
= new jump_thread_edge (taken_edge, EDGE_NO_COPY_SRC_BLOCK);
......
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