mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-03 17:31:50 +00:00
DIBuilder: Encapsulate DIExpression's element type
`DIExpression`'s elements are 64-bit integers that are stored as `ConstantInt`. The accessors already encapsulate the storage. This commit updates the `DIBuilder` API to also encapsulate that. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218797 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
024b291415
commit
d045b8439a
@ -503,7 +503,7 @@ namespace llvm {
|
||||
/// createExpression - Create a new descriptor for the specified
|
||||
/// variable which has a complex address expression for its address.
|
||||
/// @param Addr An array of complex address operations.
|
||||
DIExpression createExpression(ArrayRef<Value *> Addr = None);
|
||||
DIExpression createExpression(ArrayRef<int64_t> Addr = None);
|
||||
|
||||
/// createPieceExpression - Create a descriptor to describe one part
|
||||
/// of aggregate variable that is fragmented across multiple Values.
|
||||
|
@ -1045,10 +1045,14 @@ DIVariable DIBuilder::createLocalVariable(unsigned Tag, DIDescriptor Scope,
|
||||
/// createExpression - Create a new descriptor for the specified
|
||||
/// variable which has a complex address expression for its address.
|
||||
/// @param Addr An array of complex address operations.
|
||||
DIExpression DIBuilder::createExpression(ArrayRef<Value *> Addr) {
|
||||
DIExpression DIBuilder::createExpression(ArrayRef<int64_t> Addr) {
|
||||
SmallVector<llvm::Value *, 16> Elts;
|
||||
Elts.push_back(GetTagConstant(VMContext, DW_TAG_expression));
|
||||
Elts.insert(Elts.end(), Addr.begin(), Addr.end());
|
||||
|
||||
llvm::Type *Int64Ty = Type::getInt64Ty(VMContext);
|
||||
for (int64_t I : Addr)
|
||||
Elts.push_back(ConstantInt::get(Int64Ty, I));
|
||||
|
||||
return DIExpression(MDNode::get(VMContext, Elts));
|
||||
}
|
||||
|
||||
|
@ -1115,14 +1115,13 @@ bool llvm::replaceDbgDeclareForAlloca(AllocaInst *AI, Value *NewAllocaAddress,
|
||||
// "deref" operation to a list of address elements, as new llvm.dbg.declare
|
||||
// will take a value storing address of the memory for variable, not
|
||||
// alloca itself.
|
||||
Type *Int64Ty = Type::getInt64Ty(AI->getContext());
|
||||
SmallVector<Value *, 4> NewDIExpr;
|
||||
SmallVector<int64_t, 4> NewDIExpr;
|
||||
if (DIExpr) {
|
||||
for (unsigned i = 0, n = DIExpr.getNumElements(); i < n; ++i) {
|
||||
NewDIExpr.push_back(ConstantInt::get(Int64Ty, DIExpr.getElement(i)));
|
||||
NewDIExpr.push_back(DIExpr.getElement(i));
|
||||
}
|
||||
}
|
||||
NewDIExpr.push_back(ConstantInt::get(Int64Ty, dwarf::DW_OP_deref));
|
||||
NewDIExpr.push_back(dwarf::DW_OP_deref);
|
||||
|
||||
// Insert llvm.dbg.declare in the same basic block as the original alloca,
|
||||
// and remove old llvm.dbg.declare.
|
||||
|
Loading…
Reference in New Issue
Block a user