@@ -2731,9 +2731,9 @@ bool RegisterCoalescer::applyTerminalRule(const MachineInstr &Copy) const {
27312731 assert (Copy.isCopyLike ());
27322732 if (!UseTerminalRule)
27332733 return false ;
2734+ unsigned DstReg, DstSubReg, SrcReg, SrcSubReg;
2735+ isMoveInstr (*TRI, &Copy, SrcReg, DstReg, SrcSubReg, DstSubReg);
27342736 // Check if the destination of this copy has any other affinity.
2735- unsigned DstReg = Copy.getOperand (0 ).getReg ();
2736- unsigned SrcReg = Copy.getOperand (1 ).getReg ();
27372737 if (TargetRegisterInfo::isPhysicalRegister (DstReg) ||
27382738 // If SrcReg is a physical register, the copy won't be coalesced.
27392739 // Ignoring it may have other side effect (like missing
@@ -2755,9 +2755,11 @@ bool RegisterCoalescer::applyTerminalRule(const MachineInstr &Copy) const {
27552755 // For now, just consider the copies that are in the same block.
27562756 if (&MI == &Copy || !MI.isCopyLike () || MI.getParent () != OrigBB)
27572757 continue ;
2758- unsigned OtherReg = MI.getOperand (0 ).getReg ();
2758+ unsigned OtherReg, OtherSubReg, OtherSrcReg, OtherSrcSubReg;
2759+ isMoveInstr (*TRI, &Copy, OtherSrcReg, OtherReg, OtherSrcSubReg,
2760+ OtherSubReg);
27592761 if (OtherReg == SrcReg)
2760- OtherReg = MI. getOperand ( 1 ). getReg () ;
2762+ OtherReg = OtherSrcReg ;
27612763 // Check if OtherReg is a non-terminal.
27622764 if (TargetRegisterInfo::isPhysicalRegister (OtherReg) ||
27632765 isTerminalReg (OtherReg, MI, MRI))
0 commit comments