diff options
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 56 | ||||
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfUnit.h | 1 | ||||
-rw-r--r-- | test/DebugInfo/X86/debug-info-static-member.ll | 4 |
3 files changed, 19 insertions, 42 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index cfaa8bcfe2..83d1f3aa93 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -802,18 +802,6 @@ static uint64_t getBaseTypeSize(DwarfDebug *DD, DIDerivedType Ty) { return BaseType.getSizeInBits(); } -/// addConstantValue - Add constant value entry in variable DIE. -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. - assert(MO.isImm() && "Invalid machine operand!"); - - 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. void DwarfUnit::addConstantFPValue(DIE &Die, const MachineOperand &MO) { assert(MO.isFPImm() && "Invalid machine operand!"); @@ -849,38 +837,26 @@ void DwarfUnit::addConstantValue(DIE &Die, const ConstantInt *CI, addConstantValue(Die, CI->getValue(), Unsigned); } +/// addConstantValue - Add constant value entry in variable DIE. +void DwarfUnit::addConstantValue(DIE &Die, const MachineOperand &MO, + DIType Ty) { + assert(MO.isImm() && "Invalid machine operand!"); + + addConstantValue(Die, isTypeSigned(DD, Ty), MO.getImm()); +} + +void DwarfUnit::addConstantValue(DIE &Die, bool Signed, uint64_t Val) { + // FIXME: This is a bit conservative/simple - it emits negative values always + // sign extended to 64 bits rather than minimizing the number of bytes. + addUInt(Die, dwarf::DW_AT_const_value, + Signed ? dwarf::DW_FORM_sdata : dwarf::DW_FORM_udata, Val); +} + // addConstantValue - Add constant value entry in variable DIE. void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, bool Unsigned) { unsigned CIBitWidth = Val.getBitWidth(); if (CIBitWidth <= 64) { - // If we're a signed constant definitely use sdata. - if (!Unsigned) { - addSInt(Die, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, - Val.getSExtValue()); - return; - } - - // Else use data for now unless it's larger than we can deal with. - dwarf::Form Form; - switch (CIBitWidth) { - 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: - addUInt(Die, dwarf::DW_AT_const_value, dwarf::DW_FORM_udata, - Val.getZExtValue()); - return; - } - addUInt(Die, dwarf::DW_AT_const_value, Form, Val.getZExtValue()); + addConstantValue(Die, !Unsigned, Unsigned ? Val.getZExtValue() : Val.getSExtValue()); return; } diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.h b/lib/CodeGen/AsmPrinter/DwarfUnit.h index b2ac647e00..b181d30c19 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.h +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.h @@ -350,6 +350,7 @@ public: void addConstantValue(DIE &Die, const MachineOperand &MO, DIType Ty); void addConstantValue(DIE &Die, const ConstantInt *CI, bool Unsigned); void addConstantValue(DIE &Die, const APInt &Val, bool Unsigned); + void addConstantValue(DIE &Die, bool Signed, uint64_t Val); /// addConstantFPValue - Add constant value entry in variable DIE. void addConstantFPValue(DIE &Die, const MachineOperand &MO); diff --git a/test/DebugInfo/X86/debug-info-static-member.ll b/test/DebugInfo/X86/debug-info-static-member.ll index f15f2c14f2..7d258f9d83 100644 --- a/test/DebugInfo/X86/debug-info-static-member.ll +++ b/test/DebugInfo/X86/debug-info-static-member.ll @@ -114,7 +114,7 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone ; PRESENT: DW_TAG_member ; PRESENT-NEXT: DW_AT_name {{.*}} "const_b" ; PRESENT: DW_AT_accessibility [DW_FORM_data1] (0x02) -; PRESENT: DW_AT_const_value {{.*}} (0x4048f5c3) +; PRESENT: DW_AT_const_value [DW_FORM_udata] (1078523331) ; PRESENT: 0x[[DECL_C:[0-9a-f]+]]: DW_TAG_member ; PRESENT-NEXT: DW_AT_name {{.*}} "c" ; PRESENT: DW_AT_accessibility [DW_FORM_data1] (0x01) @@ -164,7 +164,7 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone ; DARWINP: DW_TAG_member ; DARWINP-NEXT: DW_AT_name {{.*}} "const_b" ; DARWINP: DW_AT_accessibility [DW_FORM_data1] (0x02) -; DARWINP: DW_AT_const_value {{.*}} (0x4048f5c3) +; DARWINP: DW_AT_const_value [DW_FORM_udata] (1078523331) ; DARWINP: 0x[[DECL_C:[0-9a-f]+]]: DW_TAG_member ; DARWINP-NEXT: DW_AT_name {{.*}} "c" ; DARWINP: DW_AT_accessibility [DW_FORM_data1] (0x01) |