@@ -60,8 +60,6 @@ namespace {
60
60
}
61
61
62
62
private:
63
- void TransferImpOps (MachineInstr &OldMI,
64
- MachineInstrBuilder &UseMI, MachineInstrBuilder &DefMI);
65
63
bool ExpandMI (MachineBasicBlock &MBB,
66
64
MachineBasicBlock::iterator MBBI,
67
65
MachineBasicBlock::iterator &NextMBBI);
@@ -123,22 +121,6 @@ namespace {
123
121
INITIALIZE_PASS (ARMExpandPseudo, DEBUG_TYPE, ARM_EXPAND_PSEUDO_NAME, false ,
124
122
false )
125
123
126
- // / TransferImpOps - Transfer implicit operands on the pseudo instruction to
127
- // / the instructions created from the expansion.
128
- void ARMExpandPseudo::TransferImpOps(MachineInstr &OldMI,
129
- MachineInstrBuilder &UseMI,
130
- MachineInstrBuilder &DefMI) {
131
- const MCInstrDesc &Desc = OldMI.getDesc ();
132
- for (const MachineOperand &MO :
133
- llvm::drop_begin (OldMI.operands (), Desc.getNumOperands ())) {
134
- assert (MO.isReg () && MO.getReg ());
135
- if (MO.isUse ())
136
- UseMI.add (MO);
137
- else
138
- DefMI.add (MO);
139
- }
140
- }
141
-
142
124
namespace {
143
125
// Constants for register spacing in NEON load/store instructions.
144
126
// For quad-register load-lane and store-lane pseudo instructors, the
@@ -678,7 +660,7 @@ void ARMExpandPseudo::ExpandVLD(MachineBasicBlock::iterator &MBBI) {
678
660
}
679
661
// Add an implicit def for the super-register.
680
662
MIB.addReg (DstReg, RegState::ImplicitDefine | getDeadRegState (DstIsDead));
681
- TransferImpOps (MI, MIB, MIB );
663
+ MIB. copyImplicitOps (MI);
682
664
683
665
// Transfer memoperands.
684
666
MIB.cloneMemRefs (MI);
@@ -754,7 +736,7 @@ void ARMExpandPseudo::ExpandVST(MachineBasicBlock::iterator &MBBI) {
754
736
MIB->addRegisterKilled (SrcReg, TRI, true );
755
737
else if (!SrcIsUndef)
756
738
MIB.addReg (SrcReg, RegState::Implicit); // Add implicit uses for src reg.
757
- TransferImpOps (MI, MIB, MIB );
739
+ MIB. copyImplicitOps (MI);
758
740
759
741
// Transfer memoperands.
760
742
MIB.cloneMemRefs (MI);
@@ -846,7 +828,7 @@ void ARMExpandPseudo::ExpandLaneOp(MachineBasicBlock::iterator &MBBI) {
846
828
if (TableEntry->IsLoad )
847
829
// Add an implicit def for the super-register.
848
830
MIB.addReg (DstReg, RegState::ImplicitDefine | getDeadRegState (DstIsDead));
849
- TransferImpOps (MI, MIB, MIB );
831
+ MIB. copyImplicitOps (MI);
850
832
// Transfer memoperands.
851
833
MIB.cloneMemRefs (MI);
852
834
MI.eraseFromParent ();
@@ -886,7 +868,7 @@ void ARMExpandPseudo::ExpandVTBL(MachineBasicBlock::iterator &MBBI,
886
868
887
869
// Add an implicit kill and use for the super-reg.
888
870
MIB.addReg (SrcReg, RegState::Implicit | getKillRegState (SrcIsKill));
889
- TransferImpOps (MI, MIB, MIB );
871
+ MIB. copyImplicitOps (MI);
890
872
MI.eraseFromParent ();
891
873
LLVM_DEBUG (dbgs () << " To: " ; MIB.getInstr ()->dump (););
892
874
}
@@ -923,7 +905,7 @@ void ARMExpandPseudo::ExpandMQQPRLoadStore(MachineBasicBlock::iterator &MBBI) {
923
905
if (NewOpc == ARM::VSTMDIA)
924
906
MIB.addReg (SrcReg, RegState::Implicit);
925
907
926
- TransferImpOps (MI, MIB, MIB );
908
+ MIB. copyImplicitOps (MI);
927
909
MIB.cloneMemRefs (MI);
928
910
MI.eraseFromParent ();
929
911
}
@@ -1132,7 +1114,8 @@ void ARMExpandPseudo::ExpandMOV32BitImm(MachineBasicBlock &MBB,
1132
1114
HI16.addImm (Pred).addReg (PredReg).add (condCodeOp ());
1133
1115
if (isCC)
1134
1116
LO16.add (makeImplicit (MI.getOperand (1 )));
1135
- TransferImpOps (MI, LO16, HI16);
1117
+ LO16.copyImplicitOps (MI);
1118
+ HI16.copyImplicitOps (MI);
1136
1119
MI.eraseFromParent ();
1137
1120
return ;
1138
1121
}
@@ -1191,7 +1174,8 @@ void ARMExpandPseudo::ExpandMOV32BitImm(MachineBasicBlock &MBB,
1191
1174
1192
1175
if (isCC)
1193
1176
LO16.add (makeImplicit (MI.getOperand (1 )));
1194
- TransferImpOps (MI, LO16, HI16);
1177
+ LO16.copyImplicitOps (MI);
1178
+ HI16.copyImplicitOps (MI);
1195
1179
MI.eraseFromParent ();
1196
1180
LLVM_DEBUG (dbgs () << " To: " ; LO16.getInstr ()->dump (););
1197
1181
LLVM_DEBUG (dbgs () << " And: " ; HI16.getInstr ()->dump (););
@@ -2584,14 +2568,13 @@ bool ARMExpandPseudo::ExpandMI(MachineBasicBlock &MBB,
2584
2568
}
2585
2569
case ARM::RRX: {
2586
2570
// This encodes as "MOVs Rd, Rm, rrx
2587
- MachineInstrBuilder MIB =
2588
- BuildMI (MBB, MBBI, MI.getDebugLoc (), TII->get (ARM::MOVsi),
2589
- MI.getOperand (0 ).getReg ())
2590
- .add (MI.getOperand (1 ))
2591
- .addImm (ARM_AM::getSORegOpc (ARM_AM::rrx, 0 ))
2592
- .add (predOps (ARMCC::AL))
2593
- .add (condCodeOp ());
2594
- TransferImpOps (MI, MIB, MIB);
2571
+ BuildMI (MBB, MBBI, MI.getDebugLoc (), TII->get (ARM::MOVsi),
2572
+ MI.getOperand (0 ).getReg ())
2573
+ .add (MI.getOperand (1 ))
2574
+ .addImm (ARM_AM::getSORegOpc (ARM_AM::rrx, 0 ))
2575
+ .add (predOps (ARMCC::AL))
2576
+ .add (condCodeOp ())
2577
+ .copyImplicitOps (MI);
2595
2578
MI.eraseFromParent ();
2596
2579
return true ;
2597
2580
}
@@ -2631,7 +2614,7 @@ bool ARMExpandPseudo::ExpandMI(MachineBasicBlock &MBB,
2631
2614
}
2632
2615
2633
2616
MIB.cloneMemRefs (MI);
2634
- TransferImpOps (MI, MIB, MIB );
2617
+ MIB. copyImplicitOps (MI);
2635
2618
// Update the call site info.
2636
2619
if (MI.isCandidateForCallSiteEntry ())
2637
2620
MF->moveCallSiteInfo (&MI, &*MIB);
@@ -2644,17 +2627,16 @@ bool ARMExpandPseudo::ExpandMI(MachineBasicBlock &MBB,
2644
2627
? ARM::tLDRpci : ARM::t2LDRpci;
2645
2628
Register DstReg = MI.getOperand (0 ).getReg ();
2646
2629
bool DstIsDead = MI.getOperand (0 ).isDead ();
2647
- MachineInstrBuilder MIB1 =
2648
- BuildMI (MBB, MBBI, MI.getDebugLoc (), TII->get (NewLdOpc), DstReg)
2649
- .add (MI.getOperand (1 ))
2650
- .add (predOps (ARMCC::AL));
2651
- MIB1.cloneMemRefs (MI);
2652
- MachineInstrBuilder MIB2 =
2653
- BuildMI (MBB, MBBI, MI.getDebugLoc (), TII->get (ARM::tPICADD))
2654
- .addReg (DstReg, RegState::Define | getDeadRegState (DstIsDead))
2655
- .addReg (DstReg)
2656
- .add (MI.getOperand (2 ));
2657
- TransferImpOps (MI, MIB1, MIB2);
2630
+ BuildMI (MBB, MBBI, MI.getDebugLoc (), TII->get (NewLdOpc), DstReg)
2631
+ .add (MI.getOperand (1 ))
2632
+ .add (predOps (ARMCC::AL))
2633
+ .cloneMemRefs (MI)
2634
+ .copyImplicitOps (MI);
2635
+ BuildMI (MBB, MBBI, MI.getDebugLoc (), TII->get (ARM::tPICADD))
2636
+ .addReg (DstReg, RegState::Define | getDeadRegState (DstIsDead))
2637
+ .addReg (DstReg)
2638
+ .add (MI.getOperand (2 ))
2639
+ .copyImplicitOps (MI);
2658
2640
MI.eraseFromParent ();
2659
2641
return true ;
2660
2642
}
@@ -2739,15 +2721,16 @@ bool ARMExpandPseudo::ExpandMI(MachineBasicBlock &MBB,
2739
2721
unsigned PICAddOpc = isARM
2740
2722
? (Opcode == ARM::MOV_ga_pcrel_ldr ? ARM::PICLDR : ARM::PICADD)
2741
2723
: ARM::tPICADD;
2742
- MachineInstrBuilder MIB1 = BuildMI (MBB, MBBI, MI.getDebugLoc (),
2743
- TII-> get (LO16Opc ), DstReg )
2744
- . addGlobalAddress (GV, MO1. getOffset (), TF | LO16TF )
2745
- . addImm (LabelId );
2724
+ BuildMI (MBB, MBBI, MI.getDebugLoc (), TII-> get (LO16Opc), DstReg)
2725
+ . addGlobalAddress (GV, MO1. getOffset ( ), TF | LO16TF )
2726
+ . addImm (LabelId )
2727
+ . copyImplicitOps (MI );
2746
2728
2747
2729
BuildMI (MBB, MBBI, MI.getDebugLoc (), TII->get (HI16Opc), DstReg)
2748
- .addReg (DstReg)
2749
- .addGlobalAddress (GV, MO1.getOffset (), TF | HI16TF)
2750
- .addImm (LabelId);
2730
+ .addReg (DstReg)
2731
+ .addGlobalAddress (GV, MO1.getOffset (), TF | HI16TF)
2732
+ .addImm (LabelId)
2733
+ .copyImplicitOps (MI);
2751
2734
2752
2735
MachineInstrBuilder MIB3 = BuildMI (MBB, MBBI, MI.getDebugLoc (),
2753
2736
TII->get (PICAddOpc))
@@ -2758,7 +2741,7 @@ bool ARMExpandPseudo::ExpandMI(MachineBasicBlock &MBB,
2758
2741
if (Opcode == ARM::MOV_ga_pcrel_ldr)
2759
2742
MIB3.cloneMemRefs (MI);
2760
2743
}
2761
- TransferImpOps (MI, MIB1, MIB3 );
2744
+ MIB3. copyImplicitOps (MI);
2762
2745
MI.eraseFromParent ();
2763
2746
return true ;
2764
2747
}
@@ -2786,14 +2769,13 @@ bool ARMExpandPseudo::ExpandMI(MachineBasicBlock &MBB,
2786
2769
return true ;
2787
2770
2788
2771
case ARM::SUBS_PC_LR: {
2789
- MachineInstrBuilder MIB =
2790
- BuildMI (MBB, MBBI, MI.getDebugLoc (), TII->get (ARM::SUBri), ARM::PC)
2791
- .addReg (ARM::LR)
2792
- .add (MI.getOperand (0 ))
2793
- .add (MI.getOperand (1 ))
2794
- .add (MI.getOperand (2 ))
2795
- .addReg (ARM::CPSR, RegState::Undef);
2796
- TransferImpOps (MI, MIB, MIB);
2772
+ BuildMI (MBB, MBBI, MI.getDebugLoc (), TII->get (ARM::SUBri), ARM::PC)
2773
+ .addReg (ARM::LR)
2774
+ .add (MI.getOperand (0 ))
2775
+ .add (MI.getOperand (1 ))
2776
+ .add (MI.getOperand (2 ))
2777
+ .addReg (ARM::CPSR, RegState::Undef)
2778
+ .copyImplicitOps (MI);
2797
2779
MI.eraseFromParent ();
2798
2780
return true ;
2799
2781
}
@@ -2822,7 +2804,7 @@ bool ARMExpandPseudo::ExpandMI(MachineBasicBlock &MBB,
2822
2804
2823
2805
// Add an implicit def for the super-register.
2824
2806
MIB.addReg (DstReg, RegState::ImplicitDefine | getDeadRegState (DstIsDead));
2825
- TransferImpOps (MI, MIB, MIB );
2807
+ MIB. copyImplicitOps (MI);
2826
2808
MIB.cloneMemRefs (MI);
2827
2809
MI.eraseFromParent ();
2828
2810
return true ;
@@ -2855,7 +2837,7 @@ bool ARMExpandPseudo::ExpandMI(MachineBasicBlock &MBB,
2855
2837
if (SrcIsKill) // Add an implicit kill for the Q register.
2856
2838
MIB->addRegisterKilled (SrcReg, TRI, true );
2857
2839
2858
- TransferImpOps (MI, MIB, MIB );
2840
+ MIB. copyImplicitOps (MI);
2859
2841
MIB.cloneMemRefs (MI);
2860
2842
MI.eraseFromParent ();
2861
2843
return true ;
0 commit comments