mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Handle debug info for i128 constants.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133821 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -575,6 +575,8 @@ static bool EmitDebugValueComment(const MachineInstr *MI, AsmPrinter &AP) {
|
||||
}
|
||||
} else if (MI->getOperand(0).isImm()) {
|
||||
OS << MI->getOperand(0).getImm();
|
||||
} else if (MI->getOperand(0).isCImm()) {
|
||||
MI->getOperand(0).getCImm()->getValue().print(OS, false /*isSigned*/);
|
||||
} else {
|
||||
assert(MI->getOperand(0).isReg() && "Unknown operand type");
|
||||
if (MI->getOperand(0).getReg() == 0) {
|
||||
|
@@ -491,7 +491,7 @@ bool CompileUnit::addConstantFPValue(DIE *Die, const MachineOperand &MO) {
|
||||
}
|
||||
|
||||
/// addConstantValue - Add constant value entry in variable DIE.
|
||||
bool CompileUnit::addConstantValue(DIE *Die, ConstantInt *CI,
|
||||
bool CompileUnit::addConstantValue(DIE *Die, const ConstantInt *CI,
|
||||
bool Unsigned) {
|
||||
unsigned CIBitWidth = CI->getBitWidth();
|
||||
if (CIBitWidth <= 64) {
|
||||
|
@@ -181,7 +181,7 @@ public:
|
||||
|
||||
/// addConstantValue - Add constant value entry in variable DIE.
|
||||
bool addConstantValue(DIE *Die, const MachineOperand &MO, DIType Ty);
|
||||
bool addConstantValue(DIE *Die, ConstantInt *CI, bool Unsigned);
|
||||
bool addConstantValue(DIE *Die, const ConstantInt *CI, bool Unsigned);
|
||||
|
||||
/// addConstantFPValue - Add constant value entry in variable DIE.
|
||||
bool addConstantFPValue(DIE *Die, const MachineOperand &MO);
|
||||
|
@@ -618,6 +618,21 @@ DIE *DwarfDebug::constructInlinedScopeDIE(DbgScope *Scope) {
|
||||
return ScopeDIE;
|
||||
}
|
||||
|
||||
/// isUnsignedDIType - Return true if type encoding is unsigned.
|
||||
static bool isUnsignedDIType(DIType Ty) {
|
||||
DIDerivedType DTy(Ty);
|
||||
if (DTy.Verify())
|
||||
return isUnsignedDIType(DTy.getTypeDerivedFrom());
|
||||
|
||||
DIBasicType BTy(Ty);
|
||||
if (BTy.Verify()) {
|
||||
unsigned Encoding = BTy.getEncoding();
|
||||
if (Encoding == dwarf::DW_ATE_unsigned ||
|
||||
Encoding == dwarf::DW_ATE_unsigned_char)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// constructVariableDIE - Construct a DIE for the given DbgVariable.
|
||||
DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
|
||||
@@ -718,6 +733,11 @@ DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
|
||||
else if (DVInsn->getOperand(0).isFPImm())
|
||||
updated =
|
||||
VariableCU->addConstantFPValue(VariableDie, DVInsn->getOperand(0));
|
||||
else if (DVInsn->getOperand(0).isCImm())
|
||||
updated =
|
||||
VariableCU->addConstantValue(VariableDie,
|
||||
DVInsn->getOperand(0).getCImm(),
|
||||
isUnsignedDIType(DV->getType()));
|
||||
} else {
|
||||
VariableCU->addVariableAddress(DV, VariableDie,
|
||||
Asm->getDebugValueLocation(DVInsn));
|
||||
@@ -913,22 +933,6 @@ CompileUnit *DwarfDebug::getCompileUnit(const MDNode *N) const {
|
||||
return I->second;
|
||||
}
|
||||
|
||||
/// isUnsignedDIType - Return true if type encoding is unsigned.
|
||||
static bool isUnsignedDIType(DIType Ty) {
|
||||
DIDerivedType DTy(Ty);
|
||||
if (DTy.Verify())
|
||||
return isUnsignedDIType(DTy.getTypeDerivedFrom());
|
||||
|
||||
DIBasicType BTy(Ty);
|
||||
if (BTy.Verify()) {
|
||||
unsigned Encoding = BTy.getEncoding();
|
||||
if (Encoding == dwarf::DW_ATE_unsigned ||
|
||||
Encoding == dwarf::DW_ATE_unsigned_char)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Return const exprssion if value is a GEP to access merged global
|
||||
// constant. e.g.
|
||||
// i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
|
||||
@@ -1017,7 +1021,7 @@ void DwarfDebug::constructGlobalVariableDIE(const MDNode *N) {
|
||||
} else {
|
||||
TheCU->addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
|
||||
}
|
||||
} else if (ConstantInt *CI =
|
||||
} else if (const ConstantInt *CI =
|
||||
dyn_cast_or_null<ConstantInt>(GV.getConstant()))
|
||||
TheCU->addConstantValue(VariableDIE, CI, isUnsignedDIType(GTy));
|
||||
else if (const ConstantExpr *CE = getMergedGlobalExpr(N->getOperand(11))) {
|
||||
|
Reference in New Issue
Block a user