Commit bf86d71e by Zdenek Dvorak Committed by Zdenek Dvorak

re PR rtl-optimization/13159 (FAIL: gcc.c-torture/compile/930621-1.c)

	PR opt/13159
	* cfgloopanal.c (mark_irreducible_loops): Fix the strongly connected
	components detection.
	* loop-unswitch.c (unswitch_loop): Preserve simple preheaders.

	* gcc.c-torture/compile/20031227-1.c: New test.

From-SVN: r75174
parent 9bd85baa
2003-12-27 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
PR opt/13159
* cfgloopanal.c (mark_irreducible_loops): Fix the strongly connected
components detection.
* loop-unswitch.c (unswitch_loop): Preserve simple preheaders.
2003-12-27 Bernardo Innocenti <bernie@develer.com> 2003-12-27 Bernardo Innocenti <bernie@develer.com>
* config/m68k/uclinux.h (LIB_SPEC): Add elf2flt magic required for * config/m68k/uclinux.h (LIB_SPEC): Add elf2flt magic required for
......
...@@ -1247,7 +1247,7 @@ mark_irreducible_loops (struct loops *loops) ...@@ -1247,7 +1247,7 @@ mark_irreducible_loops (struct loops *loops)
: e->dest->index + 1; : e->dest->index + 1;
if (closed[sidx]) if (closed[sidx])
{ {
if (!closed[mri[sidx]]) if (mri[sidx] != -1 && !closed[mri[sidx]])
{ {
if (mr[sidx] < mr[idx]) if (mr[sidx] < mr[idx])
{ {
......
...@@ -402,5 +402,9 @@ unswitch_loop (struct loops *loops, struct loop *loop, basic_block unswitch_on) ...@@ -402,5 +402,9 @@ unswitch_loop (struct loops *loops, struct loop *loop, basic_block unswitch_on)
fix_loop_placement (loop); fix_loop_placement (loop);
fix_loop_placement (nloop); fix_loop_placement (nloop);
/* Preserve the simple loop preheaders. */
loop_split_edge_with (loop_preheader_edge (loop), NULL_RTX, loops);
loop_split_edge_with (loop_preheader_edge (nloop), NULL_RTX, loops);
return nloop; return nloop;
} }
2003-12-27 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
* gcc.c-torture/compile/20031227-1.c: New test.
2003-12-23 Mark Mitchell <mark@codesourcery.com> 2003-12-23 Mark Mitchell <mark@codesourcery.com>
* g++.dg/bprob/bprob.exp: Load target-supports.exp * g++.dg/bprob/bprob.exp: Load target-supports.exp
......
/* PR opt/13159 -- test unswitching a loop multiple times. */
void
foo (void)
{
long j, k, p, g;
while (p)
{
while (k < 0 && j < 0)
;
if (g)
;
else if (g)
;
}
}
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