2002-06-04 Jakub Jelinek * gcc.c-torture/compile/20020604-1.c: New test. --- gcc/testsuite/gcc.c-torture/compile/20020604-1.c.jj Thu Apr 11 16:25:15 2002 +++ gcc/testsuite/gcc.c-torture/compile/20020604-1.c Mon Jun 3 17:43:12 2002 @@ -0,0 +1,86 @@ +/* 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; + } + } +}