1/* { dg-do assemble } */ 2/* { dg-require-effective-target ptr32plus } */ 3/* { dg-xfail-if "The array too big" { "h8300-*-*" } { "-mno-h" "-mn" } { "" } } */ 4 5/* PR c/6957 6 This testcase ICEd at -O2 on IA-32, because 7 (insn 141 139 142 (set (subreg:SF (reg:QI 72) 0) 8 (plus:SF (reg:SF 73) 9 (reg:SF 76))) 525 {*fop_sf_comm_nosse} (insn_list 134 (nil)) 10 (expr_list:REG_DEAD (reg:SF 73) (nil))) 11 couldn't be reloaded. */ 12 13void 14foo (unsigned int n, int x, int y, unsigned char *z) 15{ 16 int a, b; 17 float c[2048][4]; 18 19 switch (x) 20 { 21 case 0x1906: 22 a = b = -1; 23 break; 24 case 0x190A: 25 a = b = -1; 26 break; 27 case 0x8049: 28 a = b = -1; 29 break; 30 case 0x1907: 31 a = 1; 32 b = 2; 33 break; 34 default: 35 return; 36 } 37 38 if (a >= 0) 39 { 40 unsigned char *d = z; 41 unsigned int i; 42 for (i = 0; i < n; i++) 43 { 44 do 45 { 46 union 47 { 48 float r; 49 unsigned int i; 50 } 51 e; 52 e.r = c[i][1]; 53 d[a] = 54 ((e.i >= 0x3f7f0000) ? ((int) e.i < 55 0) ? (unsigned char) 0 56 : (unsigned char) 255 : (e.r = 57 e.r * (255.0F / 256.0F) + 58 32768.0F, (unsigned char) e.i)); 59 } 60 while (0); 61 d += y; 62 } 63 } 64 65 if (b >= 0) 66 { 67 unsigned char *d = z; 68 unsigned int i; 69 for (i = 0; i < n; i++) 70 { 71 do 72 { 73 union 74 { 75 float r; 76 unsigned int i; 77 } 78 e; 79 e.r = c[i][2]; 80 d[b] = 81 ((e.i >= 0x3f7f0000) ? ((int) e.i < 82 0) ? (unsigned char) 0 83 : (unsigned char) 255 : (e.r = 84 e.r * (255.0F / 256.0F) + 85 32768.0F, (unsigned char) e.i)); 86 } 87 while (0); 88 d += y; 89 } 90 } 91} 92