blob: 2f0137962c53ac8bc4f7a134e7370d1a90dba0f6 [file] [log] [blame]
/* PR target/41175 */
/* { dg-do run } */
/* { dg-options "-Os" } */
#define X2(n) X1(n##0) X1(n##1)
#define X4(n) X2(n##0) X2(n##1)
#define X8(n) X4(n##0) X4(n##1)
#ifndef __SPE__
#define FLOAT_REG_CONSTRAINT "f"
#else
#define FLOAT_REG_CONSTRAINT "r"
#endif
volatile int ll;
__attribute__((noinline)) void
foo (void)
{
asm volatile ("" : : : "memory");
}
__attribute__((noinline)) void
bar (char *p)
{
asm volatile ("" : : "r" (p) : "memory");
}
__attribute__((noinline)) void
f1 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X8(c)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
foo ();
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X8(c) "m" (mem) : "memory");
}
__attribute__((noinline)) void
f2 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X8(c)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
char *pp = __builtin_alloca (ll);
bar (pp);
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X8(c) "m" (mem) : "memory");
}
__attribute__((noinline)) void
f3 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X8(c)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X8(c) "m" (mem) : "memory");
}
#ifndef __NO_FPRS__
__attribute__((noinline)) void
f4 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X8(c)
#undef X1
#define X1(n) double fpr##n = 0.0;
X4(d)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : X4(d) "=m" (mem) : : "memory");
foo ();
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X8(c) "m" (mem) : "memory");
#undef X1
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : : X4(d) "m" (mem) : "memory");
}
__attribute__((noinline)) void
f5 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X8(c)
#undef X1
#define X1(n) double fpr##n = 0.0;
X4(d)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : X4(d) "=m" (mem) : : "memory");
char *pp = __builtin_alloca (ll);
bar (pp);
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X8(c) "m" (mem) : "memory");
#undef X1
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : : X4(d) "m" (mem) : "memory");
}
__attribute__((noinline)) void
f6 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X8(c)
#undef X1
#define X1(n) double fpr##n = 0.0;
X4(d)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : X4(d) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X8(c) "m" (mem) : "memory");
#undef X1
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : : X4(d) "m" (mem) : "memory");
}
__attribute__((noinline)) void
f7 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X8(c)
#undef X1
#define X1(n) double fpr##n = 0.0;
X2(d)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : X2(d) "=m" (mem) : : "memory");
foo ();
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X8(c) "m" (mem) : "memory");
#undef X1
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : : X2(d) "m" (mem) : "memory");
}
__attribute__((noinline)) void
f8 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X8(c)
#undef X1
#define X1(n) double fpr##n = 0.0;
X2(d)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : X2(d) "=m" (mem) : : "memory");
char *pp = __builtin_alloca (ll);
bar (pp);
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X8(c) "m" (mem) : "memory");
#undef X1
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : : X2(d) "m" (mem) : "memory");
}
__attribute__((noinline)) void
f9 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X8(c)
#undef X1
#define X1(n) double fpr##n = 0.0;
X2(d)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : X2(d) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X8(c) "m" (mem) : "memory");
#undef X1
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : : X2(d) "m" (mem) : "memory");
}
__attribute__((noinline)) void
f10 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X4(c)
#undef X1
#define X1(n) double fpr##n = 0.0;
X1(d)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X4(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : X1(d) "=m" (mem) : : "memory");
foo ();
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X4(c) "m" (mem) : "memory");
#undef X1
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : : X1(d) "m" (mem) : "memory");
}
__attribute__((noinline)) void
f11 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X4(c)
#undef X1
#define X1(n) double fpr##n = 0.0;
X1(d)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X4(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : X1(d) "=m" (mem) : : "memory");
char *pp = __builtin_alloca (ll);
bar (pp);
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X4(c) "m" (mem) : "memory");
#undef X1
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : : X1(d) "m" (mem) : "memory");
}
__attribute__((noinline)) void
f12 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X4(c)
#undef X1
#define X1(n) double fpr##n = 0.0;
X1(d)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X4(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : X1(d) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X4(c) "m" (mem) : "memory");
#undef X1
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : : X1(d) "m" (mem) : "memory");
}
__attribute__((noinline)) void
f13 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X2(c)
#undef X1
#define X1(n) double fpr##n = 0.0;
X8(d)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X2(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : X8(d) "=m" (mem) : : "memory");
foo ();
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X2(c) "m" (mem) : "memory");
#undef X1
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : : X8(d) "m" (mem) : "memory");
}
__attribute__((noinline)) void
f14 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X2(c)
#undef X1
#define X1(n) double fpr##n = 0.0;
X8(d)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X2(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : X8(d) "=m" (mem) : : "memory");
char *pp = __builtin_alloca (ll);
bar (pp);
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X2(c) "m" (mem) : "memory");
#undef X1
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : : X8(d) "m" (mem) : "memory");
}
__attribute__((noinline)) void
f15 (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X2(c)
#undef X1
#define X1(n) double fpr##n = 0.0;
X8(d)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X2(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : X8(d) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X2(c) "m" (mem) : "memory");
#undef X1
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : : X8(d) "m" (mem) : "memory");
}
#endif
int
main ()
{
ll = 60;
f1 ();
f2 ();
f3 ();
#ifndef __NO_FPRS__
f4 ();
f5 ();
f6 ();
f7 ();
f8 ();
f9 ();
f10 ();
f11 ();
f12 ();
f13 ();
f14 ();
f15 ();
#endif
return 0;
}