@@ -619,40 +619,30 @@ void X86DomainReassignment::initConverters() {
619
619
std::make_unique<InstrReplacerDstCOPY>(From, To);
620
620
};
621
621
622
- bool HasEGPR = STI->hasEGPR ();
623
- createReplacerDstCOPY (X86::MOVZX32rm16,
624
- HasEGPR ? X86::KMOVWkm_EVEX : X86::KMOVWkm);
625
- createReplacerDstCOPY (X86::MOVZX64rm16,
626
- HasEGPR ? X86::KMOVWkm_EVEX : X86::KMOVWkm);
622
+ #define GET_EGPR_IF_ENABLED (OPC ) STI->hasEGPR () ? OPC##_EVEX : OPC
623
+ createReplacerDstCOPY (X86::MOVZX32rm16, GET_EGPR_IF_ENABLED (X86::KMOVWkm));
624
+ createReplacerDstCOPY (X86::MOVZX64rm16, GET_EGPR_IF_ENABLED (X86::KMOVWkm));
627
625
628
- createReplacerDstCOPY (X86::MOVZX32rr16,
629
- HasEGPR ? X86::KMOVWkk_EVEX : X86::KMOVWkk);
630
- createReplacerDstCOPY (X86::MOVZX64rr16,
631
- HasEGPR ? X86::KMOVWkk_EVEX : X86::KMOVWkk);
626
+ createReplacerDstCOPY (X86::MOVZX32rr16, GET_EGPR_IF_ENABLED (X86::KMOVWkk));
627
+ createReplacerDstCOPY (X86::MOVZX64rr16, GET_EGPR_IF_ENABLED (X86::KMOVWkk));
632
628
633
629
if (STI->hasDQI ()) {
634
- createReplacerDstCOPY (X86::MOVZX16rm8,
635
- HasEGPR ? X86::KMOVBkm_EVEX : X86::KMOVBkm);
636
- createReplacerDstCOPY (X86::MOVZX32rm8,
637
- HasEGPR ? X86::KMOVBkm_EVEX : X86::KMOVBkm);
638
- createReplacerDstCOPY (X86::MOVZX64rm8,
639
- HasEGPR ? X86::KMOVBkm_EVEX : X86::KMOVBkm);
640
-
641
- createReplacerDstCOPY (X86::MOVZX16rr8,
642
- HasEGPR ? X86::KMOVBkk_EVEX : X86::KMOVBkk);
643
- createReplacerDstCOPY (X86::MOVZX32rr8,
644
- HasEGPR ? X86::KMOVBkk_EVEX : X86::KMOVBkk);
645
- createReplacerDstCOPY (X86::MOVZX64rr8,
646
- HasEGPR ? X86::KMOVBkk_EVEX : X86::KMOVBkk);
630
+ createReplacerDstCOPY (X86::MOVZX16rm8, GET_EGPR_IF_ENABLED (X86::KMOVBkm));
631
+ createReplacerDstCOPY (X86::MOVZX32rm8, GET_EGPR_IF_ENABLED (X86::KMOVBkm));
632
+ createReplacerDstCOPY (X86::MOVZX64rm8, GET_EGPR_IF_ENABLED (X86::KMOVBkm));
633
+
634
+ createReplacerDstCOPY (X86::MOVZX16rr8, GET_EGPR_IF_ENABLED (X86::KMOVBkk));
635
+ createReplacerDstCOPY (X86::MOVZX32rr8, GET_EGPR_IF_ENABLED (X86::KMOVBkk));
636
+ createReplacerDstCOPY (X86::MOVZX64rr8, GET_EGPR_IF_ENABLED (X86::KMOVBkk));
647
637
}
648
638
649
639
auto createReplacer = [&](unsigned From, unsigned To) {
650
640
Converters[{MaskDomain, From}] = std::make_unique<InstrReplacer>(From, To);
651
641
};
652
642
653
- createReplacer (X86::MOV16rm, HasEGPR ? X86::KMOVWkm_EVEX : X86:: KMOVWkm);
654
- createReplacer (X86::MOV16mr, HasEGPR ? X86::KMOVWmk_EVEX : X86:: KMOVWmk);
655
- createReplacer (X86::MOV16rr, HasEGPR ? X86::KMOVWkk_EVEX : X86:: KMOVWkk);
643
+ createReplacer (X86::MOV16rm, GET_EGPR_IF_ENABLED ( X86::KMOVWkm) );
644
+ createReplacer (X86::MOV16mr, GET_EGPR_IF_ENABLED ( X86::KMOVWmk) );
645
+ createReplacer (X86::MOV16rr, GET_EGPR_IF_ENABLED ( X86::KMOVWkk) );
656
646
createReplacer (X86::SHR16ri, X86::KSHIFTRWri);
657
647
createReplacer (X86::SHL16ri, X86::KSHIFTLWri);
658
648
createReplacer (X86::NOT16r, X86::KNOTWrr);
@@ -661,14 +651,14 @@ void X86DomainReassignment::initConverters() {
661
651
createReplacer (X86::XOR16rr, X86::KXORWrr);
662
652
663
653
if (STI->hasBWI ()) {
664
- createReplacer (X86::MOV32rm, HasEGPR ? X86::KMOVDkm_EVEX : X86:: KMOVDkm);
665
- createReplacer (X86::MOV64rm, HasEGPR ? X86::KMOVQkm_EVEX : X86:: KMOVQkm);
654
+ createReplacer (X86::MOV32rm, GET_EGPR_IF_ENABLED ( X86::KMOVDkm) );
655
+ createReplacer (X86::MOV64rm, GET_EGPR_IF_ENABLED ( X86::KMOVQkm) );
666
656
667
- createReplacer (X86::MOV32mr, HasEGPR ? X86::KMOVDmk_EVEX : X86:: KMOVDmk);
668
- createReplacer (X86::MOV64mr, HasEGPR ? X86::KMOVQmk_EVEX : X86:: KMOVQmk);
657
+ createReplacer (X86::MOV32mr, GET_EGPR_IF_ENABLED ( X86::KMOVDmk) );
658
+ createReplacer (X86::MOV64mr, GET_EGPR_IF_ENABLED ( X86::KMOVQmk) );
669
659
670
- createReplacer (X86::MOV32rr, HasEGPR ? X86::KMOVDkk_EVEX : X86:: KMOVDkk);
671
- createReplacer (X86::MOV64rr, HasEGPR ? X86::KMOVQkk_EVEX : X86:: KMOVQkk);
660
+ createReplacer (X86::MOV32rr, GET_EGPR_IF_ENABLED ( X86::KMOVDkk) );
661
+ createReplacer (X86::MOV64rr, GET_EGPR_IF_ENABLED ( X86::KMOVQkk) );
672
662
673
663
createReplacer (X86::SHR32ri, X86::KSHIFTRDri);
674
664
createReplacer (X86::SHR64ri, X86::KSHIFTRQri);
@@ -696,8 +686,8 @@ void X86DomainReassignment::initConverters() {
696
686
697
687
// TODO: KTEST is not a replacement for TEST due to flag differences. Need
698
688
// to prove only Z flag is used.
699
- // createReplacer(X86::TEST32rr, X86::KTESTDrr);
700
- // createReplacer(X86::TEST64rr, X86::KTESTQrr);
689
+ // createReplacer(X86::TEST32rr, X86::KTESTDrr);
690
+ // createReplacer(X86::TEST64rr, X86::KTESTQrr);
701
691
}
702
692
703
693
if (STI->hasDQI ()) {
@@ -706,9 +696,9 @@ void X86DomainReassignment::initConverters() {
706
696
707
697
createReplacer (X86::AND8rr, X86::KANDBrr);
708
698
709
- createReplacer (X86::MOV8rm, HasEGPR ? X86::KMOVBkm_EVEX : X86:: KMOVBkm);
710
- createReplacer (X86::MOV8mr, HasEGPR ? X86::KMOVBmk_EVEX : X86:: KMOVBmk);
711
- createReplacer (X86::MOV8rr, HasEGPR ? X86::KMOVBkk_EVEX : X86:: KMOVBkk);
699
+ createReplacer (X86::MOV8rm, GET_EGPR_IF_ENABLED ( X86::KMOVBkm) );
700
+ createReplacer (X86::MOV8mr, GET_EGPR_IF_ENABLED ( X86::KMOVBmk) );
701
+ createReplacer (X86::MOV8rr, GET_EGPR_IF_ENABLED ( X86::KMOVBkk) );
712
702
713
703
createReplacer (X86::NOT8r, X86::KNOTBrr);
714
704
@@ -719,11 +709,12 @@ void X86DomainReassignment::initConverters() {
719
709
720
710
// TODO: KTEST is not a replacement for TEST due to flag differences. Need
721
711
// to prove only Z flag is used.
722
- // createReplacer(X86::TEST8rr, X86::KTESTBrr);
723
- // createReplacer(X86::TEST16rr, X86::KTESTWrr);
712
+ // createReplacer(X86::TEST8rr, X86::KTESTBrr);
713
+ // createReplacer(X86::TEST16rr, X86::KTESTWrr);
724
714
725
715
createReplacer (X86::XOR8rr, X86::KXORBrr);
726
716
}
717
+ #undef GET_EGPR_IF_ENABLED
727
718
}
728
719
729
720
bool X86DomainReassignment::runOnMachineFunction (MachineFunction &MF) {
0 commit comments