1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -run-pass x86-domain-reassignment -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512dq -o - %s | FileCheck %s
4 ; ModuleID = '../test/CodeGen/X86/gpr-to-mask.ll'
5 source_filename = "../test/CodeGen/X86/gpr-to-mask.ll"
6 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
7 target triple = "x86_64-unknown-unknown"
9 define void @test_fcmp_storefloat(i1 %cond, float* %fptr, float %f1, float %f2, float %f3, float %f4, float %f5, float %f6) #0 {
11 br i1 %cond, label %if, label %else
14 %cmp1 = fcmp oeq float %f3, %f4
17 else: ; preds = %entry
18 %cmp2 = fcmp oeq float %f5, %f6
21 exit: ; preds = %else, %if
22 %val = phi i1 [ %cmp1, %if ], [ %cmp2, %else ]
23 %selected = select i1 %val, float %f1, float %f2
24 store float %selected, float* %fptr
28 define void @test_8bitops() #0 {
31 define void @test_16bitops() #0 {
34 define void @test_32bitops() #0 {
37 define void @test_64bitops() #0 {
40 define void @test_16bitext() #0 {
43 define void @test_32bitext() #0 {
46 define void @test_64bitext() #0 {
51 name: test_fcmp_storefloat
53 exposesReturnsTwice: false
55 regBankSelected: false
57 tracksRegLiveness: true
59 - { id: 0, class: gr8, preferred-register: '' }
60 - { id: 1, class: gr8, preferred-register: '' }
61 - { id: 2, class: gr8, preferred-register: '' }
62 - { id: 3, class: gr32, preferred-register: '' }
63 - { id: 4, class: gr64, preferred-register: '' }
64 - { id: 5, class: vr128x, preferred-register: '' }
65 - { id: 6, class: fr32x, preferred-register: '' }
66 - { id: 7, class: fr32x, preferred-register: '' }
67 - { id: 8, class: fr32x, preferred-register: '' }
68 - { id: 9, class: fr32x, preferred-register: '' }
69 - { id: 10, class: fr32x, preferred-register: '' }
70 - { id: 11, class: gr8, preferred-register: '' }
71 - { id: 12, class: vk1, preferred-register: '' }
72 - { id: 13, class: gr32, preferred-register: '' }
73 - { id: 14, class: vk1, preferred-register: '' }
74 - { id: 15, class: gr32, preferred-register: '' }
75 - { id: 16, class: gr32, preferred-register: '' }
76 - { id: 17, class: gr32, preferred-register: '' }
77 - { id: 18, class: vk1wm, preferred-register: '' }
78 - { id: 19, class: vr128x, preferred-register: '' }
79 - { id: 20, class: vr128, preferred-register: '' }
80 - { id: 21, class: vr128, preferred-register: '' }
81 - { id: 22, class: fr32x, preferred-register: '' }
83 - { reg: '$edi', virtual-reg: '%3' }
84 - { reg: '$rsi', virtual-reg: '%4' }
85 - { reg: '$xmm0', virtual-reg: '%5' }
86 - { reg: '$xmm1', virtual-reg: '%6' }
87 - { reg: '$xmm2', virtual-reg: '%7' }
88 - { reg: '$xmm3', virtual-reg: '%8' }
89 - { reg: '$xmm4', virtual-reg: '%9' }
90 - { reg: '$xmm5', virtual-reg: '%10' }
92 isFrameAddressTaken: false
93 isReturnAddressTaken: false
102 maxCallFrameSize: 4294967295
103 hasOpaqueSPAdjustment: false
105 hasMustTailInVarArgFunc: false
112 ; CHECK-LABEL: name: test_fcmp_storefloat
114 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
115 ; CHECK: liveins: $edi, $rsi, $xmm0, $xmm1, $xmm2, $xmm3, $xmm4, $xmm5
116 ; CHECK: [[COPY:%[0-9]+]]:fr32x = COPY $xmm5
117 ; CHECK: [[COPY1:%[0-9]+]]:fr32x = COPY $xmm4
118 ; CHECK: [[COPY2:%[0-9]+]]:fr32x = COPY $xmm3
119 ; CHECK: [[COPY3:%[0-9]+]]:fr32x = COPY $xmm2
120 ; CHECK: [[COPY4:%[0-9]+]]:fr32x = COPY $xmm1
121 ; CHECK: [[COPY5:%[0-9]+]]:vr128x = COPY $xmm0
122 ; CHECK: [[COPY6:%[0-9]+]]:gr64 = COPY $rsi
123 ; CHECK: [[COPY7:%[0-9]+]]:gr32 = COPY $edi
124 ; CHECK: [[COPY8:%[0-9]+]]:gr8 = COPY [[COPY7]].sub_8bit
125 ; CHECK: TEST8ri killed [[COPY8]], 1, implicit-def $eflags
126 ; CHECK: JCC_1 %bb.2, 4, implicit $eflags
129 ; CHECK: successors: %bb.3(0x80000000)
130 ; CHECK: [[VCMPSSZrr:%[0-9]+]]:vk1 = VCMPSSZrr [[COPY3]], [[COPY2]], 0
131 ; CHECK: [[COPY9:%[0-9]+]]:vk32 = COPY [[VCMPSSZrr]]
132 ; CHECK: [[COPY10:%[0-9]+]]:vk8 = COPY [[COPY9]]
135 ; CHECK: successors: %bb.3(0x80000000)
136 ; CHECK: [[VCMPSSZrr1:%[0-9]+]]:vk1 = VCMPSSZrr [[COPY1]], [[COPY]], 0
137 ; CHECK: [[COPY11:%[0-9]+]]:vk32 = COPY [[VCMPSSZrr1]]
138 ; CHECK: [[COPY12:%[0-9]+]]:vk8 = COPY [[COPY11]]
140 ; CHECK: [[PHI:%[0-9]+]]:vk8 = PHI [[COPY12]], %bb.2, [[COPY10]], %bb.1
141 ; CHECK: [[DEF:%[0-9]+]]:vk32 = IMPLICIT_DEF
142 ; CHECK: [[COPY13:%[0-9]+]]:vk32 = COPY [[PHI]]
143 ; CHECK: [[COPY14:%[0-9]+]]:vk1wm = COPY [[COPY13]]
144 ; CHECK: [[COPY15:%[0-9]+]]:vr128x = COPY [[COPY4]]
145 ; CHECK: [[DEF1:%[0-9]+]]:vr128 = IMPLICIT_DEF
146 ; CHECK: [[VMOVSSZrrk:%[0-9]+]]:vr128 = VMOVSSZrrk [[COPY15]], killed [[COPY14]], killed [[DEF1]], [[COPY5]]
147 ; CHECK: [[COPY16:%[0-9]+]]:fr32x = COPY [[VMOVSSZrrk]]
148 ; CHECK: VMOVSSZmr [[COPY6]], 1, $noreg, 0, $noreg, killed [[COPY16]] :: (store 4 into %ir.fptr)
151 successors: %bb.1(0x40000000), %bb.2(0x40000000)
152 liveins: $edi, $rsi, $xmm0, $xmm1, $xmm2, $xmm3, $xmm4, $xmm5
162 %11 = COPY %3.sub_8bit
163 TEST8ri killed %11, 1, implicit-def $eflags
164 JCC_1 %bb.2, 4, implicit $eflags
168 successors: %bb.3(0x80000000)
170 %14 = VCMPSSZrr %7, %8, 0
172 ; check that cross domain copies are replaced with same domain copies.
175 %0 = COPY %15.sub_8bit
179 successors: %bb.3(0x80000000)
180 %12 = VCMPSSZrr %9, %10, 0
182 ; check that cross domain copies are replaced with same domain copies.
185 %1 = COPY %13.sub_8bit
189 ; check PHI, IMPLICIT_DEF, and INSERT_SUBREG replacers.
191 %2 = PHI %1, %bb.2, %0, %bb.1
193 %16 = INSERT_SUBREG %17, %2, 1
197 %20 = VMOVSSZrrk %19, killed %18, killed %21, %5
199 VMOVSSZmr %4, 1, $noreg, 0, $noreg, killed %22 :: (store 4 into %ir.fptr)
206 exposesReturnsTwice: false
208 regBankSelected: false
210 tracksRegLiveness: true
212 - { id: 0, class: gr64, preferred-register: '' }
213 - { id: 1, class: vr512, preferred-register: '' }
214 - { id: 2, class: vr512, preferred-register: '' }
215 - { id: 3, class: vr512, preferred-register: '' }
216 - { id: 4, class: vr512, preferred-register: '' }
217 - { id: 5, class: vk8, preferred-register: '' }
218 - { id: 6, class: gr32, preferred-register: '' }
219 - { id: 7, class: gr8, preferred-register: '' }
220 - { id: 8, class: gr32, preferred-register: '' }
221 - { id: 9, class: gr32, preferred-register: '' }
222 - { id: 10, class: vk8wm, preferred-register: '' }
223 - { id: 11, class: vr512, preferred-register: '' }
224 - { id: 12, class: gr8, preferred-register: '' }
225 - { id: 13, class: gr8, preferred-register: '' }
226 - { id: 14, class: gr8, preferred-register: '' }
227 - { id: 15, class: gr8, preferred-register: '' }
228 - { id: 16, class: gr8, preferred-register: '' }
229 - { id: 17, class: gr8, preferred-register: '' }
230 - { id: 18, class: gr8, preferred-register: '' }
232 - { reg: '$rdi', virtual-reg: '%0' }
233 - { reg: '$zmm0', virtual-reg: '%1' }
234 - { reg: '$zmm1', virtual-reg: '%2' }
235 - { reg: '$zmm2', virtual-reg: '%3' }
236 - { reg: '$zmm3', virtual-reg: '%4' }
238 isFrameAddressTaken: false
239 isReturnAddressTaken: false
248 maxCallFrameSize: 4294967295
249 hasOpaqueSPAdjustment: false
251 hasMustTailInVarArgFunc: false
258 ; CHECK-LABEL: name: test_8bitops
260 ; CHECK: successors: %bb.1(0x80000000)
261 ; CHECK: liveins: $rdi, $zmm0, $zmm1, $zmm2, $zmm3
262 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
263 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
264 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
265 ; CHECK: [[COPY3:%[0-9]+]]:vr512 = COPY $zmm2
266 ; CHECK: [[COPY4:%[0-9]+]]:vr512 = COPY $zmm3
267 ; CHECK: [[VCMPPDZrri:%[0-9]+]]:vk8 = VCMPPDZrri [[COPY3]], [[COPY4]], 0
268 ; CHECK: [[COPY5:%[0-9]+]]:vk32 = COPY [[VCMPPDZrri]]
269 ; CHECK: [[COPY6:%[0-9]+]]:vk8 = COPY [[COPY5]]
270 ; CHECK: [[KSHIFTRBri:%[0-9]+]]:vk8 = KSHIFTRBri [[COPY6]], 2
271 ; CHECK: [[KSHIFTLBri:%[0-9]+]]:vk8 = KSHIFTLBri [[KSHIFTRBri]], 1
272 ; CHECK: [[KNOTBrr:%[0-9]+]]:vk8 = KNOTBrr [[KSHIFTLBri]]
273 ; CHECK: [[KORBrr:%[0-9]+]]:vk8 = KORBrr [[KNOTBrr]], [[KSHIFTRBri]]
274 ; CHECK: [[KANDBrr:%[0-9]+]]:vk8 = KANDBrr [[KORBrr]], [[KSHIFTLBri]]
275 ; CHECK: [[KXORBrr:%[0-9]+]]:vk8 = KXORBrr [[KANDBrr]], [[KSHIFTRBri]]
276 ; CHECK: [[KADDBrr:%[0-9]+]]:vk8 = KADDBrr [[KXORBrr]], [[KNOTBrr]]
277 ; CHECK: [[DEF:%[0-9]+]]:vk32 = IMPLICIT_DEF
278 ; CHECK: [[COPY7:%[0-9]+]]:vk32 = COPY [[KADDBrr]]
279 ; CHECK: [[COPY8:%[0-9]+]]:vk8wm = COPY [[COPY7]]
280 ; CHECK: [[VMOVAPDZrrk:%[0-9]+]]:vr512 = VMOVAPDZrrk [[COPY2]], killed [[COPY8]], [[COPY1]]
281 ; CHECK: VMOVAPDZmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVAPDZrrk]]
283 ; CHECK: successors: %bb.2(0x80000000)
287 liveins: $rdi, $zmm0, $zmm1, $zmm2, $zmm3
295 %5 = VCMPPDZrri %3, %4, 0
297 %7 = COPY %6.sub_8bit
299 %12 = SHR8ri %7, 2, implicit-def dead $eflags
300 %13 = SHL8ri %12, 1, implicit-def dead $eflags
302 %15 = OR8rr %14, %12, implicit-def dead $eflags
303 %16 = AND8rr %15, %13, implicit-def dead $eflags
304 %17 = XOR8rr %16, %12, implicit-def dead $eflags
305 %18 = ADD8rr %17, %14, implicit-def dead $eflags
308 %9 = INSERT_SUBREG %8, %18, 1
310 %11 = VMOVAPDZrrk %2, killed %10, %1
311 VMOVAPDZmr %0, 1, $noreg, 0, $noreg, killed %11
313 ; FIXME We can't replace TEST with KTEST due to flag differences
314 ; TEST8rr %18, %18, implicit-def $eflags
315 ; JCC_1 %bb.1, 4, implicit $eflags
327 exposesReturnsTwice: false
329 regBankSelected: false
331 tracksRegLiveness: true
333 - { id: 0, class: gr64, preferred-register: '' }
334 - { id: 1, class: vr512, preferred-register: '' }
335 - { id: 2, class: vr512, preferred-register: '' }
336 - { id: 3, class: vr512, preferred-register: '' }
337 - { id: 4, class: vr512, preferred-register: '' }
338 - { id: 5, class: vk16, preferred-register: '' }
339 - { id: 6, class: gr32, preferred-register: '' }
340 - { id: 7, class: gr16, preferred-register: '' }
341 - { id: 8, class: gr32, preferred-register: '' }
342 - { id: 9, class: gr32, preferred-register: '' }
343 - { id: 10, class: vk16wm, preferred-register: '' }
344 - { id: 11, class: vr512, preferred-register: '' }
345 - { id: 12, class: gr16, preferred-register: '' }
346 - { id: 13, class: gr16, preferred-register: '' }
347 - { id: 14, class: gr16, preferred-register: '' }
348 - { id: 15, class: gr16, preferred-register: '' }
349 - { id: 16, class: gr16, preferred-register: '' }
350 - { id: 17, class: gr16, preferred-register: '' }
352 - { reg: '$rdi', virtual-reg: '%0' }
353 - { reg: '$zmm0', virtual-reg: '%1' }
354 - { reg: '$zmm1', virtual-reg: '%2' }
355 - { reg: '$zmm2', virtual-reg: '%3' }
356 - { reg: '$zmm3', virtual-reg: '%4' }
358 isFrameAddressTaken: false
359 isReturnAddressTaken: false
368 maxCallFrameSize: 4294967295
369 hasOpaqueSPAdjustment: false
371 hasMustTailInVarArgFunc: false
378 ; CHECK-LABEL: name: test_16bitops
380 ; CHECK: successors: %bb.1(0x80000000)
381 ; CHECK: liveins: $rdi, $zmm0, $zmm1, $zmm2, $zmm3
382 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
383 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
384 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
385 ; CHECK: [[COPY3:%[0-9]+]]:vr512 = COPY $zmm2
386 ; CHECK: [[COPY4:%[0-9]+]]:vr512 = COPY $zmm3
387 ; CHECK: [[VCMPPSZrri:%[0-9]+]]:vk16 = VCMPPSZrri [[COPY3]], [[COPY4]], 0
388 ; CHECK: [[COPY5:%[0-9]+]]:vk32 = COPY [[VCMPPSZrri]]
389 ; CHECK: [[COPY6:%[0-9]+]]:vk16 = COPY [[COPY5]]
390 ; CHECK: [[KSHIFTRWri:%[0-9]+]]:vk16 = KSHIFTRWri [[COPY6]], 2
391 ; CHECK: [[KSHIFTLWri:%[0-9]+]]:vk16 = KSHIFTLWri [[KSHIFTRWri]], 1
392 ; CHECK: [[KNOTWrr:%[0-9]+]]:vk16 = KNOTWrr [[KSHIFTLWri]]
393 ; CHECK: [[KORWrr:%[0-9]+]]:vk16 = KORWrr [[KNOTWrr]], [[KSHIFTRWri]]
394 ; CHECK: [[KANDWrr:%[0-9]+]]:vk16 = KANDWrr [[KORWrr]], [[KSHIFTLWri]]
395 ; CHECK: [[KXORWrr:%[0-9]+]]:vk16 = KXORWrr [[KANDWrr]], [[KSHIFTRWri]]
396 ; CHECK: [[DEF:%[0-9]+]]:vk32 = IMPLICIT_DEF
397 ; CHECK: [[COPY7:%[0-9]+]]:vk32 = COPY [[KXORWrr]]
398 ; CHECK: [[COPY8:%[0-9]+]]:vk16wm = COPY [[COPY7]]
399 ; CHECK: [[VMOVAPSZrrk:%[0-9]+]]:vr512 = VMOVAPSZrrk [[COPY2]], killed [[COPY8]], [[COPY1]]
400 ; CHECK: VMOVAPSZmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVAPSZrrk]]
402 ; CHECK: successors: %bb.2(0x80000000)
406 liveins: $rdi, $zmm0, $zmm1, $zmm2, $zmm3
414 %5 = VCMPPSZrri %3, %4, 0
416 %7 = COPY %6.sub_16bit
418 %12 = SHR16ri %7, 2, implicit-def dead $eflags
419 %13 = SHL16ri %12, 1, implicit-def dead $eflags
421 %15 = OR16rr %14, %12, implicit-def dead $eflags
422 %16 = AND16rr %15, %13, implicit-def dead $eflags
423 %17 = XOR16rr %16, %12, implicit-def dead $eflags
426 %9 = INSERT_SUBREG %8, %17, 3
428 %11 = VMOVAPSZrrk %2, killed %10, %1
429 VMOVAPSZmr %0, 1, $noreg, 0, $noreg, killed %11
431 ; FIXME We can't replace TEST with KTEST due to flag differences
432 ; FIXME TEST16rr %17, %17, implicit-def $eflags
433 ; FIXME JCC_1 %bb.1, 4, implicit $eflags
445 exposesReturnsTwice: false
447 regBankSelected: false
449 tracksRegLiveness: true
451 - { id: 0, class: gr64, preferred-register: '' }
452 - { id: 1, class: vr512, preferred-register: '' }
453 - { id: 2, class: vr512, preferred-register: '' }
454 - { id: 3, class: vk32wm, preferred-register: '' }
455 - { id: 4, class: vr512, preferred-register: '' }
456 - { id: 5, class: gr32, preferred-register: '' }
457 - { id: 6, class: gr32, preferred-register: '' }
458 - { id: 7, class: gr32, preferred-register: '' }
459 - { id: 8, class: gr32, preferred-register: '' }
460 - { id: 9, class: gr32, preferred-register: '' }
461 - { id: 10, class: gr32, preferred-register: '' }
462 - { id: 11, class: gr32, preferred-register: '' }
463 - { id: 12, class: gr32, preferred-register: '' }
464 - { id: 13, class: gr32, preferred-register: '' }
466 - { reg: '$rdi', virtual-reg: '%0' }
467 - { reg: '$zmm0', virtual-reg: '%1' }
468 - { reg: '$zmm1', virtual-reg: '%2' }
470 isFrameAddressTaken: false
471 isReturnAddressTaken: false
480 maxCallFrameSize: 4294967295
481 hasOpaqueSPAdjustment: false
483 hasMustTailInVarArgFunc: false
490 ; CHECK-LABEL: name: test_32bitops
492 ; CHECK: successors: %bb.1(0x80000000)
493 ; CHECK: liveins: $rdi, $zmm0, $zmm1
494 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
495 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
496 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
497 ; CHECK: [[KMOVDkm:%[0-9]+]]:vk32 = KMOVDkm [[COPY]], 1, $noreg, 0, $noreg
498 ; CHECK: [[KSHIFTRDri:%[0-9]+]]:vk32 = KSHIFTRDri [[KMOVDkm]], 2
499 ; CHECK: [[KSHIFTLDri:%[0-9]+]]:vk32 = KSHIFTLDri [[KSHIFTRDri]], 1
500 ; CHECK: [[KNOTDrr:%[0-9]+]]:vk32 = KNOTDrr [[KSHIFTLDri]]
501 ; CHECK: [[KORDrr:%[0-9]+]]:vk32 = KORDrr [[KNOTDrr]], [[KSHIFTRDri]]
502 ; CHECK: [[KANDDrr:%[0-9]+]]:vk32 = KANDDrr [[KORDrr]], [[KSHIFTLDri]]
503 ; CHECK: [[KXORDrr:%[0-9]+]]:vk32 = KXORDrr [[KANDDrr]], [[KSHIFTRDri]]
504 ; CHECK: [[KANDNDrr:%[0-9]+]]:vk32 = KANDNDrr [[KXORDrr]], [[KORDrr]]
505 ; CHECK: [[KADDDrr:%[0-9]+]]:vk32 = KADDDrr [[KANDNDrr]], [[KXORDrr]]
506 ; CHECK: [[COPY3:%[0-9]+]]:vk32wm = COPY [[KADDDrr]]
507 ; CHECK: [[VMOVDQU16Zrrk:%[0-9]+]]:vr512 = VMOVDQU16Zrrk [[COPY2]], killed [[COPY3]], [[COPY1]]
508 ; CHECK: VMOVDQA32Zmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVDQU16Zrrk]]
510 ; CHECK: successors: %bb.2(0x80000000)
514 liveins: $rdi, $zmm0, $zmm1
520 %5 = MOV32rm %0, 1, $noreg, 0, $noreg
521 %6 = SHR32ri %5, 2, implicit-def dead $eflags
522 %7 = SHL32ri %6, 1, implicit-def dead $eflags
524 %9 = OR32rr %8, %6, implicit-def dead $eflags
525 %10 = AND32rr %9, %7, implicit-def dead $eflags
526 %11 = XOR32rr %10, %6, implicit-def dead $eflags
527 %12 = ANDN32rr %11, %9, implicit-def dead $eflags
528 %13 = ADD32rr %12, %11, implicit-def dead $eflags
531 %4 = VMOVDQU16Zrrk %2, killed %3, %1
532 VMOVDQA32Zmr %0, 1, $noreg, 0, $noreg, killed %4
534 ; FIXME We can't replace TEST with KTEST due to flag differences
535 ; FIXME TEST32rr %13, %13, implicit-def $eflags
536 ; FIXME JCC_1 %bb.1, 4, implicit $eflags
548 exposesReturnsTwice: false
550 regBankSelected: false
552 tracksRegLiveness: true
554 - { id: 0, class: gr64, preferred-register: '' }
555 - { id: 1, class: vr512, preferred-register: '' }
556 - { id: 2, class: vr512, preferred-register: '' }
557 - { id: 3, class: vk64wm, preferred-register: '' }
558 - { id: 4, class: vr512, preferred-register: '' }
559 - { id: 5, class: gr64, preferred-register: '' }
560 - { id: 6, class: gr64, preferred-register: '' }
561 - { id: 7, class: gr64, preferred-register: '' }
562 - { id: 8, class: gr64, preferred-register: '' }
563 - { id: 9, class: gr64, preferred-register: '' }
564 - { id: 10, class: gr64, preferred-register: '' }
565 - { id: 11, class: gr64, preferred-register: '' }
566 - { id: 12, class: gr64, preferred-register: '' }
567 - { id: 13, class: gr64, preferred-register: '' }
569 - { reg: '$rdi', virtual-reg: '%0' }
570 - { reg: '$zmm0', virtual-reg: '%1' }
571 - { reg: '$zmm1', virtual-reg: '%2' }
573 isFrameAddressTaken: false
574 isReturnAddressTaken: false
583 maxCallFrameSize: 4294967295
584 hasOpaqueSPAdjustment: false
586 hasMustTailInVarArgFunc: false
593 ; CHECK-LABEL: name: test_64bitops
595 ; CHECK: successors: %bb.1(0x80000000)
596 ; CHECK: liveins: $rdi, $zmm0, $zmm1
597 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
598 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
599 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
600 ; CHECK: [[KMOVQkm:%[0-9]+]]:vk64 = KMOVQkm [[COPY]], 1, $noreg, 0, $noreg
601 ; CHECK: [[KSHIFTRQri:%[0-9]+]]:vk64 = KSHIFTRQri [[KMOVQkm]], 2
602 ; CHECK: [[KSHIFTLQri:%[0-9]+]]:vk64 = KSHIFTLQri [[KSHIFTRQri]], 1
603 ; CHECK: [[KNOTQrr:%[0-9]+]]:vk64 = KNOTQrr [[KSHIFTLQri]]
604 ; CHECK: [[KORQrr:%[0-9]+]]:vk64 = KORQrr [[KNOTQrr]], [[KSHIFTRQri]]
605 ; CHECK: [[KANDQrr:%[0-9]+]]:vk64 = KANDQrr [[KORQrr]], [[KSHIFTLQri]]
606 ; CHECK: [[KXORQrr:%[0-9]+]]:vk64 = KXORQrr [[KANDQrr]], [[KSHIFTRQri]]
607 ; CHECK: [[KANDNQrr:%[0-9]+]]:vk64 = KANDNQrr [[KXORQrr]], [[KORQrr]]
608 ; CHECK: [[KADDQrr:%[0-9]+]]:vk64 = KADDQrr [[KANDNQrr]], [[KXORQrr]]
609 ; CHECK: [[COPY3:%[0-9]+]]:vk64wm = COPY [[KADDQrr]]
610 ; CHECK: [[VMOVDQU8Zrrk:%[0-9]+]]:vr512 = VMOVDQU8Zrrk [[COPY2]], killed [[COPY3]], [[COPY1]]
611 ; CHECK: VMOVDQA32Zmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVDQU8Zrrk]]
613 ; CHECK: successors: %bb.2(0x80000000)
617 liveins: $rdi, $zmm0, $zmm1
623 %5 = MOV64rm %0, 1, $noreg, 0, $noreg
624 %6 = SHR64ri %5, 2, implicit-def dead $eflags
625 %7 = SHL64ri %6, 1, implicit-def dead $eflags
627 %9 = OR64rr %8, %6, implicit-def dead $eflags
628 %10 = AND64rr %9, %7, implicit-def dead $eflags
629 %11 = XOR64rr %10, %6, implicit-def dead $eflags
630 %12 = ANDN64rr %11, %9, implicit-def dead $eflags
631 %13 = ADD64rr %12, %11, implicit-def dead $eflags
634 %4 = VMOVDQU8Zrrk %2, killed %3, %1
635 VMOVDQA32Zmr %0, 1, $noreg, 0, $noreg, killed %4
637 ; FIXME We can't replace TEST with KTEST due to flag differences
638 ; FIXME TEST64rr %13, %13, implicit-def $eflags
639 ; FIXME JCC_1 %bb.1, 4, implicit $eflags
651 exposesReturnsTwice: false
653 regBankSelected: false
655 tracksRegLiveness: true
657 - { id: 0, class: gr64, preferred-register: '' }
658 - { id: 1, class: vr512, preferred-register: '' }
659 - { id: 2, class: vr512, preferred-register: '' }
660 - { id: 3, class: vk16wm, preferred-register: '' }
661 - { id: 4, class: vr512, preferred-register: '' }
662 - { id: 5, class: gr16, preferred-register: '' }
663 - { id: 6, class: gr16, preferred-register: '' }
665 - { reg: '$rdi', virtual-reg: '%0' }
666 - { reg: '$zmm0', virtual-reg: '%1' }
667 - { reg: '$zmm1', virtual-reg: '%2' }
669 isFrameAddressTaken: false
670 isReturnAddressTaken: false
679 maxCallFrameSize: 4294967295
680 hasOpaqueSPAdjustment: false
682 hasMustTailInVarArgFunc: false
690 liveins: $rdi, $zmm0, $zmm1
692 ; CHECK-LABEL: name: test_16bitext
693 ; CHECK: liveins: $rdi, $zmm0, $zmm1
694 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
695 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
696 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
697 ; CHECK: [[KMOVBkm:%[0-9]+]]:vk8 = KMOVBkm [[COPY]], 1, $noreg, 0, $noreg
698 ; CHECK: [[COPY3:%[0-9]+]]:vk16 = COPY [[KMOVBkm]]
699 ; CHECK: [[KNOTWrr:%[0-9]+]]:vk16 = KNOTWrr [[COPY3]]
700 ; CHECK: [[COPY4:%[0-9]+]]:vk16wm = COPY [[KNOTWrr]]
701 ; CHECK: [[VMOVAPSZrrk:%[0-9]+]]:vr512 = VMOVAPSZrrk [[COPY2]], killed [[COPY4]], [[COPY1]]
702 ; CHECK: VMOVAPSZmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVAPSZrrk]]
708 %5 = MOVZX16rm8 %0, 1, $noreg, 0, $noreg
712 %4 = VMOVAPSZrrk %2, killed %3, %1
713 VMOVAPSZmr %0, 1, $noreg, 0, $noreg, killed %4
720 exposesReturnsTwice: false
722 regBankSelected: false
724 tracksRegLiveness: true
726 - { id: 0, class: gr64, preferred-register: '' }
727 - { id: 1, class: vr512, preferred-register: '' }
728 - { id: 2, class: vr512, preferred-register: '' }
729 - { id: 3, class: vk64wm, preferred-register: '' }
730 - { id: 4, class: vr512, preferred-register: '' }
731 - { id: 5, class: gr32, preferred-register: '' }
732 - { id: 6, class: gr32, preferred-register: '' }
733 - { id: 7, class: gr32, preferred-register: '' }
735 - { reg: '$rdi', virtual-reg: '%0' }
736 - { reg: '$zmm0', virtual-reg: '%1' }
737 - { reg: '$zmm1', virtual-reg: '%2' }
739 isFrameAddressTaken: false
740 isReturnAddressTaken: false
749 maxCallFrameSize: 4294967295
750 hasOpaqueSPAdjustment: false
752 hasMustTailInVarArgFunc: false
760 liveins: $rdi, $zmm0, $zmm1
762 ; CHECK-LABEL: name: test_32bitext
763 ; CHECK: liveins: $rdi, $zmm0, $zmm1
764 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
765 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
766 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
767 ; CHECK: [[KMOVBkm:%[0-9]+]]:vk8 = KMOVBkm [[COPY]], 1, $noreg, 0, $noreg
768 ; CHECK: [[COPY3:%[0-9]+]]:vk32 = COPY [[KMOVBkm]]
769 ; CHECK: [[KMOVWkm:%[0-9]+]]:vk16 = KMOVWkm [[COPY]], 1, $noreg, 0, $noreg
770 ; CHECK: [[COPY4:%[0-9]+]]:vk32 = COPY [[KMOVWkm]]
771 ; CHECK: [[KADDDrr:%[0-9]+]]:vk32 = KADDDrr [[COPY3]], [[COPY4]]
772 ; CHECK: [[COPY5:%[0-9]+]]:vk64wm = COPY [[KADDDrr]]
773 ; CHECK: [[VMOVDQU16Zrrk:%[0-9]+]]:vr512 = VMOVDQU16Zrrk [[COPY2]], killed [[COPY5]], [[COPY1]]
774 ; CHECK: VMOVDQA32Zmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVDQU16Zrrk]]
780 %5 = MOVZX32rm8 %0, 1, $noreg, 0, $noreg
781 %6 = MOVZX32rm16 %0, 1, $noreg, 0, $noreg
782 %7 = ADD32rr %5, %6, implicit-def dead $eflags
785 %4 = VMOVDQU16Zrrk %2, killed %3, %1
786 VMOVDQA32Zmr %0, 1, $noreg, 0, $noreg, killed %4
793 exposesReturnsTwice: false
795 regBankSelected: false
797 tracksRegLiveness: true
799 - { id: 0, class: gr64, preferred-register: '' }
800 - { id: 1, class: vr512, preferred-register: '' }
801 - { id: 2, class: vr512, preferred-register: '' }
802 - { id: 3, class: vk64wm, preferred-register: '' }
803 - { id: 4, class: vr512, preferred-register: '' }
804 - { id: 5, class: gr64, preferred-register: '' }
805 - { id: 6, class: gr64, preferred-register: '' }
806 - { id: 7, class: gr64, preferred-register: '' }
808 - { reg: '$rdi', virtual-reg: '%0' }
809 - { reg: '$zmm0', virtual-reg: '%1' }
810 - { reg: '$zmm1', virtual-reg: '%2' }
812 isFrameAddressTaken: false
813 isReturnAddressTaken: false
822 maxCallFrameSize: 4294967295
823 hasOpaqueSPAdjustment: false
825 hasMustTailInVarArgFunc: false
833 liveins: $rdi, $zmm0, $zmm1
835 ; CHECK-LABEL: name: test_64bitext
836 ; CHECK: liveins: $rdi, $zmm0, $zmm1
837 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
838 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
839 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
840 ; CHECK: [[KMOVBkm:%[0-9]+]]:vk8 = KMOVBkm [[COPY]], 1, $noreg, 0, $noreg
841 ; CHECK: [[COPY3:%[0-9]+]]:vk64 = COPY [[KMOVBkm]]
842 ; CHECK: [[KMOVWkm:%[0-9]+]]:vk16 = KMOVWkm [[COPY]], 1, $noreg, 0, $noreg
843 ; CHECK: [[COPY4:%[0-9]+]]:vk64 = COPY [[KMOVWkm]]
844 ; CHECK: [[KADDQrr:%[0-9]+]]:vk64 = KADDQrr [[COPY3]], [[COPY4]]
845 ; CHECK: [[COPY5:%[0-9]+]]:vk64wm = COPY [[KADDQrr]]
846 ; CHECK: [[VMOVDQU8Zrrk:%[0-9]+]]:vr512 = VMOVDQU8Zrrk [[COPY2]], killed [[COPY5]], [[COPY1]]
847 ; CHECK: VMOVDQA32Zmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVDQU8Zrrk]]
853 %5 = MOVZX64rm8 %0, 1, $noreg, 0, $noreg
854 %6 = MOVZX64rm16 %0, 1, $noreg, 0, $noreg
855 %7 = ADD64rr %5, %6, implicit-def dead $eflags
858 %4 = VMOVDQU8Zrrk %2, killed %3, %1
859 VMOVDQA32Zmr %0, 1, $noreg, 0, $noreg, killed %4