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 %s |
| 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 ; MIPS32: 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 ; MIPS32: 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 ; MIPS32-LABEL; return64BitArg |
| 206 ; MIPS32: move v0,a2 |
| 207 ; MIPS32: move v1,a3 |
| 208 ; MIPS32: 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 ; MIPS32-LABEL: add64BitSigned |
| 253 ; MIPS32: addu |
| 254 ; MIPS32: sltu |
| 255 ; MIPS32: addu |
| 256 ; MIPS32: 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 ; MIPS32-LABEL: add64BitUnsigned |
| 276 ; MIPS32: addu |
| 277 ; MIPS32: sltu |
| 278 ; MIPS32: addu |
| 279 ; MIPS32: 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 ; MIPS32-LABEL: sub64BitSigned |
| 299 ; MIPS32: subu |
| 300 ; MIPS32: sltu |
| 301 ; MIPS32: addu |
| 302 ; MIPS32: 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 ; MIPS32-LABEL: sub64BitUnsigned |
| 322 ; MIPS32: subu |
| 323 ; MIPS32: sltu |
| 324 ; MIPS32: addu |
| 325 ; MIPS32: 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 |
641 define internal i64 @or64BitUnsigned(i64 %a, i64 %b) { | 707 define internal i64 @or64BitUnsigned(i64 %a, i64 %b) { |
642 entry: | 708 entry: |
643 %or = or i64 %b, %a | 709 %or = or i64 %b, %a |
644 ret i64 %or | 710 ret i64 %or |
645 } | 711 } |
646 ; CHECK-LABEL: or64BitUnsigned | 712 ; CHECK-LABEL: or64BitUnsigned |
647 ; CHECK: or | 713 ; CHECK: or |
648 ; CHECK: or | 714 ; CHECK: or |
649 ; | 715 ; |
650 ; OPTM1-LABEL: or64BitUnsigned | 716 ; OPTM1-LABEL: or64BitUnsigned |
651 ; OPTM1: or | 717 ; OPTM1: or |
652 ; OPTM1: or | 718 ; OPTM1: or |
653 | 719 |
654 ; ARM32-LABEL: or64BitUnsigned | 720 ; ARM32-LABEL: or64BitUnsigned |
655 ; ARM32: orr | 721 ; ARM32: orr |
656 ; ARM32: orr | 722 ; ARM32: orr |
657 | 723 |
| 724 ; MIPS32-LABEL: or64BitUnsigned |
| 725 ; MIPS32: or |
| 726 ; MIPS32: or |
| 727 |
658 define internal i64 @xor64BitSigned(i64 %a, i64 %b) { | 728 define internal i64 @xor64BitSigned(i64 %a, i64 %b) { |
659 entry: | 729 entry: |
660 %xor = xor i64 %b, %a | 730 %xor = xor i64 %b, %a |
661 ret i64 %xor | 731 ret i64 %xor |
662 } | 732 } |
663 ; CHECK-LABEL: xor64BitSigned | 733 ; CHECK-LABEL: xor64BitSigned |
664 ; CHECK: xor | 734 ; CHECK: xor |
665 ; CHECK: xor | 735 ; CHECK: xor |
666 ; | 736 ; |
667 ; OPTM1-LABEL: xor64BitSigned | 737 ; OPTM1-LABEL: xor64BitSigned |
668 ; OPTM1: xor | 738 ; OPTM1: xor |
669 ; OPTM1: xor | 739 ; OPTM1: xor |
670 | 740 |
671 ; ARM32-LABEL: xor64BitSigned | 741 ; ARM32-LABEL: xor64BitSigned |
672 ; ARM32: eor | 742 ; ARM32: eor |
673 ; ARM32: eor | 743 ; ARM32: eor |
674 | 744 |
| 745 ; MIPS32-LABEL: xor64BitSigned |
| 746 ; MIPS32: xor |
| 747 ; MIPS32: xor |
| 748 |
675 define internal i64 @xor64BitUnsigned(i64 %a, i64 %b) { | 749 define internal i64 @xor64BitUnsigned(i64 %a, i64 %b) { |
676 entry: | 750 entry: |
677 %xor = xor i64 %b, %a | 751 %xor = xor i64 %b, %a |
678 ret i64 %xor | 752 ret i64 %xor |
679 } | 753 } |
680 ; CHECK-LABEL: xor64BitUnsigned | 754 ; CHECK-LABEL: xor64BitUnsigned |
681 ; CHECK: xor | 755 ; CHECK: xor |
682 ; CHECK: xor | 756 ; CHECK: xor |
683 ; | 757 ; |
684 ; OPTM1-LABEL: xor64BitUnsigned | 758 ; OPTM1-LABEL: xor64BitUnsigned |
685 ; OPTM1: xor | 759 ; OPTM1: xor |
686 ; OPTM1: xor | 760 ; OPTM1: xor |
687 | 761 |
688 ; ARM32-LABEL: xor64BitUnsigned | 762 ; ARM32-LABEL: xor64BitUnsigned |
689 ; ARM32: eor | 763 ; ARM32: eor |
690 ; ARM32: eor | 764 ; ARM32: eor |
691 | 765 |
| 766 ; MIPS32-LABEL: xor64BitUnsigned |
| 767 ; MIPS32: xor |
| 768 ; MIPS32: xor |
| 769 |
692 define internal i32 @trunc64To32Signed(i64 %padding, i64 %a) { | 770 define internal i32 @trunc64To32Signed(i64 %padding, i64 %a) { |
693 entry: | 771 entry: |
694 %conv = trunc i64 %a to i32 | 772 %conv = trunc i64 %a to i32 |
695 ret i32 %conv | 773 ret i32 %conv |
696 } | 774 } |
697 ; CHECK-LABEL: trunc64To32Signed | 775 ; CHECK-LABEL: trunc64To32Signed |
698 ; CHECK: mov eax,DWORD PTR [esp+0xc] | 776 ; CHECK: mov eax,DWORD PTR [esp+0xc] |
699 ; | 777 ; |
700 ; OPTM1-LABEL: trunc64To32Signed | 778 ; OPTM1-LABEL: trunc64To32Signed |
701 ; OPTM1: mov eax,DWORD PTR [esp+ | 779 ; OPTM1: mov eax,DWORD PTR [esp+ |
(...skipping 1150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1852 ; CHECK-LABEL: phi64Undef | 1930 ; CHECK-LABEL: phi64Undef |
1853 ; CHECK: mov {{.*}},0x0 | 1931 ; CHECK: mov {{.*}},0x0 |
1854 ; CHECK: mov {{.*}},0x0 | 1932 ; CHECK: mov {{.*}},0x0 |
1855 ; OPTM1-LABEL: phi64Undef | 1933 ; OPTM1-LABEL: phi64Undef |
1856 ; OPTM1: mov {{.*}},0x0 | 1934 ; OPTM1: mov {{.*}},0x0 |
1857 ; OPTM1: mov {{.*}},0x0 | 1935 ; OPTM1: mov {{.*}},0x0 |
1858 ; ARM32-LABEL: phi64Undef | 1936 ; ARM32-LABEL: phi64Undef |
1859 ; ARM32: mov {{.*}} #0 | 1937 ; ARM32: mov {{.*}} #0 |
1860 ; ARM32: mov {{.*}} #0 | 1938 ; ARM32: mov {{.*}} #0 |
1861 | 1939 |
OLD | NEW |