diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/IR/Verifier.cpp | 39 |
1 files changed, 11 insertions, 28 deletions
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index e62daeeb539..c875e302188 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -468,8 +468,7 @@ private: void visitUserOp2(Instruction &I) { visitUserOp1(I); } void visitIntrinsicCallSite(Intrinsic::ID ID, CallSite CS); void visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI); - template <class DbgIntrinsicTy> - void visitDbgIntrinsic(StringRef Kind, DbgIntrinsicTy &DII); + void visitDbgIntrinsic(StringRef Kind, DbgInfoIntrinsic &DII); void visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI); void visitAtomicRMWInst(AtomicRMWInst &RMWI); void visitFenceInst(FenceInst &FI); @@ -4000,10 +3999,10 @@ void Verifier::visitIntrinsicCallSite(Intrinsic::ID ID, CallSite CS) { case Intrinsic::dbg_declare: // llvm.dbg.declare Assert(isa<MetadataAsValue>(CS.getArgOperand(0)), "invalid llvm.dbg.declare intrinsic call 1", CS); - visitDbgIntrinsic("declare", cast<DbgDeclareInst>(*CS.getInstruction())); + visitDbgIntrinsic("declare", cast<DbgInfoIntrinsic>(*CS.getInstruction())); break; case Intrinsic::dbg_value: // llvm.dbg.value - visitDbgIntrinsic("value", cast<DbgValueInst>(*CS.getInstruction())); + visitDbgIntrinsic("value", cast<DbgInfoIntrinsic>(*CS.getInstruction())); break; case Intrinsic::memcpy: case Intrinsic::memmove: @@ -4455,8 +4454,7 @@ void Verifier::visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI) { "invalid exception behavior argument", &FPI); } -template <class DbgIntrinsicTy> -void Verifier::visitDbgIntrinsic(StringRef Kind, DbgIntrinsicTy &DII) { +void Verifier::visitDbgIntrinsic(StringRef Kind, DbgInfoIntrinsic &DII) { auto *MD = cast<MetadataAsValue>(DII.getArgOperand(0))->getMetadata(); AssertDI(isa<ValueAsMetadata>(MD) || (isa<MDNode>(MD) && !cast<MDNode>(MD)->getNumOperands()), @@ -4519,16 +4517,8 @@ static uint64_t getVariableSize(const DIVariable &V) { } void Verifier::verifyFragmentExpression(const DbgInfoIntrinsic &I) { - DILocalVariable *V; - DIExpression *E; - if (auto *DVI = dyn_cast<DbgValueInst>(&I)) { - V = dyn_cast_or_null<DILocalVariable>(DVI->getRawVariable()); - E = dyn_cast_or_null<DIExpression>(DVI->getRawExpression()); - } else { - auto *DDI = cast<DbgDeclareInst>(&I); - V = dyn_cast_or_null<DILocalVariable>(DDI->getRawVariable()); - E = dyn_cast_or_null<DIExpression>(DDI->getRawExpression()); - } + DILocalVariable *V = dyn_cast_or_null<DILocalVariable>(I.getRawVariable()); + DIExpression *E = dyn_cast_or_null<DIExpression>(I.getRawExpression()); // We don't know whether this intrinsic verified correctly. if (!V || !E || !E->isValid()) @@ -4575,18 +4565,11 @@ void Verifier::verifyFnArgs(const DbgInfoIntrinsic &I) { if (!HasDebugInfo) return; - DILocalVariable *Var; - if (auto *DV = dyn_cast<DbgValueInst>(&I)) { - // For performance reasons only check non-inlined ones. - if (DV->getDebugLoc()->getInlinedAt()) - return; - Var = DV->getVariable(); - } else { - auto *DD = cast<DbgDeclareInst>(&I); - if (DD->getDebugLoc()->getInlinedAt()) - return; - Var = DD->getVariable(); - } + // For performance reasons only check non-inlined ones. + if (I.getDebugLoc()->getInlinedAt()) + return; + + DILocalVariable *Var = I.getVariable(); AssertDI(Var, "dbg intrinsic without variable"); unsigned ArgNo = Var->getArg(); |