1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-20 03:23:01 +02:00

Redirect pointerSize query to the TargetMachine in ASMPrinter

Summary:
Because llvm-dsymutil is using ASMPrinter without any MachineFunction
of Module available.

This change is part of a series of commits dedicated to have a single
DataLayout during compilation by using always the one owned by the
module.

Reviewers: echristo

Subscribers: yaron.keren, rafael, llvm-commits

Differential Revision: http://reviews.llvm.org/D11078

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 242384
This commit is contained in:
Mehdi Amini 2015-07-16 05:59:25 +00:00
parent da5196c5c1
commit 336db4aec7
3 changed files with 15 additions and 8 deletions

View File

@ -165,6 +165,9 @@ public:
/// Return information about data layout. /// Return information about data layout.
const DataLayout &getDataLayout() const; const DataLayout &getDataLayout() const;
/// Return the pointer size from the TargetMachine
unsigned getPointerSize() const;
/// Return information about subtarget. /// Return information about subtarget.
const MCSubtargetInfo &getSubtargetInfo() const; const MCSubtargetInfo &getSubtargetInfo() const;

View File

@ -140,6 +140,8 @@ const DataLayout &AsmPrinter::getDataLayout() const {
return *TM.getDataLayout(); return *TM.getDataLayout();
} }
unsigned AsmPrinter::getPointerSize() const { return TM.getDataLayout()->getPointerSize(); }
const MCSubtargetInfo &AsmPrinter::getSubtargetInfo() const { const MCSubtargetInfo &AsmPrinter::getSubtargetInfo() const {
assert(MF && "getSubtargetInfo requires a valid MachineFunction!"); assert(MF && "getSubtargetInfo requires a valid MachineFunction!");
return MF->getSubtarget<MCSubtargetInfo>(); return MF->getSubtarget<MCSubtargetInfo>();

View File

@ -264,7 +264,8 @@ void DIEInteger::EmitValue(const AsmPrinter *Asm, dwarf::Form Form) const {
case dwarf::DW_FORM_udata: Asm->EmitULEB128(Integer); return; case dwarf::DW_FORM_udata: Asm->EmitULEB128(Integer); return;
case dwarf::DW_FORM_sdata: Asm->EmitSLEB128(Integer); return; case dwarf::DW_FORM_sdata: Asm->EmitSLEB128(Integer); return;
case dwarf::DW_FORM_addr: case dwarf::DW_FORM_addr:
Size = Asm->getDataLayout().getPointerSize(); break; Size = Asm->getPointerSize();
break;
case dwarf::DW_FORM_ref_addr: case dwarf::DW_FORM_ref_addr:
Size = SizeOf(Asm, dwarf::DW_FORM_ref_addr); Size = SizeOf(Asm, dwarf::DW_FORM_ref_addr);
break; break;
@ -294,10 +295,11 @@ unsigned DIEInteger::SizeOf(const AsmPrinter *AP, dwarf::Form Form) const {
case dwarf::DW_FORM_GNU_addr_index: return getULEB128Size(Integer); case dwarf::DW_FORM_GNU_addr_index: return getULEB128Size(Integer);
case dwarf::DW_FORM_udata: return getULEB128Size(Integer); case dwarf::DW_FORM_udata: return getULEB128Size(Integer);
case dwarf::DW_FORM_sdata: return getSLEB128Size(Integer); case dwarf::DW_FORM_sdata: return getSLEB128Size(Integer);
case dwarf::DW_FORM_addr: return AP->getDataLayout().getPointerSize(); case dwarf::DW_FORM_addr:
return AP->getPointerSize();
case dwarf::DW_FORM_ref_addr: case dwarf::DW_FORM_ref_addr:
if (AP->OutStreamer->getContext().getDwarfVersion() == 2) if (AP->OutStreamer->getContext().getDwarfVersion() == 2)
return AP->getDataLayout().getPointerSize(); return AP->getPointerSize();
return sizeof(int32_t); return sizeof(int32_t);
default: llvm_unreachable("DIE Value form not supported yet"); default: llvm_unreachable("DIE Value form not supported yet");
} }
@ -326,7 +328,7 @@ unsigned DIEExpr::SizeOf(const AsmPrinter *AP, dwarf::Form Form) const {
if (Form == dwarf::DW_FORM_data4) return 4; if (Form == dwarf::DW_FORM_data4) return 4;
if (Form == dwarf::DW_FORM_sec_offset) return 4; if (Form == dwarf::DW_FORM_sec_offset) return 4;
if (Form == dwarf::DW_FORM_strp) return 4; if (Form == dwarf::DW_FORM_strp) return 4;
return AP->getDataLayout().getPointerSize(); return AP->getPointerSize();
} }
#ifndef NDEBUG #ifndef NDEBUG
@ -352,7 +354,7 @@ unsigned DIELabel::SizeOf(const AsmPrinter *AP, dwarf::Form Form) const {
if (Form == dwarf::DW_FORM_data4) return 4; if (Form == dwarf::DW_FORM_data4) return 4;
if (Form == dwarf::DW_FORM_sec_offset) return 4; if (Form == dwarf::DW_FORM_sec_offset) return 4;
if (Form == dwarf::DW_FORM_strp) return 4; if (Form == dwarf::DW_FORM_strp) return 4;
return AP->getDataLayout().getPointerSize(); return AP->getPointerSize();
} }
#ifndef NDEBUG #ifndef NDEBUG
@ -375,7 +377,7 @@ unsigned DIEDelta::SizeOf(const AsmPrinter *AP, dwarf::Form Form) const {
if (Form == dwarf::DW_FORM_data4) return 4; if (Form == dwarf::DW_FORM_data4) return 4;
if (Form == dwarf::DW_FORM_sec_offset) return 4; if (Form == dwarf::DW_FORM_sec_offset) return 4;
if (Form == dwarf::DW_FORM_strp) return 4; if (Form == dwarf::DW_FORM_strp) return 4;
return AP->getDataLayout().getPointerSize(); return AP->getPointerSize();
} }
#ifndef NDEBUG #ifndef NDEBUG
@ -472,7 +474,7 @@ unsigned DIEEntry::getRefAddrSize(const AsmPrinter *AP) {
const DwarfDebug *DD = AP->getDwarfDebug(); const DwarfDebug *DD = AP->getDwarfDebug();
assert(DD && "Expected Dwarf Debug info to be available"); assert(DD && "Expected Dwarf Debug info to be available");
if (DD->getDwarfVersion() == 2) if (DD->getDwarfVersion() == 2)
return AP->getDataLayout().getPointerSize(); return AP->getPointerSize();
return sizeof(int32_t); return sizeof(int32_t);
} }
@ -608,7 +610,7 @@ unsigned DIELocList::SizeOf(const AsmPrinter *AP, dwarf::Form Form) const {
return 4; return 4;
if (Form == dwarf::DW_FORM_sec_offset) if (Form == dwarf::DW_FORM_sec_offset)
return 4; return 4;
return AP->getDataLayout().getPointerSize(); return AP->getPointerSize();
} }
/// EmitValue - Emit label value. /// EmitValue - Emit label value.