[llvm] 537f0fb - [DebugInfo] Follow up c521e44defb5 with an API improvement
Jeremy Morse via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 21 06:46:27 PDT 2020
Author: Jeremy Morse
Date: 2020-10-21T14:45:55+01:00
New Revision: 537f0fbe82049b8d5b6c700ecc4ab166c350b0c6
URL: https://github.com/llvm/llvm-project/commit/537f0fbe82049b8d5b6c700ecc4ab166c350b0c6
DIFF: https://github.com/llvm/llvm-project/commit/537f0fbe82049b8d5b6c700ecc4ab166c350b0c6.diff
LOG: [DebugInfo] Follow up c521e44defb5 with an API improvement
As mentioned post-commit in D85749, the 'substituteDebugValuesForInst'
method added in c521e44defb5 would be better off with a limit on the
number of operands to substitute. This handles the common case of
"substitute the first operand between these two differing instructions",
or possibly up to N first operands.
Added:
Modified:
llvm/include/llvm/CodeGen/MachineFunction.h
llvm/lib/CodeGen/MachineFunction.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/MachineFunction.h b/llvm/include/llvm/CodeGen/MachineFunction.h
index 01f59045ecb4..e9979c788ce0 100644
--- a/llvm/include/llvm/CodeGen/MachineFunction.h
+++ b/llvm/include/llvm/CodeGen/MachineFunction.h
@@ -458,7 +458,11 @@ class MachineFunction {
/// which has the same signature (i.e., def operands in the same place) but
/// a modified instruction type, flags, or otherwise. An example: X86 moves
/// are sometimes transformed into equivalent LEAs.
- void substituteDebugValuesForInst(const MachineInstr &Old, MachineInstr &New);
+ /// If the two instructions are not the same opcode, limit which operands to
+ /// examine for substitutions to the first N operands by setting
+ /// \p MaxOperand.
+ void substituteDebugValuesForInst(const MachineInstr &Old, MachineInstr &New,
+ unsigned MaxOperand = UINT_MAX);
MachineFunction(Function &F, const LLVMTargetMachine &Target,
const TargetSubtargetInfo &STI, unsigned FunctionNum,
diff --git a/llvm/lib/CodeGen/MachineFunction.cpp b/llvm/lib/CodeGen/MachineFunction.cpp
index 2568448f3c92..a7edc274dd23 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),
More information about the llvm-commits
mailing list