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
This commit is contained in:
parent
5a944040b8
commit
1548580c20
@ -1,3 +1,11 @@
|
||||
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>
|
||||
|
||||
* config/darwin7.h: New file.
|
||||
@ -241,7 +249,7 @@
|
||||
to "Not triggered by any -O level" section. Adjust commentary
|
||||
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.
|
||||
|
||||
|
@ -41,7 +41,7 @@ static bool rpe_enum_p (basic_block, void *);
|
||||
static int find_path (edge, basic_block **);
|
||||
static bool alp_enum_p (basic_block, void *);
|
||||
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 void fix_bb_placements (struct loops *, basic_block);
|
||||
static void place_new_loop (struct loops *, struct loop *);
|
||||
@ -413,7 +413,7 @@ remove_path (struct loops *loops, edge e)
|
||||
/* Fix placements of basic blocks inside loops and the placement of
|
||||
loops in the loop tree. */
|
||||
fix_bb_placements (loops, from);
|
||||
fix_loop_placements (from->loop_father);
|
||||
fix_loop_placements (loops, from->loop_father);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -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
|
||||
may cause the right placement of LOOP inside loop tree to change. */
|
||||
static void
|
||||
fix_loop_placements (struct loop *loop)
|
||||
fix_loop_placements (struct loops *loops, struct loop *loop)
|
||||
{
|
||||
struct loop *outer;
|
||||
|
||||
@ -677,6 +677,13 @@ fix_loop_placements (struct loop *loop)
|
||||
outer = loop->outer;
|
||||
if (!fix_loop_placement (loop))
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,7 @@
|
||||
2004-04-23 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||
|
||||
* gcc.dg/loop-3.c: New test.
|
||||
|
||||
2004-04-23 Daniel Jacobowitz <drow@mvista.com>
|
||||
|
||||
* gcc.c-torture/execute/simd-5.c: New test.
|
||||
|
45
gcc/testsuite/gcc.dg/loop-3.c
Normal file
45
gcc/testsuite/gcc.dg/loop-3.c
Normal file
@ -0,0 +1,45 @@
|
||||
/* 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;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user