OLD | NEW |
1 ; Tests malformed insertelement and extractelement vector instructions. | 1 ; Tests malformed insertelement and extractelement vector instructions. |
2 | 2 |
3 ; RUN: %if --need=allow_dump --command llvm-as < %s \ | 3 ; RUN: %if --need=allow_dump --command llvm-as < %s \ |
4 ; RUN: | %if --need=allow_dump --command pnacl-freeze \ | 4 ; RUN: | %if --need=allow_dump --command pnacl-freeze \ |
5 ; RUN: | %if --need=allow_dump --command not %pnacl_sz -notranslate \ | 5 ; RUN: | %if --need=allow_dump --command not %pnacl_sz -notranslate \ |
6 ; RUN: -build-on-read -allow-pnacl-reader-error-recovery \ | 6 ; RUN: -build-on-read -allow-pnacl-reader-error-recovery \ |
7 ; RUN: | %if --need=allow_dump --command FileCheck %s | 7 ; RUN: | %if --need=allow_dump --command FileCheck %s |
8 | 8 |
9 ; RUN: %if --need=no_dump --command llvm-as < %s \ | 9 ; RUN: %if --need=no_dump --command llvm-as < %s \ |
10 ; RUN: | %if --need=no_dump --command pnacl-freeze \ | 10 ; RUN: | %if --need=no_dump --command pnacl-freeze \ |
11 ; RUN: | %if --need=no_dump --command not %pnacl_sz -notranslate \ | 11 ; RUN: | %if --need=no_dump --command not %pnacl_sz -notranslate \ |
12 ; RUN: -build-on-read -allow-pnacl-reader-error-recovery \ | 12 ; RUN: -build-on-read -allow-pnacl-reader-error-recovery \ |
13 ; RUN: | %if --need=no_dump --command FileCheck %s --check-prefix=MIN | 13 ; RUN: | %if --need=no_dump --command FileCheck %s --check-prefix=MIN |
14 | 14 |
15 define void @ExtractV4xi1(<4 x i1> %v, i32 %i) { | 15 define void @ExtractV4xi1(<4 x i1> %v, i32 %i) { |
16 %e0 = extractelement <4 x i1> %v, i32 %i | 16 %e0 = extractelement <4 x i1> %v, i32 %i |
17 ; CHECK: Error: {{.*}} not {{.*}} constant | 17 ; CHECK: Error{{.*}} not {{.*}} constant |
18 ; MIN: Error: {{.*}} Invalid function record: <6 4 3> | 18 ; MIN: Error{{.*}} Invalid function record: <6 4 3> |
19 %e1 = extractelement <4 x i1> %v, i32 4 | 19 %e1 = extractelement <4 x i1> %v, i32 4 |
20 ; CHECK: Error: {{.*}} not in range | 20 ; CHECK: Error{{.*}} not in range |
21 ; MIN: Error: {{.*}} Invalid function record: <6 5 3> | 21 ; MIN: Error{{.*}} Invalid function record: <6 5 3> |
22 %e2 = extractelement <4 x i1> %v, i32 9 | 22 %e2 = extractelement <4 x i1> %v, i32 9 |
23 ; CHECK: Error: {{.*}} not in range | 23 ; CHECK: Error{{.*}} not in range |
24 ; MIN: Error: {{.*}} Invalid function record: <6 6 3> | 24 ; MIN: Error{{.*}} Invalid function record: <6 6 3> |
25 ret void | 25 ret void |
26 } | 26 } |
27 | 27 |
28 define void @ExtractV8xi1(<8 x i1> %v, i32 %i) { | 28 define void @ExtractV8xi1(<8 x i1> %v, i32 %i) { |
29 %e0 = extractelement <8 x i1> %v, i32 %i | 29 %e0 = extractelement <8 x i1> %v, i32 %i |
30 ; CHECK: Error: {{.*}} not {{.*}} constant | 30 ; CHECK: Error{{.*}} not {{.*}} constant |
31 ; MIN: Error: {{.*}} Invalid function record: <6 4 3> | 31 ; MIN: Error{{.*}} Invalid function record: <6 4 3> |
32 %e1 = extractelement <8 x i1> %v, i32 8; | 32 %e1 = extractelement <8 x i1> %v, i32 8; |
33 ; CHECK: Error: {{.*}} not in range | 33 ; CHECK: Error{{.*}} not in range |
34 ; MIN: Error: {{.*}} Invalid function record: <6 5 3> | 34 ; MIN: Error{{.*}} Invalid function record: <6 5 3> |
35 %e2 = extractelement <8 x i1> %v, i32 9; | 35 %e2 = extractelement <8 x i1> %v, i32 9; |
36 ; CHECK: Error: {{.*}} not in range | 36 ; CHECK: Error{{.*}} not in range |
37 ; MIN: Error: {{.*}} Invalid function record: <6 6 3> | 37 ; MIN: Error{{.*}} Invalid function record: <6 6 3> |
38 ret void | 38 ret void |
39 } | 39 } |
40 | 40 |
41 define void @ExtractV16xi1(<16 x i1> %v, i32 %i) { | 41 define void @ExtractV16xi1(<16 x i1> %v, i32 %i) { |
42 %e0 = extractelement <16 x i1> %v, i32 %i | 42 %e0 = extractelement <16 x i1> %v, i32 %i |
43 ; CHECK: Error: {{.*}} not {{.*}} constant | 43 ; CHECK: Error{{.*}} not {{.*}} constant |
44 ; MIN: Error: {{.*}} Invalid function record: <6 4 3> | 44 ; MIN: Error{{.*}} Invalid function record: <6 4 3> |
45 %e1 = extractelement <16 x i1> %v, i32 16 | 45 %e1 = extractelement <16 x i1> %v, i32 16 |
46 ; CHECK: Error: {{.*}} not in range | 46 ; CHECK: Error{{.*}} not in range |
47 ; MIN: Error: {{.*}} Invalid function record: <6 5 3> | 47 ; MIN: Error{{.*}} Invalid function record: <6 5 3> |
48 %e2 = extractelement <16 x i1> %v, i32 24 | 48 %e2 = extractelement <16 x i1> %v, i32 24 |
49 ; CHECK: Error: {{.*}} not in range | 49 ; CHECK: Error{{.*}} not in range |
50 ; MIN: Error: {{.*}} Invalid function record: <6 6 3> | 50 ; MIN: Error{{.*}} Invalid function record: <6 6 3> |
51 ret void | 51 ret void |
52 } | 52 } |
53 | 53 |
54 define void @ExtractV16xi8(<16 x i8> %v, i32 %i) { | 54 define void @ExtractV16xi8(<16 x i8> %v, i32 %i) { |
55 %e0 = extractelement <16 x i8> %v, i32 %i | 55 %e0 = extractelement <16 x i8> %v, i32 %i |
56 ; CHECK: Error: {{.*}} not {{.*}} constant | 56 ; CHECK: Error{{.*}} not {{.*}} constant |
57 ; MIN: Error: {{.*}} Invalid function record: <6 4 3> | 57 ; MIN: Error{{.*}} Invalid function record: <6 4 3> |
58 %e1 = extractelement <16 x i8> %v, i32 16 | 58 %e1 = extractelement <16 x i8> %v, i32 16 |
59 ; CHECK: Error: {{.*}} not in range | 59 ; CHECK: Error{{.*}} not in range |
60 ; MIN: Error: {{.*}} Invalid function record: <6 5 3> | 60 ; MIN: Error{{.*}} Invalid function record: <6 5 3> |
61 %e2 = extractelement <16 x i8> %v, i32 71 | 61 %e2 = extractelement <16 x i8> %v, i32 71 |
62 ; CHECK: Error: {{.*}} not in range | 62 ; CHECK: Error{{.*}} not in range |
63 ; MIN: Error: {{.*}} Invalid function record: <6 6 3> | 63 ; MIN: Error{{.*}} Invalid function record: <6 6 3> |
64 ret void | 64 ret void |
65 } | 65 } |
66 | 66 |
67 define void @ExtractV8xi16(<8 x i16> %v, i32 %i) { | 67 define void @ExtractV8xi16(<8 x i16> %v, i32 %i) { |
68 %e0 = extractelement <8 x i16> %v, i32 %i | 68 %e0 = extractelement <8 x i16> %v, i32 %i |
69 ; CHECK: Error: {{.*}} not {{.*}} constant | 69 ; CHECK: Error{{.*}} not {{.*}} constant |
70 ; MIN: Error: {{.*}} Invalid function record: <6 4 3> | 70 ; MIN: Error{{.*}} Invalid function record: <6 4 3> |
71 %e1 = extractelement <8 x i16> %v, i32 8 | 71 %e1 = extractelement <8 x i16> %v, i32 8 |
72 ; CHECK: Error: {{.*}} not in range | 72 ; CHECK: Error{{.*}} not in range |
73 ; MIN: Error: {{.*}} Invalid function record: <6 5 3> | 73 ; MIN: Error{{.*}} Invalid function record: <6 5 3> |
74 %e2 = extractelement <8 x i16> %v, i32 15 | 74 %e2 = extractelement <8 x i16> %v, i32 15 |
75 ; CHECK: Error: {{.*}} not in range | 75 ; CHECK: Error{{.*}} not in range |
76 ; MIN: Error: {{.*}} Invalid function record: <6 6 3> | 76 ; MIN: Error{{.*}} Invalid function record: <6 6 3> |
77 ret void | 77 ret void |
78 } | 78 } |
79 | 79 |
80 define i32 @ExtractV4xi32(<4 x i32> %v, i32 %i) { | 80 define i32 @ExtractV4xi32(<4 x i32> %v, i32 %i) { |
81 %e0 = extractelement <4 x i32> %v, i32 %i | 81 %e0 = extractelement <4 x i32> %v, i32 %i |
82 ; CHECK: Error: {{.*}} not {{.*}} constant | 82 ; CHECK: Error{{.*}} not {{.*}} constant |
83 ; MIN: Error: {{.*}} Invalid function record: <6 4 3> | 83 ; MIN: Error{{.*}} Invalid function record: <6 4 3> |
84 %e1 = extractelement <4 x i32> %v, i32 4 | 84 %e1 = extractelement <4 x i32> %v, i32 4 |
85 ; CHECK: Error: {{.*}} not in range | 85 ; CHECK: Error{{.*}} not in range |
86 ; MIN: Error: {{.*}} Invalid function record: <6 5 3> | 86 ; MIN: Error{{.*}} Invalid function record: <6 5 3> |
87 %e2 = extractelement <4 x i32> %v, i32 17 | 87 %e2 = extractelement <4 x i32> %v, i32 17 |
88 ; CHECK: Error: {{.*}} not in range | 88 ; CHECK: Error{{.*}} not in range |
89 ; MIN: Error: {{.*}} Invalid function record: <6 6 3> | 89 ; MIN: Error{{.*}} Invalid function record: <6 6 3> |
90 ret i32 %e0 | 90 ret i32 %e0 |
91 } | 91 } |
92 | 92 |
93 define float @ExtractV4xfloat(<4 x float> %v, i32 %i) { | 93 define float @ExtractV4xfloat(<4 x float> %v, i32 %i) { |
94 %e0 = extractelement <4 x float> %v, i32 %i | 94 %e0 = extractelement <4 x float> %v, i32 %i |
95 ; CHECK: Error: {{.*}} not {{.*}} constant | 95 ; CHECK: Error{{.*}} not {{.*}} constant |
96 ; MIN: Error: {{.*}} Invalid function record: <6 3 2> | 96 ; MIN: Error{{.*}} Invalid function record: <6 3 2> |
97 %e1 = extractelement <4 x float> %v, i32 4 | 97 %e1 = extractelement <4 x float> %v, i32 4 |
98 ; CHECK: Error: {{.*}} not in range | 98 ; CHECK: Error{{.*}} not in range |
99 ; MIN: Error: {{.*}} Invalid function record: <6 4 2> | 99 ; MIN: Error{{.*}} Invalid function record: <6 4 2> |
100 %e2 = extractelement <4 x float> %v, i32 4 | 100 %e2 = extractelement <4 x float> %v, i32 4 |
101 ; CHECK: Error: {{.*}} not in range | 101 ; CHECK: Error{{.*}} not in range |
102 ; MIN: Error: {{.*}} Invalid function record: <6 5 3> | 102 ; MIN: Error{{.*}} Invalid function record: <6 5 3> |
103 ret float %e2 | 103 ret float %e2 |
104 } | 104 } |
105 | 105 |
106 define <4 x i1> @InsertV4xi1(<4 x i1> %v, i32 %i) { | 106 define <4 x i1> @InsertV4xi1(<4 x i1> %v, i32 %i) { |
107 %r0 = insertelement <4 x i1> %v, i1 1, i32 %i | 107 %r0 = insertelement <4 x i1> %v, i1 1, i32 %i |
108 ; CHECK: Error: {{.*}} not {{.*}} constant | 108 ; CHECK: Error{{.*}} not {{.*}} constant |
109 ; MIN: Error: {{.*}} Invalid function record: <7 5 1 4> | 109 ; MIN: Error{{.*}} Invalid function record: <7 5 1 4> |
110 %r1 = insertelement <4 x i1> %v, i1 1, i32 4 | 110 %r1 = insertelement <4 x i1> %v, i1 1, i32 4 |
111 ; CHECK: Error: {{.*}} not in range | 111 ; CHECK: Error{{.*}} not in range |
112 ; MIN: Error: {{.*}} Invalid function record: <7 6 2 4> | 112 ; MIN: Error{{.*}} Invalid function record: <7 6 2 4> |
113 %r2 = insertelement <4 x i1> %v, i1 1, i32 7 | 113 %r2 = insertelement <4 x i1> %v, i1 1, i32 7 |
114 ; CHECK: Error: {{.*}} not in range | 114 ; CHECK: Error{{.*}} not in range |
115 ; MIN: Error: {{.*}} Invalid function record: <7 7 3 4> | 115 ; MIN: Error{{.*}} Invalid function record: <7 7 3 4> |
116 ret <4 x i1> %r2 | 116 ret <4 x i1> %r2 |
117 } | 117 } |
118 | 118 |
119 define <8 x i1> @InsertV8xi1(<8 x i1> %v, i32 %i) { | 119 define <8 x i1> @InsertV8xi1(<8 x i1> %v, i32 %i) { |
120 %r0 = insertelement <8 x i1> %v, i1 0, i32 %i | 120 %r0 = insertelement <8 x i1> %v, i1 0, i32 %i |
121 ; CHECK: Error: {{.*}} not {{.*}} constant | 121 ; CHECK: Error{{.*}} not {{.*}} constant |
122 ; MIN: Error: {{.*}} Invalid function record: <7 5 1 4> | 122 ; MIN: Error{{.*}} Invalid function record: <7 5 1 4> |
123 %r1 = insertelement <8 x i1> %v, i1 0, i32 8 | 123 %r1 = insertelement <8 x i1> %v, i1 0, i32 8 |
124 ; CHECK: Error: {{.*}} not in range | 124 ; CHECK: Error{{.*}} not in range |
125 ; MIN: Error: {{.*}} Invalid function record: <7 6 2 4> | 125 ; MIN: Error{{.*}} Invalid function record: <7 6 2 4> |
126 %r2 = insertelement <8 x i1> %v, i1 0, i32 88 | 126 %r2 = insertelement <8 x i1> %v, i1 0, i32 88 |
127 ; CHECK: Error: {{.*}} not in range | 127 ; CHECK: Error{{.*}} not in range |
128 ; MIN: Error: {{.*}} Invalid function record: <7 7 3 4> | 128 ; MIN: Error{{.*}} Invalid function record: <7 7 3 4> |
129 ret <8 x i1> %r2 | 129 ret <8 x i1> %r2 |
130 } | 130 } |
131 | 131 |
132 define <16 x i1> @InsertV16xi1(<16 x i1> %v, i32 %i) { | 132 define <16 x i1> @InsertV16xi1(<16 x i1> %v, i32 %i) { |
133 %r = insertelement <16 x i1> %v, i1 1, i32 %i | 133 %r = insertelement <16 x i1> %v, i1 1, i32 %i |
134 ; CHECK: Error: {{.*}} not {{.*}} constant | 134 ; CHECK: Error{{.*}} not {{.*}} constant |
135 ; MIN: Error: {{.*}} Invalid function record: <7 5 1 4> | 135 ; MIN: Error{{.*}} Invalid function record: <7 5 1 4> |
136 ret <16 x i1> %r | 136 ret <16 x i1> %r |
137 %r1 = insertelement <16 x i1> %v, i1 1, i32 16 | 137 %r1 = insertelement <16 x i1> %v, i1 1, i32 16 |
138 ; CHECK: Error: {{.*}} not in range | 138 ; CHECK: Error{{.*}} not in range |
139 ; MIN: Error: {{.*}} Invalid function record: <7 6 2 4> | 139 ; MIN: Error{{.*}} Invalid function record: <7 6 2 4> |
140 %r2 = insertelement <16 x i1> %v, i1 1, i32 31 | 140 %r2 = insertelement <16 x i1> %v, i1 1, i32 31 |
141 ; CHECK: Error: {{.*}} not in range | 141 ; CHECK: Error{{.*}} not in range |
142 ; MIN: Error: {{.*}} Invalid function record: <7 7 3 4> | 142 ; MIN: Error{{.*}} Invalid function record: <7 7 3 4> |
143 ret <16 x i1> %r2 | 143 ret <16 x i1> %r2 |
144 } | 144 } |
145 | 145 |
146 define <16 x i8> @InsertV16xi8(<16 x i8> %v, i32 %i) { | 146 define <16 x i8> @InsertV16xi8(<16 x i8> %v, i32 %i) { |
147 %r0 = insertelement <16 x i8> %v, i8 34, i32 %i | 147 %r0 = insertelement <16 x i8> %v, i8 34, i32 %i |
148 ; CHECK: Error: {{.*}} not {{.*}} constant | 148 ; CHECK: Error{{.*}} not {{.*}} constant |
149 ; MIN: Error: {{.*}} Invalid function record: <7 5 1 4> | 149 ; MIN: Error{{.*}} Invalid function record: <7 5 1 4> |
150 %r1 = insertelement <16 x i8> %v, i8 34, i32 16 | 150 %r1 = insertelement <16 x i8> %v, i8 34, i32 16 |
151 ; CHECK: Error: {{.*}} not in range | 151 ; CHECK: Error{{.*}} not in range |
152 ; MIN: Error: {{.*}} Invalid function record: <7 6 2 4> | 152 ; MIN: Error{{.*}} Invalid function record: <7 6 2 4> |
153 %r2 = insertelement <16 x i8> %v, i8 34, i32 19 | 153 %r2 = insertelement <16 x i8> %v, i8 34, i32 19 |
154 ; CHECK: Error: {{.*}} not in range | 154 ; CHECK: Error{{.*}} not in range |
155 ; MIN: Error: {{.*}} Invalid function record: <7 7 3 4> | 155 ; MIN: Error{{.*}} Invalid function record: <7 7 3 4> |
156 ret <16 x i8> %r0 | 156 ret <16 x i8> %r0 |
157 } | 157 } |
158 | 158 |
159 define <8 x i16> @InsertV8xi16(<8 x i16> %v, i32 %i) { | 159 define <8 x i16> @InsertV8xi16(<8 x i16> %v, i32 %i) { |
160 %r0 = insertelement <8 x i16> %v, i16 289, i32 %i | 160 %r0 = insertelement <8 x i16> %v, i16 289, i32 %i |
161 ; CHECK: Error: {{.*}} not {{.*}} constant | 161 ; CHECK: Error{{.*}} not {{.*}} constant |
162 ; MIN: Error: {{.*}} Invalid function record: <7 5 1 4> | 162 ; MIN: Error{{.*}} Invalid function record: <7 5 1 4> |
163 %r1 = insertelement <8 x i16> %v, i16 289, i32 8 | 163 %r1 = insertelement <8 x i16> %v, i16 289, i32 8 |
164 ; CHECK: Error: {{.*}} not in range | 164 ; CHECK: Error{{.*}} not in range |
165 ; MIN: Error: {{.*}} Invalid function record: <7 6 2 4> | 165 ; MIN: Error{{.*}} Invalid function record: <7 6 2 4> |
166 %r2 = insertelement <8 x i16> %v, i16 289, i32 19 | 166 %r2 = insertelement <8 x i16> %v, i16 289, i32 19 |
167 ; CHECK: Error: {{.*}} not in range | 167 ; CHECK: Error{{.*}} not in range |
168 ; MIN: Error: {{.*}} Invalid function record: <7 7 3 4> | 168 ; MIN: Error{{.*}} Invalid function record: <7 7 3 4> |
169 ret <8 x i16> %r1 | 169 ret <8 x i16> %r1 |
170 } | 170 } |
171 | 171 |
172 define <4 x i32> @InsertV4xi32(<4 x i32> %v, i32 %i) { | 172 define <4 x i32> @InsertV4xi32(<4 x i32> %v, i32 %i) { |
173 %r0 = insertelement <4 x i32> %v, i32 54545454, i32 %i | 173 %r0 = insertelement <4 x i32> %v, i32 54545454, i32 %i |
174 ; CHECK: Error: {{.*}} not {{.*}} constant | 174 ; CHECK: Error{{.*}} not {{.*}} constant |
175 ; MIN: Error: {{.*}} Invalid function record: <7 5 3 4> | 175 ; MIN: Error{{.*}} Invalid function record: <7 5 3 4> |
176 %r1 = insertelement <4 x i32> %v, i32 54545454, i32 4 | 176 %r1 = insertelement <4 x i32> %v, i32 54545454, i32 4 |
177 ; CHECK: Error: {{.*}} not in range | 177 ; CHECK: Error{{.*}} not in range |
178 ; MIN: Error: {{.*}} Invalid function record: <7 6 4 3> | 178 ; MIN: Error{{.*}} Invalid function record: <7 6 4 3> |
179 %r2 = insertelement <4 x i32> %v, i32 54545454, i32 9 | 179 %r2 = insertelement <4 x i32> %v, i32 54545454, i32 9 |
180 ; CHECK: Error: {{.*}} not in range | 180 ; CHECK: Error{{.*}} not in range |
181 ; MIN: Error: {{.*}} Invalid function record: <7 7 5 3> | 181 ; MIN: Error{{.*}} Invalid function record: <7 7 5 3> |
182 ret <4 x i32> %r2 | 182 ret <4 x i32> %r2 |
183 } | 183 } |
184 | 184 |
185 define <4 x float> @InsertV4xfloat(<4 x float> %v, i32 %i) { | 185 define <4 x float> @InsertV4xfloat(<4 x float> %v, i32 %i) { |
186 %r0 = insertelement <4 x float> %v, float 3.0, i32 %i | 186 %r0 = insertelement <4 x float> %v, float 3.0, i32 %i |
187 ; CHECK: Error: {{.*}} not {{.*}} constant | 187 ; CHECK: Error{{.*}} not {{.*}} constant |
188 ; MIN: Error: {{.*}} Invalid function record: <7 5 1 4> | 188 ; MIN: Error{{.*}} Invalid function record: <7 5 1 4> |
189 %r1 = insertelement <4 x float> %v, float 3.0, i32 4 | 189 %r1 = insertelement <4 x float> %v, float 3.0, i32 4 |
190 ; CHECK: Error: {{.*}} not in range | 190 ; CHECK: Error{{.*}} not in range |
191 ; MIN: Error: {{.*}} Invalid function record: <7 6 2 4> | 191 ; MIN: Error{{.*}} Invalid function record: <7 6 2 4> |
192 %r2 = insertelement <4 x float> %v, float 3.0, i32 44 | 192 %r2 = insertelement <4 x float> %v, float 3.0, i32 44 |
193 ; CHECK: Error: {{.*}} not in range | 193 ; CHECK: Error{{.*}} not in range |
194 ; MIN: Error: {{.*}} Invalid function record: <7 7 3 4> | 194 ; MIN: Error{{.*}} Invalid function record: <7 7 3 4> |
195 ret <4 x float> %r2 | 195 ret <4 x float> %r2 |
196 } | 196 } |
OLD | NEW |