mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-04 22:07:27 +00:00
DebugInfo: Simplify constant value emission.
This code looks to have become dead at some time in the past. I tried to reproduce cases where LLVM would emit constants with dataN, but could not. Upon inspection it seems the code doesn't do that anymore - the only time a size is provided by isTypeSigned is when the type is signed, and in those cases we use sdata. dataN is only used for unsigned types and isTypeSigned doesn't provide a value for sizeInBits in that case. Remove the dead cases/size plumbing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208494 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4db3f41012
commit
d0125ee381
@ -746,17 +746,14 @@ void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die,
|
||||
}
|
||||
|
||||
/// isTypeSigned - Return true if the type is signed.
|
||||
static bool isTypeSigned(DwarfDebug *DD, DIType Ty, int *SizeInBits) {
|
||||
static bool isTypeSigned(DwarfDebug *DD, DIType Ty) {
|
||||
if (Ty.isDerivedType())
|
||||
return isTypeSigned(DD, DD->resolve(DIDerivedType(Ty).getTypeDerivedFrom()),
|
||||
SizeInBits);
|
||||
if (Ty.isBasicType())
|
||||
if (DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed ||
|
||||
DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed_char) {
|
||||
*SizeInBits = Ty.getSizeInBits();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return isTypeSigned(DD,
|
||||
DD->resolve(DIDerivedType(Ty).getTypeDerivedFrom()));
|
||||
|
||||
return Ty.isBasicType() &&
|
||||
(DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed ||
|
||||
DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed_char);
|
||||
}
|
||||
|
||||
/// Return true if type encoding is unsigned.
|
||||
@ -809,39 +806,12 @@ static uint64_t getBaseTypeSize(DwarfDebug *DD, DIDerivedType Ty) {
|
||||
void DwarfUnit::addConstantValue(DIE &Die, const MachineOperand &MO,
|
||||
DIType Ty) {
|
||||
// FIXME: This is a bit conservative/simple - it emits negative values at
|
||||
// their maximum bit width which is a bit unfortunate (& doesn't prefer
|
||||
// udata/sdata over dataN as suggested by the DWARF spec)
|
||||
// their maximum bit width which is a bit unfortunate.
|
||||
assert(MO.isImm() && "Invalid machine operand!");
|
||||
int SizeInBits = -1;
|
||||
bool SignedConstant = isTypeSigned(DD, Ty, &SizeInBits);
|
||||
dwarf::Form Form;
|
||||
|
||||
// If we're a signed constant definitely use sdata.
|
||||
if (SignedConstant) {
|
||||
addSInt(Die, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, MO.getImm());
|
||||
return;
|
||||
}
|
||||
|
||||
// Else use data for now unless it's larger than we can deal with.
|
||||
switch (SizeInBits) {
|
||||
case 8:
|
||||
Form = dwarf::DW_FORM_data1;
|
||||
break;
|
||||
case 16:
|
||||
Form = dwarf::DW_FORM_data2;
|
||||
break;
|
||||
case 32:
|
||||
Form = dwarf::DW_FORM_data4;
|
||||
break;
|
||||
case 64:
|
||||
Form = dwarf::DW_FORM_data8;
|
||||
break;
|
||||
default:
|
||||
Form = dwarf::DW_FORM_udata;
|
||||
addUInt(Die, dwarf::DW_AT_const_value, Form, MO.getImm());
|
||||
return;
|
||||
}
|
||||
addUInt(Die, dwarf::DW_AT_const_value, Form, MO.getImm());
|
||||
addUInt(Die, dwarf::DW_AT_const_value,
|
||||
isTypeSigned(DD, Ty) ? dwarf::DW_FORM_sdata : dwarf::DW_FORM_udata,
|
||||
MO.getImm());
|
||||
}
|
||||
|
||||
/// addConstantFPValue - Add constant value entry in variable DIE.
|
||||
|
Loading…
Reference in New Issue
Block a user