@@ -110,8 +110,6 @@ RISCVMoveMerge::mergePairedInsns(MachineBasicBlock::iterator I,
110110 MachineBasicBlock::iterator NextI = next_nodbg (I, E);
111111 DestSourcePair FirstPair = TII->isCopyInstrImpl (*I).value ();
112112 DestSourcePair PairedRegs = TII->isCopyInstrImpl (*Paired).value ();
113- Register ARegInFirstPair = MoveFromSToA ? FirstPair.Destination ->getReg ()
114- : FirstPair.Source ->getReg ();
115113
116114 if (NextI == Paired)
117115 NextI = next_nodbg (NextI, E);
@@ -130,7 +128,6 @@ RISCVMoveMerge::mergePairedInsns(MachineBasicBlock::iterator I,
130128 //
131129 // mv a0, s2
132130 // mv a1, s1 => cm.mva01s s2,s1
133- bool StartWithX10 = ARegInFirstPair == RISCV::X10;
134131 unsigned Opcode;
135132 if (MoveFromSToA) {
136133 // We are moving one of the copies earlier so its kill flag may become
@@ -141,12 +138,16 @@ RISCVMoveMerge::mergePairedInsns(MachineBasicBlock::iterator I,
141138 PairedSource.setIsKill (false );
142139
143140 Opcode = getMoveFromSToAOpcode (*ST);
144- Sreg1 = StartWithX10 ? FirstPair.Source : &PairedSource;
145- Sreg2 = StartWithX10 ? &PairedSource : FirstPair.Source ;
141+ Sreg1 = FirstPair.Source ;
142+ Sreg2 = &PairedSource;
143+ if (FirstPair.Destination ->getReg () != RISCV::X10)
144+ std::swap (Sreg1, Sreg2);
146145 } else {
147146 Opcode = getMoveFromAToSOpcode (*ST);
148- Sreg1 = StartWithX10 ? FirstPair.Destination : PairedRegs.Destination ;
149- Sreg2 = StartWithX10 ? PairedRegs.Destination : FirstPair.Destination ;
147+ Sreg1 = FirstPair.Destination ;
148+ Sreg2 = PairedRegs.Destination ;
149+ if (FirstPair.Source ->getReg () != RISCV::X10)
150+ std::swap (Sreg1, Sreg2);
150151 }
151152
152153 BuildMI (*I->getParent (), I, DL, TII->get (Opcode)).add (*Sreg1).add (*Sreg2);
0 commit comments