Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(710)

Side by Side Diff: test/NaCl/PNaClABI/instructions.ll

Issue 1151093004: Changes from 3.7 merge to files not in upstream (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 ; RUN: not pnacl-abicheck < %s | FileCheck %s 1 ; RUN: not pnacl-abicheck < %s | FileCheck %s
2 ; Test instruction opcodes allowed by PNaCl ABI 2 ; Test instruction opcodes allowed by PNaCl ABI
3 3
4 target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64 :64:64-p:32:32:32-v128:32:32" 4 target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64 :64:64-p:32:32:32-v128:32:32"
5 target triple = "le32-unknown-nacl" 5 target triple = "le32-unknown-nacl"
6 6
7 define internal void @terminators() { 7 define internal void @terminators() {
8 ; CHECK: ERROR: Function terminators 8 ; CHECK: ERROR: Function terminators
9 ; Terminator instructions 9 ; Terminator instructions
10 terminators: 10 terminators:
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 ; CHECK-NEXT: disallowed: bad instruction opcode: {{.*}} insertvalue 138 ; CHECK-NEXT: disallowed: bad instruction opcode: {{.*}} insertvalue
139 139
140 ret void 140 ret void
141 } 141 }
142 142
143 define internal void @memory() { 143 define internal void @memory() {
144 ; CHECK: ERROR: Function memory 144 ; CHECK: ERROR: Function memory
145 ; Memory operations 145 ; Memory operations
146 %a1 = alloca i8, i32 4 146 %a1 = alloca i8, i32 4
147 %ptr = inttoptr i32 0 to i32* 147 %ptr = inttoptr i32 0 to i32*
148 %a2 = load i32* %ptr, align 1 148 %a2 = load i32, i32* %ptr, align 1
149 store i32 undef, i32* %ptr, align 1 149 store i32 undef, i32* %ptr, align 1
150 ; CHECK-NOT: disallowed 150 ; CHECK-NOT: disallowed
151 %a4 = getelementptr { i32, i32}* undef ; CHECK-NEXT: disallowed: bad instructi on opcode: {{.*}} getelementptr 151 %a4 = getelementptr { i32, i32}, { i32, i32}* undef ; CHECK-NEXT: disallowed: bad instruction opcode: {{.*}} getelementptr
152 ret void 152 ret void
153 } 153 }
154 154
155 define internal void @vector_memory() { 155 define internal void @vector_memory() {
156 ; CHECK: ERROR: Function vector_memory 156 ; CHECK: ERROR: Function vector_memory
157 ; Vector memory operations. 157 ; Vector memory operations.
158 %ptr16xi8 = inttoptr i32 0 to <16 x i8>* 158 %ptr16xi8 = inttoptr i32 0 to <16 x i8>*
159 %ptr8xi16 = inttoptr i32 0 to <8 x i16>* 159 %ptr8xi16 = inttoptr i32 0 to <8 x i16>*
160 %ptr4xi32 = inttoptr i32 0 to <4 x i32>* 160 %ptr4xi32 = inttoptr i32 0 to <4 x i32>*
161 %ptr4xfloat = inttoptr i32 0 to <4 x float>* 161 %ptr4xfloat = inttoptr i32 0 to <4 x float>*
162 162
163 %l16xi8 = load <16 x i8>* %ptr16xi8, align 1 163 %l16xi8 = load <16 x i8>, <16 x i8>* %ptr16xi8, align 1
164 %l8xi16 = load <8 x i16>* %ptr8xi16, align 2 164 %l8xi16 = load <8 x i16>, <8 x i16>* %ptr8xi16, align 2
165 %l4xi32 = load <4 x i32>* %ptr4xi32, align 4 165 %l4xi32 = load <4 x i32>, <4 x i32>* %ptr4xi32, align 4
166 %l4xfloat = load <4 x float>* %ptr4xfloat, align 4 166 %l4xfloat = load <4 x float>, <4 x float>* %ptr4xfloat, align 4
167 167
168 store <16 x i8> undef, <16 x i8>* %ptr16xi8, align 1 168 store <16 x i8> undef, <16 x i8>* %ptr16xi8, align 1
169 store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 2 169 store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 2
170 store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 4 170 store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 4
171 store <4 x float> undef, <4 x float>* %ptr4xfloat, align 4 171 store <4 x float> undef, <4 x float>* %ptr4xfloat, align 4
172 172
173 ; CHECK-NOT: disallowed 173 ; CHECK-NOT: disallowed
174 ; The following vector types are disallowed. 174 ; The following vector types are disallowed.
175 %ptr2xi1 = inttoptr i32 0 to <2 x i1>* ; CHECK-NEXT: disallowed: bad r esult type: <2 x i1>* 175 %ptr2xi1 = inttoptr i32 0 to <2 x i1>* ; CHECK-NEXT: disallowed: bad r esult type: <2 x i1>*
176 %ptr4xi1 = inttoptr i32 0 to <4 x i1>* ; CHECK-NEXT: disallowed: bad r esult type: <4 x i1>* 176 %ptr4xi1 = inttoptr i32 0 to <4 x i1>* ; CHECK-NEXT: disallowed: bad r esult type: <4 x i1>*
(...skipping 16 matching lines...) Expand all
193 %ptr4xi64 = inttoptr i32 0 to <4 x i64>* ; CHECK-NEXT: disallowed: bad r esult type: <4 x i64>* 193 %ptr4xi64 = inttoptr i32 0 to <4 x i64>* ; CHECK-NEXT: disallowed: bad r esult type: <4 x i64>*
194 %ptr8xi64 = inttoptr i32 0 to <8 x i64>* ; CHECK-NEXT: disallowed: bad r esult type: <8 x i64>* 194 %ptr8xi64 = inttoptr i32 0 to <8 x i64>* ; CHECK-NEXT: disallowed: bad r esult type: <8 x i64>*
195 %ptr2xfloat = inttoptr i32 0 to <2 x float>* ; CHECK-NEXT: disallowed: bad r esult type: <2 x float>* 195 %ptr2xfloat = inttoptr i32 0 to <2 x float>* ; CHECK-NEXT: disallowed: bad r esult type: <2 x float>*
196 %ptr8xfloat = inttoptr i32 0 to <8 x float>* ; CHECK-NEXT: disallowed: bad r esult type: <8 x float>* 196 %ptr8xfloat = inttoptr i32 0 to <8 x float>* ; CHECK-NEXT: disallowed: bad r esult type: <8 x float>*
197 %ptr16xfloat = inttoptr i32 0 to <16 x float>* ; CHECK-NEXT: disallowed: bad r esult type: <16 x float>* 197 %ptr16xfloat = inttoptr i32 0 to <16 x float>* ; CHECK-NEXT: disallowed: bad r esult type: <16 x float>*
198 %ptr2xdouble = inttoptr i32 0 to <2 x double>* ; CHECK-NEXT: disallowed: bad r esult type: <2 x double>* 198 %ptr2xdouble = inttoptr i32 0 to <2 x double>* ; CHECK-NEXT: disallowed: bad r esult type: <2 x double>*
199 %ptr4xdouble = inttoptr i32 0 to <4 x double>* ; CHECK-NEXT: disallowed: bad r esult type: <4 x double>* 199 %ptr4xdouble = inttoptr i32 0 to <4 x double>* ; CHECK-NEXT: disallowed: bad r esult type: <4 x double>*
200 %ptr8xdouble = inttoptr i32 0 to <8 x double>* ; CHECK-NEXT: disallowed: bad r esult type: <8 x double>* 200 %ptr8xdouble = inttoptr i32 0 to <8 x double>* ; CHECK-NEXT: disallowed: bad r esult type: <8 x double>*
201 201
202 ; i1 vector pointers are simply disallowed, their alignment is inconsequential . 202 ; i1 vector pointers are simply disallowed, their alignment is inconsequential .
203 %l4xi1 = load <4 x i1>* %ptr4xi1, align 1 ; CHECK-NEXT: disallowed: bad poi nter: %l4xi1 = load <4 x i1>* %ptr4xi1, align 1 203 %l4xi1 = load <4 x i1>, <4 x i1>* %ptr4xi1, align 1 ; CHECK-NEXT: disallowe d: bad pointer: %l4xi1 = load <4 x i1>, <4 x i1>* %ptr4xi1, align 1
204 %l8xi1 = load <8 x i1>* %ptr8xi1, align 1 ; CHECK-NEXT: disallowed: bad poi nter: %l8xi1 = load <8 x i1>* %ptr8xi1, align 1 204 %l8xi1 = load <8 x i1>, <8 x i1>* %ptr8xi1, align 1 ; CHECK-NEXT: disallowe d: bad pointer: %l8xi1 = load <8 x i1>, <8 x i1>* %ptr8xi1, align 1
205 %l16xi1 = load <16 x i1>* %ptr16xi1, align 1 ; CHECK-NEXT: disallowed: bad poi nter: %l16xi1 = load <16 x i1>* %ptr16xi1, align 1 205 %l16xi1 = load <16 x i1>, <16 x i1>* %ptr16xi1, align 1 ; CHECK-NEXT: disallow ed: bad pointer: %l16xi1 = load <16 x i1>, <16 x i1>* %ptr16xi1, align 1
206 206
207 store <4 x i1> undef, <4 x i1>* %ptr4xi1, align 1 ; CHECK-NEXT: disallowed: bad pointer: store <4 x i1> undef, <4 x i1>* %ptr4xi1, align 1 207 store <4 x i1> undef, <4 x i1>* %ptr4xi1, align 1 ; CHECK-NEXT: disallowed: bad pointer: store <4 x i1> undef, <4 x i1>* %ptr4xi1, align 1
208 store <8 x i1> undef, <8 x i1>* %ptr8xi1, align 1 ; CHECK-NEXT: disallowed: bad pointer: store <8 x i1> undef, <8 x i1>* %ptr8xi1, align 1 208 store <8 x i1> undef, <8 x i1>* %ptr8xi1, align 1 ; CHECK-NEXT: disallowed: bad pointer: store <8 x i1> undef, <8 x i1>* %ptr8xi1, align 1
209 store <16 x i1> undef, <16 x i1>* %ptr16xi1, align 1 ; CHECK-NEXT: disallowed: bad pointer: store <16 x i1> undef, <16 x i1>* %ptr16xi1, align 1 209 store <16 x i1> undef, <16 x i1>* %ptr16xi1, align 1 ; CHECK-NEXT: disallowed: bad pointer: store <16 x i1> undef, <16 x i1>* %ptr16xi1, align 1
210 210
211 ; Under- or over-aligned load/store are disallowed. 211 ; Under- or over-aligned load/store are disallowed.
212 %a1_8xi16 = load <8 x i16>* %ptr8xi16, align 1 ; CHECK-NEXT: disallowed: bad alignment: %a1_8xi16 = load <8 x i16>* %ptr8xi16, align 1 212 %a1_8xi16 = load <8 x i16>, <8 x i16>* %ptr8xi16, align 1 ; CHECK-NEXT: disallowed: bad alignment: %a1_8xi16 = load <8 x i16>, <8 x i16>* %ptr8xi16, ali gn 1
213 %a1_4xi32 = load <4 x i32>* %ptr4xi32, align 1 ; CHECK-NEXT: disallowed: bad alignment:»%a1_4xi32 = load <4 x i32>* %ptr4xi32, align 1 213 %a1_4xi32 = load <4 x i32>, <4 x i32>* %ptr4xi32, align 1 ; CHECK-NEXT: disallowed: bad alignment:» %a1_4xi32 = load <4 x i32>, <4 x i32>* %ptr4xi32 , align 1
214 %a1_4xfloat = load <4 x float>* %ptr4xfloat, align 1 ; CHECK-NEXT: disallowed: bad alignment:»%a1_4xfloat = load <4 x float>* %ptr4xfloat, align 1 214 %a1_4xfloat = load <4 x float>, <4 x float>* %ptr4xfloat, align 1 ; CHECK-NEXT : disallowed: bad alignment:» %a1_4xfloat = load <4 x float>, <4 x float>* %pt r4xfloat, align 1
215 215
216 %a16_16xi8 = load <16 x i8>* %ptr16xi8, align 16 ; CHECK-NEXT: disallowe d: bad alignment: %a16_16xi8 = load <16 x i8>* %ptr16xi8, align 16 216 %a16_16xi8 = load <16 x i8>, <16 x i8>* %ptr16xi8, align 16 ; CHECK-NEXT : disallowed: bad alignment: %a16_16xi8 = load <16 x i8>, <16 x i8>* %ptr16xi8, align 16
217 %a16_8xi16 = load <8 x i16>* %ptr8xi16, align 16 ; CHECK-NEXT: disallowe d: bad alignment: %a16_8xi16 = load <8 x i16>* %ptr8xi16, align 16 217 %a16_8xi16 = load <8 x i16>, <8 x i16>* %ptr8xi16, align 16 ; CHECK-NEXT : disallowed: bad alignment: %a16_8xi16 = load <8 x i16>, <8 x i16>* %ptr8xi16, align 16
218 %a16_4xi32 = load <4 x i32>* %ptr4xi32, align 16 ; CHECK-NEXT: disallowe d: bad alignment: %a16_4xi32 = load <4 x i32>* %ptr4xi32, align 16 218 %a16_4xi32 = load <4 x i32>, <4 x i32>* %ptr4xi32, align 16 ; CHECK-NEXT : disallowed: bad alignment: %a16_4xi32 = load <4 x i32>, <4 x i32>* %ptr4xi32, align 16
219 %a16_4xfloat = load <4 x float>* %ptr4xfloat, align 16 ; CHECK-NEXT: disallowe d: bad alignment: %a16_4xfloat = load <4 x float>* %ptr4xfloat, align 16 219 %a16_4xfloat = load <4 x float>, <4 x float>* %ptr4xfloat, align 16 ; CHECK-NE XT: disallowed: bad alignment: %a16_4xfloat = load <4 x float>, <4 x float>* %pt r4xfloat, align 16
220 220
221 store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 1 ; CHECK-NEXT: disal lowed: bad alignment: store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 1 221 store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 1 ; CHECK-NEXT: disal lowed: bad alignment: store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 1
222 store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 1 ; CHECK-NEXT: disal lowed: bad alignment: store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 1 222 store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 1 ; CHECK-NEXT: disal lowed: bad alignment: store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 1
223 store <4 x float> undef, <4 x float>* %ptr4xfloat, align 1 ; CHECK-NEXT: disal lowed: bad alignment: store <4 x float> undef, <4 x float>* %ptr4xfloat, align 1 223 store <4 x float> undef, <4 x float>* %ptr4xfloat, align 1 ; CHECK-NEXT: disal lowed: bad alignment: store <4 x float> undef, <4 x float>* %ptr4xfloat, align 1
224 224
225 store <16 x i8> undef, <16 x i8>* %ptr16xi8, align 16 ; CHECK-NEXT: disa llowed: bad alignment: store <16 x i8> undef, <16 x i8>* %ptr16xi8, align 16 225 store <16 x i8> undef, <16 x i8>* %ptr16xi8, align 16 ; CHECK-NEXT: disa llowed: bad alignment: store <16 x i8> undef, <16 x i8>* %ptr16xi8, align 16
226 store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 16 ; CHECK-NEXT: disa llowed: bad alignment: store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 16 226 store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 16 ; CHECK-NEXT: disa llowed: bad alignment: store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 16
227 store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 16 ; CHECK-NEXT: disa llowed: bad alignment: store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 16 227 store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 16 ; CHECK-NEXT: disa llowed: bad alignment: store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 16
228 store <4 x float> undef, <4 x float>* %ptr4xfloat, align 16 ; CHECK-NEXT: disa llowed: bad alignment: store <4 x float> undef, <4 x float>* %ptr4xfloat, align 16 228 store <4 x float> undef, <4 x float>* %ptr4xfloat, align 16 ; CHECK-NEXT: disa llowed: bad alignment: store <4 x float> undef, <4 x float>* %ptr4xfloat, align 16
229 229
230 ret void 230 ret void
231 } 231 }
232 232
233 define internal void @atomic() { 233 define internal void @atomic() {
234 ; CHECK: ERROR: Function atomic 234 ; CHECK: ERROR: Function atomic
235 %ptr = inttoptr i32 0 to i32* 235 %ptr = inttoptr i32 0 to i32*
236 236
237 ; CHECK-NOT: disallowed 237 ; CHECK-NOT: disallowed
238 %la = load atomic i32* %ptr seq_cst, align 4 ; CHECK: dis allowed: atomic load: {{.*}} load atomic 238 %la = load atomic i32, i32* %ptr seq_cst, align 4 ; CHECK : disallowed: atomic load: {{.*}} load atomic
239 %lv = load volatile i32* %ptr, align 4 ; CHECK: dis allowed: volatile load: {{.*}} load volatile 239 %lv = load volatile i32, i32* %ptr, align 4 ; CHECK : disallowed: volatile load: {{.*}} load volatile
240 store atomic i32 undef, i32* %ptr seq_cst, align 4 ; CHECK: dis allowed: atomic store: store atomic 240 store atomic i32 undef, i32* %ptr seq_cst, align 4 ; CHECK: dis allowed: atomic store: store atomic
241 store volatile i32 undef, i32* %ptr, align 4 ; CHECK: dis allowed: volatile store: store volatile 241 store volatile i32 undef, i32* %ptr, align 4 ; CHECK: dis allowed: volatile store: store volatile
242 fence acq_rel ; CHECK: dis allowed: bad instruction opcode: fence 242 fence acq_rel ; CHECK: dis allowed: bad instruction opcode: fence
243 %cmpx = cmpxchg i32* %ptr, i32 undef, i32 undef acq_rel monotonic ; CHECK: dis allowed: bad instruction opcode: {{.*}} cmpxchg 243 %cmpx = cmpxchg i32* %ptr, i32 undef, i32 undef acq_rel monotonic ; CHECK: dis allowed: bad instruction opcode: {{.*}} cmpxchg
244 %crm = atomicrmw add i32* %ptr, i32 1 acquire ; CHECK: dis allowed: bad instruction opcode: {{.*}} atomicrmw 244 %crm = atomicrmw add i32* %ptr, i32 1 acquire ; CHECK: dis allowed: bad instruction opcode: {{.*}} atomicrmw
245 ret void 245 ret void
246 } 246 }
247 247
248 define internal void @atomic_vector() { 248 define internal void @atomic_vector() {
249 ; CHECK: ERROR: Function atomic_vector 249 ; CHECK: ERROR: Function atomic_vector
250 %ptr = inttoptr i32 0 to <4 x i32>* 250 %ptr = inttoptr i32 0 to <4 x i32>*
251 251
252 ; CHECK-NOT: disallowed 252 ; CHECK-NOT: disallowed
253 %la = load atomic <4 x i32>* %ptr seq_cst, align 1 ; CHECK: disall owed: atomic load: {{.*}} load atomic 253 %la = load atomic <4 x i32>, <4 x i32>* %ptr seq_cst, align 1 ; CH ECK: disallowed: atomic load: {{.*}} load atomic
254 %lv = load volatile <4 x i32>* %ptr, align 1 ; CHECK: disall owed: volatile load: {{.*}} load volatile 254 %lv = load volatile <4 x i32>, <4 x i32>* %ptr, align 1 ; CH ECK: disallowed: volatile load: {{.*}} load volatile
255 store atomic <4 x i32> undef, <4 x i32>* %ptr seq_cst, align 1 ; CHECK: disall owed: atomic store: store atomic 255 store atomic <4 x i32> undef, <4 x i32>* %ptr seq_cst, align 1 ; CHECK: disall owed: atomic store: store atomic
256 store volatile <4 x i32> undef, <4 x i32>* %ptr, align 1 ; CHECK: disall owed: volatile store: store volatile 256 store volatile <4 x i32> undef, <4 x i32>* %ptr, align 1 ; CHECK: disall owed: volatile store: store volatile
257 ret void 257 ret void
258 } 258 }
259 259
260 define internal void @conversion() { 260 define internal void @conversion() {
261 ; CHECK-NOT: Function conversion 261 ; CHECK-NOT: Function conversion
262 ; Conversion operations 262 ; Conversion operations
263 %t = trunc i32 undef to i8 263 %t = trunc i32 undef to i8
264 %z = zext i8 undef to i32 264 %z = zext i8 undef to i32
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 %val = va_arg i8* %va_list, i32 406 %val = va_arg i8* %va_list, i32
407 ret i32 %val 407 ret i32 %val
408 } 408 }
409 ; CHECK-NOT: disallowed 409 ; CHECK-NOT: disallowed
410 ; CHECK: disallowed: bad instruction opcode: {{.*}} va_arg 410 ; CHECK: disallowed: bad instruction opcode: {{.*}} va_arg
411 411
412 @global_var = internal global [4 x i8] zeroinitializer 412 @global_var = internal global [4 x i8] zeroinitializer
413 413
414 define internal void @constantexpr() { 414 define internal void @constantexpr() {
415 ; CHECK: ERROR: Function constantexpr 415 ; CHECK: ERROR: Function constantexpr
416 ptrtoint i8* getelementptr ([4 x i8]* @global_var, i32 1, i32 0) to i32 416 ptrtoint i8* getelementptr ([4 x i8], [4 x i8]* @global_var, i32 1, i32 0) to i32
417 ret void 417 ret void
418 } 418 }
419 ; CHECK-NOT: disallowed 419 ; CHECK-NOT: disallowed
420 ; CHECK: disallowed: operand not InherentPtr: %1 = ptrtoint i8* getelementptr 420 ; CHECK: disallowed: operand not InherentPtr: %1 = ptrtoint i8* getelementptr
421 421
422 define internal void @inline_asm() { 422 define internal void @inline_asm() {
423 ; CHECK: ERROR: Function inline_asm 423 ; CHECK: ERROR: Function inline_asm
424 call void asm "foo", ""() 424 call void asm "foo", ""()
425 ret void 425 ret void
426 } 426 }
427 ; CHECK-NOT: disallowed 427 ; CHECK-NOT: disallowed
428 ; CHECK: disallowed: inline assembly: call void asm "foo", ""() 428 ; CHECK: disallowed: inline assembly: call void asm "foo", ""()
429 429
430 ; CHECK-NOT: disallowed 430 ; CHECK-NOT: disallowed
431 ; If another check is added, there should be a check-not in between each check 431 ; If another check is added, there should be a check-not in between each check
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698