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