Skip to content

Commit fc4aa69

Browse files
committed
Reapply "[DebugInfo] Delete debug-intrinsic verifier checks (llvm#149066)"
This reverts commit ba650b8.
1 parent 1bffdb3 commit fc4aa69

File tree

1 file changed

+11
-72
lines changed

1 file changed

+11
-72
lines changed

llvm/lib/IR/Verifier.cpp

Lines changed: 11 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,6 @@ class Verifier : public InstVisitor<Verifier>, VerifierSupport {
597597
void visitIntrinsicCall(Intrinsic::ID ID, CallBase &Call);
598598
void visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI);
599599
void visitVPIntrinsic(VPIntrinsic &VPI);
600-
void visitDbgIntrinsic(StringRef Kind, DbgVariableIntrinsic &DII);
601600
void visitDbgLabelIntrinsic(StringRef Kind, DbgLabelInst &DLI);
602601
void visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI);
603602
void visitAtomicRMWInst(AtomicRMWInst &RMWI);
@@ -636,15 +635,12 @@ class Verifier : public InstVisitor<Verifier>, VerifierSupport {
636635
void verifyFrameRecoverIndices();
637636
void verifySiblingFuncletUnwinds();
638637

639-
void verifyFragmentExpression(const DbgVariableIntrinsic &I);
640638
void verifyFragmentExpression(const DbgVariableRecord &I);
641639
template <typename ValueOrMetadata>
642640
void verifyFragmentExpression(const DIVariable &V,
643641
DIExpression::FragmentInfo Fragment,
644642
ValueOrMetadata *Desc);
645-
void verifyFnArgs(const DbgVariableIntrinsic &I);
646643
void verifyFnArgs(const DbgVariableRecord &DVR);
647-
void verifyNotEntryValue(const DbgVariableIntrinsic &I);
648644
void verifyNotEntryValue(const DbgVariableRecord &I);
649645

650646
/// Module-level debug info verification...
@@ -5513,11 +5509,6 @@ void Verifier::visitInstruction(Instruction &I) {
55135509
}
55145510
}
55155511

5516-
if (auto *DII = dyn_cast<DbgVariableIntrinsic>(&I)) {
5517-
verifyFragmentExpression(*DII);
5518-
verifyNotEntryValue(*DII);
5519-
}
5520-
55215512
SmallVector<std::pair<unsigned, MDNode *>, 4> MDs;
55225513
I.getAllMetadata(MDs);
55235514
for (auto Attachment : MDs) {
@@ -5722,18 +5713,14 @@ void Verifier::visitIntrinsicCall(Intrinsic::ID ID, CallBase &Call) {
57225713
visitConstrainedFPIntrinsic(cast<ConstrainedFPIntrinsic>(Call));
57235714
break;
57245715
case Intrinsic::dbg_declare: // llvm.dbg.declare
5725-
Check(isa<MetadataAsValue>(Call.getArgOperand(0)),
5726-
"invalid llvm.dbg.declare intrinsic call 1", Call);
5727-
visitDbgIntrinsic("declare", cast<DbgVariableIntrinsic>(Call));
5728-
break;
5729-
case Intrinsic::dbg_value: // llvm.dbg.value
5730-
visitDbgIntrinsic("value", cast<DbgVariableIntrinsic>(Call));
5731-
break;
5732-
case Intrinsic::dbg_assign: // llvm.dbg.assign
5733-
visitDbgIntrinsic("assign", cast<DbgVariableIntrinsic>(Call));
5734-
break;
5735-
case Intrinsic::dbg_label: // llvm.dbg.label
5736-
visitDbgLabelIntrinsic("label", cast<DbgLabelInst>(Call));
5716+
case Intrinsic::dbg_value: // llvm.dbg.value
5717+
case Intrinsic::dbg_assign: // llvm.dbg.assign
5718+
case Intrinsic::dbg_label: // llvm.dbg.label
5719+
// We no longer interpret debug intrinsics (the old variable-location
5720+
// design). They're meaningless as far as LLVM is concerned we could make
5721+
// it an error for them to appear, but it's possible we'll have users
5722+
// converting back to intrinsics for the forseeable future (such as DXIL),
5723+
// so tolerate their existance.
57375724
break;
57385725
case Intrinsic::memcpy:
57395726
case Intrinsic::memcpy_inline:
@@ -7149,6 +7136,7 @@ void Verifier::visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI) {
71497136
}
71507137
}
71517138

7139+
<<<<<<< HEAD
71527140
void Verifier::visitDbgIntrinsic(StringRef Kind, DbgVariableIntrinsic &DII) {
71537141
auto *MD = DII.getRawLocation();
71547142
CheckDI(isa<ValueAsMetadata>(MD) || isa<DIArgList>(MD) ||
@@ -7274,6 +7262,8 @@ void Verifier::verifyFragmentExpression(const DbgVariableIntrinsic &I) {
72747262

72757263
verifyFragmentExpression(*V, *Fragment, &I);
72767264
}
7265+
=======
7266+
>>>>>>> 7caa0c9a55b3
72777267
void Verifier::verifyFragmentExpression(const DbgVariableRecord &DVR) {
72787268
DILocalVariable *V = dyn_cast_or_null<DILocalVariable>(DVR.getRawVariable());
72797269
DIExpression *E = dyn_cast_or_null<DIExpression>(DVR.getRawExpression());
@@ -7319,34 +7309,6 @@ void Verifier::verifyFragmentExpression(const DIVariable &V,
73197309
CheckDI(MSpace <= dwarf::DW_MSPACE_LLVM_hi_user, "invalid memory space", &V);
73207310
}
73217311

7322-
void Verifier::verifyFnArgs(const DbgVariableIntrinsic &I) {
7323-
// This function does not take the scope of noninlined function arguments into
7324-
// account. Don't run it if current function is nodebug, because it may
7325-
// contain inlined debug intrinsics.
7326-
if (!HasDebugInfo)
7327-
return;
7328-
7329-
// For performance reasons only check non-inlined ones.
7330-
if (I.getDebugLoc()->getInlinedAt())
7331-
return;
7332-
7333-
DILocalVariable *Var = I.getVariable();
7334-
CheckDI(Var, "dbg intrinsic without variable");
7335-
7336-
unsigned ArgNo = Var->getArg();
7337-
if (!ArgNo)
7338-
return;
7339-
7340-
// Verify there are no duplicate function argument debug info entries.
7341-
// These will cause hard-to-debug assertions in the DWARF backend.
7342-
if (DebugFnArgs.size() < ArgNo)
7343-
DebugFnArgs.resize(ArgNo, nullptr);
7344-
7345-
auto *Prev = DebugFnArgs[ArgNo - 1];
7346-
DebugFnArgs[ArgNo - 1] = Var;
7347-
CheckDI(!Prev || (Prev == Var), "conflicting debug info for argument", &I,
7348-
Prev, Var);
7349-
}
73507312
void Verifier::verifyFnArgs(const DbgVariableRecord &DVR) {
73517313
// This function does not take the scope of noninlined function arguments into
73527314
// account. Don't run it if current function is nodebug, because it may
@@ -7376,29 +7338,6 @@ void Verifier::verifyFnArgs(const DbgVariableRecord &DVR) {
73767338
Prev, Var);
73777339
}
73787340

7379-
void Verifier::verifyNotEntryValue(const DbgVariableIntrinsic &I) {
7380-
DIExpression *E = dyn_cast_or_null<DIExpression>(I.getRawExpression());
7381-
7382-
// We don't know whether this intrinsic verified correctly.
7383-
if (!E || !E->isValid())
7384-
return;
7385-
7386-
if (isa<ValueAsMetadata>(I.getRawLocation())) {
7387-
Value *VarValue = I.getVariableLocationOp(0);
7388-
if (isa<UndefValue>(VarValue) || isa<PoisonValue>(VarValue))
7389-
return;
7390-
// We allow EntryValues for swift async arguments, as they have an
7391-
// ABI-guarantee to be turned into a specific register.
7392-
if (auto *ArgLoc = dyn_cast_or_null<Argument>(VarValue);
7393-
ArgLoc && ArgLoc->hasAttribute(Attribute::SwiftAsync))
7394-
return;
7395-
}
7396-
7397-
CheckDI(!E->isEntryValue(),
7398-
"Entry values are only allowed in MIR unless they target a "
7399-
"swiftasync Argument",
7400-
&I);
7401-
}
74027341
void Verifier::verifyNotEntryValue(const DbgVariableRecord &DVR) {
74037342
DIExpression *E = dyn_cast_or_null<DIExpression>(DVR.getRawExpression());
74047343

0 commit comments

Comments
 (0)