mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-10 04:24:23 +00:00
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)) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208495 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d0125ee381
commit
abfe7d33c7
@ -802,18 +802,6 @@ static uint64_t getBaseTypeSize(DwarfDebug *DD, DIDerivedType Ty) {
|
|||||||
return BaseType.getSizeInBits();
|
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.
|
/// addConstantFPValue - Add constant value entry in variable DIE.
|
||||||
void DwarfUnit::addConstantFPValue(DIE &Die, const MachineOperand &MO) {
|
void DwarfUnit::addConstantFPValue(DIE &Die, const MachineOperand &MO) {
|
||||||
assert(MO.isFPImm() && "Invalid machine operand!");
|
assert(MO.isFPImm() && "Invalid machine operand!");
|
||||||
@ -849,38 +837,26 @@ void DwarfUnit::addConstantValue(DIE &Die, const ConstantInt *CI,
|
|||||||
addConstantValue(Die, CI->getValue(), Unsigned);
|
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.
|
// addConstantValue - Add constant value entry in variable DIE.
|
||||||
void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, bool Unsigned) {
|
void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, bool Unsigned) {
|
||||||
unsigned CIBitWidth = Val.getBitWidth();
|
unsigned CIBitWidth = Val.getBitWidth();
|
||||||
if (CIBitWidth <= 64) {
|
if (CIBitWidth <= 64) {
|
||||||
// If we're a signed constant definitely use sdata.
|
addConstantValue(Die, !Unsigned, Unsigned ? Val.getZExtValue() : Val.getSExtValue());
|
||||||
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());
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -350,6 +350,7 @@ public:
|
|||||||
void addConstantValue(DIE &Die, const MachineOperand &MO, DIType Ty);
|
void addConstantValue(DIE &Die, const MachineOperand &MO, DIType Ty);
|
||||||
void addConstantValue(DIE &Die, const ConstantInt *CI, bool Unsigned);
|
void addConstantValue(DIE &Die, const ConstantInt *CI, bool Unsigned);
|
||||||
void addConstantValue(DIE &Die, const APInt &Val, 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.
|
/// addConstantFPValue - Add constant value entry in variable DIE.
|
||||||
void addConstantFPValue(DIE &Die, const MachineOperand &MO);
|
void addConstantFPValue(DIE &Die, const MachineOperand &MO);
|
||||||
|
@ -114,7 +114,7 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
|
|||||||
; PRESENT: DW_TAG_member
|
; PRESENT: DW_TAG_member
|
||||||
; PRESENT-NEXT: DW_AT_name {{.*}} "const_b"
|
; PRESENT-NEXT: DW_AT_name {{.*}} "const_b"
|
||||||
; PRESENT: DW_AT_accessibility [DW_FORM_data1] (0x02)
|
; 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: 0x[[DECL_C:[0-9a-f]+]]: DW_TAG_member
|
||||||
; PRESENT-NEXT: DW_AT_name {{.*}} "c"
|
; PRESENT-NEXT: DW_AT_name {{.*}} "c"
|
||||||
; PRESENT: DW_AT_accessibility [DW_FORM_data1] (0x01)
|
; 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: DW_TAG_member
|
||||||
; DARWINP-NEXT: DW_AT_name {{.*}} "const_b"
|
; DARWINP-NEXT: DW_AT_name {{.*}} "const_b"
|
||||||
; DARWINP: DW_AT_accessibility [DW_FORM_data1] (0x02)
|
; 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: 0x[[DECL_C:[0-9a-f]+]]: DW_TAG_member
|
||||||
; DARWINP-NEXT: DW_AT_name {{.*}} "c"
|
; DARWINP-NEXT: DW_AT_name {{.*}} "c"
|
||||||
; DARWINP: DW_AT_accessibility [DW_FORM_data1] (0x01)
|
; DARWINP: DW_AT_accessibility [DW_FORM_data1] (0x01)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user