[PATCH] D110105: [MachineInstr] Move MIParser's DBG_VALUE RegState::Debug invariant into MachineInstr::addOperand
Jack Andersen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 28 13:04:34 PDT 2021
jackoalan updated this revision to Diff 375677.
jackoalan added a comment.
Cover `MachineOperand::ChangeToRegister` with invariant. Add unit test to MachineInstrTest.cpp
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D110105/new/
https://reviews.llvm.org/D110105
Files:
llvm/lib/CodeGen/MIRParser/MIParser.cpp
llvm/lib/CodeGen/MachineInstr.cpp
llvm/lib/CodeGen/MachineOperand.cpp
llvm/unittests/CodeGen/MachineInstrTest.cpp
Index: llvm/unittests/CodeGen/MachineInstrTest.cpp
===================================================================
--- llvm/unittests/CodeGen/MachineInstrTest.cpp
+++ llvm/unittests/CodeGen/MachineInstrTest.cpp
@@ -386,6 +386,30 @@
ASSERT_FALSE(MI->getHeapAllocMarker());
}
+TEST(MachineInstrDebugValue, AddDebugValueOperand) {
+ LLVMContext Ctx;
+ Module Mod("Module", Ctx);
+ auto MF = createMachineFunction(Ctx, Mod);
+
+ for (const unsigned short OpCode :
+ {TargetOpcode::DBG_VALUE, TargetOpcode::DBG_VALUE_LIST}) {
+ const MCInstrDesc MCID = {
+ OpCode, 0, 0,
+ 0, 0, (1ULL << MCID::Pseudo) | (1ULL << MCID::Variadic),
+ 0, nullptr, nullptr,
+ nullptr};
+
+ auto MI = MF->CreateMachineInstr(MCID, DebugLoc());
+ MI->addOperand(*MF, MachineOperand::CreateReg(0, /*isDef*/ false));
+
+ MI->addOperand(*MF, MachineOperand::CreateImm(0));
+ MI->getOperand(1).ChangeToRegister(0, false);
+
+ ASSERT_TRUE(MI->getOperand(0).isDebug());
+ ASSERT_TRUE(MI->getOperand(1).isDebug());
+ }
+}
+
static_assert(std::is_trivially_copyable<MCOperand>::value,
"trivially copyable");
Index: llvm/lib/CodeGen/MachineOperand.cpp
===================================================================
--- llvm/lib/CodeGen/MachineOperand.cpp
+++ llvm/lib/CodeGen/MachineOperand.cpp
@@ -250,6 +250,11 @@
if (RegInfo && WasReg)
RegInfo->removeRegOperandFromUseList(this);
+ // Ensure DBG_VALUE* sets RegState::Debug on all register use operands.
+ const MachineInstr *MI = getParent();
+ if (!isDef && MI && MI->isDebugValue())
+ isDebug = true;
+
// Change this to a register and set the reg#.
assert(!(isDead && !isDef) && "Dead flag on non-def");
assert(!(isKill && isDef) && "Kill flag on def");
Index: llvm/lib/CodeGen/MachineInstr.cpp
===================================================================
--- llvm/lib/CodeGen/MachineInstr.cpp
+++ llvm/lib/CodeGen/MachineInstr.cpp
@@ -294,6 +294,9 @@
if (MCID->getOperandConstraint(OpNo, MCOI::EARLY_CLOBBER) != -1)
NewMO->setIsEarlyClobber(true);
}
+ // Ensure DBG_VALUE* sets RegState::Debug on all register use operands.
+ if (NewMO->isUse() && isDebugValue())
+ NewMO->setIsDebug();
}
}
Index: llvm/lib/CodeGen/MIRParser/MIParser.cpp
===================================================================
--- llvm/lib/CodeGen/MIRParser/MIParser.cpp
+++ llvm/lib/CodeGen/MIRParser/MIParser.cpp
@@ -1011,10 +1011,6 @@
Optional<unsigned> TiedDefIdx;
if (parseMachineOperandAndTargetFlags(OpCode, Operands.size(), MO, TiedDefIdx))
return true;
- if ((OpCode == TargetOpcode::DBG_VALUE ||
- OpCode == TargetOpcode::DBG_VALUE_LIST) &&
- MO.isReg())
- MO.setIsDebug();
Operands.push_back(
ParsedMachineOperand(MO, Loc, Token.location(), TiedDefIdx));
if (Token.isNewlineOrEOF() || Token.is(MIToken::coloncolon) ||
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110105.375677.patch
Type: text/x-patch
Size: 2972 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210928/4c1a9374/attachment.bin>
More information about the llvm-commits
mailing list