diff options
author | Jakub Jelinek <jakub@redhat.com> | 2002-06-07 18:28:57 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2002-06-07 18:28:57 +0200 |
commit | 68b15d4f143898fde3ce1f10ba75f4266bbb2351 (patch) | |
tree | c0943d8ef745f12bb5e67643eeffbf4b9934231c /gcc | |
parent | ac64a17c4404ab0693a210fb9239df2f4f32227e (diff) | |
download | gcc-68b15d4f143898fde3ce1f10ba75f4266bbb2351.zip gcc-68b15d4f143898fde3ce1f10ba75f4266bbb2351.tar.gz gcc-68b15d4f143898fde3ce1f10ba75f4266bbb2351.tar.bz2 |
* gcc.c-torture/compile/20020604-1.c: New test.
From-SVN: r54342
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/20020604-1.c | 87 |
2 files changed, 91 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 365c333..576ef54 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-06-07 Jakub Jelinek <jakub@redhat.com> + + * gcc.c-torture/compile/20020604-1.c: New test. + 2002-06-04 Richard Henderson <rth@redhat.com> * gcc.dg/alpha-base-1.c: Add ext/ins/msk/umulh cases. diff --git a/gcc/testsuite/gcc.c-torture/compile/20020604-1.c b/gcc/testsuite/gcc.c-torture/compile/20020604-1.c new file mode 100644 index 0000000..19e0820 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20020604-1.c @@ -0,0 +1,87 @@ +/* PR c/6957 + This testcase ICEd at -O2 on IA-32, because + (insn 141 139 142 (set (subreg:SF (reg:QI 72) 0) + (plus:SF (reg:SF 73) + (reg:SF 76))) 525 {*fop_sf_comm_nosse} (insn_list 134 (nil)) + (expr_list:REG_DEAD (reg:SF 73) (nil))) + couldn't be reloaded. */ + +void +foo (unsigned int n, int x, int y, unsigned char *z) +{ + int a, b; + float c[2048][4]; + + switch (x) + { + case 0x1906: + a = b = -1; + break; + case 0x190A: + a = b = -1; + break; + case 0x8049: + a = b = -1; + break; + case 0x1907: + a = 1; + b = 2; + break; + default: + return; + } + + if (a >= 0) + { + unsigned char *d = z; + unsigned int i; + for (i = 0; i < n; i++) + { + do + { + union + { + float r; + unsigned int i; + } + e; + e.r = c[i][1]; + d[a] = + ((e.i >= 0x3f7f0000) ? ((int) e.i < + 0) ? (unsigned char) 0 + : (unsigned char) 255 : (e.r = + e.r * (255.0F / 256.0F) + + 32768.0F, (unsigned char) e.i)); + } + while (0); + d += y; + } + } + + if (b >= 0) + { + unsigned char *d = z; + unsigned int i; + for (i = 0; i < n; i++) + { + do + { + union + { + float r; + unsigned int i; + } + e; + e.r = c[i][2]; + d[b] = + ((e.i >= 0x3f7f0000) ? ((int) e.i < + 0) ? (unsigned char) 0 + : (unsigned char) 255 : (e.r = + e.r * (255.0F / 256.0F) + + 32768.0F, (unsigned char) e.i)); + } + while (0); + d += y; + } + } +} |