mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 19:12:56 +02:00
Move duplicate helpers from DbgValueInst / DbgDeclareInst to DbgInfoIntrinsic
NFC llvm-svn: 312754
This commit is contained in:
parent
39d44034da
commit
b41ed5da34
@ -71,6 +71,22 @@ namespace llvm {
|
||||
/// variable's value or its address.
|
||||
Value *getVariableLocation(bool AllowNullOp = true) const;
|
||||
|
||||
DILocalVariable *getVariable() const {
|
||||
return cast<DILocalVariable>(getRawVariable());
|
||||
}
|
||||
|
||||
DIExpression *getExpression() const {
|
||||
return cast<DIExpression>(getRawExpression());
|
||||
}
|
||||
|
||||
Metadata *getRawVariable() const {
|
||||
return cast<MetadataAsValue>(getArgOperand(1))->getMetadata();
|
||||
}
|
||||
|
||||
Metadata *getRawExpression() const {
|
||||
return cast<MetadataAsValue>(getArgOperand(2))->getMetadata();
|
||||
}
|
||||
|
||||
// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||
static bool classof(const IntrinsicInst *I) {
|
||||
switch (I->getIntrinsicID()) {
|
||||
@ -90,22 +106,6 @@ namespace llvm {
|
||||
public:
|
||||
Value *getAddress() const { return getVariableLocation(); }
|
||||
|
||||
DILocalVariable *getVariable() const {
|
||||
return cast<DILocalVariable>(getRawVariable());
|
||||
}
|
||||
|
||||
DIExpression *getExpression() const {
|
||||
return cast<DIExpression>(getRawExpression());
|
||||
}
|
||||
|
||||
Metadata *getRawVariable() const {
|
||||
return cast<MetadataAsValue>(getArgOperand(1))->getMetadata();
|
||||
}
|
||||
|
||||
Metadata *getRawExpression() const {
|
||||
return cast<MetadataAsValue>(getArgOperand(2))->getMetadata();
|
||||
}
|
||||
|
||||
// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||
static bool classof(const IntrinsicInst *I) {
|
||||
return I->getIntrinsicID() == Intrinsic::dbg_declare;
|
||||
@ -122,22 +122,6 @@ namespace llvm {
|
||||
return getVariableLocation(/* AllowNullOp = */ false);
|
||||
}
|
||||
|
||||
DILocalVariable *getVariable() const {
|
||||
return cast<DILocalVariable>(getRawVariable());
|
||||
}
|
||||
|
||||
DIExpression *getExpression() const {
|
||||
return cast<DIExpression>(getRawExpression());
|
||||
}
|
||||
|
||||
Metadata *getRawVariable() const {
|
||||
return cast<MetadataAsValue>(getArgOperand(1))->getMetadata();
|
||||
}
|
||||
|
||||
Metadata *getRawExpression() const {
|
||||
return cast<MetadataAsValue>(getArgOperand(2))->getMetadata();
|
||||
}
|
||||
|
||||
// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||
static bool classof(const IntrinsicInst *I) {
|
||||
return I->getIntrinsicID() == Intrinsic::dbg_value;
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user