1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- //===-- NVPTXTargetMachine.h - Define TargetMachine for NVPTX ---*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file declares the NVPTX specific subclass of TargetMachine.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_LIB_TARGET_NVPTX_NVPTXTARGETMACHINE_H
- #define LLVM_LIB_TARGET_NVPTX_NVPTXTARGETMACHINE_H
- #include "ManagedStringPool.h"
- #include "NVPTXSubtarget.h"
- #include "llvm/Target/TargetMachine.h"
- #include <utility>
- namespace llvm {
- /// NVPTXTargetMachine
- ///
- class NVPTXTargetMachine : public LLVMTargetMachine {
- bool is64bit;
- // Use 32-bit pointers for accessing const/local/short AS.
- bool UseShortPointers;
- std::unique_ptr<TargetLoweringObjectFile> TLOF;
- NVPTX::DrvInterface drvInterface;
- NVPTXSubtarget Subtarget;
- // Hold Strings that can be free'd all together with NVPTXTargetMachine
- ManagedStringPool ManagedStrPool;
- public:
- NVPTXTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
- StringRef FS, const TargetOptions &Options,
- Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
- CodeGenOpt::Level OP, bool is64bit);
- ~NVPTXTargetMachine() override;
- const NVPTXSubtarget *getSubtargetImpl(const Function &) const override {
- return &Subtarget;
- }
- const NVPTXSubtarget *getSubtargetImpl() const { return &Subtarget; }
- bool is64Bit() const { return is64bit; }
- bool useShortPointers() const { return UseShortPointers; }
- NVPTX::DrvInterface getDrvInterface() const { return drvInterface; }
- ManagedStringPool *getManagedStrPool() const {
- return const_cast<ManagedStringPool *>(&ManagedStrPool);
- }
- TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
- // Emission of machine code through MCJIT is not supported.
- bool addPassesToEmitMC(PassManagerBase &, MCContext *&, raw_pwrite_stream &,
- bool = true) override {
- return true;
- }
- TargetLoweringObjectFile *getObjFileLowering() const override {
- return TLOF.get();
- }
- void adjustPassManager(PassManagerBuilder &) override;
- void registerPassBuilderCallbacks(PassBuilder &PB) override;
- TargetTransformInfo getTargetTransformInfo(const Function &F) override;
- bool isMachineVerifierClean() const override {
- return false;
- }
- std::pair<const Value *, unsigned>
- getPredicatedAddrSpace(const Value *V) const override;
- }; // NVPTXTargetMachine.
- class NVPTXTargetMachine32 : public NVPTXTargetMachine {
- virtual void anchor();
- public:
- NVPTXTargetMachine32(const Target &T, const Triple &TT, StringRef CPU,
- StringRef FS, const TargetOptions &Options,
- Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
- CodeGenOpt::Level OL, bool JIT);
- };
- class NVPTXTargetMachine64 : public NVPTXTargetMachine {
- virtual void anchor();
- public:
- NVPTXTargetMachine64(const Target &T, const Triple &TT, StringRef CPU,
- StringRef FS, const TargetOptions &Options,
- Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
- CodeGenOpt::Level OL, bool JIT);
- };
- } // end namespace llvm
- #endif
|