diff options
| author | David Blaikie <dblaikie@gmail.com> | 2014-05-11 15:47:39 +0000 | 
|---|---|---|
| committer | David Blaikie <dblaikie@gmail.com> | 2014-05-11 15:47:39 +0000 | 
| commit | c05c8f483baa0e4250e5d5a150865f62591d1a54 (patch) | |
| tree | 5ac5d51920d2e3c9eeb279f5d225c6a81dc3402c /llvm/lib/CodeGen/AsmPrinter | |
| parent | 958647c36decf8670f8dbfa27de4ffe48ea9f38e (diff) | |
| download | bcm5719-llvm-c05c8f483baa0e4250e5d5a150865f62591d1a54.tar.gz bcm5719-llvm-c05c8f483baa0e4250e5d5a150865f62591d1a54.zip  | |
DwarfUnit: Share common constant value emission between APInts of small (<= 64 bit) and MCOperand immediates.
Doesn't seem a good reason to duplicate this code (it was more literally
duplicated prior to r208494, and while the dataN code /does/ actually
fire in this case, it doesn't seem necessary (and the DWARF standard
recommends using udata/sdata pervasively instead of dataN, so as to
indicate signedness of the values))
llvm-svn: 208495
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 56 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h | 1 | 
2 files changed, 17 insertions, 40 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index cfaa8bcfe23..83d1f3aa930 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/llvm/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/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h index b2ac647e00e..b181d30c196 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h +++ b/llvm/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);  | 

