106 lines · c
1//===-- NVPTXTargetMachine.h - Define TargetMachine for NVPTX ---*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file declares the NVPTX specific subclass of TargetMachine.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_NVPTX_NVPTXTARGETMACHINE_H14#define LLVM_LIB_TARGET_NVPTX_NVPTXTARGETMACHINE_H15 16#include "NVPTXSubtarget.h"17#include "llvm/CodeGen/CodeGenTargetMachineImpl.h"18#include <optional>19#include <utility>20 21namespace llvm {22 23/// NVPTXTargetMachine24///25class NVPTXTargetMachine : public CodeGenTargetMachineImpl {26 bool is64bit;27 std::unique_ptr<TargetLoweringObjectFile> TLOF;28 NVPTX::DrvInterface drvInterface;29 NVPTXSubtarget Subtarget;30 31 // Hold Strings that can be free'd all together with NVPTXTargetMachine32 BumpPtrAllocator StrAlloc;33 UniqueStringSaver StrPool;34 35public:36 NVPTXTargetMachine(const Target &T, const Triple &TT, StringRef CPU,37 StringRef FS, const TargetOptions &Options,38 std::optional<Reloc::Model> RM,39 std::optional<CodeModel::Model> CM, CodeGenOptLevel OP,40 bool is64bit);41 ~NVPTXTargetMachine() override;42 const NVPTXSubtarget *getSubtargetImpl(const Function &) const override {43 return &Subtarget;44 }45 const NVPTXSubtarget *getSubtargetImpl() const { return &Subtarget; }46 bool is64Bit() const { return is64bit; }47 NVPTX::DrvInterface getDrvInterface() const { return drvInterface; }48 UniqueStringSaver &getStrPool() const {49 return const_cast<UniqueStringSaver &>(StrPool);50 }51 52 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;53 54 // Emission of machine code through MCJIT is not supported.55 bool addPassesToEmitMC(PassManagerBase &, MCContext *&, raw_pwrite_stream &,56 bool = true) override {57 return true;58 }59 TargetLoweringObjectFile *getObjFileLowering() const override {60 return TLOF.get();61 }62 63 MachineFunctionInfo *64 createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F,65 const TargetSubtargetInfo *STI) const override;66 67 void registerEarlyDefaultAliasAnalyses(AAManager &AAM) override;68 69 void registerPassBuilderCallbacks(PassBuilder &PB) override;70 71 TargetTransformInfo getTargetTransformInfo(const Function &F) const override;72 73 bool isMachineVerifierClean() const override {74 return false;75 }76 77 std::pair<const Value *, unsigned>78 getPredicatedAddrSpace(const Value *V) const override;79}; // NVPTXTargetMachine.80 81class NVPTXTargetMachine32 : public NVPTXTargetMachine {82 virtual void anchor();83 84public:85 NVPTXTargetMachine32(const Target &T, const Triple &TT, StringRef CPU,86 StringRef FS, const TargetOptions &Options,87 std::optional<Reloc::Model> RM,88 std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,89 bool JIT);90};91 92class NVPTXTargetMachine64 : public NVPTXTargetMachine {93 virtual void anchor();94 95public:96 NVPTXTargetMachine64(const Target &T, const Triple &TT, StringRef CPU,97 StringRef FS, const TargetOptions &Options,98 std::optional<Reloc::Model> RM,99 std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,100 bool JIT);101};102 103} // end namespace llvm104 105#endif106