diff options
author | Eric Christopher <echristo@gmail.com> | 2015-02-20 06:59:48 +0000 |
---|---|---|
committer | Eric Christopher <echristo@gmail.com> | 2015-02-20 06:59:48 +0000 |
commit | 78a3f6cc4d2afe4838c56464a6a65af63a5f05c4 (patch) | |
tree | 9a16676a0defccdca2056e156974d0a413957691 /llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | |
parent | 02be3f36a392de4dfa66a7d3bbc577a3300ad5c9 (diff) | |
download | bcm5719-llvm-78a3f6cc4d2afe4838c56464a6a65af63a5f05c4.tar.gz bcm5719-llvm-78a3f6cc4d2afe4838c56464a6a65af63a5f05c4.zip |
AsmPrinter::doFinalization is at the module level and so doesn't
have access to a target specific subtarget info. Grab the module
level MCSubtargetInfo for the JumpInstrTable output stubs.
llvm-svn: 229974
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 1d5d0bc46e2..1463b518a41 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -44,6 +44,7 @@ #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Format.h" #include "llvm/Support/MathExtras.h" +#include "llvm/Support/TargetRegistry.h" #include "llvm/Support/Timer.h" #include "llvm/Target/TargetFrameLowering.h" #include "llvm/Target/TargetInstrInfo.h" @@ -911,6 +912,10 @@ bool AsmPrinter::doFinalization(Module &M) { JumpInstrTableInfo *JITI = getAnalysisIfAvailable<JumpInstrTableInfo>(); if (JITI && !JITI->getTables().empty()) { + // Since we're at the module level we can't use a function specific + // MCSubtargetInfo - instead create one with the module defaults. + std::unique_ptr<MCSubtargetInfo> STI(TM.getTarget().createMCSubtargetInfo( + TM.getTargetTriple(), TM.getTargetCPU(), TM.getTargetFeatureString())); unsigned Arch = Triple(getTargetTriple()).getArch(); bool IsThumb = (Arch == Triple::thumb || Arch == Triple::thumbeb); const TargetInstrInfo *TII = TM.getSubtargetImpl()->getInstrInfo(); @@ -942,7 +947,7 @@ bool AsmPrinter::doFinalization(Module &M) { MCSymbolRefExpr::Create(TargetSymbol, MCSymbolRefExpr::VK_PLT, OutContext); TII->getUnconditionalBranch(JumpToFun, TargetSymRef); - OutStreamer.EmitInstruction(JumpToFun, getSubtargetInfo()); + OutStreamer.EmitInstruction(JumpToFun, *STI); ++Count; } @@ -950,7 +955,7 @@ bool AsmPrinter::doFinalization(Module &M) { uint64_t Remaining = NextPowerOf2(Count) - Count; for (uint64_t C = 0; C < Remaining; ++C) { EmitAlignment(LogAlignment); - OutStreamer.EmitInstruction(TrapInst, getSubtargetInfo()); + OutStreamer.EmitInstruction(TrapInst, *STI); } } |