From 68b15d4f143898fde3ce1f10ba75f4266bbb2351 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 7 Jun 2002 18:28:57 +0200 Subject: [PATCH] * gcc.c-torture/compile/20020604-1.c: New test. From-SVN: r54342 --- gcc/testsuite/ChangeLog | 4 + .../gcc.c-torture/compile/20020604-1.c | 87 +++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/compile/20020604-1.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 365c3335564..576ef546f1f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-06-07 Jakub Jelinek + + * gcc.c-torture/compile/20020604-1.c: New test. + 2002-06-04 Richard Henderson * 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 00000000000..19e082030a4 --- /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; + } + } +} -- 2.30.2