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

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

Issue 265703002: Add Om1 lowering with no optimizations (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: Add frem test; add LOWERING.rst file Created 6 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 ; RUIN: %llvm2ice --verbose none %s | FileCheck %s 1 ; This tries to be a comprehensive test of i64 operations, in
2 ; RUIN: %llvm2ice --verbose none %s | FileCheck --check-prefix=ERRORS %s 2 ; particular the patterns for lowering i64 operations into constituent
3 ; i32 operations on x86-32.
4
5 ; RUIN: %llvm2ice -O2 --verbose none %s | FileCheck %s
6 ; RUN: %llvm2ice -Om1 --verbose none %s | FileCheck --check-prefix=OPTM1 %s
7 ; RUN: %llvm2ice --verbose none %s | FileCheck --check-prefix=ERRORS %s
3 ; RUN: %szdiff --llvm2ice=%llvm2ice %s | FileCheck --check-prefix=DUMP %s 8 ; RUN: %szdiff --llvm2ice=%llvm2ice %s | FileCheck --check-prefix=DUMP %s
4 9
5 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 10 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
6 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 11 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
7 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 12 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
8 @__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
9 14
10 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) { 15 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) {
11 entry: 16 entry:
12 ret i32 %b 17 ret i32 %b
(...skipping 18 matching lines...) Expand all
31 ; CHECK-NEXT: push 123 36 ; CHECK-NEXT: push 123
32 ; CHECK-NEXT: push 37 ; CHECK-NEXT: push
33 ; CHECK-NEXT: push 38 ; CHECK-NEXT: push
34 ; CHECK-NEXT: call ignore64BitArgNoInline 39 ; CHECK-NEXT: call ignore64BitArgNoInline
35 ; CHECK: push 40 ; CHECK: push
36 ; CHECK-NEXT: push 41 ; CHECK-NEXT: push
37 ; CHECK-NEXT: push 123 42 ; CHECK-NEXT: push 123
38 ; CHECK-NEXT: push 43 ; CHECK-NEXT: push
39 ; CHECK-NEXT: push 44 ; CHECK-NEXT: push
40 ; CHECK-NEXT: call ignore64BitArgNoInline 45 ; CHECK-NEXT: call ignore64BitArgNoInline
46 ;
47 ; OPTM1: pass64BitArg:
48 ; OPTM1: push 123
49 ; OPTM1-NEXT: push
50 ; OPTM1-NEXT: push
51 ; OPTM1-NEXT: call ignore64BitArgNoInline
52 ; OPTM1: push
53 ; OPTM1-NEXT: push
54 ; OPTM1-NEXT: push 123
55 ; OPTM1-NEXT: push
56 ; OPTM1-NEXT: push
57 ; OPTM1-NEXT: call ignore64BitArgNoInline
58 ; OPTM1: push
59 ; OPTM1-NEXT: push
60 ; OPTM1-NEXT: push 123
61 ; OPTM1-NEXT: push
62 ; OPTM1-NEXT: push
63 ; OPTM1-NEXT: call ignore64BitArgNoInline
41 64
42 declare i32 @ignore64BitArgNoInline(i64, i32, i64) 65 declare i32 @ignore64BitArgNoInline(i64, i32, i64)
43 66
44 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) { 67 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) {
45 entry: 68 entry:
46 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 -240105309230672 5256) 69 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 -240105309230672 5256)
47 ret i32 %call 70 ret i32 %call
48 } 71 }
49 ; CHECK: pass64BitConstArg: 72 ; CHECK: pass64BitConstArg:
50 ; CHECK: push 3735928559 73 ; CHECK: push 3735928559
51 ; CHECK-NEXT: push 305419896 74 ; CHECK-NEXT: push 305419896
52 ; CHECK-NEXT: push 123 75 ; CHECK-NEXT: push 123
53 ; CHECK-NEXT: push ecx 76 ; CHECK-NEXT: push ecx
54 ; CHECK-NEXT: push eax 77 ; CHECK-NEXT: push eax
55 ; CHECK-NEXT: call ignore64BitArgNoInline 78 ; CHECK-NEXT: call ignore64BitArgNoInline
79 ;
80 ; OPTM1: pass64BitConstArg:
81 ; OPTM1: push 3735928559
82 ; OPTM1-NEXT: push 305419896
83 ; OPTM1-NEXT: push 123
84 ; OPTM1-NEXT: push dword ptr [
85 ; OPTM1-NEXT: push dword ptr [
86 ; OPTM1-NEXT: call ignore64BitArgNoInline
56 87
57 define internal i64 @return64BitArg(i64 %a) { 88 define internal i64 @return64BitArg(i64 %a) {
58 entry: 89 entry:
59 ret i64 %a 90 ret i64 %a
60 } 91 }
61 ; CHECK: return64BitArg: 92 ; CHECK: return64BitArg:
62 ; CHECK: mov {{.*}}, dword ptr [esp+4] 93 ; CHECK: mov {{.*}}, dword ptr [esp+4]
63 ; CHECK: mov {{.*}}, dword ptr [esp+8] 94 ; CHECK: mov {{.*}}, dword ptr [esp+8]
64 ; CHECK: ret 95 ; CHECK: ret
96 ;
97 ; OPTM1: return64BitArg:
98 ; OPTM1: mov {{.*}}, dword ptr [esp+4]
99 ; OPTM1: mov {{.*}}, dword ptr [esp+8]
100 ; OPTM1: ret
65 101
66 define internal i64 @return64BitConst() { 102 define internal i64 @return64BitConst() {
67 entry: 103 entry:
68 ret i64 -2401053092306725256 104 ret i64 -2401053092306725256
69 } 105 }
70 ; CHECK: return64BitConst: 106 ; CHECK: return64BitConst:
71 ; CHECK: mov eax, 305419896 107 ; CHECK: mov eax, 305419896
72 ; CHECK: mov edx, 3735928559 108 ; CHECK: mov edx, 3735928559
73 ; CHECK: ret 109 ; CHECK: ret
110 ;
111 ; OPTM1: return64BitConst:
112 ; OPTM1: mov eax, 305419896
113 ; OPTM1: mov edx, 3735928559
114 ; OPTM1: ret
74 115
75 define internal i64 @add64BitSigned(i64 %a, i64 %b) { 116 define internal i64 @add64BitSigned(i64 %a, i64 %b) {
76 entry: 117 entry:
77 %add = add i64 %b, %a 118 %add = add i64 %b, %a
78 ret i64 %add 119 ret i64 %add
79 } 120 }
80 ; CHECK: add64BitSigned: 121 ; CHECK: add64BitSigned:
81 ; CHECK: add 122 ; CHECK: add
82 ; CHECK: adc 123 ; CHECK: adc
83 ; CHECK: ret 124 ; CHECK: ret
125 ;
126 ; OPTM1: add64BitSigned:
127 ; OPTM1: add
128 ; OPTM1: adc
129 ; OPTM1: ret
84 130
85 define internal i64 @add64BitUnsigned(i64 %a, i64 %b) { 131 define internal i64 @add64BitUnsigned(i64 %a, i64 %b) {
86 entry: 132 entry:
87 %add = add i64 %b, %a 133 %add = add i64 %b, %a
88 ret i64 %add 134 ret i64 %add
89 } 135 }
90 ; CHECK: add64BitUnsigned: 136 ; CHECK: add64BitUnsigned:
91 ; CHECK: add 137 ; CHECK: add
92 ; CHECK: adc 138 ; CHECK: adc
93 ; CHECK: ret 139 ; CHECK: ret
140 ;
141 ; OPTM1: add64BitUnsigned:
142 ; OPTM1: add
143 ; OPTM1: adc
144 ; OPTM1: ret
94 145
95 define internal i64 @sub64BitSigned(i64 %a, i64 %b) { 146 define internal i64 @sub64BitSigned(i64 %a, i64 %b) {
96 entry: 147 entry:
97 %sub = sub i64 %a, %b 148 %sub = sub i64 %a, %b
98 ret i64 %sub 149 ret i64 %sub
99 } 150 }
100 ; CHECK: sub64BitSigned: 151 ; CHECK: sub64BitSigned:
101 ; CHECK: sub 152 ; CHECK: sub
102 ; CHECK: sbb 153 ; CHECK: sbb
103 ; CHECK: ret 154 ; CHECK: ret
155 ;
156 ; OPTM1: sub64BitSigned:
157 ; OPTM1: sub
158 ; OPTM1: sbb
159 ; OPTM1: ret
104 160
105 define internal i64 @sub64BitUnsigned(i64 %a, i64 %b) { 161 define internal i64 @sub64BitUnsigned(i64 %a, i64 %b) {
106 entry: 162 entry:
107 %sub = sub i64 %a, %b 163 %sub = sub i64 %a, %b
108 ret i64 %sub 164 ret i64 %sub
109 } 165 }
110 ; CHECK: sub64BitUnsigned: 166 ; CHECK: sub64BitUnsigned:
111 ; CHECK: sub 167 ; CHECK: sub
112 ; CHECK: sbb 168 ; CHECK: sbb
113 ; CHECK: ret 169 ; CHECK: ret
170 ;
171 ; OPTM1: sub64BitUnsigned:
172 ; OPTM1: sub
173 ; OPTM1: sbb
174 ; OPTM1: ret
114 175
115 define internal i64 @mul64BitSigned(i64 %a, i64 %b) { 176 define internal i64 @mul64BitSigned(i64 %a, i64 %b) {
116 entry: 177 entry:
117 %mul = mul i64 %b, %a 178 %mul = mul i64 %b, %a
118 ret i64 %mul 179 ret i64 %mul
119 } 180 }
120 ; CHECK: mul64BitSigned: 181 ; CHECK: mul64BitSigned:
121 ; CHECK: imul 182 ; CHECK: imul
122 ; CHECK: imul 183 ; CHECK: imul
123 ; CHECK: mul 184 ; CHECK: mul
124 ; CHECK: add 185 ; CHECK: add
125 ; CHECK: add 186 ; CHECK: add
126 ; CHECK: ret 187 ; CHECK: ret
188 ;
189 ; OPTM1: mul64BitSigned:
190 ; OPTM1: imul
191 ; OPTM1: imul
192 ; OPTM1: mul
193 ; OPTM1: add
194 ; OPTM1: add
195 ; OPTM1: ret
127 196
128 define internal i64 @mul64BitUnsigned(i64 %a, i64 %b) { 197 define internal i64 @mul64BitUnsigned(i64 %a, i64 %b) {
129 entry: 198 entry:
130 %mul = mul i64 %b, %a 199 %mul = mul i64 %b, %a
131 ret i64 %mul 200 ret i64 %mul
132 } 201 }
133 ; CHECK: mul64BitUnsigned: 202 ; CHECK: mul64BitUnsigned:
134 ; CHECK: imul 203 ; CHECK: imul
135 ; CHECK: imul 204 ; CHECK: imul
136 ; CHECK: mul 205 ; CHECK: mul
137 ; CHECK: add 206 ; CHECK: add
138 ; CHECK: add 207 ; CHECK: add
139 ; CHECK: ret 208 ; CHECK: ret
209 ;
210 ; OPTM1: mul64BitUnsigned:
211 ; OPTM1: imul
212 ; OPTM1: imul
213 ; OPTM1: mul
214 ; OPTM1: add
215 ; OPTM1: add
216 ; OPTM1: ret
140 217
141 define internal i64 @div64BitSigned(i64 %a, i64 %b) { 218 define internal i64 @div64BitSigned(i64 %a, i64 %b) {
142 entry: 219 entry:
143 %div = sdiv i64 %a, %b 220 %div = sdiv i64 %a, %b
144 ret i64 %div 221 ret i64 %div
145 } 222 }
146 ; CHECK: div64BitSigned: 223 ; CHECK: div64BitSigned:
147 ; CHECK: call __divdi3 224 ; CHECK: call __divdi3
148 ; CHECK: ret 225 ; CHECK: ret
226 ;
227 ; OPTM1: div64BitSigned:
228 ; OPTM1: call __divdi3
229 ; OPTM1: ret
149 230
150 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) { 231 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) {
151 entry: 232 entry:
152 %div = udiv i64 %a, %b 233 %div = udiv i64 %a, %b
153 ret i64 %div 234 ret i64 %div
154 } 235 }
155 ; CHECK: div64BitUnsigned: 236 ; CHECK: div64BitUnsigned:
156 ; CHECK: call __udivdi3 237 ; CHECK: call __udivdi3
157 ; CHECK: ret 238 ; CHECK: ret
239 ;
240 ; OPTM1: div64BitUnsigned:
241 ; OPTM1: call __udivdi3
242 ; OPTM1: ret
158 243
159 define internal i64 @rem64BitSigned(i64 %a, i64 %b) { 244 define internal i64 @rem64BitSigned(i64 %a, i64 %b) {
160 entry: 245 entry:
161 %rem = srem i64 %a, %b 246 %rem = srem i64 %a, %b
162 ret i64 %rem 247 ret i64 %rem
163 } 248 }
164 ; CHECK: rem64BitSigned: 249 ; CHECK: rem64BitSigned:
165 ; CHECK: call __moddi3 250 ; CHECK: call __moddi3
166 ; CHECK: ret 251 ; CHECK: ret
252 ;
253 ; OPTM1: rem64BitSigned:
254 ; OPTM1: call __moddi3
255 ; OPTM1: ret
167 256
168 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) { 257 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) {
169 entry: 258 entry:
170 %rem = urem i64 %a, %b 259 %rem = urem i64 %a, %b
171 ret i64 %rem 260 ret i64 %rem
172 } 261 }
173 ; CHECK: rem64BitUnsigned: 262 ; CHECK: rem64BitUnsigned:
174 ; CHECK: call __umoddi3 263 ; CHECK: call __umoddi3
175 ; CHECK: ret 264 ; CHECK: ret
265 ;
266 ; OPTM1: rem64BitUnsigned:
267 ; OPTM1: call __umoddi3
268 ; OPTM1: ret
176 269
177 define internal i64 @shl64BitSigned(i64 %a, i64 %b) { 270 define internal i64 @shl64BitSigned(i64 %a, i64 %b) {
178 entry: 271 entry:
179 %shl = shl i64 %a, %b 272 %shl = shl i64 %a, %b
180 ret i64 %shl 273 ret i64 %shl
181 } 274 }
182 ; CHECK: shl64BitSigned: 275 ; CHECK: shl64BitSigned:
183 ; CHECK: shld 276 ; CHECK: shld
184 ; CHECK: shl e 277 ; CHECK: shl e
185 ; CHECK: test {{.*}}, 32 278 ; CHECK: test {{.*}}, 32
186 ; CHECK: je 279 ; CHECK: je
280 ;
281 ; OPTM1: shl64BitSigned:
282 ; OPTM1: shld
283 ; OPTM1: shl e
284 ; OPTM1: test {{.*}}, 32
285 ; OPTM1: je
187 286
188 define internal i64 @shl64BitUnsigned(i64 %a, i64 %b) { 287 define internal i64 @shl64BitUnsigned(i64 %a, i64 %b) {
189 entry: 288 entry:
190 %shl = shl i64 %a, %b 289 %shl = shl i64 %a, %b
191 ret i64 %shl 290 ret i64 %shl
192 } 291 }
193 ; CHECK: shl64BitUnsigned: 292 ; CHECK: shl64BitUnsigned:
194 ; CHECK: shld 293 ; CHECK: shld
195 ; CHECK: shl e 294 ; CHECK: shl e
196 ; CHECK: test {{.*}}, 32 295 ; CHECK: test {{.*}}, 32
197 ; CHECK: je 296 ; CHECK: je
297 ;
298 ; OPTM1: shl64BitUnsigned:
299 ; OPTM1: shld
300 ; OPTM1: shl e
301 ; OPTM1: test {{.*}}, 32
302 ; OPTM1: je
198 303
199 define internal i64 @shr64BitSigned(i64 %a, i64 %b) { 304 define internal i64 @shr64BitSigned(i64 %a, i64 %b) {
200 entry: 305 entry:
201 %shr = ashr i64 %a, %b 306 %shr = ashr i64 %a, %b
202 ret i64 %shr 307 ret i64 %shr
203 } 308 }
204 ; CHECK: shr64BitSigned: 309 ; CHECK: shr64BitSigned:
205 ; CHECK: shrd 310 ; CHECK: shrd
206 ; CHECK: sar 311 ; CHECK: sar
207 ; CHECK: test {{.*}}, 32 312 ; CHECK: test {{.*}}, 32
208 ; CHECK: je 313 ; CHECK: je
209 ; CHECK: sar {{.*}}, 31 314 ; CHECK: sar {{.*}}, 31
315 ;
316 ; OPTM1: shr64BitSigned:
317 ; OPTM1: shrd
318 ; OPTM1: sar
319 ; OPTM1: test {{.*}}, 32
320 ; OPTM1: je
321 ; OPTM1: sar {{.*}}, 31
210 322
211 define internal i64 @shr64BitUnsigned(i64 %a, i64 %b) { 323 define internal i64 @shr64BitUnsigned(i64 %a, i64 %b) {
212 entry: 324 entry:
213 %shr = lshr i64 %a, %b 325 %shr = lshr i64 %a, %b
214 ret i64 %shr 326 ret i64 %shr
215 } 327 }
216 ; CHECK: shr64BitUnsigned: 328 ; CHECK: shr64BitUnsigned:
217 ; CHECK: shrd 329 ; CHECK: shrd
218 ; CHECK: shr 330 ; CHECK: shr
219 ; CHECK: test {{.*}}, 32 331 ; CHECK: test {{.*}}, 32
220 ; CHECK: je 332 ; CHECK: je
333 ;
334 ; OPTM1: shr64BitUnsigned:
335 ; OPTM1: shrd
336 ; OPTM1: shr
337 ; OPTM1: test {{.*}}, 32
338 ; OPTM1: je
221 339
222 define internal i64 @and64BitSigned(i64 %a, i64 %b) { 340 define internal i64 @and64BitSigned(i64 %a, i64 %b) {
223 entry: 341 entry:
224 %and = and i64 %b, %a 342 %and = and i64 %b, %a
225 ret i64 %and 343 ret i64 %and
226 } 344 }
227 ; CHECK: and64BitSigned: 345 ; CHECK: and64BitSigned:
228 ; CHECK: and 346 ; CHECK: and
229 ; CHECK: and 347 ; CHECK: and
348 ;
349 ; OPTM1: and64BitSigned:
350 ; OPTM1: and
351 ; OPTM1: and
230 352
231 define internal i64 @and64BitUnsigned(i64 %a, i64 %b) { 353 define internal i64 @and64BitUnsigned(i64 %a, i64 %b) {
232 entry: 354 entry:
233 %and = and i64 %b, %a 355 %and = and i64 %b, %a
234 ret i64 %and 356 ret i64 %and
235 } 357 }
236 ; CHECK: and64BitUnsigned: 358 ; CHECK: and64BitUnsigned:
237 ; CHECK: and 359 ; CHECK: and
238 ; CHECK: and 360 ; CHECK: and
361 ;
362 ; OPTM1: and64BitUnsigned:
363 ; OPTM1: and
364 ; OPTM1: and
239 365
240 define internal i64 @or64BitSigned(i64 %a, i64 %b) { 366 define internal i64 @or64BitSigned(i64 %a, i64 %b) {
241 entry: 367 entry:
242 %or = or i64 %b, %a 368 %or = or i64 %b, %a
243 ret i64 %or 369 ret i64 %or
244 } 370 }
245 ; CHECK: or64BitSigned: 371 ; CHECK: or64BitSigned:
246 ; CHECK: or 372 ; CHECK: or
247 ; CHECK: or 373 ; CHECK: or
374 ;
375 ; OPTM1: or64BitSigned:
376 ; OPTM1: or
377 ; OPTM1: or
248 378
249 define internal i64 @or64BitUnsigned(i64 %a, i64 %b) { 379 define internal i64 @or64BitUnsigned(i64 %a, i64 %b) {
250 entry: 380 entry:
251 %or = or i64 %b, %a 381 %or = or i64 %b, %a
252 ret i64 %or 382 ret i64 %or
253 } 383 }
254 ; CHECK: or64BitUnsigned: 384 ; CHECK: or64BitUnsigned:
255 ; CHECK: or 385 ; CHECK: or
256 ; CHECK: or 386 ; CHECK: or
387 ;
388 ; OPTM1: or64BitUnsigned:
389 ; OPTM1: or
390 ; OPTM1: or
257 391
258 define internal i64 @xor64BitSigned(i64 %a, i64 %b) { 392 define internal i64 @xor64BitSigned(i64 %a, i64 %b) {
259 entry: 393 entry:
260 %xor = xor i64 %b, %a 394 %xor = xor i64 %b, %a
261 ret i64 %xor 395 ret i64 %xor
262 } 396 }
263 ; CHECK: xor64BitSigned: 397 ; CHECK: xor64BitSigned:
264 ; CHECK: xor 398 ; CHECK: xor
265 ; CHECK: xor 399 ; CHECK: xor
400 ;
401 ; OPTM1: xor64BitSigned:
402 ; OPTM1: xor
403 ; OPTM1: xor
266 404
267 define internal i64 @xor64BitUnsigned(i64 %a, i64 %b) { 405 define internal i64 @xor64BitUnsigned(i64 %a, i64 %b) {
268 entry: 406 entry:
269 %xor = xor i64 %b, %a 407 %xor = xor i64 %b, %a
270 ret i64 %xor 408 ret i64 %xor
271 } 409 }
272 ; CHECK: xor64BitUnsigned: 410 ; CHECK: xor64BitUnsigned:
273 ; CHECK: xor 411 ; CHECK: xor
274 ; CHECK: xor 412 ; CHECK: xor
413 ;
414 ; OPTM1: xor64BitUnsigned:
415 ; OPTM1: xor
416 ; OPTM1: xor
275 417
276 define internal i32 @trunc64To32Signed(i64 %a) { 418 define internal i32 @trunc64To32Signed(i64 %a) {
277 entry: 419 entry:
278 %conv = trunc i64 %a to i32 420 %conv = trunc i64 %a to i32
279 ret i32 %conv 421 ret i32 %conv
280 } 422 }
281 ; CHECK: trunc64To32Signed: 423 ; CHECK: trunc64To32Signed:
282 ; CHECK: mov eax, dword ptr [esp+4] 424 ; CHECK: mov eax, dword ptr [esp+4]
283 ; CHECK-NEXT: ret 425 ; CHECK-NEXT: ret
426 ;
427 ; OPTM1: trunc64To32Signed:
428 ; OPTM1: mov eax, dword ptr [esp+
429 ; OPTM1: ret
284 430
285 define internal i32 @trunc64To16Signed(i64 %a) { 431 define internal i32 @trunc64To16Signed(i64 %a) {
286 entry: 432 entry:
287 %conv = trunc i64 %a to i16 433 %conv = trunc i64 %a to i16
288 %conv.ret_ext = sext i16 %conv to i32 434 %conv.ret_ext = sext i16 %conv to i32
289 ret i32 %conv.ret_ext 435 ret i32 %conv.ret_ext
290 } 436 }
291 ; CHECK: trunc64To16Signed: 437 ; CHECK: trunc64To16Signed:
292 ; CHECK: mov eax, dword ptr [esp+4] 438 ; CHECK: mov eax, dword ptr [esp+4]
293 ; CHECK-NEXT: movsx eax, ax 439 ; CHECK-NEXT: movsx eax, ax
294 ; CHECK-NEXT: ret 440 ; CHECK-NEXT: ret
441 ;
442 ; OPTM1: trunc64To16Signed:
443 ; OPTM1: mov eax, dword ptr [esp+
444 ; OPTM1: movsx eax,
445 ; OPTM1: ret
295 446
296 define internal i32 @trunc64To8Signed(i64 %a) { 447 define internal i32 @trunc64To8Signed(i64 %a) {
297 entry: 448 entry:
298 %conv = trunc i64 %a to i8 449 %conv = trunc i64 %a to i8
299 %conv.ret_ext = sext i8 %conv to i32 450 %conv.ret_ext = sext i8 %conv to i32
300 ret i32 %conv.ret_ext 451 ret i32 %conv.ret_ext
301 } 452 }
302 ; CHECK: trunc64To8Signed: 453 ; CHECK: trunc64To8Signed:
303 ; CHECK: mov eax, dword ptr [esp+4] 454 ; CHECK: mov eax, dword ptr [esp+4]
304 ; CHECK-NEXT: movsx eax, al 455 ; CHECK-NEXT: movsx eax, al
305 ; CHECK-NEXT: ret 456 ; CHECK-NEXT: ret
457 ;
458 ; OPTM1: trunc64To8Signed:
459 ; OPTM1: mov eax, dword ptr [esp+
460 ; OPTM1: movsx eax,
461 ; OPTM1: ret
306 462
307 define internal i32 @trunc64To32Unsigned(i64 %a) { 463 define internal i32 @trunc64To32Unsigned(i64 %a) {
308 entry: 464 entry:
309 %conv = trunc i64 %a to i32 465 %conv = trunc i64 %a to i32
310 ret i32 %conv 466 ret i32 %conv
311 } 467 }
312 ; CHECK: trunc64To32Unsigned: 468 ; CHECK: trunc64To32Unsigned:
313 ; CHECK: mov eax, dword ptr [esp+4] 469 ; CHECK: mov eax, dword ptr [esp+4]
314 ; CHECK-NEXT: ret 470 ; CHECK-NEXT: ret
471 ;
472 ; OPTM1: trunc64To32Unsigned:
473 ; OPTM1: mov eax, dword ptr [esp+
474 ; OPTM1: ret
315 475
316 define internal i32 @trunc64To16Unsigned(i64 %a) { 476 define internal i32 @trunc64To16Unsigned(i64 %a) {
317 entry: 477 entry:
318 %conv = trunc i64 %a to i16 478 %conv = trunc i64 %a to i16
319 %conv.ret_ext = zext i16 %conv to i32 479 %conv.ret_ext = zext i16 %conv to i32
320 ret i32 %conv.ret_ext 480 ret i32 %conv.ret_ext
321 } 481 }
322 ; CHECK: trunc64To16Unsigned: 482 ; CHECK: trunc64To16Unsigned:
323 ; CHECK: mov eax, dword ptr [esp+4] 483 ; CHECK: mov eax, dword ptr [esp+4]
324 ; CHECK-NEXT: movzx eax, ax 484 ; CHECK-NEXT: movzx eax, ax
325 ; CHECK-NEXT: ret 485 ; CHECK-NEXT: ret
486 ;
487 ; OPTM1: trunc64To16Unsigned:
488 ; OPTM1: mov eax, dword ptr [esp+
489 ; OPTM1: movzx eax,
490 ; OPTM1: ret
326 491
327 define internal i32 @trunc64To8Unsigned(i64 %a) { 492 define internal i32 @trunc64To8Unsigned(i64 %a) {
328 entry: 493 entry:
329 %conv = trunc i64 %a to i8 494 %conv = trunc i64 %a to i8
330 %conv.ret_ext = zext i8 %conv to i32 495 %conv.ret_ext = zext i8 %conv to i32
331 ret i32 %conv.ret_ext 496 ret i32 %conv.ret_ext
332 } 497 }
333 ; CHECK: trunc64To8Unsigned: 498 ; CHECK: trunc64To8Unsigned:
334 ; CHECK: mov eax, dword ptr [esp+4] 499 ; CHECK: mov eax, dword ptr [esp+4]
335 ; CHECK-NEXT: movzx eax, al 500 ; CHECK-NEXT: movzx eax, al
336 ; CHECK-NEXT: ret 501 ; CHECK-NEXT: ret
502 ;
503 ; OPTM1: trunc64To8Unsigned:
504 ; OPTM1: mov eax, dword ptr [esp+
505 ; OPTM1: movzx eax,
506 ; OPTM1: ret
337 507
338 define internal i32 @trunc64To1(i64 %a) { 508 define internal i32 @trunc64To1(i64 %a) {
339 entry: 509 entry:
340 ; %tobool = icmp ne i64 %a, 0 510 ; %tobool = icmp ne i64 %a, 0
341 %tobool = trunc i64 %a to i1 511 %tobool = trunc i64 %a to i1
342 %tobool.ret_ext = zext i1 %tobool to i32 512 %tobool.ret_ext = zext i1 %tobool to i32
343 ret i32 %tobool.ret_ext 513 ret i32 %tobool.ret_ext
344 } 514 }
345 ; CHECK: trunc64To1: 515 ; CHECK: trunc64To1:
346 ; CHECK: mov eax, dword ptr [esp+4] 516 ; CHECK: mov eax, dword ptr [esp+4]
347 ; CHECK: and eax, 1 517 ; CHECK: and eax, 1
348 ; CHECK-NEXT: ret 518 ; CHECK-NEXT: ret
519 ;
520 ; OPTM1: trunc64To1:
521 ; OPTM1: mov eax, dword ptr [esp+
522 ; OPTM1: and eax, 1
523 ; OPTM1: ret
349 524
350 define internal i64 @sext32To64(i32 %a) { 525 define internal i64 @sext32To64(i32 %a) {
351 entry: 526 entry:
352 %conv = sext i32 %a to i64 527 %conv = sext i32 %a to i64
353 ret i64 %conv 528 ret i64 %conv
354 } 529 }
355 ; CHECK: sext32To64: 530 ; CHECK: sext32To64:
356 ; CHECK: mov 531 ; CHECK: mov
357 ; CHECK: sar {{.*}}, 31 532 ; CHECK: sar {{.*}}, 31
533 ;
534 ; OPTM1: sext32To64:
535 ; OPTM1: mov
536 ; OPTM1: sar {{.*}}, 31
358 537
359 define internal i64 @sext16To64(i32 %a) { 538 define internal i64 @sext16To64(i32 %a) {
360 entry: 539 entry:
361 %a.arg_trunc = trunc i32 %a to i16 540 %a.arg_trunc = trunc i32 %a to i16
362 %conv = sext i16 %a.arg_trunc to i64 541 %conv = sext i16 %a.arg_trunc to i64
363 ret i64 %conv 542 ret i64 %conv
364 } 543 }
365 ; CHECK: sext16To64: 544 ; CHECK: sext16To64:
366 ; CHECK: movsx 545 ; CHECK: movsx
367 ; CHECK: sar {{.*}}, 31 546 ; CHECK: sar {{.*}}, 31
547 ;
548 ; OPTM1: sext16To64:
549 ; OPTM1: movsx
550 ; OPTM1: sar {{.*}}, 31
368 551
369 define internal i64 @sext8To64(i32 %a) { 552 define internal i64 @sext8To64(i32 %a) {
370 entry: 553 entry:
371 %a.arg_trunc = trunc i32 %a to i8 554 %a.arg_trunc = trunc i32 %a to i8
372 %conv = sext i8 %a.arg_trunc to i64 555 %conv = sext i8 %a.arg_trunc to i64
373 ret i64 %conv 556 ret i64 %conv
374 } 557 }
375 ; CHECK: sext8To64: 558 ; CHECK: sext8To64:
376 ; CHECK: movsx 559 ; CHECK: movsx
377 ; CHECK: sar {{.*}}, 31 560 ; CHECK: sar {{.*}}, 31
561 ;
562 ; OPTM1: sext8To64:
563 ; OPTM1: movsx
564 ; OPTM1: sar {{.*}}, 31
378 565
379 define internal i64 @zext32To64(i32 %a) { 566 define internal i64 @zext32To64(i32 %a) {
380 entry: 567 entry:
381 %conv = zext i32 %a to i64 568 %conv = zext i32 %a to i64
382 ret i64 %conv 569 ret i64 %conv
383 } 570 }
384 ; CHECK: zext32To64: 571 ; CHECK: zext32To64:
385 ; CHECK: mov 572 ; CHECK: mov
386 ; CHECK: mov {{.*}}, 0 573 ; CHECK: mov {{.*}}, 0
574 ;
575 ; OPTM1: zext32To64:
576 ; OPTM1: mov
577 ; OPTM1: mov {{.*}}, 0
387 578
388 define internal i64 @zext16To64(i32 %a) { 579 define internal i64 @zext16To64(i32 %a) {
389 entry: 580 entry:
390 %a.arg_trunc = trunc i32 %a to i16 581 %a.arg_trunc = trunc i32 %a to i16
391 %conv = zext i16 %a.arg_trunc to i64 582 %conv = zext i16 %a.arg_trunc to i64
392 ret i64 %conv 583 ret i64 %conv
393 } 584 }
394 ; CHECK: zext16To64: 585 ; CHECK: zext16To64:
395 ; CHECK: movzx 586 ; CHECK: movzx
396 ; CHECK: mov {{.*}}, 0 587 ; CHECK: mov {{.*}}, 0
588 ;
589 ; OPTM1: zext16To64:
590 ; OPTM1: movzx
591 ; OPTM1: mov {{.*}}, 0
397 592
398 define internal i64 @zext8To64(i32 %a) { 593 define internal i64 @zext8To64(i32 %a) {
399 entry: 594 entry:
400 %a.arg_trunc = trunc i32 %a to i8 595 %a.arg_trunc = trunc i32 %a to i8
401 %conv = zext i8 %a.arg_trunc to i64 596 %conv = zext i8 %a.arg_trunc to i64
402 ret i64 %conv 597 ret i64 %conv
403 } 598 }
404 ; CHECK: zext8To64: 599 ; CHECK: zext8To64:
405 ; CHECK: movzx 600 ; CHECK: movzx
406 ; CHECK: mov {{.*}}, 0 601 ; CHECK: mov {{.*}}, 0
602 ;
603 ; OPTM1: zext8To64:
604 ; OPTM1: movzx
605 ; OPTM1: mov {{.*}}, 0
407 606
408 define internal i64 @zext1To64(i32 %a) { 607 define internal i64 @zext1To64(i32 %a) {
409 entry: 608 entry:
410 %a.arg_trunc = trunc i32 %a to i1 609 %a.arg_trunc = trunc i32 %a to i1
411 %conv = zext i1 %a.arg_trunc to i64 610 %conv = zext i1 %a.arg_trunc to i64
412 ret i64 %conv 611 ret i64 %conv
413 } 612 }
414 ; CHECK: zext1To64: 613 ; CHECK: zext1To64:
415 ; CHECK: movzx 614 ; CHECK: movzx
416 ; CHECK: mov {{.*}}, 0 615 ; CHECK: mov {{.*}}, 0
616 ;
617 ; OPTM1: zext1To64:
618 ; OPTM1: movzx
619 ; OPTM1: mov {{.*}}, 0
417 620
418 define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) { 621 define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) {
419 entry: 622 entry:
420 %cmp = icmp eq i64 %a, %b 623 %cmp = icmp eq i64 %a, %b
421 br i1 %cmp, label %if.then, label %if.end 624 br i1 %cmp, label %if.then, label %if.end
422 625
423 if.then: ; preds = %entry 626 if.then: ; preds = %entry
424 call void @func() 627 call void @func()
425 br label %if.end 628 br label %if.end
426 629
427 if.end: ; preds = %if.then, %entry 630 if.end: ; preds = %if.then, %entry
428 %cmp1 = icmp eq i64 %c, %d 631 %cmp1 = icmp eq i64 %c, %d
429 br i1 %cmp1, label %if.then2, label %if.end3 632 br i1 %cmp1, label %if.then2, label %if.end3
430 633
431 if.then2: ; preds = %if.end 634 if.then2: ; preds = %if.end
432 call void @func() 635 call void @func()
433 br label %if.end3 636 br label %if.end3
434 637
435 if.end3: ; preds = %if.then2, %if.end 638 if.end3: ; preds = %if.then2, %if.end
436 ret void 639 ret void
437 } 640 }
438 ; CHECK: icmpEq64: 641 ; CHECK: icmpEq64:
439 ; CHECK: jne 642 ; CHECK: jne
440 ; CHECK: jne 643 ; CHECK: jne
441 ; CHECK: call 644 ; CHECK: call
442 ; CHECK: jne 645 ; CHECK: jne
443 ; CHECK: jne 646 ; CHECK: jne
444 ; CHECK: call 647 ; CHECK: call
648 ;
649 ; OPTM1: icmpEq64:
650 ; OPTM1: jne
651 ; OPTM1: jne
652 ; OPTM1: call
653 ; OPTM1: jne
654 ; OPTM1: jne
655 ; OPTM1: call
445 656
446 declare void @func() 657 declare void @func()
447 658
448 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) { 659 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) {
449 entry: 660 entry:
450 %cmp = icmp ne i64 %a, %b 661 %cmp = icmp ne i64 %a, %b
451 br i1 %cmp, label %if.then, label %if.end 662 br i1 %cmp, label %if.then, label %if.end
452 663
453 if.then: ; preds = %entry 664 if.then: ; preds = %entry
454 call void @func() 665 call void @func()
(...skipping 10 matching lines...) Expand all
465 if.end3: ; preds = %if.end, %if.then2 676 if.end3: ; preds = %if.end, %if.then2
466 ret void 677 ret void
467 } 678 }
468 ; CHECK: icmpNe64: 679 ; CHECK: icmpNe64:
469 ; CHECK: jne 680 ; CHECK: jne
470 ; CHECK: jne 681 ; CHECK: jne
471 ; CHECK: call 682 ; CHECK: call
472 ; CHECK: jne 683 ; CHECK: jne
473 ; CHECK: jne 684 ; CHECK: jne
474 ; CHECK: call 685 ; CHECK: call
686 ;
687 ; OPTM1: icmpNe64:
688 ; OPTM1: jne
689 ; OPTM1: jne
690 ; OPTM1: call
691 ; OPTM1: jne
692 ; OPTM1: jne
693 ; OPTM1: call
475 694
476 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) { 695 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) {
477 entry: 696 entry:
478 %cmp = icmp ugt i64 %a, %b 697 %cmp = icmp ugt i64 %a, %b
479 br i1 %cmp, label %if.then, label %if.end 698 br i1 %cmp, label %if.then, label %if.end
480 699
481 if.then: ; preds = %entry 700 if.then: ; preds = %entry
482 call void @func() 701 call void @func()
483 br label %if.end 702 br label %if.end
484 703
(...skipping 10 matching lines...) Expand all
495 } 714 }
496 ; CHECK: icmpGt64: 715 ; CHECK: icmpGt64:
497 ; CHECK: ja 716 ; CHECK: ja
498 ; CHECK: jb 717 ; CHECK: jb
499 ; CHECK: ja 718 ; CHECK: ja
500 ; CHECK: call 719 ; CHECK: call
501 ; CHECK: jg 720 ; CHECK: jg
502 ; CHECK: jl 721 ; CHECK: jl
503 ; CHECK: ja 722 ; CHECK: ja
504 ; CHECK: call 723 ; CHECK: call
724 ;
725 ; OPTM1: icmpGt64:
726 ; OPTM1: ja
727 ; OPTM1: jb
728 ; OPTM1: ja
729 ; OPTM1: call
730 ; OPTM1: jg
731 ; OPTM1: jl
732 ; OPTM1: ja
733 ; OPTM1: call
505 734
506 define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) { 735 define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) {
507 entry: 736 entry:
508 %cmp = icmp uge i64 %a, %b 737 %cmp = icmp uge i64 %a, %b
509 br i1 %cmp, label %if.then, label %if.end 738 br i1 %cmp, label %if.then, label %if.end
510 739
511 if.then: ; preds = %entry 740 if.then: ; preds = %entry
512 call void @func() 741 call void @func()
513 br label %if.end 742 br label %if.end
514 743
(...skipping 10 matching lines...) Expand all
525 } 754 }
526 ; CHECK: icmpGe64: 755 ; CHECK: icmpGe64:
527 ; CHECK: ja 756 ; CHECK: ja
528 ; CHECK: jb 757 ; CHECK: jb
529 ; CHECK: jae 758 ; CHECK: jae
530 ; CHECK: call 759 ; CHECK: call
531 ; CHECK: jg 760 ; CHECK: jg
532 ; CHECK: jl 761 ; CHECK: jl
533 ; CHECK: jae 762 ; CHECK: jae
534 ; CHECK: call 763 ; CHECK: call
764 ;
765 ; OPTM1: icmpGe64:
766 ; OPTM1: ja
767 ; OPTM1: jb
768 ; OPTM1: jae
769 ; OPTM1: call
770 ; OPTM1: jg
771 ; OPTM1: jl
772 ; OPTM1: jae
773 ; OPTM1: call
535 774
536 define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) { 775 define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) {
537 entry: 776 entry:
538 %cmp = icmp ult i64 %a, %b 777 %cmp = icmp ult i64 %a, %b
539 br i1 %cmp, label %if.then, label %if.end 778 br i1 %cmp, label %if.then, label %if.end
540 779
541 if.then: ; preds = %entry 780 if.then: ; preds = %entry
542 call void @func() 781 call void @func()
543 br label %if.end 782 br label %if.end
544 783
(...skipping 10 matching lines...) Expand all
555 } 794 }
556 ; CHECK: icmpLt64: 795 ; CHECK: icmpLt64:
557 ; CHECK: jb 796 ; CHECK: jb
558 ; CHECK: ja 797 ; CHECK: ja
559 ; CHECK: jb 798 ; CHECK: jb
560 ; CHECK: call 799 ; CHECK: call
561 ; CHECK: jl 800 ; CHECK: jl
562 ; CHECK: jg 801 ; CHECK: jg
563 ; CHECK: jb 802 ; CHECK: jb
564 ; CHECK: call 803 ; CHECK: call
804 ;
805 ; OPTM1: icmpLt64:
806 ; OPTM1: jb
807 ; OPTM1: ja
808 ; OPTM1: jb
809 ; OPTM1: call
810 ; OPTM1: jl
811 ; OPTM1: jg
812 ; OPTM1: jb
813 ; OPTM1: call
565 814
566 define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) { 815 define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) {
567 entry: 816 entry:
568 %cmp = icmp ule i64 %a, %b 817 %cmp = icmp ule i64 %a, %b
569 br i1 %cmp, label %if.then, label %if.end 818 br i1 %cmp, label %if.then, label %if.end
570 819
571 if.then: ; preds = %entry 820 if.then: ; preds = %entry
572 call void @func() 821 call void @func()
573 br label %if.end 822 br label %if.end
574 823
(...skipping 10 matching lines...) Expand all
585 } 834 }
586 ; CHECK: icmpLe64: 835 ; CHECK: icmpLe64:
587 ; CHECK: jb 836 ; CHECK: jb
588 ; CHECK: ja 837 ; CHECK: ja
589 ; CHECK: jbe 838 ; CHECK: jbe
590 ; CHECK: call 839 ; CHECK: call
591 ; CHECK: jl 840 ; CHECK: jl
592 ; CHECK: jg 841 ; CHECK: jg
593 ; CHECK: jbe 842 ; CHECK: jbe
594 ; CHECK: call 843 ; CHECK: call
844 ;
845 ; OPTM1: icmpLe64:
846 ; OPTM1: jb
847 ; OPTM1: ja
848 ; OPTM1: jbe
849 ; OPTM1: call
850 ; OPTM1: jl
851 ; OPTM1: jg
852 ; OPTM1: jbe
853 ; OPTM1: call
595 854
596 define internal i32 @icmpEq64Bool(i64 %a, i64 %b) { 855 define internal i32 @icmpEq64Bool(i64 %a, i64 %b) {
597 entry: 856 entry:
598 %cmp = icmp eq i64 %a, %b 857 %cmp = icmp eq i64 %a, %b
599 %cmp.ret_ext = zext i1 %cmp to i32 858 %cmp.ret_ext = zext i1 %cmp to i32
600 ret i32 %cmp.ret_ext 859 ret i32 %cmp.ret_ext
601 } 860 }
602 ; CHECK: icmpEq64Bool: 861 ; CHECK: icmpEq64Bool:
603 ; CHECK: jne 862 ; CHECK: jne
604 ; CHECK: jne 863 ; CHECK: jne
864 ;
865 ; OPTM1: icmpEq64Bool:
866 ; OPTM1: jne
867 ; OPTM1: jne
605 868
606 define internal i32 @icmpNe64Bool(i64 %a, i64 %b) { 869 define internal i32 @icmpNe64Bool(i64 %a, i64 %b) {
607 entry: 870 entry:
608 %cmp = icmp ne i64 %a, %b 871 %cmp = icmp ne i64 %a, %b
609 %cmp.ret_ext = zext i1 %cmp to i32 872 %cmp.ret_ext = zext i1 %cmp to i32
610 ret i32 %cmp.ret_ext 873 ret i32 %cmp.ret_ext
611 } 874 }
612 ; CHECK: icmpNe64Bool: 875 ; CHECK: icmpNe64Bool:
613 ; CHECK: jne 876 ; CHECK: jne
614 ; CHECK: jne 877 ; CHECK: jne
878 ;
879 ; OPTM1: icmpNe64Bool:
880 ; OPTM1: jne
881 ; OPTM1: jne
615 882
616 define internal i32 @icmpSgt64Bool(i64 %a, i64 %b) { 883 define internal i32 @icmpSgt64Bool(i64 %a, i64 %b) {
617 entry: 884 entry:
618 %cmp = icmp sgt i64 %a, %b 885 %cmp = icmp sgt i64 %a, %b
619 %cmp.ret_ext = zext i1 %cmp to i32 886 %cmp.ret_ext = zext i1 %cmp to i32
620 ret i32 %cmp.ret_ext 887 ret i32 %cmp.ret_ext
621 } 888 }
622 ; CHECK: icmpSgt64Bool: 889 ; CHECK: icmpSgt64Bool:
623 ; CHECK: cmp 890 ; CHECK: cmp
624 ; CHECK: jg 891 ; CHECK: jg
625 ; CHECK: jl 892 ; CHECK: jl
626 ; CHECK: cmp 893 ; CHECK: cmp
627 ; CHECK: ja 894 ; CHECK: ja
895 ;
896 ; OPTM1: icmpSgt64Bool:
897 ; OPTM1: cmp
898 ; OPTM1: jg
899 ; OPTM1: jl
900 ; OPTM1: cmp
901 ; OPTM1: ja
628 902
629 define internal i32 @icmpUgt64Bool(i64 %a, i64 %b) { 903 define internal i32 @icmpUgt64Bool(i64 %a, i64 %b) {
630 entry: 904 entry:
631 %cmp = icmp ugt i64 %a, %b 905 %cmp = icmp ugt i64 %a, %b
632 %cmp.ret_ext = zext i1 %cmp to i32 906 %cmp.ret_ext = zext i1 %cmp to i32
633 ret i32 %cmp.ret_ext 907 ret i32 %cmp.ret_ext
634 } 908 }
635 ; CHECK: icmpUgt64Bool: 909 ; CHECK: icmpUgt64Bool:
636 ; CHECK: cmp 910 ; CHECK: cmp
637 ; CHECK: ja 911 ; CHECK: ja
638 ; CHECK: jb 912 ; CHECK: jb
639 ; CHECK: cmp 913 ; CHECK: cmp
640 ; CHECK: ja 914 ; CHECK: ja
915 ;
916 ; OPTM1: icmpUgt64Bool:
917 ; OPTM1: cmp
918 ; OPTM1: ja
919 ; OPTM1: jb
920 ; OPTM1: cmp
921 ; OPTM1: ja
641 922
642 define internal i32 @icmpSge64Bool(i64 %a, i64 %b) { 923 define internal i32 @icmpSge64Bool(i64 %a, i64 %b) {
643 entry: 924 entry:
644 %cmp = icmp sge i64 %a, %b 925 %cmp = icmp sge i64 %a, %b
645 %cmp.ret_ext = zext i1 %cmp to i32 926 %cmp.ret_ext = zext i1 %cmp to i32
646 ret i32 %cmp.ret_ext 927 ret i32 %cmp.ret_ext
647 } 928 }
648 ; CHECK: icmpSge64Bool: 929 ; CHECK: icmpSge64Bool:
649 ; CHECK: cmp 930 ; CHECK: cmp
650 ; CHECK: jg 931 ; CHECK: jg
651 ; CHECK: jl 932 ; CHECK: jl
652 ; CHECK: cmp 933 ; CHECK: cmp
653 ; CHECK: jae 934 ; CHECK: jae
935 ;
936 ; OPTM1: icmpSge64Bool:
937 ; OPTM1: cmp
938 ; OPTM1: jg
939 ; OPTM1: jl
940 ; OPTM1: cmp
941 ; OPTM1: jae
654 942
655 define internal i32 @icmpUge64Bool(i64 %a, i64 %b) { 943 define internal i32 @icmpUge64Bool(i64 %a, i64 %b) {
656 entry: 944 entry:
657 %cmp = icmp uge i64 %a, %b 945 %cmp = icmp uge i64 %a, %b
658 %cmp.ret_ext = zext i1 %cmp to i32 946 %cmp.ret_ext = zext i1 %cmp to i32
659 ret i32 %cmp.ret_ext 947 ret i32 %cmp.ret_ext
660 } 948 }
661 ; CHECK: icmpUge64Bool: 949 ; CHECK: icmpUge64Bool:
662 ; CHECK: cmp 950 ; CHECK: cmp
663 ; CHECK: ja 951 ; CHECK: ja
664 ; CHECK: jb 952 ; CHECK: jb
665 ; CHECK: cmp 953 ; CHECK: cmp
666 ; CHECK: jae 954 ; CHECK: jae
955 ;
956 ; OPTM1: icmpUge64Bool:
957 ; OPTM1: cmp
958 ; OPTM1: ja
959 ; OPTM1: jb
960 ; OPTM1: cmp
961 ; OPTM1: jae
667 962
668 define internal i32 @icmpSlt64Bool(i64 %a, i64 %b) { 963 define internal i32 @icmpSlt64Bool(i64 %a, i64 %b) {
669 entry: 964 entry:
670 %cmp = icmp slt i64 %a, %b 965 %cmp = icmp slt i64 %a, %b
671 %cmp.ret_ext = zext i1 %cmp to i32 966 %cmp.ret_ext = zext i1 %cmp to i32
672 ret i32 %cmp.ret_ext 967 ret i32 %cmp.ret_ext
673 } 968 }
674 ; CHECK: icmpSlt64Bool: 969 ; CHECK: icmpSlt64Bool:
675 ; CHECK: cmp 970 ; CHECK: cmp
676 ; CHECK: jl 971 ; CHECK: jl
677 ; CHECK: jg 972 ; CHECK: jg
678 ; CHECK: cmp 973 ; CHECK: cmp
679 ; CHECK: jb 974 ; CHECK: jb
975 ;
976 ; OPTM1: icmpSlt64Bool:
977 ; OPTM1: cmp
978 ; OPTM1: jl
979 ; OPTM1: jg
980 ; OPTM1: cmp
981 ; OPTM1: jb
680 982
681 define internal i32 @icmpUlt64Bool(i64 %a, i64 %b) { 983 define internal i32 @icmpUlt64Bool(i64 %a, i64 %b) {
682 entry: 984 entry:
683 %cmp = icmp ult i64 %a, %b 985 %cmp = icmp ult i64 %a, %b
684 %cmp.ret_ext = zext i1 %cmp to i32 986 %cmp.ret_ext = zext i1 %cmp to i32
685 ret i32 %cmp.ret_ext 987 ret i32 %cmp.ret_ext
686 } 988 }
687 ; CHECK: icmpUlt64Bool: 989 ; CHECK: icmpUlt64Bool:
688 ; CHECK: cmp 990 ; CHECK: cmp
689 ; CHECK: jb 991 ; CHECK: jb
690 ; CHECK: ja 992 ; CHECK: ja
691 ; CHECK: cmp 993 ; CHECK: cmp
692 ; CHECK: jb 994 ; CHECK: jb
995 ;
996 ; OPTM1: icmpUlt64Bool:
997 ; OPTM1: cmp
998 ; OPTM1: jb
999 ; OPTM1: ja
1000 ; OPTM1: cmp
1001 ; OPTM1: jb
693 1002
694 define internal i32 @icmpSle64Bool(i64 %a, i64 %b) { 1003 define internal i32 @icmpSle64Bool(i64 %a, i64 %b) {
695 entry: 1004 entry:
696 %cmp = icmp sle i64 %a, %b 1005 %cmp = icmp sle i64 %a, %b
697 %cmp.ret_ext = zext i1 %cmp to i32 1006 %cmp.ret_ext = zext i1 %cmp to i32
698 ret i32 %cmp.ret_ext 1007 ret i32 %cmp.ret_ext
699 } 1008 }
700 ; CHECK: icmpSle64Bool: 1009 ; CHECK: icmpSle64Bool:
701 ; CHECK: cmp 1010 ; CHECK: cmp
702 ; CHECK: jl 1011 ; CHECK: jl
703 ; CHECK: jg 1012 ; CHECK: jg
704 ; CHECK: cmp 1013 ; CHECK: cmp
705 ; CHECK: jbe 1014 ; CHECK: jbe
1015 ;
1016 ; OPTM1: icmpSle64Bool:
1017 ; OPTM1: cmp
1018 ; OPTM1: jl
1019 ; OPTM1: jg
1020 ; OPTM1: cmp
1021 ; OPTM1: jbe
706 1022
707 define internal i32 @icmpUle64Bool(i64 %a, i64 %b) { 1023 define internal i32 @icmpUle64Bool(i64 %a, i64 %b) {
708 entry: 1024 entry:
709 %cmp = icmp ule i64 %a, %b 1025 %cmp = icmp ule i64 %a, %b
710 %cmp.ret_ext = zext i1 %cmp to i32 1026 %cmp.ret_ext = zext i1 %cmp to i32
711 ret i32 %cmp.ret_ext 1027 ret i32 %cmp.ret_ext
712 } 1028 }
713 ; CHECK: icmpUle64Bool: 1029 ; CHECK: icmpUle64Bool:
714 ; CHECK: cmp 1030 ; CHECK: cmp
715 ; CHECK: jb 1031 ; CHECK: jb
716 ; CHECK: ja 1032 ; CHECK: ja
717 ; CHECK: cmp 1033 ; CHECK: cmp
718 ; CHECK: jbe 1034 ; CHECK: jbe
1035 ;
1036 ; OPTM1: icmpUle64Bool:
1037 ; OPTM1: cmp
1038 ; OPTM1: jb
1039 ; OPTM1: ja
1040 ; OPTM1: cmp
1041 ; OPTM1: jbe
719 1042
720 define internal i64 @load64(i32 %a) { 1043 define internal i64 @load64(i32 %a) {
721 entry: 1044 entry:
722 %a.asptr = inttoptr i32 %a to i64* 1045 %a.asptr = inttoptr i32 %a to i64*
723 %v0 = load i64* %a.asptr, align 1 1046 %v0 = load i64* %a.asptr, align 1
724 ret i64 %v0 1047 ret i64 %v0
725 } 1048 }
726 ; CHECK: load64: 1049 ; CHECK: load64:
727 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp+4] 1050 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp+4]
728 ; CHECK-NEXT: mov {{.*}}, dword ptr [e[[REGISTER]]] 1051 ; CHECK-NEXT: mov {{.*}}, dword ptr [e[[REGISTER]]]
729 ; CHECK-NEXT: mov {{.*}}, dword ptr [e[[REGISTER]]+4] 1052 ; CHECK-NEXT: mov {{.*}}, dword ptr [e[[REGISTER]]+4]
1053 ;
1054 ; OPTM1: load64:
1055 ; OPTM1: mov e{{..}}, dword ptr [e{{..}}]
1056 ; OPTM1: mov e{{..}}, dword ptr [e{{..}}+4]
730 1057
731 define internal void @store64(i32 %a, i64 %value) { 1058 define internal void @store64(i32 %a, i64 %value) {
732 entry: 1059 entry:
733 %a.asptr = inttoptr i32 %a to i64* 1060 %a.asptr = inttoptr i32 %a to i64*
734 store i64 %value, i64* %a.asptr, align 1 1061 store i64 %value, i64* %a.asptr, align 1
735 ret void 1062 ret void
736 } 1063 }
737 ; CHECK: store64: 1064 ; CHECK: store64:
738 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp+4] 1065 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp+4]
739 ; CHECK: mov dword ptr [e[[REGISTER]]+4], 1066 ; CHECK: mov dword ptr [e[[REGISTER]]+4],
740 ; CHECK: mov dword ptr [e[[REGISTER]]], 1067 ; CHECK: mov dword ptr [e[[REGISTER]]],
1068 ;
1069 ; OPTM1: store64:
1070 ; OPTM1: mov dword ptr [e[[REGISTER:[a-z]+]]+4],
1071 ; OPTM1: mov dword ptr [e[[REGISTER]]],
741 1072
742 define internal void @store64Const(i32 %a) { 1073 define internal void @store64Const(i32 %a) {
743 entry: 1074 entry:
744 %a.asptr = inttoptr i32 %a to i64* 1075 %a.asptr = inttoptr i32 %a to i64*
745 store i64 -2401053092306725256, i64* %a.asptr, align 1 1076 store i64 -2401053092306725256, i64* %a.asptr, align 1
746 ret void 1077 ret void
747 } 1078 }
748 ; CHECK: store64Const: 1079 ; CHECK: store64Const:
749 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp+4] 1080 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp+4]
750 ; CHECK: mov dword ptr [e[[REGISTER]]+4], 3735928559 1081 ; CHECK: mov dword ptr [e[[REGISTER]]+4], 3735928559
751 ; CHECK: mov dword ptr [e[[REGISTER]]], 305419896 1082 ; CHECK: mov dword ptr [e[[REGISTER]]], 305419896
1083 ;
1084 ; OPTM1: store64Const:
1085 ; OPTM1: mov dword ptr [e[[REGISTER:[a-z]+]]+4], 3735928559
1086 ; OPTM1: mov dword ptr [e[[REGISTER]]], 305419896
752 1087
753 define internal i64 @select64VarVar(i64 %a, i64 %b) { 1088 define internal i64 @select64VarVar(i64 %a, i64 %b) {
754 entry: 1089 entry:
755 %cmp = icmp ult i64 %a, %b 1090 %cmp = icmp ult i64 %a, %b
756 %cond = select i1 %cmp, i64 %a, i64 %b 1091 %cond = select i1 %cmp, i64 %a, i64 %b
757 ret i64 %cond 1092 ret i64 %cond
758 } 1093 }
759 ; CHECK: select64VarVar: 1094 ; CHECK: select64VarVar:
760 ; CHECK: cmp 1095 ; CHECK: cmp
761 ; CHECK: jb 1096 ; CHECK: jb
762 ; CHECK: ja 1097 ; CHECK: ja
763 ; CHECK: cmp 1098 ; CHECK: cmp
764 ; CHECK: jb 1099 ; CHECK: jb
765 ; CHECK: cmp 1100 ; CHECK: cmp
766 ; CHECK: jne 1101 ; CHECK: jne
1102 ;
1103 ; OPTM1: select64VarVar:
1104 ; OPTM1: cmp
1105 ; OPTM1: jb
1106 ; OPTM1: ja
1107 ; OPTM1: cmp
1108 ; OPTM1: jb
1109 ; OPTM1: cmp
1110 ; OPTM1: jne
767 1111
768 define internal i64 @select64VarConst(i64 %a, i64 %b) { 1112 define internal i64 @select64VarConst(i64 %a, i64 %b) {
769 entry: 1113 entry:
770 %cmp = icmp ult i64 %a, %b 1114 %cmp = icmp ult i64 %a, %b
771 %cond = select i1 %cmp, i64 %a, i64 -2401053092306725256 1115 %cond = select i1 %cmp, i64 %a, i64 -2401053092306725256
772 ret i64 %cond 1116 ret i64 %cond
773 } 1117 }
774 ; CHECK: select64VarConst: 1118 ; CHECK: select64VarConst:
775 ; CHECK: cmp 1119 ; CHECK: cmp
776 ; CHECK: jb 1120 ; CHECK: jb
777 ; CHECK: ja 1121 ; CHECK: ja
778 ; CHECK: cmp 1122 ; CHECK: cmp
779 ; CHECK: jb 1123 ; CHECK: jb
780 ; CHECK: cmp 1124 ; CHECK: cmp
781 ; CHECK: jne 1125 ; CHECK: jne
1126 ;
1127 ; OPTM1: select64VarConst:
1128 ; OPTM1: cmp
1129 ; OPTM1: jb
1130 ; OPTM1: ja
1131 ; OPTM1: cmp
1132 ; OPTM1: jb
1133 ; OPTM1: cmp
1134 ; OPTM1: jne
782 1135
783 define internal i64 @select64ConstVar(i64 %a, i64 %b) { 1136 define internal i64 @select64ConstVar(i64 %a, i64 %b) {
784 entry: 1137 entry:
785 %cmp = icmp ult i64 %a, %b 1138 %cmp = icmp ult i64 %a, %b
786 %cond = select i1 %cmp, i64 -2401053092306725256, i64 %b 1139 %cond = select i1 %cmp, i64 -2401053092306725256, i64 %b
787 ret i64 %cond 1140 ret i64 %cond
788 } 1141 }
789 ; CHECK: select64ConstVar: 1142 ; CHECK: select64ConstVar:
790 ; CHECK: cmp 1143 ; CHECK: cmp
791 ; CHECK: jb 1144 ; CHECK: jb
792 ; CHECK: ja 1145 ; CHECK: ja
793 ; CHECK: cmp 1146 ; CHECK: cmp
794 ; CHECK: jb 1147 ; CHECK: jb
795 ; CHECK: cmp 1148 ; CHECK: cmp
796 ; CHECK: jne 1149 ; CHECK: jne
1150 ;
1151 ; OPTM1: select64ConstVar:
1152 ; OPTM1: cmp
1153 ; OPTM1: jb
1154 ; OPTM1: ja
1155 ; OPTM1: cmp
1156 ; OPTM1: jb
1157 ; OPTM1: cmp
1158 ; OPTM1: jne
797 1159
798 ; ERRORS-NOT: ICE translation error 1160 ; ERRORS-NOT: ICE translation error
799 ; DUMP-NOT: SZ 1161 ; DUMP-NOT: SZ
OLDNEW
« src/llvm2ice.cpp ('K') | « src/llvm2ice.cpp ('k') | tests_lit/llvm2ice_tests/alloc.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698