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

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

Issue 756543002: Subzero: Fix new issues after the LLVM 3.5 merge. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Also use `llvm-config --system-libs` Created 6 years 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/assembler/x86/immediate_encodings.ll ('k') | tests_lit/llvm2ice_tests/convert.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 ; TODO(jvoung): fix extra "CALLTARGETS" run. The llvm-objdump symbolizer
6 ; doesn't know how to symbolize non-section-local functions.
7 ; The newer LLVM 3.6 one does work, but watch out for other bugs.
8
9 ; RUN: %p2i -i %s --args -O2 --verbose none \
10 ; RUN: | FileCheck --check-prefix=CALLTARGETS %s
11 ; RUN: %p2i -i %s --args -O2 --verbose none \ 5 ; RUN: %p2i -i %s --args -O2 --verbose none \
12 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \ 6 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \
13 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s 7 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
14 ; RUN: %p2i -i %s --args -Om1 --verbose none \ 8 ; RUN: %p2i -i %s --args -Om1 --verbose none \
15 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \ 9 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \
16 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - \ 10 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - \
17 ; RUN: | FileCheck --check-prefix=OPTM1 %s 11 ; RUN: | FileCheck --check-prefix=OPTM1 %s
18 12
19 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 13 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
20 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 14 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
21 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 15 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
22 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 16 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
23 17
24 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) { 18 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) {
25 entry: 19 entry:
26 ret i32 %b 20 ret i32 %b
27 } 21 }
28 22
29 define internal i32 @pass64BitArg(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f ) { 23 define internal i32 @pass64BitArg(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f ) {
30 entry: 24 entry:
31 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 %b) 25 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 %b)
32 %call1 = call i32 @ignore64BitArgNoInline(i64 %c, i32 123, i64 %d) 26 %call1 = call i32 @ignore64BitArgNoInline(i64 %c, i32 123, i64 %d)
33 %call2 = call i32 @ignore64BitArgNoInline(i64 %e, i32 123, i64 %f) 27 %call2 = call i32 @ignore64BitArgNoInline(i64 %e, i32 123, i64 %f)
34 %add = add i32 %call1, %call 28 %add = add i32 %call1, %call
35 %add3 = add i32 %add, %call2 29 %add3 = add i32 %add, %call2
36 ret i32 %add3 30 ret i32 %add3
37 } 31 }
38 ; CHECK-LABEL: pass64BitArg 32 ; CHECK-LABEL: pass64BitArg
39 ; CALLTARGETS-LABEL: pass64BitArg
40 ; CHECK: sub esp 33 ; CHECK: sub esp
41 ; CHECK: mov dword ptr [esp + 4] 34 ; CHECK: mov dword ptr [esp + 4]
42 ; CHECK: mov dword ptr [esp] 35 ; CHECK: mov dword ptr [esp]
43 ; CHECK: mov dword ptr [esp + 8], 123 36 ; CHECK: mov dword ptr [esp + 8], 123
44 ; CHECK: mov dword ptr [esp + 16] 37 ; CHECK: mov dword ptr [esp + 16]
45 ; CHECK: mov dword ptr [esp + 12] 38 ; CHECK: mov dword ptr [esp + 12]
46 ; CHECK: call -4 39 ; CHECK: call ignore64BitArgNoInline
47 ; CALLTARGETS: .long ignore64BitArgNoInline
48 ; CHECK: sub esp 40 ; CHECK: sub esp
49 ; CHECK: mov dword ptr [esp + 4] 41 ; CHECK: mov dword ptr [esp + 4]
50 ; CHECK: mov dword ptr [esp] 42 ; CHECK: mov dword ptr [esp]
51 ; CHECK: mov dword ptr [esp + 8], 123 43 ; CHECK: mov dword ptr [esp + 8], 123
52 ; CHECK: mov dword ptr [esp + 16] 44 ; CHECK: mov dword ptr [esp + 16]
53 ; CHECK: mov dword ptr [esp + 12] 45 ; CHECK: mov dword ptr [esp + 12]
54 ; CHECK: call -4 46 ; CHECK: call ignore64BitArgNoInline
55 ; CALLTARGETS: .long ignore64BitArgNoInline
56 ; CHECK: sub esp 47 ; CHECK: sub esp
57 ; CHECK: mov dword ptr [esp + 4] 48 ; CHECK: mov dword ptr [esp + 4]
58 ; CHECK: mov dword ptr [esp] 49 ; CHECK: mov dword ptr [esp]
59 ; CHECK: mov dword ptr [esp + 8], 123 50 ; CHECK: mov dword ptr [esp + 8], 123
60 ; CHECK: mov dword ptr [esp + 16] 51 ; CHECK: mov dword ptr [esp + 16]
61 ; CHECK: mov dword ptr [esp + 12] 52 ; CHECK: mov dword ptr [esp + 12]
62 ; CHECK: call -4 53 ; CHECK: call ignore64BitArgNoInline
63 ; CALLTARGETS: .long ignore64BitArgNoInline
64 ; 54 ;
65 ; OPTM1-LABEL: pass64BitArg 55 ; OPTM1-LABEL: pass64BitArg
66 ; OPTM1: sub esp 56 ; OPTM1: sub esp
67 ; OPTM1: mov dword ptr [esp + 4] 57 ; OPTM1: mov dword ptr [esp + 4]
68 ; OPTM1: mov dword ptr [esp] 58 ; OPTM1: mov dword ptr [esp]
69 ; OPTM1: mov dword ptr [esp + 8], 123 59 ; OPTM1: mov dword ptr [esp + 8], 123
70 ; OPTM1: mov dword ptr [esp + 16] 60 ; OPTM1: mov dword ptr [esp + 16]
71 ; OPTM1: mov dword ptr [esp + 12] 61 ; OPTM1: mov dword ptr [esp + 12]
72 ; OPTM1: call -4 62 ; OPTM1: call ignore64BitArgNoInline
73 ; OPTM1: sub esp 63 ; OPTM1: sub esp
74 ; OPTM1: mov dword ptr [esp + 4] 64 ; OPTM1: mov dword ptr [esp + 4]
75 ; OPTM1: mov dword ptr [esp] 65 ; OPTM1: mov dword ptr [esp]
76 ; OPTM1: mov dword ptr [esp + 8], 123 66 ; OPTM1: mov dword ptr [esp + 8], 123
77 ; OPTM1: mov dword ptr [esp + 16] 67 ; OPTM1: mov dword ptr [esp + 16]
78 ; OPTM1: mov dword ptr [esp + 12] 68 ; OPTM1: mov dword ptr [esp + 12]
79 ; OPTM1: call -4 69 ; OPTM1: call ignore64BitArgNoInline
80 ; OPTM1: sub esp 70 ; OPTM1: sub esp
81 ; OPTM1: mov dword ptr [esp + 4] 71 ; OPTM1: mov dword ptr [esp + 4]
82 ; OPTM1: mov dword ptr [esp] 72 ; OPTM1: mov dword ptr [esp]
83 ; OPTM1: mov dword ptr [esp + 8], 123 73 ; OPTM1: mov dword ptr [esp + 8], 123
84 ; OPTM1: mov dword ptr [esp + 16] 74 ; OPTM1: mov dword ptr [esp + 16]
85 ; OPTM1: mov dword ptr [esp + 12] 75 ; OPTM1: mov dword ptr [esp + 12]
86 ; OPTM1: call -4 76 ; OPTM1: call ignore64BitArgNoInline
87 77
88 declare i32 @ignore64BitArgNoInline(i64, i32, i64) 78 declare i32 @ignore64BitArgNoInline(i64, i32, i64)
89 79
90 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) { 80 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) {
91 entry: 81 entry:
92 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 -240105309230672 5256) 82 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 -240105309230672 5256)
93 ret i32 %call 83 ret i32 %call
94 } 84 }
95 ; CHECK-LABEL: pass64BitConstArg 85 ; CHECK-LABEL: pass64BitConstArg
96 ; CALLTARGETS-LABEL: pass64BitConstArg
97 ; CHECK: sub esp 86 ; CHECK: sub esp
98 ; CHECK: mov dword ptr [esp + 4] 87 ; CHECK: mov dword ptr [esp + 4]
99 ; CHECK-NEXT: mov dword ptr [esp] 88 ; CHECK-NEXT: mov dword ptr [esp]
100 ; CHECK-NEXT: mov dword ptr [esp + 8], 123 89 ; CHECK-NEXT: mov dword ptr [esp + 8], 123
101 ; Bundle padding might be added (so not using -NEXT). 90 ; Bundle padding might be added (so not using -NEXT).
102 ; CHECK: mov dword ptr [esp + 16], 3735928559 91 ; CHECK: mov dword ptr [esp + 16], 3735928559
103 ; CHECK-NEXT: mov dword ptr [esp + 12], 305419896 92 ; CHECK-NEXT: mov dword ptr [esp + 12], 305419896
104 ; Bundle padding will push the call down. 93 ; Bundle padding will push the call down.
105 ; CHECK-NOT: mov 94 ; CHECK-NOT: mov
106 ; CHECK: call -4 95 ; CHECK: call ignore64BitArgNoInline
107 ; CALLTARGETS: .long ignore64BitArgNoInline
108 ; 96 ;
109 ; OPTM1-LABEL: pass64BitConstArg 97 ; OPTM1-LABEL: pass64BitConstArg
110 ; OPTM1: sub esp 98 ; OPTM1: sub esp
111 ; OPTM1: mov dword ptr [esp + 4] 99 ; OPTM1: mov dword ptr [esp + 4]
112 ; OPTM1-NEXT: mov dword ptr [esp] 100 ; OPTM1-NEXT: mov dword ptr [esp]
113 ; OPTM1-NEXT: mov dword ptr [esp + 8], 123 101 ; OPTM1-NEXT: mov dword ptr [esp + 8], 123
114 ; Bundle padding might be added (so not using -NEXT). 102 ; Bundle padding might be added (so not using -NEXT).
115 ; OPTM1: mov dword ptr [esp + 16], 3735928559 103 ; OPTM1: mov dword ptr [esp + 16], 3735928559
116 ; OPTM1-NEXT: mov dword ptr [esp + 12], 305419896 104 ; OPTM1-NEXT: mov dword ptr [esp + 12], 305419896
117 ; OPTM1-NOT: mov 105 ; OPTM1-NOT: mov
118 ; OPTM1: call -4 106 ; OPTM1: call ignore64BitArgNoInline
119 107
120 define internal i64 @return64BitArg(i64 %a) { 108 define internal i64 @return64BitArg(i64 %a) {
121 entry: 109 entry:
122 ret i64 %a 110 ret i64 %a
123 } 111 }
124 ; CHECK-LABEL: return64BitArg 112 ; CHECK-LABEL: return64BitArg
125 ; CHECK: mov {{.*}}, dword ptr [esp + 4] 113 ; CHECK: mov {{.*}}, dword ptr [esp + 4]
126 ; CHECK: mov {{.*}}, dword ptr [esp + 8] 114 ; CHECK: mov {{.*}}, dword ptr [esp + 8]
127 ; 115 ;
128 ; OPTM1-LABEL: return64BitArg 116 ; OPTM1-LABEL: return64BitArg
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 ; OPTM1: mul 218 ; OPTM1: mul
231 ; OPTM1: add 219 ; OPTM1: add
232 ; OPTM1: add 220 ; OPTM1: add
233 221
234 define internal i64 @div64BitSigned(i64 %a, i64 %b) { 222 define internal i64 @div64BitSigned(i64 %a, i64 %b) {
235 entry: 223 entry:
236 %div = sdiv i64 %a, %b 224 %div = sdiv i64 %a, %b
237 ret i64 %div 225 ret i64 %div
238 } 226 }
239 ; CHECK-LABEL: div64BitSigned 227 ; CHECK-LABEL: div64BitSigned
240 ; CALLTARGETS-LABEL: div64BitSigned 228 ; CHECK: call __divdi3
241 ; CHECK: call -4
242 ; CALLTARGETS: .long __divdi3
243 229
244 ; OPTM1-LABEL: div64BitSigned 230 ; OPTM1-LABEL: div64BitSigned
245 ; OPTM1: call -4 231 ; OPTM1: call __divdi3
246 232
247 define internal i64 @div64BitSignedConst(i64 %a) { 233 define internal i64 @div64BitSignedConst(i64 %a) {
248 entry: 234 entry:
249 %div = sdiv i64 %a, 12345678901234 235 %div = sdiv i64 %a, 12345678901234
250 ret i64 %div 236 ret i64 %div
251 } 237 }
252 ; CHECK-LABEL: div64BitSignedConst 238 ; CHECK-LABEL: div64BitSignedConst
253 ; CALLTARGETS-LABEL: div64BitSignedConst
254 ; CHECK: mov dword ptr [esp + 12], 2874 239 ; CHECK: mov dword ptr [esp + 12], 2874
255 ; CHECK: mov dword ptr [esp + 8], 1942892530 240 ; CHECK: mov dword ptr [esp + 8], 1942892530
256 ; CHECK: call -4 241 ; CHECK: call __divdi3
257 ; CALLTARGETS: .long __divdi3
258 ; 242 ;
259 ; OPTM1-LABEL: div64BitSignedConst 243 ; OPTM1-LABEL: div64BitSignedConst
260 ; OPTM1: mov dword ptr [esp + 12], 2874 244 ; OPTM1: mov dword ptr [esp + 12], 2874
261 ; OPTM1: mov dword ptr [esp + 8], 1942892530 245 ; OPTM1: mov dword ptr [esp + 8], 1942892530
262 ; OPTM1: call -4 246 ; OPTM1: call __divdi3
263 247
264 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) { 248 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) {
265 entry: 249 entry:
266 %div = udiv i64 %a, %b 250 %div = udiv i64 %a, %b
267 ret i64 %div 251 ret i64 %div
268 } 252 }
269 ; CHECK-LABEL: div64BitUnsigned 253 ; CHECK-LABEL: div64BitUnsigned
270 ; CALLTARGETS-LABEL: div64BitUnsigned 254 ; CHECK: call __udivdi3
271 ; CHECK: call -4
272 ; CALLTARGETS: .long __udivdi3
273 ; 255 ;
274 ; OPTM1-LABEL: div64BitUnsigned 256 ; OPTM1-LABEL: div64BitUnsigned
275 ; OPTM1: call -4 257 ; OPTM1: call __udivdi3
276 258
277 define internal i64 @rem64BitSigned(i64 %a, i64 %b) { 259 define internal i64 @rem64BitSigned(i64 %a, i64 %b) {
278 entry: 260 entry:
279 %rem = srem i64 %a, %b 261 %rem = srem i64 %a, %b
280 ret i64 %rem 262 ret i64 %rem
281 } 263 }
282 ; CHECK-LABEL: rem64BitSigned 264 ; CHECK-LABEL: rem64BitSigned
283 ; CALLTARGETS-LABEL: rem64BitSigned 265 ; CHECK: call __moddi3
284 ; CHECK: call -4
285 ; CALLTARGETS: .long __moddi3
286 ; 266 ;
287 ; OPTM1-LABEL: rem64BitSigned 267 ; OPTM1-LABEL: rem64BitSigned
288 ; OPTM1: call -4 268 ; OPTM1: call __moddi3
289 269
290 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) { 270 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) {
291 entry: 271 entry:
292 %rem = urem i64 %a, %b 272 %rem = urem i64 %a, %b
293 ret i64 %rem 273 ret i64 %rem
294 } 274 }
295 ; CHECK-LABEL: rem64BitUnsigned 275 ; CHECK-LABEL: rem64BitUnsigned
296 ; CALLTARGETS-LABEL: rem64BitUnsigned 276 ; CHECK: call __umoddi3
297 ; CHECK: call -4
298 ; CALLTARGETS: .long __umoddi3
299 ; 277 ;
300 ; OPTM1-LABEL: rem64BitUnsigned 278 ; OPTM1-LABEL: rem64BitUnsigned
301 ; OPTM1: call -4 279 ; OPTM1: call __umoddi3
302 280
303 define internal i64 @shl64BitSigned(i64 %a, i64 %b) { 281 define internal i64 @shl64BitSigned(i64 %a, i64 %b) {
304 entry: 282 entry:
305 %shl = shl i64 %a, %b 283 %shl = shl i64 %a, %b
306 ret i64 %shl 284 ret i64 %shl
307 } 285 }
308 ; CHECK-LABEL: shl64BitSigned 286 ; CHECK-LABEL: shl64BitSigned
309 ; CHECK: shld 287 ; CHECK: shld
310 ; CHECK: shl e 288 ; CHECK: shl e
311 ; CHECK: test {{.*}}, 32 289 ; CHECK: test {{.*}}, 32
(...skipping 1008 matching lines...) Expand 10 before | Expand all | Expand 10 after
1320 1298
1321 if.end3: ; preds = %if.then2, %if.end 1299 if.end3: ; preds = %if.then2, %if.end
1322 ret void 1300 ret void
1323 } 1301 }
1324 ; The following checks are not strictly necessary since one of the RUN 1302 ; The following checks are not strictly necessary since one of the RUN
1325 ; lines actually runs the output through the assembler. 1303 ; lines actually runs the output through the assembler.
1326 ; CHECK-LABEL: icmpLt64Imm 1304 ; CHECK-LABEL: icmpLt64Imm
1327 ; CHECK-NOT: cmp {{[0-9]+}}, 1305 ; CHECK-NOT: cmp {{[0-9]+}},
1328 ; OPTM1-LABEL: icmpLt64Imm 1306 ; OPTM1-LABEL: icmpLt64Imm
1329 ; OPTM1-NOT: cmp {{[0-9]+}}, 1307 ; OPTM1-NOT: cmp {{[0-9]+}},
OLDNEW
« no previous file with comments | « tests_lit/assembler/x86/immediate_encodings.ll ('k') | tests_lit/llvm2ice_tests/convert.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698