re PR target/30665 (peephole2 misapplied on postinc mem)

PR target/30665
	* gcc.dg/torture/pr30665-1.c, gcc.dg/torture/pr30665-2.c: New tests.

From-SVN: r121611
This commit is contained in:
Hans-Peter Nilsson 2007-02-05 21:20:36 +00:00 committed by Hans-Peter Nilsson
parent 9e006df67f
commit b81aec1b9d
3 changed files with 86 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2007-02-05 Hans-Peter Nilsson <hp@axis.com>
PR target/30665
* gcc.dg/torture/pr30665-1.c, gcc.dg/torture/pr30665-2.c: New tests.
2007-02-04 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR fortran/30611

View File

@ -0,0 +1,24 @@
/* PR target/30665: bug in cris.md peephole2 condition.
Testcase for trunk. */
/* { dg-do run } */
extern void abort (void);
extern void exit (int);
int __attribute__ ((__noinline__)) f (unsigned *p, int *x)
{
int y = *p++ & 0xfff;
*x++ = y;
*x = *p;
return y;
}
int main (void)
{
unsigned u[2] = { 0x3aad, 0x5ad1 };
int x[2] = {17689, 23456};
if (f (u, x) != 0xaad || x[0] != 0xaad || x[1] != 0x5ad1)
abort ();
exit (0);
}

View File

@ -0,0 +1,57 @@
/* PR target/30665: bug in cris.md peephole2 condition.
Original reduced testcase (fails on 3.2.1 derivate, not on trunk). */
/* { dg-do run } */
extern void abort (void);
extern void exit (int);
struct t
{
unsigned int a : 12;
unsigned int b : 12;
unsigned int dummy1 : 8;
};
struct area
{
int xa;
int xb;
};
struct c
{
struct area ii;
};
static struct c c;
void __attribute__ ((__noinline__)) g(int a)
{
if (a != 79)
abort ();
}
void __attribute__ ((__noinline__)) h(struct t tt)
{
if (tt.a != 20 || tt.b != 79)
abort ();
}
void __attribute__ ((__noinline__)) s(void);
int main(int argc, char **argv)
{
c.ii.xa = 20;
c.ii.xb = 79;
s();
exit (0);
}
void __attribute__ ((__noinline__)) s(void)
{
struct t ii_x = { .a = c.ii.xa, .b = c.ii.xb };
g(c.ii.xb);
h(ii_x);
}