diff options
Diffstat (limited to 'gcc/testsuite/gcc.target/s390/pr69709.c')
-rw-r--r-- | gcc/testsuite/gcc.target/s390/pr69709.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/s390/pr69709.c b/gcc/testsuite/gcc.target/s390/pr69709.c new file mode 100644 index 00000000000..e9aa024521d --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/pr69709.c @@ -0,0 +1,39 @@ +/* PR69709 This testcase used to fail due to a broken risbg + splitter. */ + +/* { dg-do run } */ +/* { dg-options "-O3 -march=z10" } */ + + +typedef struct +{ + unsigned int sig[2]; +} +val_t; + +unsigned int __attribute__ ((noinline)) +div_significands (const val_t * a) +{ + val_t u = *a; + int bit = 64; + unsigned int r; + do + { + u.sig[1] = (u.sig[1] << 1) | (u.sig[0] >> 31); + u.sig[0] = 42; + + if (bit == 64) + r = u.sig[1]; + } + while (--bit >= 0); + return r; +} + +int +main (void) +{ + val_t a = { { 0x1, 0x1 } }; + if (div_significands (&a) != 2) + __builtin_abort (); + return 0; +} |