OLD | NEW |
---|---|
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: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ | 6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ |
7 ; RUN: | %if --need=target_X8632 --command FileCheck %s | 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
8 | 8 |
9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ | 10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ |
11 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=OPTM1 %s | 11 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=OPTM1 %s |
12 | 12 |
13 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented) | 13 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented) |
14 ; once enough infrastructure is in. Also, switch to --filetype=obj | 14 ; once enough infrastructure is in. Also, switch to --filetype=obj |
15 ; when possible. | 15 ; when possible. |
16 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 16 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
17 ; RUN: --command %p2i --filetype=asm --assemble \ | 17 ; RUN: --command %p2i --filetype=asm --assemble \ |
18 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ | 18 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ |
19 ; RUN: -allow-externally-defined-symbols \ | 19 ; RUN: -allow-externally-defined-symbols \ |
20 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 20 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
21 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-O2 %s | 21 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-O2 %s |
22 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 22 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
23 ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target arm32 \ | 23 ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target arm32 \ |
24 ; RUN: -i %s --args -Om1 --skip-unimplemented \ | 24 ; RUN: -i %s --args -Om1 --skip-unimplemented \ |
25 ; RUN: -allow-externally-defined-symbols \ | 25 ; RUN: -allow-externally-defined-symbols \ |
26 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 26 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
27 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-OM1 %s | 27 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-OM1 %s |
28 | 28 |
29 ; TODO(rkotler): Stop skipping unimplemented parts (via --skip-unimplemented) | |
30 ; once enough infrastructure is in. Also, switch to --filetype=obj | |
31 ; when possible. | |
32 ; RUN: %if --need=target_MIPS32 --need=allow_dump \ | |
33 ; RUN: --command %p2i --filetype=asm --assemble \ | |
34 ; RUN: --disassemble --target mips32 -i %s --args -O2 --skip-unimplemented \ | |
35 ; RUN: -allow-externally-defined-symbols \ | |
36 ; RUN: | %if --need=target_MIPS32 --need=allow_dump \ | |
37 ; RUN: --command FileCheck --check-prefix MIPS32 --check-prefix MIPS32-O2 %s | |
Jim Stichnoth
2016/01/30 17:03:29
TIL that FileCheck can take multiple --check-prefi
rkotlerimgtec
2016/01/30 23:48:31
This just mimicks what ARM is doing here. -Om1 was
Jim Stichnoth
2016/01/31 05:29:47
All the same, using -Om1 exposes lowering/legaliza
| |
38 | |
29 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 | 39 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 |
30 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 | 40 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 |
31 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 | 41 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 |
32 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 | 42 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 |
33 | 43 |
34 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) { | 44 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) { |
35 entry: | 45 entry: |
36 ret i32 %b | 46 ret i32 %b |
37 } | 47 } |
38 | 48 |
49 ; MIPS32-LABEL: ignore64BitArg | |
50 ; MIPS: move v0,a2 | |
51 | |
39 define internal i32 @pass64BitArg(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f ) { | 52 define internal i32 @pass64BitArg(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f ) { |
40 entry: | 53 entry: |
41 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 %b) | 54 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 %b) |
42 %call1 = call i32 @ignore64BitArgNoInline(i64 %c, i32 123, i64 %d) | 55 %call1 = call i32 @ignore64BitArgNoInline(i64 %c, i32 123, i64 %d) |
43 %call2 = call i32 @ignore64BitArgNoInline(i64 %e, i32 123, i64 %f) | 56 %call2 = call i32 @ignore64BitArgNoInline(i64 %e, i32 123, i64 %f) |
44 %add = add i32 %call1, %call | 57 %add = add i32 %call1, %call |
45 %add3 = add i32 %add, %call2 | 58 %add3 = add i32 %add, %call2 |
46 ret i32 %add3 | 59 ret i32 %add3 |
47 } | 60 } |
48 ; CHECK-LABEL: pass64BitArg | 61 ; CHECK-LABEL: pass64BitArg |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
95 ; ARM32: {{mov|ldr}} r0 | 108 ; ARM32: {{mov|ldr}} r0 |
96 ; ARM32: {{mov|ldr}} r1 | 109 ; ARM32: {{mov|ldr}} r1 |
97 ; ARM32: mov r2, #123 | 110 ; ARM32: mov r2, #123 |
98 ; ARM32: bl {{.*}} ignore64BitArgNoInline | 111 ; ARM32: bl {{.*}} ignore64BitArgNoInline |
99 ; ARM32: str {{.*}}, [sp] | 112 ; ARM32: str {{.*}}, [sp] |
100 ; ARM32: {{mov|ldr}} r0 | 113 ; ARM32: {{mov|ldr}} r0 |
101 ; ARM32: {{mov|ldr}} r1 | 114 ; ARM32: {{mov|ldr}} r1 |
102 ; ARM32: mov r2, #123 | 115 ; ARM32: mov r2, #123 |
103 ; ARM32: bl {{.*}} ignore64BitArgNoInline | 116 ; ARM32: bl {{.*}} ignore64BitArgNoInline |
104 | 117 |
118 ; MIPS32-LABEL: pass64BitArg | |
119 | |
105 | 120 |
106 declare i32 @ignore64BitArgNoInline(i64, i32, i64) | 121 declare i32 @ignore64BitArgNoInline(i64, i32, i64) |
107 | 122 |
108 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) { | 123 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) { |
109 entry: | 124 entry: |
110 %call = call i32 @ignore64BitArgNoInline(i64 %b, i32 123, i64 -240105309230672 5256) | 125 %call = call i32 @ignore64BitArgNoInline(i64 %b, i32 123, i64 -240105309230672 5256) |
111 ret i32 %call | 126 ret i32 %call |
112 } | 127 } |
113 ; CHECK-LABEL: pass64BitConstArg | 128 ; CHECK-LABEL: pass64BitConstArg |
114 ; CHECK: sub esp | 129 ; CHECK: sub esp |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
160 ; OPTM1: mov DWORD PTR{{.*}},0x7b | 175 ; OPTM1: mov DWORD PTR{{.*}},0x7b |
161 ; OPTM1: mov DWORD PTR{{.*}},0x0 | 176 ; OPTM1: mov DWORD PTR{{.*}},0x0 |
162 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 177 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
163 ; ARM32-LABEL: pass64BitUndefArg | 178 ; ARM32-LABEL: pass64BitUndefArg |
164 ; ARM32: sub sp | 179 ; ARM32: sub sp |
165 ; ARM32: mov {{.*}}, #0 | 180 ; ARM32: mov {{.*}}, #0 |
166 ; ARM32: str | 181 ; ARM32: str |
167 ; ARM32: mov {{.*}}, #123 | 182 ; ARM32: mov {{.*}}, #123 |
168 ; ARM32: bl {{.*}} ignore64BitArgNoInline | 183 ; ARM32: bl {{.*}} ignore64BitArgNoInline |
169 | 184 |
185 ; MIPS32-LABEL: pass64BitUndefArg | |
186 ; MIPS: jr ra | |
187 | |
170 define internal i64 @return64BitArg(i64 %padding, i64 %a) { | 188 define internal i64 @return64BitArg(i64 %padding, i64 %a) { |
171 entry: | 189 entry: |
172 ret i64 %a | 190 ret i64 %a |
173 } | 191 } |
174 ; CHECK-LABEL: return64BitArg | 192 ; CHECK-LABEL: return64BitArg |
175 ; CHECK: mov {{.*}},DWORD PTR [esp+0xc] | 193 ; CHECK: mov {{.*}},DWORD PTR [esp+0xc] |
176 ; CHECK: mov {{.*}},DWORD PTR [esp+0x10] | 194 ; CHECK: mov {{.*}},DWORD PTR [esp+0x10] |
177 ; | 195 ; |
178 ; OPTM1-LABEL: return64BitArg | 196 ; OPTM1-LABEL: return64BitArg |
179 ; OPTM1: mov {{.*}},DWORD PTR [esp+0xc] | 197 ; OPTM1: mov {{.*}},DWORD PTR [esp+0xc] |
180 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x10] | 198 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x10] |
181 | 199 |
182 ; ARM32-LABEL: return64BitArg | 200 ; ARM32-LABEL: return64BitArg |
183 ; ARM32: mov {{.*}}, r2 | 201 ; ARM32: mov {{.*}}, r2 |
184 ; ARM32: mov {{.*}}, r3 | 202 ; ARM32: mov {{.*}}, r3 |
185 ; ARM32: bx lr | 203 ; ARM32: bx lr |
186 | 204 |
205 ; MIPS-LABEL; return64BitArg | |
206 ; MIPS: move v0,a2 | |
207 ; MIPS: move v1,a3 | |
208 ; MIPS: jr ra | |
209 | |
187 define internal i64 @return64BitConst() { | 210 define internal i64 @return64BitConst() { |
188 entry: | 211 entry: |
189 ret i64 -2401053092306725256 | 212 ret i64 -2401053092306725256 |
190 } | 213 } |
191 ; CHECK-LABEL: return64BitConst | 214 ; CHECK-LABEL: return64BitConst |
192 ; CHECK: mov eax,0x12345678 | 215 ; CHECK: mov eax,0x12345678 |
193 ; CHECK: mov edx,0xdeadbeef | 216 ; CHECK: mov edx,0xdeadbeef |
194 ; | 217 ; |
195 ; OPTM1-LABEL: return64BitConst | 218 ; OPTM1-LABEL: return64BitConst |
196 ; OPTM1: mov eax,0x12345678 | 219 ; OPTM1: mov eax,0x12345678 |
197 ; OPTM1: mov edx,0xdeadbeef | 220 ; OPTM1: mov edx,0xdeadbeef |
198 | 221 |
199 ; ARM32-LABEL: return64BitConst | 222 ; ARM32-LABEL: return64BitConst |
200 ; ARM32: movw r0, #22136 ; 0x5678 | 223 ; ARM32: movw r0, #22136 ; 0x5678 |
201 ; ARM32: movt r0, #4660 ; 0x1234 | 224 ; ARM32: movt r0, #4660 ; 0x1234 |
202 ; ARM32: movw r1, #48879 ; 0xbeef | 225 ; ARM32: movw r1, #48879 ; 0xbeef |
203 ; ARM32: movt r1, #57005 ; 0xdead | 226 ; ARM32: movt r1, #57005 ; 0xdead |
204 | 227 |
228 ; MIPS32-LABEL: return64BitConst | |
229 ; MIPS32: lui v0,0x1234 | |
230 ; MIPS32: ori v0,v0,0x5678 | |
231 ; MIPS32: lui v1,0xdead | |
232 ; MIPS32: ori v1,v1,0xbeef | |
233 ; MIPS32: jr ra | |
234 | |
205 define internal i64 @add64BitSigned(i64 %a, i64 %b) { | 235 define internal i64 @add64BitSigned(i64 %a, i64 %b) { |
206 entry: | 236 entry: |
207 %add = add i64 %b, %a | 237 %add = add i64 %b, %a |
208 ret i64 %add | 238 ret i64 %add |
209 } | 239 } |
210 ; CHECK-LABEL: add64BitSigned | 240 ; CHECK-LABEL: add64BitSigned |
211 ; CHECK: add | 241 ; CHECK: add |
212 ; CHECK: adc | 242 ; CHECK: adc |
213 ; | 243 ; |
214 ; OPTM1-LABEL: add64BitSigned | 244 ; OPTM1-LABEL: add64BitSigned |
215 ; OPTM1: add | 245 ; OPTM1: add |
216 ; OPTM1: adc | 246 ; OPTM1: adc |
217 | 247 |
218 ; ARM32-LABEL: add64BitSigned | 248 ; ARM32-LABEL: add64BitSigned |
219 ; ARM32: adds | 249 ; ARM32: adds |
220 ; ARM32: adc | 250 ; ARM32: adc |
221 | 251 |
252 ; MIPS-LABEL: add64BitSigned | |
253 ; MIPS: addu | |
254 ; MIPS: sltu | |
255 ; MIPS: addu | |
256 ; MIPS: addu | |
257 | |
222 define internal i64 @add64BitUnsigned(i64 %a, i64 %b) { | 258 define internal i64 @add64BitUnsigned(i64 %a, i64 %b) { |
223 entry: | 259 entry: |
224 %add = add i64 %b, %a | 260 %add = add i64 %b, %a |
225 ret i64 %add | 261 ret i64 %add |
226 } | 262 } |
227 ; CHECK-LABEL: add64BitUnsigned | 263 ; CHECK-LABEL: add64BitUnsigned |
228 ; CHECK: add | 264 ; CHECK: add |
229 ; CHECK: adc | 265 ; CHECK: adc |
230 ; | 266 ; |
231 ; OPTM1-LABEL: add64BitUnsigned | 267 ; OPTM1-LABEL: add64BitUnsigned |
232 ; OPTM1: add | 268 ; OPTM1: add |
233 ; OPTM1: adc | 269 ; OPTM1: adc |
234 | 270 |
235 ; ARM32-LABEL: add64BitUnsigned | 271 ; ARM32-LABEL: add64BitUnsigned |
236 ; ARM32: adds | 272 ; ARM32: adds |
237 ; ARM32: adc | 273 ; ARM32: adc |
238 | 274 |
275 ; MIPS-LABEL: add64BitUnsigned | |
276 ; MIPS: addu | |
277 ; MIPS: sltu | |
278 ; MIPS: addu | |
279 ; MIPS: addu | |
280 | |
239 define internal i64 @sub64BitSigned(i64 %a, i64 %b) { | 281 define internal i64 @sub64BitSigned(i64 %a, i64 %b) { |
240 entry: | 282 entry: |
241 %sub = sub i64 %a, %b | 283 %sub = sub i64 %a, %b |
242 ret i64 %sub | 284 ret i64 %sub |
243 } | 285 } |
244 ; CHECK-LABEL: sub64BitSigned | 286 ; CHECK-LABEL: sub64BitSigned |
245 ; CHECK: sub | 287 ; CHECK: sub |
246 ; CHECK: sbb | 288 ; CHECK: sbb |
247 ; | 289 ; |
248 ; OPTM1-LABEL: sub64BitSigned | 290 ; OPTM1-LABEL: sub64BitSigned |
249 ; OPTM1: sub | 291 ; OPTM1: sub |
250 ; OPTM1: sbb | 292 ; OPTM1: sbb |
251 | 293 |
252 ; ARM32-LABEL: sub64BitSigned | 294 ; ARM32-LABEL: sub64BitSigned |
253 ; ARM32: subs | 295 ; ARM32: subs |
254 ; ARM32: sbc | 296 ; ARM32: sbc |
255 | 297 |
298 ; MIPS-LABEL: sub64BitSigned | |
299 ; MIPS: subu | |
300 ; MIPS: sltu | |
301 ; MIPS: addu | |
302 ; MIPS: subu | |
303 | |
256 define internal i64 @sub64BitUnsigned(i64 %a, i64 %b) { | 304 define internal i64 @sub64BitUnsigned(i64 %a, i64 %b) { |
257 entry: | 305 entry: |
258 %sub = sub i64 %a, %b | 306 %sub = sub i64 %a, %b |
259 ret i64 %sub | 307 ret i64 %sub |
260 } | 308 } |
261 ; CHECK-LABEL: sub64BitUnsigned | 309 ; CHECK-LABEL: sub64BitUnsigned |
262 ; CHECK: sub | 310 ; CHECK: sub |
263 ; CHECK: sbb | 311 ; CHECK: sbb |
264 ; | 312 ; |
265 ; OPTM1-LABEL: sub64BitUnsigned | 313 ; OPTM1-LABEL: sub64BitUnsigned |
266 ; OPTM1: sub | 314 ; OPTM1: sub |
267 ; OPTM1: sbb | 315 ; OPTM1: sbb |
268 | 316 |
269 ; ARM32-LABEL: sub64BitUnsigned | 317 ; ARM32-LABEL: sub64BitUnsigned |
270 ; ARM32: subs | 318 ; ARM32: subs |
271 ; ARM32: sbc | 319 ; ARM32: sbc |
272 | 320 |
321 ; MIPS-LABEL: sub64BitUnsigned | |
322 ; MIPS: subu | |
323 ; MIPS: sltu | |
324 ; MIPS: addu | |
325 ; MIPS: subu | |
326 | |
273 define internal i64 @mul64BitSigned(i64 %a, i64 %b) { | 327 define internal i64 @mul64BitSigned(i64 %a, i64 %b) { |
274 entry: | 328 entry: |
275 %mul = mul i64 %b, %a | 329 %mul = mul i64 %b, %a |
276 ret i64 %mul | 330 ret i64 %mul |
277 } | 331 } |
278 ; CHECK-LABEL: mul64BitSigned | 332 ; CHECK-LABEL: mul64BitSigned |
279 ; CHECK: imul | 333 ; CHECK: imul |
280 ; CHECK: mul | 334 ; CHECK: mul |
281 ; CHECK: add | 335 ; CHECK: add |
282 ; CHECK: imul | 336 ; CHECK: imul |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
597 ; CHECK: and | 651 ; CHECK: and |
598 ; | 652 ; |
599 ; OPTM1-LABEL: and64BitSigned | 653 ; OPTM1-LABEL: and64BitSigned |
600 ; OPTM1: and | 654 ; OPTM1: and |
601 ; OPTM1: and | 655 ; OPTM1: and |
602 | 656 |
603 ; ARM32-LABEL: and64BitSigned | 657 ; ARM32-LABEL: and64BitSigned |
604 ; ARM32: and | 658 ; ARM32: and |
605 ; ARM32: and | 659 ; ARM32: and |
606 | 660 |
661 ; MIPS32-LABEL: and64BitSigned | |
662 ; MIPS32: and | |
663 ; MIPS32: and | |
664 | |
607 define internal i64 @and64BitUnsigned(i64 %a, i64 %b) { | 665 define internal i64 @and64BitUnsigned(i64 %a, i64 %b) { |
608 entry: | 666 entry: |
609 %and = and i64 %b, %a | 667 %and = and i64 %b, %a |
610 ret i64 %and | 668 ret i64 %and |
611 } | 669 } |
612 ; CHECK-LABEL: and64BitUnsigned | 670 ; CHECK-LABEL: and64BitUnsigned |
613 ; CHECK: and | 671 ; CHECK: and |
614 ; CHECK: and | 672 ; CHECK: and |
615 ; | 673 ; |
616 ; OPTM1-LABEL: and64BitUnsigned | 674 ; OPTM1-LABEL: and64BitUnsigned |
617 ; OPTM1: and | 675 ; OPTM1: and |
618 ; OPTM1: and | 676 ; OPTM1: and |
619 | 677 |
620 ; ARM32-LABEL: and64BitUnsigned | 678 ; ARM32-LABEL: and64BitUnsigned |
621 ; ARM32: and | 679 ; ARM32: and |
622 ; ARM32: and | 680 ; ARM32: and |
623 | 681 |
682 ; MIPS32-LABEL: and64BitUnsigned | |
683 ; MIPS32: and | |
684 ; MIPS32: and | |
685 | |
624 define internal i64 @or64BitSigned(i64 %a, i64 %b) { | 686 define internal i64 @or64BitSigned(i64 %a, i64 %b) { |
625 entry: | 687 entry: |
626 %or = or i64 %b, %a | 688 %or = or i64 %b, %a |
627 ret i64 %or | 689 ret i64 %or |
628 } | 690 } |
629 ; CHECK-LABEL: or64BitSigned | 691 ; CHECK-LABEL: or64BitSigned |
630 ; CHECK: or | 692 ; CHECK: or |
631 ; CHECK: or | 693 ; CHECK: or |
632 ; | 694 ; |
633 ; OPTM1-LABEL: or64BitSigned | 695 ; OPTM1-LABEL: or64BitSigned |
634 ; OPTM1: or | 696 ; OPTM1: or |
635 ; OPTM1: or | 697 ; OPTM1: or |
636 | 698 |
637 ; ARM32-LABEL: or64BitSigned | 699 ; ARM32-LABEL: or64BitSigned |
638 ; ARM32: orr | 700 ; ARM32: orr |
639 ; ARM32: orr | 701 ; ARM32: orr |
640 | 702 |
703 ; MIPS32-LABEL: or64BitSigned | |
704 ; MIPS32: or | |
705 ; MIPS32: or | |
706 | |
707 | |
Jim Stichnoth
2016/01/30 17:03:29
This and the next two tests add 2 blank lines inst
rkotlerimgtec
2016/01/30 23:48:31
Done.
| |
641 define internal i64 @or64BitUnsigned(i64 %a, i64 %b) { | 708 define internal i64 @or64BitUnsigned(i64 %a, i64 %b) { |
642 entry: | 709 entry: |
643 %or = or i64 %b, %a | 710 %or = or i64 %b, %a |
644 ret i64 %or | 711 ret i64 %or |
645 } | 712 } |
646 ; CHECK-LABEL: or64BitUnsigned | 713 ; CHECK-LABEL: or64BitUnsigned |
647 ; CHECK: or | 714 ; CHECK: or |
648 ; CHECK: or | 715 ; CHECK: or |
649 ; | 716 ; |
650 ; OPTM1-LABEL: or64BitUnsigned | 717 ; OPTM1-LABEL: or64BitUnsigned |
651 ; OPTM1: or | 718 ; OPTM1: or |
652 ; OPTM1: or | 719 ; OPTM1: or |
653 | 720 |
654 ; ARM32-LABEL: or64BitUnsigned | 721 ; ARM32-LABEL: or64BitUnsigned |
655 ; ARM32: orr | 722 ; ARM32: orr |
656 ; ARM32: orr | 723 ; ARM32: orr |
657 | 724 |
725 ; MIPS32-LABEL: or64BitUnsigned | |
726 ; MIPS32: or | |
727 ; MIPS32: or | |
728 | |
729 | |
658 define internal i64 @xor64BitSigned(i64 %a, i64 %b) { | 730 define internal i64 @xor64BitSigned(i64 %a, i64 %b) { |
659 entry: | 731 entry: |
660 %xor = xor i64 %b, %a | 732 %xor = xor i64 %b, %a |
661 ret i64 %xor | 733 ret i64 %xor |
662 } | 734 } |
663 ; CHECK-LABEL: xor64BitSigned | 735 ; CHECK-LABEL: xor64BitSigned |
664 ; CHECK: xor | 736 ; CHECK: xor |
665 ; CHECK: xor | 737 ; CHECK: xor |
666 ; | 738 ; |
667 ; OPTM1-LABEL: xor64BitSigned | 739 ; OPTM1-LABEL: xor64BitSigned |
668 ; OPTM1: xor | 740 ; OPTM1: xor |
669 ; OPTM1: xor | 741 ; OPTM1: xor |
670 | 742 |
671 ; ARM32-LABEL: xor64BitSigned | 743 ; ARM32-LABEL: xor64BitSigned |
672 ; ARM32: eor | 744 ; ARM32: eor |
673 ; ARM32: eor | 745 ; ARM32: eor |
674 | 746 |
747 ; MIPS32-LABEL: xor64BitSigned | |
748 ; MIPS32: xor | |
749 ; MIPS32: xor | |
750 | |
751 | |
675 define internal i64 @xor64BitUnsigned(i64 %a, i64 %b) { | 752 define internal i64 @xor64BitUnsigned(i64 %a, i64 %b) { |
676 entry: | 753 entry: |
677 %xor = xor i64 %b, %a | 754 %xor = xor i64 %b, %a |
678 ret i64 %xor | 755 ret i64 %xor |
679 } | 756 } |
680 ; CHECK-LABEL: xor64BitUnsigned | 757 ; CHECK-LABEL: xor64BitUnsigned |
681 ; CHECK: xor | 758 ; CHECK: xor |
682 ; CHECK: xor | 759 ; CHECK: xor |
683 ; | 760 ; |
684 ; OPTM1-LABEL: xor64BitUnsigned | 761 ; OPTM1-LABEL: xor64BitUnsigned |
685 ; OPTM1: xor | 762 ; OPTM1: xor |
686 ; OPTM1: xor | 763 ; OPTM1: xor |
687 | 764 |
688 ; ARM32-LABEL: xor64BitUnsigned | 765 ; ARM32-LABEL: xor64BitUnsigned |
689 ; ARM32: eor | 766 ; ARM32: eor |
690 ; ARM32: eor | 767 ; ARM32: eor |
691 | 768 |
769 ; MIPS32-LABEL: xor64BitUnsigned | |
770 ; MIPS32: xor | |
771 ; MIPS32: xor | |
772 | |
692 define internal i32 @trunc64To32Signed(i64 %padding, i64 %a) { | 773 define internal i32 @trunc64To32Signed(i64 %padding, i64 %a) { |
693 entry: | 774 entry: |
694 %conv = trunc i64 %a to i32 | 775 %conv = trunc i64 %a to i32 |
695 ret i32 %conv | 776 ret i32 %conv |
696 } | 777 } |
697 ; CHECK-LABEL: trunc64To32Signed | 778 ; CHECK-LABEL: trunc64To32Signed |
698 ; CHECK: mov eax,DWORD PTR [esp+0xc] | 779 ; CHECK: mov eax,DWORD PTR [esp+0xc] |
699 ; | 780 ; |
700 ; OPTM1-LABEL: trunc64To32Signed | 781 ; OPTM1-LABEL: trunc64To32Signed |
701 ; OPTM1: mov eax,DWORD PTR [esp+ | 782 ; OPTM1: mov eax,DWORD PTR [esp+ |
(...skipping 1150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1852 ; CHECK-LABEL: phi64Undef | 1933 ; CHECK-LABEL: phi64Undef |
1853 ; CHECK: mov {{.*}},0x0 | 1934 ; CHECK: mov {{.*}},0x0 |
1854 ; CHECK: mov {{.*}},0x0 | 1935 ; CHECK: mov {{.*}},0x0 |
1855 ; OPTM1-LABEL: phi64Undef | 1936 ; OPTM1-LABEL: phi64Undef |
1856 ; OPTM1: mov {{.*}},0x0 | 1937 ; OPTM1: mov {{.*}},0x0 |
1857 ; OPTM1: mov {{.*}},0x0 | 1938 ; OPTM1: mov {{.*}},0x0 |
1858 ; ARM32-LABEL: phi64Undef | 1939 ; ARM32-LABEL: phi64Undef |
1859 ; ARM32: mov {{.*}} #0 | 1940 ; ARM32: mov {{.*}} #0 |
1860 ; ARM32: mov {{.*}} #0 | 1941 ; ARM32: mov {{.*}} #0 |
1861 | 1942 |
OLD | NEW |