diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp --- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -5122,6 +5122,14 @@ makeArrayRef(DstRegs).take_front(NarrowParts), LeftoverTy, makeArrayRef(DstRegs).drop_front(NarrowParts)); + // Replace the usage of carry genated in original instruction + // with carry output generated after sequence of additions + auto &MF = *MI.getParent()->getParent(); + const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo(); + for (MachineInstr &Use : MRI.use_instructions(CarryDst)) { + Use.substituteRegister(CarryDst, CarryIn, 0, *TRI); + } + MI.eraseFromParent(); return Legalized; }