@@ -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
71527140void 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
72777267void 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- }
73507312void 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- }
74027341void Verifier::verifyNotEntryValue (const DbgVariableRecord &DVR) {
74037342 DIExpression *E = dyn_cast_or_null<DIExpression>(DVR.getRawExpression ());
74047343
0 commit comments