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

Side by Side Diff: tests_lit/llvm2ice_tests/64bit.pnacl.ll

Issue 914263005: Subzero: switch from llvm-objdump to objdump for lit tests (for LLVM merge) (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: fix some line wrap Created 5 years, 10 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
« no previous file with comments | « tests_lit/lit.cfg ('k') | tests_lit/llvm2ice_tests/8bit.pnacl.ll » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ; This tries to be a comprehensive test of i64 operations, in 1 ; This tries to be a comprehensive test of i64 operations, in
2 ; particular the patterns for lowering i64 operations into constituent 2 ; particular the patterns for lowering i64 operations into constituent
3 ; i32 operations on x86-32. 3 ; i32 operations on x86-32.
4 4
5 ; RUN: %p2i -i %s --args -O2 --verbose none \ 5 ; RUN: %p2i --assemble --disassemble -i %s --args -O2 --verbose none \
6 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \ 6 ; RUN: | FileCheck %s
7 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s 7 ; RUN: %p2i --assemble --disassemble -i %s --args -Om1 --verbose none \
8 ; RUN: %p2i -i %s --args -Om1 --verbose none \
9 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \
10 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - \
11 ; RUN: | FileCheck --check-prefix=OPTM1 %s 8 ; RUN: | FileCheck --check-prefix=OPTM1 %s
12 9
13 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 10 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
14 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 11 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
15 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 12 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
16 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 13 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
17 14
18 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) { 15 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) {
19 entry: 16 entry:
20 ret i32 %b 17 ret i32 %b
21 } 18 }
22 19
23 define internal i32 @pass64BitArg(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f ) { 20 define internal i32 @pass64BitArg(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f ) {
24 entry: 21 entry:
25 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 %b) 22 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 %b)
26 %call1 = call i32 @ignore64BitArgNoInline(i64 %c, i32 123, i64 %d) 23 %call1 = call i32 @ignore64BitArgNoInline(i64 %c, i32 123, i64 %d)
27 %call2 = call i32 @ignore64BitArgNoInline(i64 %e, i32 123, i64 %f) 24 %call2 = call i32 @ignore64BitArgNoInline(i64 %e, i32 123, i64 %f)
28 %add = add i32 %call1, %call 25 %add = add i32 %call1, %call
29 %add3 = add i32 %add, %call2 26 %add3 = add i32 %add, %call2
30 ret i32 %add3 27 ret i32 %add3
31 } 28 }
32 ; CHECK-LABEL: pass64BitArg 29 ; CHECK-LABEL: pass64BitArg
33 ; CHECK: sub esp 30 ; CHECK: sub esp
34 ; CHECK: mov dword ptr [esp + 4] 31 ; CHECK: mov DWORD PTR [esp+0x4]
35 ; CHECK: mov dword ptr [esp] 32 ; CHECK: mov DWORD PTR [esp]
36 ; CHECK: mov dword ptr [esp + 8], 123 33 ; CHECK: mov DWORD PTR [esp+0x8],0x7b
37 ; CHECK: mov dword ptr [esp + 16] 34 ; CHECK: mov DWORD PTR [esp+0x10]
38 ; CHECK: mov dword ptr [esp + 12] 35 ; CHECK: mov DWORD PTR [esp+0xc]
39 ; CHECK: call ignore64BitArgNoInline 36 ; CHECK: call {{.*}} R_{{.*}} ignore64BitArgNoInline
40 ; CHECK: sub esp 37 ; CHECK: sub esp
41 ; CHECK: mov dword ptr [esp + 4] 38 ; CHECK: mov DWORD PTR [esp+0x4]
42 ; CHECK: mov dword ptr [esp] 39 ; CHECK: mov DWORD PTR [esp]
43 ; CHECK: mov dword ptr [esp + 8], 123 40 ; CHECK: mov DWORD PTR [esp+0x8],0x7b
44 ; CHECK: mov dword ptr [esp + 16] 41 ; CHECK: mov DWORD PTR [esp+0x10]
45 ; CHECK: mov dword ptr [esp + 12] 42 ; CHECK: mov DWORD PTR [esp+0xc]
46 ; CHECK: call ignore64BitArgNoInline 43 ; CHECK: call {{.*}} R_{{.*}} ignore64BitArgNoInline
47 ; CHECK: sub esp 44 ; CHECK: sub esp
48 ; CHECK: mov dword ptr [esp + 4] 45 ; CHECK: mov DWORD PTR [esp+0x4]
49 ; CHECK: mov dword ptr [esp] 46 ; CHECK: mov DWORD PTR [esp]
50 ; CHECK: mov dword ptr [esp + 8], 123 47 ; CHECK: mov DWORD PTR [esp+0x8],0x7b
51 ; CHECK: mov dword ptr [esp + 16] 48 ; CHECK: mov DWORD PTR [esp+0x10]
52 ; CHECK: mov dword ptr [esp + 12] 49 ; CHECK: mov DWORD PTR [esp+0xc]
53 ; CHECK: call ignore64BitArgNoInline 50 ; CHECK: call {{.*}} R_{{.*}} ignore64BitArgNoInline
54 ; 51 ;
55 ; OPTM1-LABEL: pass64BitArg 52 ; OPTM1-LABEL: pass64BitArg
56 ; OPTM1: sub esp 53 ; OPTM1: sub esp
57 ; OPTM1: mov dword ptr [esp + 4] 54 ; OPTM1: mov DWORD PTR [esp+0x4]
58 ; OPTM1: mov dword ptr [esp] 55 ; OPTM1: mov DWORD PTR [esp]
59 ; OPTM1: mov dword ptr [esp + 8], 123 56 ; OPTM1: mov DWORD PTR [esp+0x8],0x7b
60 ; OPTM1: mov dword ptr [esp + 16] 57 ; OPTM1: mov DWORD PTR [esp+0x10]
61 ; OPTM1: mov dword ptr [esp + 12] 58 ; OPTM1: mov DWORD PTR [esp+0xc]
62 ; OPTM1: call ignore64BitArgNoInline 59 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline
63 ; OPTM1: sub esp 60 ; OPTM1: sub esp
64 ; OPTM1: mov dword ptr [esp + 4] 61 ; OPTM1: mov DWORD PTR [esp+0x4]
65 ; OPTM1: mov dword ptr [esp] 62 ; OPTM1: mov DWORD PTR [esp]
66 ; OPTM1: mov dword ptr [esp + 8], 123 63 ; OPTM1: mov DWORD PTR [esp+0x8],0x7b
67 ; OPTM1: mov dword ptr [esp + 16] 64 ; OPTM1: mov DWORD PTR [esp+0x10]
68 ; OPTM1: mov dword ptr [esp + 12] 65 ; OPTM1: mov DWORD PTR [esp+0xc]
69 ; OPTM1: call ignore64BitArgNoInline 66 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline
70 ; OPTM1: sub esp 67 ; OPTM1: sub esp
71 ; OPTM1: mov dword ptr [esp + 4] 68 ; OPTM1: mov DWORD PTR [esp+0x4]
72 ; OPTM1: mov dword ptr [esp] 69 ; OPTM1: mov DWORD PTR [esp]
73 ; OPTM1: mov dword ptr [esp + 8], 123 70 ; OPTM1: mov DWORD PTR [esp+0x8],0x7b
74 ; OPTM1: mov dword ptr [esp + 16] 71 ; OPTM1: mov DWORD PTR [esp+0x10]
75 ; OPTM1: mov dword ptr [esp + 12] 72 ; OPTM1: mov DWORD PTR [esp+0xc]
76 ; OPTM1: call ignore64BitArgNoInline 73 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline
77 74
78 declare i32 @ignore64BitArgNoInline(i64, i32, i64) 75 declare i32 @ignore64BitArgNoInline(i64, i32, i64)
79 76
80 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) { 77 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) {
81 entry: 78 entry:
82 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 -240105309230672 5256) 79 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 -240105309230672 5256)
83 ret i32 %call 80 ret i32 %call
84 } 81 }
85 ; CHECK-LABEL: pass64BitConstArg 82 ; CHECK-LABEL: pass64BitConstArg
86 ; CHECK: sub esp 83 ; CHECK: sub esp
87 ; CHECK: mov dword ptr [esp + 4] 84 ; CHECK: mov DWORD PTR [esp+0x4]
88 ; CHECK-NEXT: mov dword ptr [esp] 85 ; CHECK-NEXT: mov DWORD PTR [esp]
89 ; CHECK-NEXT: mov dword ptr [esp + 8], 123 86 ; CHECK-NEXT: mov DWORD PTR [esp+0x8],0x7b
90 ; Bundle padding might be added (so not using -NEXT). 87 ; Bundle padding might be added (so not using -NEXT).
91 ; CHECK: mov dword ptr [esp + 16], 3735928559 88 ; CHECK: mov DWORD PTR [esp+0x10],0xdeadbeef
92 ; CHECK-NEXT: mov dword ptr [esp + 12], 305419896 89 ; CHECK-NEXT: mov DWORD PTR [esp+0xc],0x12345678
93 ; Bundle padding will push the call down. 90 ; Bundle padding will push the call down.
94 ; CHECK-NOT: mov 91 ; CHECK-NOT: mov
95 ; CHECK: call ignore64BitArgNoInline 92 ; CHECK: call {{.*}} R_{{.*}} ignore64BitArgNoInline
96 ; 93 ;
97 ; OPTM1-LABEL: pass64BitConstArg 94 ; OPTM1-LABEL: pass64BitConstArg
98 ; OPTM1: sub esp 95 ; OPTM1: sub esp
99 ; OPTM1: mov dword ptr [esp + 4] 96 ; OPTM1: mov DWORD PTR [esp+0x4]
100 ; OPTM1-NEXT: mov dword ptr [esp] 97 ; OPTM1-NEXT: mov DWORD PTR [esp]
101 ; OPTM1-NEXT: mov dword ptr [esp + 8], 123 98 ; OPTM1-NEXT: mov DWORD PTR [esp+0x8],0x7b
102 ; Bundle padding might be added (so not using -NEXT). 99 ; Bundle padding might be added (so not using -NEXT).
103 ; OPTM1: mov dword ptr [esp + 16], 3735928559 100 ; OPTM1: mov DWORD PTR [esp+0x10],0xdeadbeef
104 ; OPTM1-NEXT: mov dword ptr [esp + 12], 305419896 101 ; OPTM1-NEXT: mov DWORD PTR [esp+0xc],0x12345678
105 ; OPTM1-NOT: mov 102 ; OPTM1-NOT: mov
106 ; OPTM1: call ignore64BitArgNoInline 103 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline
107 104
108 define internal i64 @return64BitArg(i64 %a) { 105 define internal i64 @return64BitArg(i64 %a) {
109 entry: 106 entry:
110 ret i64 %a 107 ret i64 %a
111 } 108 }
112 ; CHECK-LABEL: return64BitArg 109 ; CHECK-LABEL: return64BitArg
113 ; CHECK: mov {{.*}}, dword ptr [esp + 4] 110 ; CHECK: mov {{.*}},DWORD PTR [esp+0x4]
114 ; CHECK: mov {{.*}}, dword ptr [esp + 8] 111 ; CHECK: mov {{.*}},DWORD PTR [esp+0x8]
115 ; 112 ;
116 ; OPTM1-LABEL: return64BitArg 113 ; OPTM1-LABEL: return64BitArg
117 ; OPTM1: mov {{.*}}, dword ptr [esp + 4] 114 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x4]
118 ; OPTM1: mov {{.*}}, dword ptr [esp + 8] 115 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x8]
119 116
120 define internal i64 @return64BitConst() { 117 define internal i64 @return64BitConst() {
121 entry: 118 entry:
122 ret i64 -2401053092306725256 119 ret i64 -2401053092306725256
123 } 120 }
124 ; CHECK-LABEL: return64BitConst 121 ; CHECK-LABEL: return64BitConst
125 ; CHECK: mov eax, 305419896 122 ; CHECK: mov eax,0x12345678
126 ; CHECK: mov edx, 3735928559 123 ; CHECK: mov edx,0xdeadbeef
127 ; 124 ;
128 ; OPTM1-LABEL: return64BitConst 125 ; OPTM1-LABEL: return64BitConst
129 ; OPTM1: mov eax, 305419896 126 ; OPTM1: mov eax,0x12345678
130 ; OPTM1: mov edx, 3735928559 127 ; OPTM1: mov edx,0xdeadbeef
131 128
132 define internal i64 @add64BitSigned(i64 %a, i64 %b) { 129 define internal i64 @add64BitSigned(i64 %a, i64 %b) {
133 entry: 130 entry:
134 %add = add i64 %b, %a 131 %add = add i64 %b, %a
135 ret i64 %add 132 ret i64 %add
136 } 133 }
137 ; CHECK-LABEL: add64BitSigned 134 ; CHECK-LABEL: add64BitSigned
138 ; CHECK: add 135 ; CHECK: add
139 ; CHECK: adc 136 ; CHECK: adc
140 ; 137 ;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 ; OPTM1: mul 215 ; OPTM1: mul
219 ; OPTM1: add 216 ; OPTM1: add
220 ; OPTM1: add 217 ; OPTM1: add
221 218
222 define internal i64 @div64BitSigned(i64 %a, i64 %b) { 219 define internal i64 @div64BitSigned(i64 %a, i64 %b) {
223 entry: 220 entry:
224 %div = sdiv i64 %a, %b 221 %div = sdiv i64 %a, %b
225 ret i64 %div 222 ret i64 %div
226 } 223 }
227 ; CHECK-LABEL: div64BitSigned 224 ; CHECK-LABEL: div64BitSigned
228 ; CHECK: call __divdi3 225 ; CHECK: call {{.*}} R_{{.*}} __divdi3
229 226
230 ; OPTM1-LABEL: div64BitSigned 227 ; OPTM1-LABEL: div64BitSigned
231 ; OPTM1: call __divdi3 228 ; OPTM1: call {{.*}} R_{{.*}} __divdi3
232 229
233 define internal i64 @div64BitSignedConst(i64 %a) { 230 define internal i64 @div64BitSignedConst(i64 %a) {
234 entry: 231 entry:
235 %div = sdiv i64 %a, 12345678901234 232 %div = sdiv i64 %a, 12345678901234
236 ret i64 %div 233 ret i64 %div
237 } 234 }
238 ; CHECK-LABEL: div64BitSignedConst 235 ; CHECK-LABEL: div64BitSignedConst
239 ; CHECK: mov dword ptr [esp + 12], 2874 236 ; CHECK: mov DWORD PTR [esp+0xc],0xb3a
240 ; CHECK: mov dword ptr [esp + 8], 1942892530 237 ; CHECK: mov DWORD PTR [esp+0x8],0x73ce2ff2
241 ; CHECK: call __divdi3 238 ; CHECK: call {{.*}} R_{{.*}} __divdi3
242 ; 239 ;
243 ; OPTM1-LABEL: div64BitSignedConst 240 ; OPTM1-LABEL: div64BitSignedConst
244 ; OPTM1: mov dword ptr [esp + 12], 2874 241 ; OPTM1: mov DWORD PTR [esp+0xc],0xb3a
245 ; OPTM1: mov dword ptr [esp + 8], 1942892530 242 ; OPTM1: mov DWORD PTR [esp+0x8],0x73ce2ff2
246 ; OPTM1: call __divdi3 243 ; OPTM1: call {{.*}} R_{{.*}} __divdi3
247 244
248 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) { 245 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) {
249 entry: 246 entry:
250 %div = udiv i64 %a, %b 247 %div = udiv i64 %a, %b
251 ret i64 %div 248 ret i64 %div
252 } 249 }
253 ; CHECK-LABEL: div64BitUnsigned 250 ; CHECK-LABEL: div64BitUnsigned
254 ; CHECK: call __udivdi3 251 ; CHECK: call {{.*}} R_{{.*}} __udivdi3
255 ; 252 ;
256 ; OPTM1-LABEL: div64BitUnsigned 253 ; OPTM1-LABEL: div64BitUnsigned
257 ; OPTM1: call __udivdi3 254 ; OPTM1: call {{.*}} R_{{.*}} __udivdi3
258 255
259 define internal i64 @rem64BitSigned(i64 %a, i64 %b) { 256 define internal i64 @rem64BitSigned(i64 %a, i64 %b) {
260 entry: 257 entry:
261 %rem = srem i64 %a, %b 258 %rem = srem i64 %a, %b
262 ret i64 %rem 259 ret i64 %rem
263 } 260 }
264 ; CHECK-LABEL: rem64BitSigned 261 ; CHECK-LABEL: rem64BitSigned
265 ; CHECK: call __moddi3 262 ; CHECK: call {{.*}} R_{{.*}} __moddi3
266 ; 263 ;
267 ; OPTM1-LABEL: rem64BitSigned 264 ; OPTM1-LABEL: rem64BitSigned
268 ; OPTM1: call __moddi3 265 ; OPTM1: call {{.*}} R_{{.*}} __moddi3
269 266
270 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) { 267 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) {
271 entry: 268 entry:
272 %rem = urem i64 %a, %b 269 %rem = urem i64 %a, %b
273 ret i64 %rem 270 ret i64 %rem
274 } 271 }
275 ; CHECK-LABEL: rem64BitUnsigned 272 ; CHECK-LABEL: rem64BitUnsigned
276 ; CHECK: call __umoddi3 273 ; CHECK: call {{.*}} R_{{.*}} __umoddi3
277 ; 274 ;
278 ; OPTM1-LABEL: rem64BitUnsigned 275 ; OPTM1-LABEL: rem64BitUnsigned
279 ; OPTM1: call __umoddi3 276 ; OPTM1: call {{.*}} R_{{.*}} __umoddi3
280 277
281 define internal i64 @shl64BitSigned(i64 %a, i64 %b) { 278 define internal i64 @shl64BitSigned(i64 %a, i64 %b) {
282 entry: 279 entry:
283 %shl = shl i64 %a, %b 280 %shl = shl i64 %a, %b
284 ret i64 %shl 281 ret i64 %shl
285 } 282 }
286 ; CHECK-LABEL: shl64BitSigned 283 ; CHECK-LABEL: shl64BitSigned
287 ; CHECK: shld 284 ; CHECK: shld
288 ; CHECK: shl e 285 ; CHECK: shl e
289 ; CHECK: test {{.*}}, 32 286 ; CHECK: test {{.*}},0x20
290 ; CHECK: je 287 ; CHECK: je
291 ; 288 ;
292 ; OPTM1-LABEL: shl64BitSigned 289 ; OPTM1-LABEL: shl64BitSigned
293 ; OPTM1: shld 290 ; OPTM1: shld
294 ; OPTM1: shl e 291 ; OPTM1: shl e
295 ; OPTM1: test {{.*}}, 32 292 ; OPTM1: test {{.*}},0x20
296 ; OPTM1: je 293 ; OPTM1: je
297 294
298 define internal i32 @shl64BitSignedTrunc(i64 %a, i64 %b) { 295 define internal i32 @shl64BitSignedTrunc(i64 %a, i64 %b) {
299 entry: 296 entry:
300 %shl = shl i64 %a, %b 297 %shl = shl i64 %a, %b
301 %result = trunc i64 %shl to i32 298 %result = trunc i64 %shl to i32
302 ret i32 %result 299 ret i32 %result
303 } 300 }
304 ; CHECK-LABEL: shl64BitSignedTrunc 301 ; CHECK-LABEL: shl64BitSignedTrunc
305 ; CHECK: mov 302 ; CHECK: mov
306 ; CHECK: shl e 303 ; CHECK: shl e
307 ; CHECK: test {{.*}}, 32 304 ; CHECK: test {{.*}},0x20
308 ; CHECK: je 305 ; CHECK: je
309 ; 306 ;
310 ; OPTM1-LABEL: shl64BitSignedTrunc 307 ; OPTM1-LABEL: shl64BitSignedTrunc
311 ; OPTM1: shld 308 ; OPTM1: shld
312 ; OPTM1: shl e 309 ; OPTM1: shl e
313 ; OPTM1: test {{.*}}, 32 310 ; OPTM1: test {{.*}},0x20
314 ; OPTM1: je 311 ; OPTM1: je
315 312
316 define internal i64 @shl64BitUnsigned(i64 %a, i64 %b) { 313 define internal i64 @shl64BitUnsigned(i64 %a, i64 %b) {
317 entry: 314 entry:
318 %shl = shl i64 %a, %b 315 %shl = shl i64 %a, %b
319 ret i64 %shl 316 ret i64 %shl
320 } 317 }
321 ; CHECK-LABEL: shl64BitUnsigned 318 ; CHECK-LABEL: shl64BitUnsigned
322 ; CHECK: shld 319 ; CHECK: shld
323 ; CHECK: shl e 320 ; CHECK: shl e
324 ; CHECK: test {{.*}}, 32 321 ; CHECK: test {{.*}},0x20
325 ; CHECK: je 322 ; CHECK: je
326 ; 323 ;
327 ; OPTM1-LABEL: shl64BitUnsigned 324 ; OPTM1-LABEL: shl64BitUnsigned
328 ; OPTM1: shld 325 ; OPTM1: shld
329 ; OPTM1: shl e 326 ; OPTM1: shl e
330 ; OPTM1: test {{.*}}, 32 327 ; OPTM1: test {{.*}},0x20
331 ; OPTM1: je 328 ; OPTM1: je
332 329
333 define internal i64 @shr64BitSigned(i64 %a, i64 %b) { 330 define internal i64 @shr64BitSigned(i64 %a, i64 %b) {
334 entry: 331 entry:
335 %shr = ashr i64 %a, %b 332 %shr = ashr i64 %a, %b
336 ret i64 %shr 333 ret i64 %shr
337 } 334 }
338 ; CHECK-LABEL: shr64BitSigned 335 ; CHECK-LABEL: shr64BitSigned
339 ; CHECK: shrd 336 ; CHECK: shrd
340 ; CHECK: sar 337 ; CHECK: sar
341 ; CHECK: test {{.*}}, 32 338 ; CHECK: test {{.*}},0x20
342 ; CHECK: je 339 ; CHECK: je
343 ; CHECK: sar {{.*}}, 31 340 ; CHECK: sar {{.*}},0x1f
344 ; 341 ;
345 ; OPTM1-LABEL: shr64BitSigned 342 ; OPTM1-LABEL: shr64BitSigned
346 ; OPTM1: shrd 343 ; OPTM1: shrd
347 ; OPTM1: sar 344 ; OPTM1: sar
348 ; OPTM1: test {{.*}}, 32 345 ; OPTM1: test {{.*}},0x20
349 ; OPTM1: je 346 ; OPTM1: je
350 ; OPTM1: sar {{.*}}, 31 347 ; OPTM1: sar {{.*}},0x1f
351 348
352 define internal i32 @shr64BitSignedTrunc(i64 %a, i64 %b) { 349 define internal i32 @shr64BitSignedTrunc(i64 %a, i64 %b) {
353 entry: 350 entry:
354 %shr = ashr i64 %a, %b 351 %shr = ashr i64 %a, %b
355 %result = trunc i64 %shr to i32 352 %result = trunc i64 %shr to i32
356 ret i32 %result 353 ret i32 %result
357 } 354 }
358 ; CHECK-LABEL: shr64BitSignedTrunc 355 ; CHECK-LABEL: shr64BitSignedTrunc
359 ; CHECK: shrd 356 ; CHECK: shrd
360 ; CHECK: sar 357 ; CHECK: sar
361 ; CHECK: test {{.*}}, 32 358 ; CHECK: test {{.*}},0x20
362 ; CHECK: je 359 ; CHECK: je
363 ; 360 ;
364 ; OPTM1-LABEL: shr64BitSignedTrunc 361 ; OPTM1-LABEL: shr64BitSignedTrunc
365 ; OPTM1: shrd 362 ; OPTM1: shrd
366 ; OPTM1: sar 363 ; OPTM1: sar
367 ; OPTM1: test {{.*}}, 32 364 ; OPTM1: test {{.*}},0x20
368 ; OPTM1: je 365 ; OPTM1: je
369 ; OPTM1: sar {{.*}}, 31 366 ; OPTM1: sar {{.*}},0x1f
370 367
371 define internal i64 @shr64BitUnsigned(i64 %a, i64 %b) { 368 define internal i64 @shr64BitUnsigned(i64 %a, i64 %b) {
372 entry: 369 entry:
373 %shr = lshr i64 %a, %b 370 %shr = lshr i64 %a, %b
374 ret i64 %shr 371 ret i64 %shr
375 } 372 }
376 ; CHECK-LABEL: shr64BitUnsigned 373 ; CHECK-LABEL: shr64BitUnsigned
377 ; CHECK: shrd 374 ; CHECK: shrd
378 ; CHECK: shr 375 ; CHECK: shr
379 ; CHECK: test {{.*}}, 32 376 ; CHECK: test {{.*}},0x20
380 ; CHECK: je 377 ; CHECK: je
381 ; 378 ;
382 ; OPTM1-LABEL: shr64BitUnsigned 379 ; OPTM1-LABEL: shr64BitUnsigned
383 ; OPTM1: shrd 380 ; OPTM1: shrd
384 ; OPTM1: shr 381 ; OPTM1: shr
385 ; OPTM1: test {{.*}}, 32 382 ; OPTM1: test {{.*}},0x20
386 ; OPTM1: je 383 ; OPTM1: je
387 384
388 define internal i32 @shr64BitUnsignedTrunc(i64 %a, i64 %b) { 385 define internal i32 @shr64BitUnsignedTrunc(i64 %a, i64 %b) {
389 entry: 386 entry:
390 %shr = lshr i64 %a, %b 387 %shr = lshr i64 %a, %b
391 %result = trunc i64 %shr to i32 388 %result = trunc i64 %shr to i32
392 ret i32 %result 389 ret i32 %result
393 } 390 }
394 ; CHECK-LABEL: shr64BitUnsignedTrunc 391 ; CHECK-LABEL: shr64BitUnsignedTrunc
395 ; CHECK: shrd 392 ; CHECK: shrd
396 ; CHECK: shr 393 ; CHECK: shr
397 ; CHECK: test {{.*}}, 32 394 ; CHECK: test {{.*}},0x20
398 ; CHECK: je 395 ; CHECK: je
399 ; 396 ;
400 ; OPTM1-LABEL: shr64BitUnsignedTrunc 397 ; OPTM1-LABEL: shr64BitUnsignedTrunc
401 ; OPTM1: shrd 398 ; OPTM1: shrd
402 ; OPTM1: shr 399 ; OPTM1: shr
403 ; OPTM1: test {{.*}}, 32 400 ; OPTM1: test {{.*}},0x20
404 ; OPTM1: je 401 ; OPTM1: je
405 402
406 define internal i64 @and64BitSigned(i64 %a, i64 %b) { 403 define internal i64 @and64BitSigned(i64 %a, i64 %b) {
407 entry: 404 entry:
408 %and = and i64 %b, %a 405 %and = and i64 %b, %a
409 ret i64 %and 406 ret i64 %and
410 } 407 }
411 ; CHECK-LABEL: and64BitSigned 408 ; CHECK-LABEL: and64BitSigned
412 ; CHECK: and 409 ; CHECK: and
413 ; CHECK: and 410 ; CHECK: and
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 ; OPTM1-LABEL: xor64BitUnsigned 477 ; OPTM1-LABEL: xor64BitUnsigned
481 ; OPTM1: xor 478 ; OPTM1: xor
482 ; OPTM1: xor 479 ; OPTM1: xor
483 480
484 define internal i32 @trunc64To32Signed(i64 %a) { 481 define internal i32 @trunc64To32Signed(i64 %a) {
485 entry: 482 entry:
486 %conv = trunc i64 %a to i32 483 %conv = trunc i64 %a to i32
487 ret i32 %conv 484 ret i32 %conv
488 } 485 }
489 ; CHECK-LABEL: trunc64To32Signed 486 ; CHECK-LABEL: trunc64To32Signed
490 ; CHECK: mov eax, dword ptr [esp + 4] 487 ; CHECK: mov eax,DWORD PTR [esp+0x4]
491 ; 488 ;
492 ; OPTM1-LABEL: trunc64To32Signed 489 ; OPTM1-LABEL: trunc64To32Signed
493 ; OPTM1: mov eax, dword ptr [esp + 490 ; OPTM1: mov eax,DWORD PTR [esp+
494 491
495 define internal i32 @trunc64To16Signed(i64 %a) { 492 define internal i32 @trunc64To16Signed(i64 %a) {
496 entry: 493 entry:
497 %conv = trunc i64 %a to i16 494 %conv = trunc i64 %a to i16
498 %conv.ret_ext = sext i16 %conv to i32 495 %conv.ret_ext = sext i16 %conv to i32
499 ret i32 %conv.ret_ext 496 ret i32 %conv.ret_ext
500 } 497 }
501 ; CHECK-LABEL: trunc64To16Signed 498 ; CHECK-LABEL: trunc64To16Signed
502 ; CHECK: mov eax, dword ptr [esp + 4] 499 ; CHECK: mov eax,DWORD PTR [esp+0x4]
503 ; CHECK-NEXT: movsx eax, ax 500 ; CHECK-NEXT: movsx eax,ax
504 ; 501 ;
505 ; OPTM1-LABEL: trunc64To16Signed 502 ; OPTM1-LABEL: trunc64To16Signed
506 ; OPTM1: mov eax, dword ptr [esp + 503 ; OPTM1: mov eax,DWORD PTR [esp+
507 ; OPTM1: movsx eax, 504 ; OPTM1: movsx eax,
508 505
509 define internal i32 @trunc64To8Signed(i64 %a) { 506 define internal i32 @trunc64To8Signed(i64 %a) {
510 entry: 507 entry:
511 %conv = trunc i64 %a to i8 508 %conv = trunc i64 %a to i8
512 %conv.ret_ext = sext i8 %conv to i32 509 %conv.ret_ext = sext i8 %conv to i32
513 ret i32 %conv.ret_ext 510 ret i32 %conv.ret_ext
514 } 511 }
515 ; CHECK-LABEL: trunc64To8Signed 512 ; CHECK-LABEL: trunc64To8Signed
516 ; CHECK: mov eax, dword ptr [esp + 4] 513 ; CHECK: mov eax,DWORD PTR [esp+0x4]
517 ; CHECK-NEXT: movsx eax, al 514 ; CHECK-NEXT: movsx eax,al
518 ; 515 ;
519 ; OPTM1-LABEL: trunc64To8Signed 516 ; OPTM1-LABEL: trunc64To8Signed
520 ; OPTM1: mov eax, dword ptr [esp + 517 ; OPTM1: mov eax,DWORD PTR [esp+
521 ; OPTM1: movsx eax, 518 ; OPTM1: movsx eax,
522 519
523 define internal i32 @trunc64To32SignedConst() { 520 define internal i32 @trunc64To32SignedConst() {
524 entry: 521 entry:
525 %conv = trunc i64 12345678901234 to i32 522 %conv = trunc i64 12345678901234 to i32
526 ret i32 %conv 523 ret i32 %conv
527 } 524 }
528 ; CHECK-LABEL: trunc64To32SignedConst 525 ; CHECK-LABEL: trunc64To32SignedConst
529 ; CHECK: mov eax, 1942892530 526 ; CHECK: mov eax,0x73ce2ff2
530 ; 527 ;
531 ; OPTM1-LABEL: trunc64To32SignedConst 528 ; OPTM1-LABEL: trunc64To32SignedConst
532 ; OPTM1: mov eax, 1942892530 529 ; OPTM1: mov eax,0x73ce2ff2
533 530
534 define internal i32 @trunc64To16SignedConst() { 531 define internal i32 @trunc64To16SignedConst() {
535 entry: 532 entry:
536 %conv = trunc i64 12345678901234 to i16 533 %conv = trunc i64 12345678901234 to i16
537 %conv.ret_ext = sext i16 %conv to i32 534 %conv.ret_ext = sext i16 %conv to i32
538 ret i32 %conv.ret_ext 535 ret i32 %conv.ret_ext
539 } 536 }
540 ; CHECK-LABEL: trunc64To16SignedConst 537 ; CHECK-LABEL: trunc64To16SignedConst
541 ; CHECK: mov eax, 1942892530 538 ; CHECK: mov eax,0x73ce2ff2
542 ; CHECK: movsx eax, ax 539 ; CHECK: movsx eax,ax
543 ; 540 ;
544 ; OPTM1-LABEL: trunc64To16SignedConst 541 ; OPTM1-LABEL: trunc64To16SignedConst
545 ; OPTM1: mov eax, 1942892530 542 ; OPTM1: mov eax,0x73ce2ff2
546 ; OPTM1: movsx eax, 543 ; OPTM1: movsx eax,
547 544
548 define internal i32 @trunc64To32Unsigned(i64 %a) { 545 define internal i32 @trunc64To32Unsigned(i64 %a) {
549 entry: 546 entry:
550 %conv = trunc i64 %a to i32 547 %conv = trunc i64 %a to i32
551 ret i32 %conv 548 ret i32 %conv
552 } 549 }
553 ; CHECK-LABEL: trunc64To32Unsigned 550 ; CHECK-LABEL: trunc64To32Unsigned
554 ; CHECK: mov eax, dword ptr [esp + 4] 551 ; CHECK: mov eax,DWORD PTR [esp+0x4]
555 ; 552 ;
556 ; OPTM1-LABEL: trunc64To32Unsigned 553 ; OPTM1-LABEL: trunc64To32Unsigned
557 ; OPTM1: mov eax, dword ptr [esp + 554 ; OPTM1: mov eax,DWORD PTR [esp+
558 555
559 define internal i32 @trunc64To16Unsigned(i64 %a) { 556 define internal i32 @trunc64To16Unsigned(i64 %a) {
560 entry: 557 entry:
561 %conv = trunc i64 %a to i16 558 %conv = trunc i64 %a to i16
562 %conv.ret_ext = zext i16 %conv to i32 559 %conv.ret_ext = zext i16 %conv to i32
563 ret i32 %conv.ret_ext 560 ret i32 %conv.ret_ext
564 } 561 }
565 ; CHECK-LABEL: trunc64To16Unsigned 562 ; CHECK-LABEL: trunc64To16Unsigned
566 ; CHECK: mov eax, dword ptr [esp + 4] 563 ; CHECK: mov eax,DWORD PTR [esp+0x4]
567 ; CHECK-NEXT: movzx eax, ax 564 ; CHECK-NEXT: movzx eax,ax
568 ; 565 ;
569 ; OPTM1-LABEL: trunc64To16Unsigned 566 ; OPTM1-LABEL: trunc64To16Unsigned
570 ; OPTM1: mov eax, dword ptr [esp + 567 ; OPTM1: mov eax,DWORD PTR [esp+
571 ; OPTM1: movzx eax, 568 ; OPTM1: movzx eax,
572 569
573 define internal i32 @trunc64To8Unsigned(i64 %a) { 570 define internal i32 @trunc64To8Unsigned(i64 %a) {
574 entry: 571 entry:
575 %conv = trunc i64 %a to i8 572 %conv = trunc i64 %a to i8
576 %conv.ret_ext = zext i8 %conv to i32 573 %conv.ret_ext = zext i8 %conv to i32
577 ret i32 %conv.ret_ext 574 ret i32 %conv.ret_ext
578 } 575 }
579 ; CHECK-LABEL: trunc64To8Unsigned 576 ; CHECK-LABEL: trunc64To8Unsigned
580 ; CHECK: mov eax, dword ptr [esp + 4] 577 ; CHECK: mov eax,DWORD PTR [esp+0x4]
581 ; CHECK-NEXT: movzx eax, al 578 ; CHECK-NEXT: movzx eax,al
582 ; 579 ;
583 ; OPTM1-LABEL: trunc64To8Unsigned 580 ; OPTM1-LABEL: trunc64To8Unsigned
584 ; OPTM1: mov eax, dword ptr [esp + 581 ; OPTM1: mov eax,DWORD PTR [esp+
585 ; OPTM1: movzx eax, 582 ; OPTM1: movzx eax,
586 583
587 define internal i32 @trunc64To1(i64 %a) { 584 define internal i32 @trunc64To1(i64 %a) {
588 entry: 585 entry:
589 ; %tobool = icmp ne i64 %a, 0 586 ; %tobool = icmp ne i64 %a, 0
590 %tobool = trunc i64 %a to i1 587 %tobool = trunc i64 %a to i1
591 %tobool.ret_ext = zext i1 %tobool to i32 588 %tobool.ret_ext = zext i1 %tobool to i32
592 ret i32 %tobool.ret_ext 589 ret i32 %tobool.ret_ext
593 } 590 }
594 ; CHECK-LABEL: trunc64To1 591 ; CHECK-LABEL: trunc64To1
595 ; CHECK: mov eax, dword ptr [esp + 4] 592 ; CHECK: mov eax,DWORD PTR [esp+0x4]
596 ; CHECK: and eax, 1 593 ; CHECK: and eax,0x1
597 ; CHECK: and eax, 1 594 ; CHECK: and eax,0x1
598 ; 595 ;
599 ; OPTM1-LABEL: trunc64To1 596 ; OPTM1-LABEL: trunc64To1
600 ; OPTM1: mov eax, dword ptr [esp + 597 ; OPTM1: mov eax,DWORD PTR [esp+
601 ; OPTM1: and eax, 1 598 ; OPTM1: and eax,0x1
602 ; OPTM1: and eax, 1 599 ; OPTM1: and eax,0x1
603 600
604 define internal i64 @sext32To64(i32 %a) { 601 define internal i64 @sext32To64(i32 %a) {
605 entry: 602 entry:
606 %conv = sext i32 %a to i64 603 %conv = sext i32 %a to i64
607 ret i64 %conv 604 ret i64 %conv
608 } 605 }
609 ; CHECK-LABEL: sext32To64 606 ; CHECK-LABEL: sext32To64
610 ; CHECK: mov 607 ; CHECK: mov
611 ; CHECK: sar {{.*}}, 31 608 ; CHECK: sar {{.*}},0x1f
612 ; 609 ;
613 ; OPTM1-LABEL: sext32To64 610 ; OPTM1-LABEL: sext32To64
614 ; OPTM1: mov 611 ; OPTM1: mov
615 ; OPTM1: sar {{.*}}, 31 612 ; OPTM1: sar {{.*}},0x1f
616 613
617 define internal i64 @sext16To64(i32 %a) { 614 define internal i64 @sext16To64(i32 %a) {
618 entry: 615 entry:
619 %a.arg_trunc = trunc i32 %a to i16 616 %a.arg_trunc = trunc i32 %a to i16
620 %conv = sext i16 %a.arg_trunc to i64 617 %conv = sext i16 %a.arg_trunc to i64
621 ret i64 %conv 618 ret i64 %conv
622 } 619 }
623 ; CHECK-LABEL: sext16To64 620 ; CHECK-LABEL: sext16To64
624 ; CHECK: movsx 621 ; CHECK: movsx
625 ; CHECK: sar {{.*}}, 31 622 ; CHECK: sar {{.*}},0x1f
626 ; 623 ;
627 ; OPTM1-LABEL: sext16To64 624 ; OPTM1-LABEL: sext16To64
628 ; OPTM1: movsx 625 ; OPTM1: movsx
629 ; OPTM1: sar {{.*}}, 31 626 ; OPTM1: sar {{.*}},0x1f
630 627
631 define internal i64 @sext8To64(i32 %a) { 628 define internal i64 @sext8To64(i32 %a) {
632 entry: 629 entry:
633 %a.arg_trunc = trunc i32 %a to i8 630 %a.arg_trunc = trunc i32 %a to i8
634 %conv = sext i8 %a.arg_trunc to i64 631 %conv = sext i8 %a.arg_trunc to i64
635 ret i64 %conv 632 ret i64 %conv
636 } 633 }
637 ; CHECK-LABEL: sext8To64 634 ; CHECK-LABEL: sext8To64
638 ; CHECK: movsx 635 ; CHECK: movsx
639 ; CHECK: sar {{.*}}, 31 636 ; CHECK: sar {{.*}},0x1f
640 ; 637 ;
641 ; OPTM1-LABEL: sext8To64 638 ; OPTM1-LABEL: sext8To64
642 ; OPTM1: movsx 639 ; OPTM1: movsx
643 ; OPTM1: sar {{.*}}, 31 640 ; OPTM1: sar {{.*}},0x1f
644 641
645 define internal i64 @sext1To64(i32 %a) { 642 define internal i64 @sext1To64(i32 %a) {
646 entry: 643 entry:
647 %a.arg_trunc = trunc i32 %a to i1 644 %a.arg_trunc = trunc i32 %a to i1
648 %conv = sext i1 %a.arg_trunc to i64 645 %conv = sext i1 %a.arg_trunc to i64
649 ret i64 %conv 646 ret i64 %conv
650 } 647 }
651 ; CHECK-LABEL: sext1To64 648 ; CHECK-LABEL: sext1To64
652 ; CHECK: mov 649 ; CHECK: mov
653 ; CHECK: shl {{.*}}, 31 650 ; CHECK: shl {{.*}},0x1f
654 ; CHECK: sar {{.*}}, 31 651 ; CHECK: sar {{.*}},0x1f
655 ; 652 ;
656 ; OPTM1-LABEL: sext1To64 653 ; OPTM1-LABEL: sext1To64
657 ; OPTM1: mov 654 ; OPTM1: mov
658 ; OPTM1: shl {{.*}}, 31 655 ; OPTM1: shl {{.*}},0x1f
659 ; OPTM1: sar {{.*}}, 31 656 ; OPTM1: sar {{.*}},0x1f
660 657
661 define internal i64 @zext32To64(i32 %a) { 658 define internal i64 @zext32To64(i32 %a) {
662 entry: 659 entry:
663 %conv = zext i32 %a to i64 660 %conv = zext i32 %a to i64
664 ret i64 %conv 661 ret i64 %conv
665 } 662 }
666 ; CHECK-LABEL: zext32To64 663 ; CHECK-LABEL: zext32To64
667 ; CHECK: mov 664 ; CHECK: mov
668 ; CHECK: mov {{.*}}, 0 665 ; CHECK: mov {{.*}},0x0
669 ; 666 ;
670 ; OPTM1-LABEL: zext32To64 667 ; OPTM1-LABEL: zext32To64
671 ; OPTM1: mov 668 ; OPTM1: mov
672 ; OPTM1: mov {{.*}}, 0 669 ; OPTM1: mov {{.*}},0x0
673 670
674 define internal i64 @zext16To64(i32 %a) { 671 define internal i64 @zext16To64(i32 %a) {
675 entry: 672 entry:
676 %a.arg_trunc = trunc i32 %a to i16 673 %a.arg_trunc = trunc i32 %a to i16
677 %conv = zext i16 %a.arg_trunc to i64 674 %conv = zext i16 %a.arg_trunc to i64
678 ret i64 %conv 675 ret i64 %conv
679 } 676 }
680 ; CHECK-LABEL: zext16To64 677 ; CHECK-LABEL: zext16To64
681 ; CHECK: movzx 678 ; CHECK: movzx
682 ; CHECK: mov {{.*}}, 0 679 ; CHECK: mov {{.*}},0x0
683 ; 680 ;
684 ; OPTM1-LABEL: zext16To64 681 ; OPTM1-LABEL: zext16To64
685 ; OPTM1: movzx 682 ; OPTM1: movzx
686 ; OPTM1: mov {{.*}}, 0 683 ; OPTM1: mov {{.*}},0x0
687 684
688 define internal i64 @zext8To64(i32 %a) { 685 define internal i64 @zext8To64(i32 %a) {
689 entry: 686 entry:
690 %a.arg_trunc = trunc i32 %a to i8 687 %a.arg_trunc = trunc i32 %a to i8
691 %conv = zext i8 %a.arg_trunc to i64 688 %conv = zext i8 %a.arg_trunc to i64
692 ret i64 %conv 689 ret i64 %conv
693 } 690 }
694 ; CHECK-LABEL: zext8To64 691 ; CHECK-LABEL: zext8To64
695 ; CHECK: movzx 692 ; CHECK: movzx
696 ; CHECK: mov {{.*}}, 0 693 ; CHECK: mov {{.*}},0x0
697 ; 694 ;
698 ; OPTM1-LABEL: zext8To64 695 ; OPTM1-LABEL: zext8To64
699 ; OPTM1: movzx 696 ; OPTM1: movzx
700 ; OPTM1: mov {{.*}}, 0 697 ; OPTM1: mov {{.*}},0x0
701 698
702 define internal i64 @zext1To64(i32 %a) { 699 define internal i64 @zext1To64(i32 %a) {
703 entry: 700 entry:
704 %a.arg_trunc = trunc i32 %a to i1 701 %a.arg_trunc = trunc i32 %a to i1
705 %conv = zext i1 %a.arg_trunc to i64 702 %conv = zext i1 %a.arg_trunc to i64
706 ret i64 %conv 703 ret i64 %conv
707 } 704 }
708 ; CHECK-LABEL: zext1To64 705 ; CHECK-LABEL: zext1To64
709 ; CHECK: and {{.*}}, 1 706 ; CHECK: and {{.*}},0x1
710 ; CHECK: mov {{.*}}, 0 707 ; CHECK: mov {{.*}},0x0
711 ; 708 ;
712 ; OPTM1-LABEL: zext1To64 709 ; OPTM1-LABEL: zext1To64
713 ; OPTM1: and {{.*}}, 1 710 ; OPTM1: and {{.*}},0x1
714 ; OPTM1: mov {{.*}}, 0 711 ; OPTM1: mov {{.*}},0x0
715 712
716 define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) { 713 define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) {
717 entry: 714 entry:
718 %cmp = icmp eq i64 %a, %b 715 %cmp = icmp eq i64 %a, %b
719 br i1 %cmp, label %if.then, label %if.end 716 br i1 %cmp, label %if.then, label %if.end
720 717
721 if.then: ; preds = %entry 718 if.then: ; preds = %entry
722 call void @func() 719 call void @func()
723 br label %if.end 720 br label %if.end
724 721
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 ; OPTM1: cmp 1132 ; OPTM1: cmp
1136 ; OPTM1: jbe 1133 ; OPTM1: jbe
1137 1134
1138 define internal i64 @load64(i32 %a) { 1135 define internal i64 @load64(i32 %a) {
1139 entry: 1136 entry:
1140 %__1 = inttoptr i32 %a to i64* 1137 %__1 = inttoptr i32 %a to i64*
1141 %v0 = load i64* %__1, align 1 1138 %v0 = load i64* %__1, align 1
1142 ret i64 %v0 1139 ret i64 %v0
1143 } 1140 }
1144 ; CHECK-LABEL: load64 1141 ; CHECK-LABEL: load64
1145 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp + 4] 1142 ; CHECK: mov e[[REGISTER:[a-z]+]],DWORD PTR [esp+0x4]
1146 ; CHECK-NEXT: mov {{.*}}, dword ptr [e[[REGISTER]]] 1143 ; CHECK-NEXT: mov {{.*}},DWORD PTR [e[[REGISTER]]]
1147 ; CHECK-NEXT: mov {{.*}}, dword ptr [e[[REGISTER]] + 4] 1144 ; CHECK-NEXT: mov {{.*}},DWORD PTR [e[[REGISTER]]+0x4]
1148 ; 1145 ;
1149 ; OPTM1-LABEL: load64 1146 ; OPTM1-LABEL: load64
1150 ; OPTM1: mov e{{..}}, dword ptr [e{{..}}] 1147 ; OPTM1: mov e{{..}},DWORD PTR [e{{..}}]
1151 ; OPTM1: mov e{{..}}, dword ptr [e{{..}} + 4] 1148 ; OPTM1: mov e{{..}},DWORD PTR [e{{..}}+0x4]
1152 1149
1153 define internal void @store64(i32 %a, i64 %value) { 1150 define internal void @store64(i32 %a, i64 %value) {
1154 entry: 1151 entry:
1155 %__2 = inttoptr i32 %a to i64* 1152 %__2 = inttoptr i32 %a to i64*
1156 store i64 %value, i64* %__2, align 1 1153 store i64 %value, i64* %__2, align 1
1157 ret void 1154 ret void
1158 } 1155 }
1159 ; CHECK-LABEL: store64 1156 ; CHECK-LABEL: store64
1160 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp + 4] 1157 ; CHECK: mov e[[REGISTER:[a-z]+]],DWORD PTR [esp+0x4]
1161 ; CHECK: mov dword ptr [e[[REGISTER]] + 4], 1158 ; CHECK: mov DWORD PTR [e[[REGISTER]]+0x4],
1162 ; CHECK: mov dword ptr [e[[REGISTER]]], 1159 ; CHECK: mov DWORD PTR [e[[REGISTER]]],
1163 ; 1160 ;
1164 ; OPTM1-LABEL: store64 1161 ; OPTM1-LABEL: store64
1165 ; OPTM1: mov dword ptr [e[[REGISTER:[a-z]+]] + 4], 1162 ; OPTM1: mov DWORD PTR [e[[REGISTER:[a-z]+]]+0x4],
1166 ; OPTM1: mov dword ptr [e[[REGISTER]]], 1163 ; OPTM1: mov DWORD PTR [e[[REGISTER]]],
1167 1164
1168 define internal void @store64Const(i32 %a) { 1165 define internal void @store64Const(i32 %a) {
1169 entry: 1166 entry:
1170 %__1 = inttoptr i32 %a to i64* 1167 %__1 = inttoptr i32 %a to i64*
1171 store i64 -2401053092306725256, i64* %__1, align 1 1168 store i64 -2401053092306725256, i64* %__1, align 1
1172 ret void 1169 ret void
1173 } 1170 }
1174 ; CHECK-LABEL: store64Const 1171 ; CHECK-LABEL: store64Const
1175 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp + 4] 1172 ; CHECK: mov e[[REGISTER:[a-z]+]],DWORD PTR [esp+0x4]
1176 ; CHECK: mov dword ptr [e[[REGISTER]] + 4], 3735928559 1173 ; CHECK: mov DWORD PTR [e[[REGISTER]]+0x4],0xdeadbeef
1177 ; CHECK: mov dword ptr [e[[REGISTER]]], 305419896 1174 ; CHECK: mov DWORD PTR [e[[REGISTER]]],0x12345678
1178 ; 1175 ;
1179 ; OPTM1-LABEL: store64Const 1176 ; OPTM1-LABEL: store64Const
1180 ; OPTM1: mov dword ptr [e[[REGISTER:[a-z]+]] + 4], 3735928559 1177 ; OPTM1: mov DWORD PTR [e[[REGISTER:[a-z]+]]+0x4],0xdeadbeef
1181 ; OPTM1: mov dword ptr [e[[REGISTER]]], 305419896 1178 ; OPTM1: mov DWORD PTR [e[[REGISTER]]],0x12345678
1182 1179
1183 define internal i64 @select64VarVar(i64 %a, i64 %b) { 1180 define internal i64 @select64VarVar(i64 %a, i64 %b) {
1184 entry: 1181 entry:
1185 %cmp = icmp ult i64 %a, %b 1182 %cmp = icmp ult i64 %a, %b
1186 %cond = select i1 %cmp, i64 %a, i64 %b 1183 %cond = select i1 %cmp, i64 %a, i64 %b
1187 ret i64 %cond 1184 ret i64 %cond
1188 } 1185 }
1189 ; CHECK-LABEL: select64VarVar 1186 ; CHECK-LABEL: select64VarVar
1190 ; CHECK: cmp 1187 ; CHECK: cmp
1191 ; CHECK: jb 1188 ; CHECK: jb
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1268 if.then2: ; preds = %if.end 1265 if.then2: ; preds = %if.end
1269 call void @func() 1266 call void @func()
1270 br label %if.end3 1267 br label %if.end3
1271 1268
1272 if.end3: ; preds = %if.then2, %if.end 1269 if.end3: ; preds = %if.then2, %if.end
1273 ret void 1270 ret void
1274 } 1271 }
1275 ; The following checks are not strictly necessary since one of the RUN 1272 ; The following checks are not strictly necessary since one of the RUN
1276 ; lines actually runs the output through the assembler. 1273 ; lines actually runs the output through the assembler.
1277 ; CHECK-LABEL: icmpEq64Imm 1274 ; CHECK-LABEL: icmpEq64Imm
1278 ; CHECK-NOT: cmp {{[0-9]+}}, 1275 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}},
1279 ; OPTM1-LABEL: icmpEq64Imm 1276 ; OPTM1-LABEL: icmpEq64Imm
1280 ; OPTM1-LABEL-NOT: cmp {{[0-9]+}}, 1277 ; OPTM1-LABEL-NOT: cmp 0x{{[0-9a-f]+}},
1281 1278
1282 define internal void @icmpLt64Imm() { 1279 define internal void @icmpLt64Imm() {
1283 entry: 1280 entry:
1284 %cmp = icmp ult i64 123, 234 1281 %cmp = icmp ult i64 123, 234
1285 br i1 %cmp, label %if.then, label %if.end 1282 br i1 %cmp, label %if.then, label %if.end
1286 1283
1287 if.then: ; preds = %entry 1284 if.then: ; preds = %entry
1288 call void @func() 1285 call void @func()
1289 br label %if.end 1286 br label %if.end
1290 1287
1291 if.end: ; preds = %if.then, %entry 1288 if.end: ; preds = %if.then, %entry
1292 %cmp1 = icmp slt i64 345, 456 1289 %cmp1 = icmp slt i64 345, 456
1293 br i1 %cmp1, label %if.then2, label %if.end3 1290 br i1 %cmp1, label %if.then2, label %if.end3
1294 1291
1295 if.then2: ; preds = %if.end 1292 if.then2: ; preds = %if.end
1296 call void @func() 1293 call void @func()
1297 br label %if.end3 1294 br label %if.end3
1298 1295
1299 if.end3: ; preds = %if.then2, %if.end 1296 if.end3: ; preds = %if.then2, %if.end
1300 ret void 1297 ret void
1301 } 1298 }
1302 ; The following checks are not strictly necessary since one of the RUN 1299 ; The following checks are not strictly necessary since one of the RUN
1303 ; lines actually runs the output through the assembler. 1300 ; lines actually runs the output through the assembler.
1304 ; CHECK-LABEL: icmpLt64Imm 1301 ; CHECK-LABEL: icmpLt64Imm
1305 ; CHECK-NOT: cmp {{[0-9]+}}, 1302 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}},
1306 ; OPTM1-LABEL: icmpLt64Imm 1303 ; OPTM1-LABEL: icmpLt64Imm
1307 ; OPTM1-NOT: cmp {{[0-9]+}}, 1304 ; OPTM1-NOT: cmp 0x{{[0-9a-f]+}},
OLDNEW
« no previous file with comments | « tests_lit/lit.cfg ('k') | tests_lit/llvm2ice_tests/8bit.pnacl.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698