diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2016-09-26 17:29:25 +0000 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2016-09-26 17:29:25 +0000 |
commit | 1b9748c6a2e412cb5998b9ee7a520000b53ea967 (patch) | |
tree | 52377f95772d778ddf5a7360d38ae213ccb915d5 /llvm/lib/Target | |
parent | 1e98c0422640cfe512c0ef529ed2e3f2ecec3f67 (diff) | |
download | bcm5719-llvm-1b9748c6a2e412cb5998b9ee7a520000b53ea967.tar.gz bcm5719-llvm-1b9748c6a2e412cb5998b9ee7a520000b53ea967.zip |
AMDGPU/SI: Don't crash on anonymous GlobalValues
Summary:
We need to call AsmPrinter::getNameWithPrefix() in order to handle
anonymous GlobalValues (e.g. @0, @1).
Reviewers: arsenm, b-sumner
Subscribers: arsenm, kzhuravl, wdng, nhaehnle, yaxunl, tony-tye, llvm-commits
Differential Revision: https://reviews.llvm.org/D24865
llvm-svn: 282420
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp | 11 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.h | 5 |
3 files changed, 14 insertions, 7 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp index 7f0d5141f36..544c7b86403 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp @@ -135,8 +135,9 @@ void AMDGPUAsmPrinter::EmitFunctionEntryLabel() { if (MFI->isKernel() && STM.isAmdCodeObjectV2()) { AMDGPUTargetStreamer *TS = static_cast<AMDGPUTargetStreamer *>(OutStreamer->getTargetStreamer()); - TS->EmitAMDGPUSymbolType(CurrentFnSym->getName(), - ELF::STT_AMDGPU_HSA_KERNEL); + SmallString<128> SymbolName; + getNameWithPrefix(SymbolName, MF->getFunction()), + TS->EmitAMDGPUSymbolType(SymbolName, ELF::STT_AMDGPU_HSA_KERNEL); } AsmPrinter::EmitFunctionEntryLabel(); diff --git a/llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp b/llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp index ad8d3e4d354..757a9fc1835 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp @@ -36,8 +36,9 @@ using namespace llvm; -AMDGPUMCInstLower::AMDGPUMCInstLower(MCContext &ctx, const AMDGPUSubtarget &st): - Ctx(ctx), ST(st) { } +AMDGPUMCInstLower::AMDGPUMCInstLower(MCContext &ctx, const AMDGPUSubtarget &st, + const AsmPrinter &ap): + Ctx(ctx), ST(st), AP(ap) { } static MCSymbolRefExpr::VariantKind getVariantKind(unsigned MOFlags) { switch (MOFlags) { @@ -75,7 +76,9 @@ void AMDGPUMCInstLower::lower(const MachineInstr *MI, MCInst &OutMI) const { break; case MachineOperand::MO_GlobalAddress: { const GlobalValue *GV = MO.getGlobal(); - MCSymbol *Sym = Ctx.getOrCreateSymbol(StringRef(GV->getName())); + SmallString<128> SymbolName; + AP.getNameWithPrefix(SymbolName, GV); + MCSymbol *Sym = Ctx.getOrCreateSymbol(SymbolName); const MCExpr *SymExpr = MCSymbolRefExpr::create(Sym, getVariantKind(MO.getTargetFlags()),Ctx); const MCExpr *Expr = MCBinaryExpr::createAdd(SymExpr, @@ -97,7 +100,7 @@ void AMDGPUMCInstLower::lower(const MachineInstr *MI, MCInst &OutMI) const { void AMDGPUAsmPrinter::EmitInstruction(const MachineInstr *MI) { const AMDGPUSubtarget &STI = MF->getSubtarget<AMDGPUSubtarget>(); - AMDGPUMCInstLower MCInstLowering(OutContext, STI); + AMDGPUMCInstLower MCInstLowering(OutContext, STI, *this); StringRef Err; if (!STI.getInstrInfo()->verifyInstruction(*MI, Err)) { diff --git a/llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.h b/llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.h index b3008c36174..2ea58e496cb 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.h +++ b/llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.h @@ -13,6 +13,7 @@ namespace llvm { class AMDGPUSubtarget; +class AsmPrinter; class MachineInstr; class MCContext; class MCInst; @@ -20,9 +21,11 @@ class MCInst; class AMDGPUMCInstLower { MCContext &Ctx; const AMDGPUSubtarget &ST; + const AsmPrinter &AP; public: - AMDGPUMCInstLower(MCContext &ctx, const AMDGPUSubtarget &ST); + AMDGPUMCInstLower(MCContext &ctx, const AMDGPUSubtarget &ST, + const AsmPrinter &AP); /// \brief Lower a MachineInstr to an MCInst void lower(const MachineInstr *MI, MCInst &OutMI) const; |