diff options
| author | Eric Christopher <echristo@gmail.com> | 2015-02-19 00:08:14 +0000 |
|---|---|---|
| committer | Eric Christopher <echristo@gmail.com> | 2015-02-19 00:08:14 +0000 |
| commit | 6aad8b18017b324cb7dd72add5d7d6c75f9166f9 (patch) | |
| tree | 52f2861852ec6662f3c5bcfaf778a9f98e1f4472 /llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h | |
| parent | ee69a4bcd06a71fc798c8924f212c4cfd52696c7 (diff) | |
| download | bcm5719-llvm-6aad8b18017b324cb7dd72add5d7d6c75f9166f9.tar.gz bcm5719-llvm-6aad8b18017b324cb7dd72add5d7d6c75f9166f9.zip | |
Migrate the NVPTX backend asm printer to a per function subtarget.
This involved moving two non-subtarget dependent features (64-bitness
and the driver interface) to the NVPTX target machine and updating
the uses (or migrating around the subtarget use for ease of review).
Otherwise use the cached subtarget or create a default subtarget
based on the TargetMachine cpu and feature string for the module
level assembler emission.
llvm-svn: 229785
Diffstat (limited to 'llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h')
| -rw-r--r-- | llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h index aafd498f6c7..7e6b5e8d085 100644 --- a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h +++ b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h @@ -138,7 +138,7 @@ class LLVM_LIBRARY_VISIBILITY NVPTXAsmPrinter : public AsmPrinter { unsigned int nSym = 0; unsigned int nextSymbolPos = symbolPosInBuffer[nSym]; unsigned int nBytes = 4; - if (AP.nvptxSubtarget.is64Bit()) + if (static_cast<const NVPTXTargetMachine &>(AP.TM).is64Bit()) nBytes = 8; for (pos = 0; pos < size; pos += nBytes) { if (pos) @@ -212,7 +212,7 @@ private: void printParamName(Function::const_arg_iterator I, int paramIndex, raw_ostream &O); void emitGlobals(const Module &M); - void emitHeader(Module &M, raw_ostream &O); + void emitHeader(Module &M, raw_ostream &O, const NVPTXSubtarget &STI); void emitKernelFunctionDirectives(const Function &F, raw_ostream &O) const; void emitVirtualRegister(unsigned int vr, raw_ostream &); void emitFunctionExternParamList(const MachineFunction &MF); @@ -248,8 +248,10 @@ private: typedef DenseMap<unsigned, unsigned> VRegMap; typedef DenseMap<const TargetRegisterClass *, VRegMap> VRegRCMap; VRegRCMap VRegMapping; - // cache the subtarget here. - const NVPTXSubtarget &nvptxSubtarget; + + // Cache the subtarget here. + const NVPTXSubtarget *nvptxSubtarget; + // Build the map between type name and ID based on module's type // symbol table. std::map<const Type *, std::string> TypeNameMap; @@ -303,10 +305,10 @@ private: public: NVPTXAsmPrinter(TargetMachine &TM, std::unique_ptr<MCStreamer> Streamer) : AsmPrinter(TM, std::move(Streamer)), - nvptxSubtarget(TM.getSubtarget<NVPTXSubtarget>()) { + EmitGeneric(static_cast<NVPTXTargetMachine &>(TM).getDrvInterface() == + NVPTX::CUDA) { CurrentBankselLabelInBasicBlock = ""; reader = nullptr; - EmitGeneric = (nvptxSubtarget.getDrvInterface() == NVPTX::CUDA); } ~NVPTXAsmPrinter() { @@ -314,6 +316,10 @@ public: delete reader; } + bool runOnMachineFunction(MachineFunction &F) override { + nvptxSubtarget = &F.getSubtarget<NVPTXSubtarget>(); + return AsmPrinter::runOnMachineFunction(F); + } void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addRequired<MachineLoopInfo>(); AsmPrinter::getAnalysisUsage(AU); |

