blob: 8ae91c6edb37abdf274951b0315e102d06e27581 [file] [log] [blame]
/* Test large loop bodies where U8_PCREL would overflow */
/* { dg-do run } */
/* { dg-options "-O1 -mloop" } */
/* -O1 in the options is significant. Without it do-loop will not be
run. */
extern void abort (void);
#define OP do { i1 <<= 2; i1 >>= 2; i2 *= 3; i2 /= 2; } while(0)
#define OP4 OP; OP; OP; OP
#define OP16 OP4; OP4; OP4; OP4
#define OP64 OP16; OP16; OP16; OP16
#define OP256 OP64; OP64; OP64; OP64
unsigned int
test_loop (unsigned int i1, unsigned i2)
{
unsigned int i;
volatile unsigned int s = 0;
for (i = 0; i < 100; i++) {
/* cannot use ASM NOP because it will prevent
GCC from issuing a LOOP instruction. */
OP256;
s++;
}
return s + i1 + i2;
}
volatile unsigned int I1 = 0;
volatile unsigned int I2 = 0;
int
main (int argc, char** argv)
{
if (test_loop (I1, I2) != 100)
abort();
return 0;
}