mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 16:00:58 +08:00
re PR rtl-optimization/21330 (ICE in compare_and_jump_seq, at loop-unswitch.c:120)
PR rtl-optimization/21330 * loop-unswitch.c (may_unswitch_on): Set *cinsn only when returning non-NULL. (unswitch_single_loop): Clear cinsn when retrying. * gcc.c-torture/execute/20050502-1.c: New test. From-SVN: r99157
This commit is contained in:
parent
85b583d30a
commit
6d34654c1d
@ -1,5 +1,10 @@
|
||||
2005-05-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/21330
|
||||
* loop-unswitch.c (may_unswitch_on): Set *cinsn only when
|
||||
returning non-NULL.
|
||||
(unswitch_single_loop): Clear cinsn when retrying.
|
||||
|
||||
PR target/21297
|
||||
* config/i386/i386.c (legitimize_address): When canonicalizing
|
||||
ASHIFT into MULT, multiply by 1 << shift_count instead of
|
||||
|
@ -223,11 +223,11 @@ may_unswitch_on (basic_block bb, struct loop *loop, rtx *cinsn)
|
||||
if (at != BB_END (bb))
|
||||
return NULL_RTX;
|
||||
|
||||
*cinsn = BB_END (bb);
|
||||
if (!rtx_equal_p (op[0], XEXP (test, 0))
|
||||
|| !rtx_equal_p (op[1], XEXP (test, 1)))
|
||||
return NULL_RTX;
|
||||
|
||||
*cinsn = BB_END (bb);
|
||||
return test;
|
||||
}
|
||||
|
||||
@ -266,7 +266,7 @@ unswitch_single_loop (struct loops *loops, struct loop *loop,
|
||||
basic_block *bbs;
|
||||
struct loop *nloop;
|
||||
unsigned i;
|
||||
rtx cond, rcond = NULL_RTX, conds, rconds, acond, cinsn = NULL_RTX;
|
||||
rtx cond, rcond = NULL_RTX, conds, rconds, acond, cinsn;
|
||||
int repeat;
|
||||
edge e;
|
||||
|
||||
@ -321,6 +321,7 @@ unswitch_single_loop (struct loops *loops, struct loop *loop,
|
||||
do
|
||||
{
|
||||
repeat = 0;
|
||||
cinsn = NULL_RTX;
|
||||
|
||||
/* Find a bb to unswitch on. */
|
||||
bbs = get_loop_body (loop);
|
||||
|
@ -1,5 +1,8 @@
|
||||
2005-05-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/21330
|
||||
* gcc.c-torture/execute/20050502-1.c: New test.
|
||||
|
||||
PR target/21297
|
||||
* gcc.c-torture/execute/20050502-2.c: New test.
|
||||
|
||||
|
67
gcc/testsuite/gcc.c-torture/execute/20050502-1.c
Normal file
67
gcc/testsuite/gcc.c-torture/execute/20050502-1.c
Normal file
@ -0,0 +1,67 @@
|
||||
/* PR rtl-optimization/21330 */
|
||||
|
||||
extern void abort (void);
|
||||
extern int strcmp (const char *, const char *);
|
||||
|
||||
int
|
||||
__attribute__((noinline))
|
||||
bar (const char **x)
|
||||
{
|
||||
return *(*x)++;
|
||||
}
|
||||
|
||||
int
|
||||
__attribute__((noinline))
|
||||
baz (int c)
|
||||
{
|
||||
return c != '@';
|
||||
}
|
||||
|
||||
void
|
||||
__attribute__((noinline))
|
||||
foo (const char **w, char *x, _Bool y, _Bool z)
|
||||
{
|
||||
char c = bar (w);
|
||||
int i = 0;
|
||||
|
||||
while (1)
|
||||
{
|
||||
x[i++] = c;
|
||||
c = bar (w);
|
||||
if (y && c == '\'')
|
||||
break;
|
||||
if (z && c == '\"')
|
||||
break;
|
||||
if (!y && !z && !baz (c))
|
||||
break;
|
||||
}
|
||||
x[i] = 0;
|
||||
}
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
char buf[64];
|
||||
const char *p;
|
||||
p = "abcde'fgh";
|
||||
foo (&p, buf, 1, 0);
|
||||
if (strcmp (p, "fgh") != 0 || strcmp (buf, "abcde") != 0)
|
||||
abort ();
|
||||
p = "ABCDEFG\"HI";
|
||||
foo (&p, buf, 0, 1);
|
||||
if (strcmp (p, "HI") != 0 || strcmp (buf, "ABCDEFG") != 0)
|
||||
abort ();
|
||||
p = "abcd\"e'fgh";
|
||||
foo (&p, buf, 1, 1);
|
||||
if (strcmp (p, "e'fgh") != 0 || strcmp (buf, "abcd") != 0)
|
||||
abort ();
|
||||
p = "ABCDEF'G\"HI";
|
||||
foo (&p, buf, 1, 1);
|
||||
if (strcmp (p, "G\"HI") != 0 || strcmp (buf, "ABCDEF") != 0)
|
||||
abort ();
|
||||
p = "abcdef@gh";
|
||||
foo (&p, buf, 0, 0);
|
||||
if (strcmp (p, "gh") != 0 || strcmp (buf, "abcdef") != 0)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user