diff --git a/llvm/include/llvm/IR/DebugInfoMetadata.h b/llvm/include/llvm/IR/DebugInfoMetadata.h --- a/llvm/include/llvm/IR/DebugInfoMetadata.h +++ b/llvm/include/llvm/IR/DebugInfoMetadata.h @@ -64,6 +64,8 @@ enum Tag : uint16_t; } +class DbgVariableIntrinsic; + extern cl::opt EnableFSDiscriminator; class DITypeRefArray { @@ -3629,6 +3631,8 @@ static const FragmentInfo DefaultFragment; public: + DebugVariable(const DbgVariableIntrinsic *DII); + DebugVariable(const DILocalVariable *Var, Optional FragmentInfo, const DILocation *InlinedAt) : Variable(Var), Fragment(FragmentInfo), InlinedAt(InlinedAt) {} diff --git a/llvm/lib/IR/DebugInfoMetadata.cpp b/llvm/lib/IR/DebugInfoMetadata.cpp --- a/llvm/lib/IR/DebugInfoMetadata.cpp +++ b/llvm/lib/IR/DebugInfoMetadata.cpp @@ -17,6 +17,7 @@ #include "llvm/ADT/StringSwitch.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/IR/Function.h" +#include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/Type.h" #include "llvm/IR/Value.h" @@ -34,6 +35,11 @@ const DIExpression::FragmentInfo DebugVariable::DefaultFragment = { std::numeric_limits::max(), std::numeric_limits::min()}; +DebugVariable::DebugVariable(const DbgVariableIntrinsic *DII) + : Variable(DII->getVariable()), + Fragment(DII->getExpression()->getFragmentInfo()), + InlinedAt(DII->getDebugLoc().getInlinedAt()) {} + DILocation::DILocation(LLVMContext &C, StorageType Storage, unsigned Line, unsigned Column, ArrayRef MDs, bool ImplicitCode)