diff options
Diffstat (limited to 'llvm/lib/CodeGen/MachineFunction.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineFunction.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/MachineFunction.cpp b/llvm/lib/CodeGen/MachineFunction.cpp index 2568448..a7edc27 100644 --- a/llvm/lib/CodeGen/MachineFunction.cpp +++ b/llvm/lib/CodeGen/MachineFunction.cpp @@ -955,7 +955,8 @@ void MachineFunction::makeDebugValueSubstitution(DebugInstrOperandPair A, } void MachineFunction::substituteDebugValuesForInst(const MachineInstr &Old, - MachineInstr &New) { + MachineInstr &New, + unsigned MaxOperand) { // If the Old instruction wasn't tracked at all, there is no work to do. unsigned OldInstrNum = Old.peekDebugInstrNum(); if (!OldInstrNum) @@ -965,12 +966,16 @@ void MachineFunction::substituteDebugValuesForInst(const MachineInstr &Old, // Avoid creating new instr numbers unless we create a new substitution. // While this has no functional effect, it risks confusing someone reading // MIR output. + // Examine all the operands, or the first N specified by the caller. + MaxOperand = std::min(MaxOperand, Old.getNumOperands()); for (unsigned int I = 0; I < Old.getNumOperands(); ++I) { const auto &OldMO = Old.getOperand(I); + auto &NewMO = New.getOperand(I); + (void)NewMO; if (!OldMO.isReg() || !OldMO.isDef()) continue; - assert(Old.getOperand(I).isDef()); + assert(NewMO.isDef()); unsigned NewInstrNum = New.getDebugInstrNum(); makeDebugValueSubstitution(std::make_pair(OldInstrNum, I), |