Keep this simple. Use DIType to get signness and size of a type. Based on size, select appropraite form.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132206 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel 2011-05-27 19:13:26 +00:00
parent 7b06b7357a
commit 045c1d4e48

View File

@ -445,25 +445,20 @@ bool CompileUnit::addConstantValue(DIE *Die, const MachineOperand &MO,
assert (MO.isImm() && "Invalid machine operand!");
DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
unsigned form = dwarf::DW_FORM_udata;
switch (Ty.getSizeInBits()) {
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: break;
}
DIBasicType BTy(Ty);
if (BTy.Verify()) {
unsigned Encoding = BTy.getEncoding();
if (Encoding == dwarf::DW_ATE_signed ||
Encoding == dwarf::DW_ATE_signed_char) {
form = dwarf::DW_FORM_sdata;
addSInt(Block, 0, dwarf::DW_FORM_sdata, MO.getImm());
} else {
switch (Ty.getSizeInBits()) {
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: break;
}
addUInt(Block, 0, form, MO.getImm());
}
} else
//if this is not basic type then just use _udata.
if (BTy.Verify() &&
(BTy.getEncoding() == dwarf::DW_ATE_signed
|| BTy.getEncoding() == dwarf::DW_ATE_signed_char))
addSInt(Block, 0, form, MO.getImm());
else
addUInt(Block, 0, form, MO.getImm());
addBlock(Die, dwarf::DW_AT_const_value, 0, Block);