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: JE_1 %bb.2, 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: [[COPY13:%[0-9]+]]:vk32 = COPY [[PHI]]
142 ; CHECK: [[COPY14:%[0-9]+]]:vk1wm = COPY [[COPY13]]
143 ; CHECK: [[COPY15:%[0-9]+]]:vr128x = COPY [[COPY4]]
144 ; CHECK: [[DEF:%[0-9]+]]:vr128 = IMPLICIT_DEF
145 ; CHECK: [[VMOVSSZrrk:%[0-9]+]]:vr128 = VMOVSSZrrk [[COPY15]], killed [[COPY14]], killed [[DEF]], [[COPY5]]
146 ; CHECK: [[COPY16:%[0-9]+]]:fr32x = COPY [[VMOVSSZrrk]]
147 ; CHECK: VMOVSSZmr [[COPY6]], 1, $noreg, 0, $noreg, killed [[COPY16]] :: (store 4 into %ir.fptr)
150 successors: %bb.1(0x40000000), %bb.2(0x40000000)
151 liveins: $edi, $rsi, $xmm0, $xmm1, $xmm2, $xmm3, $xmm4, $xmm5
161 %11 = COPY %3.sub_8bit
162 TEST8ri killed %11, 1, implicit-def $eflags
163 JE_1 %bb.2, implicit $eflags
167 successors: %bb.3(0x80000000)
169 %14 = VCMPSSZrr %7, %8, 0
171 ; check that cross domain copies are replaced with same domain copies.
174 %0 = COPY %15.sub_8bit
178 successors: %bb.3(0x80000000)
179 %12 = VCMPSSZrr %9, %10, 0
181 ; check that cross domain copies are replaced with same domain copies.
184 %1 = COPY %13.sub_8bit
188 ; check PHI, IMPLICIT_DEF, and INSERT_SUBREG replacers.
190 %2 = PHI %1, %bb.2, %0, %bb.1
192 %16 = INSERT_SUBREG %17, %2, 1
196 %20 = VMOVSSZrrk %19, killed %18, killed %21, %5
198 VMOVSSZmr %4, 1, $noreg, 0, $noreg, killed %22 :: (store 4 into %ir.fptr)
205 exposesReturnsTwice: false
207 regBankSelected: false
209 tracksRegLiveness: true
211 - { id: 0, class: gr64, preferred-register: '' }
212 - { id: 1, class: vr512, preferred-register: '' }
213 - { id: 2, class: vr512, preferred-register: '' }
214 - { id: 3, class: vr512, preferred-register: '' }
215 - { id: 4, class: vr512, preferred-register: '' }
216 - { id: 5, class: vk8, preferred-register: '' }
217 - { id: 6, class: gr32, preferred-register: '' }
218 - { id: 7, class: gr8, preferred-register: '' }
219 - { id: 8, class: gr32, preferred-register: '' }
220 - { id: 9, class: gr32, preferred-register: '' }
221 - { id: 10, class: vk8wm, preferred-register: '' }
222 - { id: 11, class: vr512, preferred-register: '' }
223 - { id: 12, class: gr8, preferred-register: '' }
224 - { id: 13, class: gr8, preferred-register: '' }
225 - { id: 14, class: gr8, preferred-register: '' }
226 - { id: 15, class: gr8, preferred-register: '' }
227 - { id: 16, class: gr8, preferred-register: '' }
228 - { id: 17, class: gr8, preferred-register: '' }
229 - { id: 18, class: gr8, preferred-register: '' }
231 - { reg: '$rdi', virtual-reg: '%0' }
232 - { reg: '$zmm0', virtual-reg: '%1' }
233 - { reg: '$zmm1', virtual-reg: '%2' }
234 - { reg: '$zmm2', virtual-reg: '%3' }
235 - { reg: '$zmm3', virtual-reg: '%4' }
237 isFrameAddressTaken: false
238 isReturnAddressTaken: false
247 maxCallFrameSize: 4294967295
248 hasOpaqueSPAdjustment: false
250 hasMustTailInVarArgFunc: false
257 ; CHECK-LABEL: name: test_8bitops
259 ; CHECK: successors: %bb.1(0x80000000)
260 ; CHECK: liveins: $rdi, $zmm0, $zmm1, $zmm2, $zmm3
261 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
262 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
263 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
264 ; CHECK: [[COPY3:%[0-9]+]]:vr512 = COPY $zmm2
265 ; CHECK: [[COPY4:%[0-9]+]]:vr512 = COPY $zmm3
266 ; CHECK: [[VCMPPDZrri:%[0-9]+]]:vk8 = VCMPPDZrri [[COPY3]], [[COPY4]], 0
267 ; CHECK: [[COPY5:%[0-9]+]]:vk32 = COPY [[VCMPPDZrri]]
268 ; CHECK: [[COPY6:%[0-9]+]]:vk8 = COPY [[COPY5]]
269 ; CHECK: [[KSHIFTRBri:%[0-9]+]]:vk8 = KSHIFTRBri [[COPY6]], 2
270 ; CHECK: [[KSHIFTLBri:%[0-9]+]]:vk8 = KSHIFTLBri [[KSHIFTRBri]], 1
271 ; CHECK: [[KNOTBrr:%[0-9]+]]:vk8 = KNOTBrr [[KSHIFTLBri]]
272 ; CHECK: [[KORBrr:%[0-9]+]]:vk8 = KORBrr [[KNOTBrr]], [[KSHIFTRBri]]
273 ; CHECK: [[KANDBrr:%[0-9]+]]:vk8 = KANDBrr [[KORBrr]], [[KSHIFTLBri]]
274 ; CHECK: [[KXORBrr:%[0-9]+]]:vk8 = KXORBrr [[KANDBrr]], [[KSHIFTRBri]]
275 ; CHECK: [[KADDBrr:%[0-9]+]]:vk8 = KADDBrr [[KXORBrr]], [[KNOTBrr]]
276 ; CHECK: [[COPY7:%[0-9]+]]:vk32 = COPY [[KADDBrr]]
277 ; CHECK: [[COPY8:%[0-9]+]]:vk8wm = COPY [[COPY7]]
278 ; CHECK: [[VMOVAPDZrrk:%[0-9]+]]:vr512 = VMOVAPDZrrk [[COPY2]], killed [[COPY8]], [[COPY1]]
279 ; CHECK: VMOVAPDZmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVAPDZrrk]]
281 ; CHECK: successors: %bb.2(0x80000000)
285 liveins: $rdi, $zmm0, $zmm1, $zmm2, $zmm3
293 %5 = VCMPPDZrri %3, %4, 0
295 %7 = COPY %6.sub_8bit
297 %12 = SHR8ri %7, 2, implicit-def dead $eflags
298 %13 = SHL8ri %12, 1, implicit-def dead $eflags
300 %15 = OR8rr %14, %12, implicit-def dead $eflags
301 %16 = AND8rr %15, %13, implicit-def dead $eflags
302 %17 = XOR8rr %16, %12, implicit-def dead $eflags
303 %18 = ADD8rr %17, %14, implicit-def dead $eflags
306 %9 = INSERT_SUBREG %8, %18, 1
308 %11 = VMOVAPDZrrk %2, killed %10, %1
309 VMOVAPDZmr %0, 1, $noreg, 0, $noreg, killed %11
311 ; FIXME We can't replace TEST with KTEST due to flag differences
312 ; TEST8rr %18, %18, implicit-def $eflags
313 ; JE_1 %bb.1, implicit $eflags
325 exposesReturnsTwice: false
327 regBankSelected: false
329 tracksRegLiveness: true
331 - { id: 0, class: gr64, preferred-register: '' }
332 - { id: 1, class: vr512, preferred-register: '' }
333 - { id: 2, class: vr512, preferred-register: '' }
334 - { id: 3, class: vr512, preferred-register: '' }
335 - { id: 4, class: vr512, preferred-register: '' }
336 - { id: 5, class: vk16, preferred-register: '' }
337 - { id: 6, class: gr32, preferred-register: '' }
338 - { id: 7, class: gr16, preferred-register: '' }
339 - { id: 8, class: gr32, preferred-register: '' }
340 - { id: 9, class: gr32, preferred-register: '' }
341 - { id: 10, class: vk16wm, preferred-register: '' }
342 - { id: 11, class: vr512, preferred-register: '' }
343 - { id: 12, class: gr16, preferred-register: '' }
344 - { id: 13, class: gr16, preferred-register: '' }
345 - { id: 14, class: gr16, preferred-register: '' }
346 - { id: 15, class: gr16, preferred-register: '' }
347 - { id: 16, class: gr16, preferred-register: '' }
348 - { id: 17, class: gr16, preferred-register: '' }
350 - { reg: '$rdi', virtual-reg: '%0' }
351 - { reg: '$zmm0', virtual-reg: '%1' }
352 - { reg: '$zmm1', virtual-reg: '%2' }
353 - { reg: '$zmm2', virtual-reg: '%3' }
354 - { reg: '$zmm3', virtual-reg: '%4' }
356 isFrameAddressTaken: false
357 isReturnAddressTaken: false
366 maxCallFrameSize: 4294967295
367 hasOpaqueSPAdjustment: false
369 hasMustTailInVarArgFunc: false
376 ; CHECK-LABEL: name: test_16bitops
378 ; CHECK: successors: %bb.1(0x80000000)
379 ; CHECK: liveins: $rdi, $zmm0, $zmm1, $zmm2, $zmm3
380 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
381 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
382 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
383 ; CHECK: [[COPY3:%[0-9]+]]:vr512 = COPY $zmm2
384 ; CHECK: [[COPY4:%[0-9]+]]:vr512 = COPY $zmm3
385 ; CHECK: [[VCMPPSZrri:%[0-9]+]]:vk16 = VCMPPSZrri [[COPY3]], [[COPY4]], 0
386 ; CHECK: [[COPY5:%[0-9]+]]:vk32 = COPY [[VCMPPSZrri]]
387 ; CHECK: [[COPY6:%[0-9]+]]:vk16 = COPY [[COPY5]]
388 ; CHECK: [[KSHIFTRWri:%[0-9]+]]:vk16 = KSHIFTRWri [[COPY6]], 2
389 ; CHECK: [[KSHIFTLWri:%[0-9]+]]:vk16 = KSHIFTLWri [[KSHIFTRWri]], 1
390 ; CHECK: [[KNOTWrr:%[0-9]+]]:vk16 = KNOTWrr [[KSHIFTLWri]]
391 ; CHECK: [[KORWrr:%[0-9]+]]:vk16 = KORWrr [[KNOTWrr]], [[KSHIFTRWri]]
392 ; CHECK: [[KANDWrr:%[0-9]+]]:vk16 = KANDWrr [[KORWrr]], [[KSHIFTLWri]]
393 ; CHECK: [[KXORWrr:%[0-9]+]]:vk16 = KXORWrr [[KANDWrr]], [[KSHIFTRWri]]
394 ; CHECK: [[COPY7:%[0-9]+]]:vk32 = COPY [[KXORWrr]]
395 ; CHECK: [[COPY8:%[0-9]+]]:vk16wm = COPY [[COPY7]]
396 ; CHECK: [[VMOVAPSZrrk:%[0-9]+]]:vr512 = VMOVAPSZrrk [[COPY2]], killed [[COPY8]], [[COPY1]]
397 ; CHECK: VMOVAPSZmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVAPSZrrk]]
399 ; CHECK: successors: %bb.2(0x80000000)
403 liveins: $rdi, $zmm0, $zmm1, $zmm2, $zmm3
411 %5 = VCMPPSZrri %3, %4, 0
413 %7 = COPY %6.sub_16bit
415 %12 = SHR16ri %7, 2, implicit-def dead $eflags
416 %13 = SHL16ri %12, 1, implicit-def dead $eflags
418 %15 = OR16rr %14, %12, implicit-def dead $eflags
419 %16 = AND16rr %15, %13, implicit-def dead $eflags
420 %17 = XOR16rr %16, %12, implicit-def dead $eflags
423 %9 = INSERT_SUBREG %8, %17, 3
425 %11 = VMOVAPSZrrk %2, killed %10, %1
426 VMOVAPSZmr %0, 1, $noreg, 0, $noreg, killed %11
428 ; FIXME We can't replace TEST with KTEST due to flag differences
429 ; FIXME TEST16rr %17, %17, implicit-def $eflags
430 ; FIXME JE_1 %bb.1, implicit $eflags
442 exposesReturnsTwice: false
444 regBankSelected: false
446 tracksRegLiveness: true
448 - { id: 0, class: gr64, preferred-register: '' }
449 - { id: 1, class: vr512, preferred-register: '' }
450 - { id: 2, class: vr512, preferred-register: '' }
451 - { id: 3, class: vk32wm, preferred-register: '' }
452 - { id: 4, class: vr512, preferred-register: '' }
453 - { id: 5, class: gr32, preferred-register: '' }
454 - { id: 6, class: gr32, preferred-register: '' }
455 - { id: 7, class: gr32, preferred-register: '' }
456 - { id: 8, class: gr32, preferred-register: '' }
457 - { id: 9, class: gr32, preferred-register: '' }
458 - { id: 10, class: gr32, preferred-register: '' }
459 - { id: 11, class: gr32, preferred-register: '' }
460 - { id: 12, class: gr32, preferred-register: '' }
461 - { id: 13, class: gr32, preferred-register: '' }
463 - { reg: '$rdi', virtual-reg: '%0' }
464 - { reg: '$zmm0', virtual-reg: '%1' }
465 - { reg: '$zmm1', virtual-reg: '%2' }
467 isFrameAddressTaken: false
468 isReturnAddressTaken: false
477 maxCallFrameSize: 4294967295
478 hasOpaqueSPAdjustment: false
480 hasMustTailInVarArgFunc: false
487 ; CHECK-LABEL: name: test_32bitops
489 ; CHECK: successors: %bb.1(0x80000000)
490 ; CHECK: liveins: $rdi, $zmm0, $zmm1
491 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
492 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
493 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
494 ; CHECK: [[KMOVDkm:%[0-9]+]]:vk32 = KMOVDkm [[COPY]], 1, $noreg, 0, $noreg
495 ; CHECK: [[KSHIFTRDri:%[0-9]+]]:vk32 = KSHIFTRDri [[KMOVDkm]], 2
496 ; CHECK: [[KSHIFTLDri:%[0-9]+]]:vk32 = KSHIFTLDri [[KSHIFTRDri]], 1
497 ; CHECK: [[KNOTDrr:%[0-9]+]]:vk32 = KNOTDrr [[KSHIFTLDri]]
498 ; CHECK: [[KORDrr:%[0-9]+]]:vk32 = KORDrr [[KNOTDrr]], [[KSHIFTRDri]]
499 ; CHECK: [[KANDDrr:%[0-9]+]]:vk32 = KANDDrr [[KORDrr]], [[KSHIFTLDri]]
500 ; CHECK: [[KXORDrr:%[0-9]+]]:vk32 = KXORDrr [[KANDDrr]], [[KSHIFTRDri]]
501 ; CHECK: [[KANDNDrr:%[0-9]+]]:vk32 = KANDNDrr [[KXORDrr]], [[KORDrr]]
502 ; CHECK: [[KADDDrr:%[0-9]+]]:vk32 = KADDDrr [[KANDNDrr]], [[KXORDrr]]
503 ; CHECK: [[COPY3:%[0-9]+]]:vk32wm = COPY [[KADDDrr]]
504 ; CHECK: [[VMOVDQU16Zrrk:%[0-9]+]]:vr512 = VMOVDQU16Zrrk [[COPY2]], killed [[COPY3]], [[COPY1]]
505 ; CHECK: VMOVDQA32Zmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVDQU16Zrrk]]
507 ; CHECK: successors: %bb.2(0x80000000)
511 liveins: $rdi, $zmm0, $zmm1
517 %5 = MOV32rm %0, 1, $noreg, 0, $noreg
518 %6 = SHR32ri %5, 2, implicit-def dead $eflags
519 %7 = SHL32ri %6, 1, implicit-def dead $eflags
521 %9 = OR32rr %8, %6, implicit-def dead $eflags
522 %10 = AND32rr %9, %7, implicit-def dead $eflags
523 %11 = XOR32rr %10, %6, implicit-def dead $eflags
524 %12 = ANDN32rr %11, %9, implicit-def dead $eflags
525 %13 = ADD32rr %12, %11, implicit-def dead $eflags
528 %4 = VMOVDQU16Zrrk %2, killed %3, %1
529 VMOVDQA32Zmr %0, 1, $noreg, 0, $noreg, killed %4
531 ; FIXME We can't replace TEST with KTEST due to flag differences
532 ; FIXME TEST32rr %13, %13, implicit-def $eflags
533 ; FIXME JE_1 %bb.1, implicit $eflags
545 exposesReturnsTwice: false
547 regBankSelected: false
549 tracksRegLiveness: true
551 - { id: 0, class: gr64, preferred-register: '' }
552 - { id: 1, class: vr512, preferred-register: '' }
553 - { id: 2, class: vr512, preferred-register: '' }
554 - { id: 3, class: vk64wm, preferred-register: '' }
555 - { id: 4, class: vr512, preferred-register: '' }
556 - { id: 5, class: gr64, preferred-register: '' }
557 - { id: 6, class: gr64, preferred-register: '' }
558 - { id: 7, class: gr64, preferred-register: '' }
559 - { id: 8, class: gr64, preferred-register: '' }
560 - { id: 9, class: gr64, preferred-register: '' }
561 - { id: 10, class: gr64, preferred-register: '' }
562 - { id: 11, class: gr64, preferred-register: '' }
563 - { id: 12, class: gr64, preferred-register: '' }
564 - { id: 13, class: gr64, preferred-register: '' }
566 - { reg: '$rdi', virtual-reg: '%0' }
567 - { reg: '$zmm0', virtual-reg: '%1' }
568 - { reg: '$zmm1', virtual-reg: '%2' }
570 isFrameAddressTaken: false
571 isReturnAddressTaken: false
580 maxCallFrameSize: 4294967295
581 hasOpaqueSPAdjustment: false
583 hasMustTailInVarArgFunc: false
590 ; CHECK-LABEL: name: test_64bitops
592 ; CHECK: successors: %bb.1(0x80000000)
593 ; CHECK: liveins: $rdi, $zmm0, $zmm1
594 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
595 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
596 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
597 ; CHECK: [[KMOVQkm:%[0-9]+]]:vk64 = KMOVQkm [[COPY]], 1, $noreg, 0, $noreg
598 ; CHECK: [[KSHIFTRQri:%[0-9]+]]:vk64 = KSHIFTRQri [[KMOVQkm]], 2
599 ; CHECK: [[KSHIFTLQri:%[0-9]+]]:vk64 = KSHIFTLQri [[KSHIFTRQri]], 1
600 ; CHECK: [[KNOTQrr:%[0-9]+]]:vk64 = KNOTQrr [[KSHIFTLQri]]
601 ; CHECK: [[KORQrr:%[0-9]+]]:vk64 = KORQrr [[KNOTQrr]], [[KSHIFTRQri]]
602 ; CHECK: [[KANDQrr:%[0-9]+]]:vk64 = KANDQrr [[KORQrr]], [[KSHIFTLQri]]
603 ; CHECK: [[KXORQrr:%[0-9]+]]:vk64 = KXORQrr [[KANDQrr]], [[KSHIFTRQri]]
604 ; CHECK: [[KANDNQrr:%[0-9]+]]:vk64 = KANDNQrr [[KXORQrr]], [[KORQrr]]
605 ; CHECK: [[KADDQrr:%[0-9]+]]:vk64 = KADDQrr [[KANDNQrr]], [[KXORQrr]]
606 ; CHECK: [[COPY3:%[0-9]+]]:vk64wm = COPY [[KADDQrr]]
607 ; CHECK: [[VMOVDQU8Zrrk:%[0-9]+]]:vr512 = VMOVDQU8Zrrk [[COPY2]], killed [[COPY3]], [[COPY1]]
608 ; CHECK: VMOVDQA32Zmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVDQU8Zrrk]]
610 ; CHECK: successors: %bb.2(0x80000000)
614 liveins: $rdi, $zmm0, $zmm1
620 %5 = MOV64rm %0, 1, $noreg, 0, $noreg
621 %6 = SHR64ri %5, 2, implicit-def dead $eflags
622 %7 = SHL64ri %6, 1, implicit-def dead $eflags
624 %9 = OR64rr %8, %6, implicit-def dead $eflags
625 %10 = AND64rr %9, %7, implicit-def dead $eflags
626 %11 = XOR64rr %10, %6, implicit-def dead $eflags
627 %12 = ANDN64rr %11, %9, implicit-def dead $eflags
628 %13 = ADD64rr %12, %11, implicit-def dead $eflags
631 %4 = VMOVDQU8Zrrk %2, killed %3, %1
632 VMOVDQA32Zmr %0, 1, $noreg, 0, $noreg, killed %4
634 ; FIXME We can't replace TEST with KTEST due to flag differences
635 ; FIXME TEST64rr %13, %13, implicit-def $eflags
636 ; FIXME JE_1 %bb.1, implicit $eflags
648 exposesReturnsTwice: false
650 regBankSelected: false
652 tracksRegLiveness: true
654 - { id: 0, class: gr64, preferred-register: '' }
655 - { id: 1, class: vr512, preferred-register: '' }
656 - { id: 2, class: vr512, preferred-register: '' }
657 - { id: 3, class: vk16wm, preferred-register: '' }
658 - { id: 4, class: vr512, preferred-register: '' }
659 - { id: 5, class: gr16, preferred-register: '' }
660 - { id: 6, class: gr16, preferred-register: '' }
662 - { reg: '$rdi', virtual-reg: '%0' }
663 - { reg: '$zmm0', virtual-reg: '%1' }
664 - { reg: '$zmm1', virtual-reg: '%2' }
666 isFrameAddressTaken: false
667 isReturnAddressTaken: false
676 maxCallFrameSize: 4294967295
677 hasOpaqueSPAdjustment: false
679 hasMustTailInVarArgFunc: false
687 liveins: $rdi, $zmm0, $zmm1
689 ; CHECK-LABEL: name: test_16bitext
690 ; CHECK: liveins: $rdi, $zmm0, $zmm1
691 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
692 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
693 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
694 ; CHECK: [[KMOVBkm:%[0-9]+]]:vk8 = KMOVBkm [[COPY]], 1, $noreg, 0, $noreg
695 ; CHECK: [[COPY3:%[0-9]+]]:vk16 = COPY [[KMOVBkm]]
696 ; CHECK: [[KNOTWrr:%[0-9]+]]:vk16 = KNOTWrr [[COPY3]]
697 ; CHECK: [[COPY4:%[0-9]+]]:vk16wm = COPY [[KNOTWrr]]
698 ; CHECK: [[VMOVAPSZrrk:%[0-9]+]]:vr512 = VMOVAPSZrrk [[COPY2]], killed [[COPY4]], [[COPY1]]
699 ; CHECK: VMOVAPSZmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVAPSZrrk]]
705 %5 = MOVZX16rm8 %0, 1, $noreg, 0, $noreg
709 %4 = VMOVAPSZrrk %2, killed %3, %1
710 VMOVAPSZmr %0, 1, $noreg, 0, $noreg, killed %4
717 exposesReturnsTwice: false
719 regBankSelected: false
721 tracksRegLiveness: true
723 - { id: 0, class: gr64, preferred-register: '' }
724 - { id: 1, class: vr512, preferred-register: '' }
725 - { id: 2, class: vr512, preferred-register: '' }
726 - { id: 3, class: vk64wm, preferred-register: '' }
727 - { id: 4, class: vr512, preferred-register: '' }
728 - { id: 5, class: gr32, preferred-register: '' }
729 - { id: 6, class: gr32, preferred-register: '' }
730 - { id: 7, class: gr32, preferred-register: '' }
732 - { reg: '$rdi', virtual-reg: '%0' }
733 - { reg: '$zmm0', virtual-reg: '%1' }
734 - { reg: '$zmm1', virtual-reg: '%2' }
736 isFrameAddressTaken: false
737 isReturnAddressTaken: false
746 maxCallFrameSize: 4294967295
747 hasOpaqueSPAdjustment: false
749 hasMustTailInVarArgFunc: false
757 liveins: $rdi, $zmm0, $zmm1
759 ; CHECK-LABEL: name: test_32bitext
760 ; CHECK: liveins: $rdi, $zmm0, $zmm1
761 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
762 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
763 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
764 ; CHECK: [[KMOVBkm:%[0-9]+]]:vk8 = KMOVBkm [[COPY]], 1, $noreg, 0, $noreg
765 ; CHECK: [[COPY3:%[0-9]+]]:vk32 = COPY [[KMOVBkm]]
766 ; CHECK: [[KMOVWkm:%[0-9]+]]:vk16 = KMOVWkm [[COPY]], 1, $noreg, 0, $noreg
767 ; CHECK: [[COPY4:%[0-9]+]]:vk32 = COPY [[KMOVWkm]]
768 ; CHECK: [[KADDDrr:%[0-9]+]]:vk32 = KADDDrr [[COPY3]], [[COPY4]]
769 ; CHECK: [[COPY5:%[0-9]+]]:vk64wm = COPY [[KADDDrr]]
770 ; CHECK: [[VMOVDQU16Zrrk:%[0-9]+]]:vr512 = VMOVDQU16Zrrk [[COPY2]], killed [[COPY5]], [[COPY1]]
771 ; CHECK: VMOVDQA32Zmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVDQU16Zrrk]]
777 %5 = MOVZX32rm8 %0, 1, $noreg, 0, $noreg
778 %6 = MOVZX32rm16 %0, 1, $noreg, 0, $noreg
779 %7 = ADD32rr %5, %6, implicit-def dead $eflags
782 %4 = VMOVDQU16Zrrk %2, killed %3, %1
783 VMOVDQA32Zmr %0, 1, $noreg, 0, $noreg, killed %4
790 exposesReturnsTwice: false
792 regBankSelected: false
794 tracksRegLiveness: true
796 - { id: 0, class: gr64, preferred-register: '' }
797 - { id: 1, class: vr512, preferred-register: '' }
798 - { id: 2, class: vr512, preferred-register: '' }
799 - { id: 3, class: vk64wm, preferred-register: '' }
800 - { id: 4, class: vr512, preferred-register: '' }
801 - { id: 5, class: gr64, preferred-register: '' }
802 - { id: 6, class: gr64, preferred-register: '' }
803 - { id: 7, class: gr64, preferred-register: '' }
805 - { reg: '$rdi', virtual-reg: '%0' }
806 - { reg: '$zmm0', virtual-reg: '%1' }
807 - { reg: '$zmm1', virtual-reg: '%2' }
809 isFrameAddressTaken: false
810 isReturnAddressTaken: false
819 maxCallFrameSize: 4294967295
820 hasOpaqueSPAdjustment: false
822 hasMustTailInVarArgFunc: false
830 liveins: $rdi, $zmm0, $zmm1
832 ; CHECK-LABEL: name: test_64bitext
833 ; CHECK: liveins: $rdi, $zmm0, $zmm1
834 ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
835 ; CHECK: [[COPY1:%[0-9]+]]:vr512 = COPY $zmm0
836 ; CHECK: [[COPY2:%[0-9]+]]:vr512 = COPY $zmm1
837 ; CHECK: [[KMOVBkm:%[0-9]+]]:vk8 = KMOVBkm [[COPY]], 1, $noreg, 0, $noreg
838 ; CHECK: [[COPY3:%[0-9]+]]:vk64 = COPY [[KMOVBkm]]
839 ; CHECK: [[KMOVWkm:%[0-9]+]]:vk16 = KMOVWkm [[COPY]], 1, $noreg, 0, $noreg
840 ; CHECK: [[COPY4:%[0-9]+]]:vk64 = COPY [[KMOVWkm]]
841 ; CHECK: [[KADDQrr:%[0-9]+]]:vk64 = KADDQrr [[COPY3]], [[COPY4]]
842 ; CHECK: [[COPY5:%[0-9]+]]:vk64wm = COPY [[KADDQrr]]
843 ; CHECK: [[VMOVDQU8Zrrk:%[0-9]+]]:vr512 = VMOVDQU8Zrrk [[COPY2]], killed [[COPY5]], [[COPY1]]
844 ; CHECK: VMOVDQA32Zmr [[COPY]], 1, $noreg, 0, $noreg, killed [[VMOVDQU8Zrrk]]
850 %5 = MOVZX64rm8 %0, 1, $noreg, 0, $noreg
851 %6 = MOVZX64rm16 %0, 1, $noreg, 0, $noreg
852 %7 = ADD64rr %5, %6, implicit-def dead $eflags
855 %4 = VMOVDQU8Zrrk %2, killed %3, %1
856 VMOVDQA32Zmr %0, 1, $noreg, 0, $noreg, killed %4