Commit 1548580c by Eric Botcazou

re PR rtl-optimization/13985 (ICE in gcc.c-torture/compile/930621-1.c)

	PR optimization/13985
	* cfgloopmanip.c (fix_loop_placements): New prototype.
	Call fix_bb_placements on the preheader of loops that have
	been reparented.
	(remove_path): Adjust call to fix_loop_placements.

From-SVN: r81112
parent 5a944040
2004-04-23 Eric Botcazou <ebotcazou@libertysurf.fr>
PR optimization/13985
* cfgloopmanip.c (fix_loop_placements): New prototype.
Call fix_bb_placements on the preheader of loops that have
been reparented.
(remove_path): Adjust call to fix_loop_placements.
2004-04-23 Andrew Pinski <pinskia@physics.uc.edu> 2004-04-23 Andrew Pinski <pinskia@physics.uc.edu>
* config/darwin7.h: New file. * config/darwin7.h: New file.
...@@ -241,7 +249,7 @@ ...@@ -241,7 +249,7 @@
to "Not triggered by any -O level" section. Adjust commentary to "Not triggered by any -O level" section. Adjust commentary
accordingly. accordingly.
2004-04-20 Anil Paranjpe   <anilp1@kpitcummins.com> 2004-04-20 Anil Paranjpe <anilp1@kpitcummins.com>
* toplev.c (compile_file): Move targetm.asm_out.file_end call to end. * toplev.c (compile_file): Move targetm.asm_out.file_end call to end.
......
...@@ -41,7 +41,7 @@ static bool rpe_enum_p (basic_block, void *); ...@@ -41,7 +41,7 @@ static bool rpe_enum_p (basic_block, void *);
static int find_path (edge, basic_block **); static int find_path (edge, basic_block **);
static bool alp_enum_p (basic_block, void *); static bool alp_enum_p (basic_block, void *);
static void add_loop (struct loops *, struct loop *); static void add_loop (struct loops *, struct loop *);
static void fix_loop_placements (struct loop *); static void fix_loop_placements (struct loops *, struct loop *);
static bool fix_bb_placement (struct loops *, basic_block); static bool fix_bb_placement (struct loops *, basic_block);
static void fix_bb_placements (struct loops *, basic_block); static void fix_bb_placements (struct loops *, basic_block);
static void place_new_loop (struct loops *, struct loop *); static void place_new_loop (struct loops *, struct loop *);
...@@ -413,7 +413,7 @@ remove_path (struct loops *loops, edge e) ...@@ -413,7 +413,7 @@ remove_path (struct loops *loops, edge e)
/* Fix placements of basic blocks inside loops and the placement of /* Fix placements of basic blocks inside loops and the placement of
loops in the loop tree. */ loops in the loop tree. */
fix_bb_placements (loops, from); fix_bb_placements (loops, from);
fix_loop_placements (from->loop_father); fix_loop_placements (loops, from->loop_father);
return true; return true;
} }
...@@ -668,7 +668,7 @@ fix_loop_placement (struct loop *loop) ...@@ -668,7 +668,7 @@ fix_loop_placement (struct loop *loop)
It is used in case when we removed some edges coming out of LOOP, which It is used in case when we removed some edges coming out of LOOP, which
may cause the right placement of LOOP inside loop tree to change. */ may cause the right placement of LOOP inside loop tree to change. */
static void static void
fix_loop_placements (struct loop *loop) fix_loop_placements (struct loops *loops, struct loop *loop)
{ {
struct loop *outer; struct loop *outer;
...@@ -677,6 +677,13 @@ fix_loop_placements (struct loop *loop) ...@@ -677,6 +677,13 @@ fix_loop_placements (struct loop *loop)
outer = loop->outer; outer = loop->outer;
if (!fix_loop_placement (loop)) if (!fix_loop_placement (loop))
break; break;
/* Changing the placement of a loop in the loop tree may alter the
validity of condition 2) of the description of fix_bb_placement
for its preheader, because the successor is the header and belongs
to the loop. So call fix_bb_placements to fix up the placement
of the preheader and (possibly) of its predecessors. */
fix_bb_placements (loops, loop_preheader_edge (loop)->src);
loop = outer; loop = outer;
} }
} }
......
2004-04-23 Eric Botcazou <ebotcazou@libertysurf.fr>
* gcc.dg/loop-3.c: New test.
2004-04-23 Daniel Jacobowitz <drow@mvista.com> 2004-04-23 Daniel Jacobowitz <drow@mvista.com>
* gcc.c-torture/execute/simd-5.c: New test. * gcc.c-torture/execute/simd-5.c: New test.
......
/* PR optimization/13985 */
/* Copied from gcc.c-torture/compile/930621-1.c */
/* { dg-do compile } */
/* { dg-options "-O3" } */
/* { dg-options "-O3 -mtune=i386" { target i?86-*-* x86_64-*-* } } */
#if defined(STACK_SIZE) && (STACK_SIZE < 65536)
# define BYTEMEM_SIZE 10000L
#endif
#ifndef BYTEMEM_SIZE
# define BYTEMEM_SIZE 45000L
#endif
int bytestart[5000 + 1];
unsigned char modtext[400 + 1];
unsigned char bytemem[2][BYTEMEM_SIZE + 1];
long
modlookup (int l)
{
signed char c;
long j;
long k;
signed char w;
long p;
while (p != 0)
{
while ((k < bytestart[p + 2]) && (j <= l) && (modtext[j] == bytemem[w][k]))
{
k = k + 1;
j = j + 1;
}
if (k == bytestart[p + 2])
if (j > l)
c = 1;
else c = 4;
else if (j > l)
c = 3;
else if (modtext[j] < bytemem[w][k])
c = 0;
else c = 2;
}
}
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