mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-21 18:24:23 +00:00
Revert r218778 while investigating buldbot breakage.
"Move the complex address expression out of DIVariable and into an extra" git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218782 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1042,28 +1042,50 @@ DIVariable DIBuilder::createLocalVariable(unsigned Tag, DIDescriptor Scope,
|
||||
return RetVar;
|
||||
}
|
||||
|
||||
/// 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) {
|
||||
SmallVector<llvm::Value *, 16> Elts;
|
||||
Elts.push_back(GetTagConstant(VMContext, DW_TAG_expression));
|
||||
Elts.insert(Elts.end(), Addr.begin(), Addr.end());
|
||||
return DIExpression(MDNode::get(VMContext, Elts));
|
||||
/// createComplexVariable - Create a new descriptor for the specified variable
|
||||
/// which has a complex address expression for its address.
|
||||
DIVariable DIBuilder::createComplexVariable(unsigned Tag, DIDescriptor Scope,
|
||||
StringRef Name, DIFile F,
|
||||
unsigned LineNo,
|
||||
DITypeRef Ty,
|
||||
ArrayRef<Value *> Addr,
|
||||
unsigned ArgNo) {
|
||||
assert(Addr.size() > 0 && "complex address is empty");
|
||||
Value *Elts[] = {
|
||||
GetTagConstant(VMContext, Tag),
|
||||
getNonCompileUnitScope(Scope),
|
||||
MDString::get(VMContext, Name),
|
||||
F,
|
||||
ConstantInt::get(Type::getInt32Ty(VMContext),
|
||||
(LineNo | (ArgNo << 24))),
|
||||
Ty,
|
||||
Constant::getNullValue(Type::getInt32Ty(VMContext)),
|
||||
Constant::getNullValue(Type::getInt32Ty(VMContext)),
|
||||
MDNode::get(VMContext, Addr)
|
||||
};
|
||||
return DIVariable(MDNode::get(VMContext, Elts));
|
||||
}
|
||||
|
||||
/// createVariablePiece - Create a descriptor to describe one part
|
||||
/// of aggregate variable that is fragmented across multiple Values.
|
||||
DIExpression DIBuilder::createPieceExpression(unsigned OffsetInBytes,
|
||||
unsigned SizeInBytes) {
|
||||
DIVariable DIBuilder::createVariablePiece(DIVariable Variable,
|
||||
unsigned OffsetInBytes,
|
||||
unsigned SizeInBytes) {
|
||||
assert(SizeInBytes > 0 && "zero-size piece");
|
||||
Value *Addr[] = {
|
||||
GetTagConstant(VMContext, DW_TAG_expression),
|
||||
ConstantInt::get(Type::getInt64Ty(VMContext), dwarf::DW_OP_piece),
|
||||
ConstantInt::get(Type::getInt64Ty(VMContext), OffsetInBytes),
|
||||
ConstantInt::get(Type::getInt64Ty(VMContext), SizeInBytes)};
|
||||
ConstantInt::get(Type::getInt32Ty(VMContext), OpPiece),
|
||||
ConstantInt::get(Type::getInt32Ty(VMContext), OffsetInBytes),
|
||||
ConstantInt::get(Type::getInt32Ty(VMContext), SizeInBytes)
|
||||
};
|
||||
|
||||
return DIExpression(MDNode::get(VMContext, Addr));
|
||||
assert((Variable->getNumOperands() == 8 || Variable.isVariablePiece()) &&
|
||||
"variable already has a complex address");
|
||||
SmallVector<Value *, 9> Elts;
|
||||
for (unsigned i = 0; i < 8; ++i)
|
||||
Elts.push_back(Variable->getOperand(i));
|
||||
|
||||
Elts.push_back(MDNode::get(VMContext, Addr));
|
||||
return DIVariable(MDNode::get(VMContext, Elts));
|
||||
}
|
||||
|
||||
/// createFunction - Create a new descriptor for the specified function.
|
||||
@ -1270,7 +1292,6 @@ DILexicalBlock DIBuilder::createLexicalBlock(DIDescriptor Scope, DIFile File,
|
||||
|
||||
/// insertDeclare - Insert a new llvm.dbg.declare intrinsic call.
|
||||
Instruction *DIBuilder::insertDeclare(Value *Storage, DIVariable VarInfo,
|
||||
DIExpression Expr,
|
||||
Instruction *InsertBefore) {
|
||||
assert(Storage && "no storage passed to dbg.declare");
|
||||
assert(VarInfo.isVariable() &&
|
||||
@ -1278,13 +1299,12 @@ Instruction *DIBuilder::insertDeclare(Value *Storage, DIVariable VarInfo,
|
||||
if (!DeclareFn)
|
||||
DeclareFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_declare);
|
||||
|
||||
Value *Args[] = {MDNode::get(Storage->getContext(), Storage), VarInfo, Expr};
|
||||
Value *Args[] = { MDNode::get(Storage->getContext(), Storage), VarInfo };
|
||||
return CallInst::Create(DeclareFn, Args, "", InsertBefore);
|
||||
}
|
||||
|
||||
/// insertDeclare - Insert a new llvm.dbg.declare intrinsic call.
|
||||
Instruction *DIBuilder::insertDeclare(Value *Storage, DIVariable VarInfo,
|
||||
DIExpression Expr,
|
||||
BasicBlock *InsertAtEnd) {
|
||||
assert(Storage && "no storage passed to dbg.declare");
|
||||
assert(VarInfo.isVariable() &&
|
||||
@ -1292,7 +1312,7 @@ Instruction *DIBuilder::insertDeclare(Value *Storage, DIVariable VarInfo,
|
||||
if (!DeclareFn)
|
||||
DeclareFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_declare);
|
||||
|
||||
Value *Args[] = {MDNode::get(Storage->getContext(), Storage), VarInfo, Expr};
|
||||
Value *Args[] = { MDNode::get(Storage->getContext(), Storage), VarInfo };
|
||||
|
||||
// If this block already has a terminator then insert this intrinsic
|
||||
// before the terminator.
|
||||
@ -1305,7 +1325,6 @@ Instruction *DIBuilder::insertDeclare(Value *Storage, DIVariable VarInfo,
|
||||
/// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
|
||||
Instruction *DIBuilder::insertDbgValueIntrinsic(Value *V, uint64_t Offset,
|
||||
DIVariable VarInfo,
|
||||
DIExpression Expr,
|
||||
Instruction *InsertBefore) {
|
||||
assert(V && "no value passed to dbg.value");
|
||||
assert(VarInfo.isVariable() &&
|
||||
@ -1313,16 +1332,15 @@ Instruction *DIBuilder::insertDbgValueIntrinsic(Value *V, uint64_t Offset,
|
||||
if (!ValueFn)
|
||||
ValueFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_value);
|
||||
|
||||
Value *Args[] = {MDNode::get(V->getContext(), V),
|
||||
ConstantInt::get(Type::getInt64Ty(V->getContext()), Offset),
|
||||
VarInfo, Expr};
|
||||
Value *Args[] = { MDNode::get(V->getContext(), V),
|
||||
ConstantInt::get(Type::getInt64Ty(V->getContext()), Offset),
|
||||
VarInfo };
|
||||
return CallInst::Create(ValueFn, Args, "", InsertBefore);
|
||||
}
|
||||
|
||||
/// insertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
|
||||
Instruction *DIBuilder::insertDbgValueIntrinsic(Value *V, uint64_t Offset,
|
||||
DIVariable VarInfo,
|
||||
DIExpression Expr,
|
||||
BasicBlock *InsertAtEnd) {
|
||||
assert(V && "no value passed to dbg.value");
|
||||
assert(VarInfo.isVariable() &&
|
||||
@ -1330,8 +1348,8 @@ Instruction *DIBuilder::insertDbgValueIntrinsic(Value *V, uint64_t Offset,
|
||||
if (!ValueFn)
|
||||
ValueFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_value);
|
||||
|
||||
Value *Args[] = {MDNode::get(V->getContext(), V),
|
||||
ConstantInt::get(Type::getInt64Ty(V->getContext()), Offset),
|
||||
VarInfo, Expr};
|
||||
Value *Args[] = { MDNode::get(V->getContext(), V),
|
||||
ConstantInt::get(Type::getInt64Ty(V->getContext()), Offset),
|
||||
VarInfo };
|
||||
return CallInst::Create(ValueFn, Args, "", InsertAtEnd);
|
||||
}
|
||||
|
Reference in New Issue
Block a user