12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- //=====-- NVPTXSubtarget.h - Define Subtarget for the 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 TargetSubtarget.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_LIB_TARGET_NVPTX_NVPTXSUBTARGET_H
- #define LLVM_LIB_TARGET_NVPTX_NVPTXSUBTARGET_H
- #include "NVPTX.h"
- #include "NVPTXFrameLowering.h"
- #include "NVPTXISelLowering.h"
- #include "NVPTXInstrInfo.h"
- #include "NVPTXRegisterInfo.h"
- #include "llvm/CodeGen/SelectionDAGTargetInfo.h"
- #include "llvm/CodeGen/TargetSubtargetInfo.h"
- #include "llvm/IR/DataLayout.h"
- #include <string>
- #define GET_SUBTARGETINFO_HEADER
- #include "NVPTXGenSubtargetInfo.inc"
- namespace llvm {
- class NVPTXSubtarget : public NVPTXGenSubtargetInfo {
- virtual void anchor();
- std::string TargetName;
- // PTX version x.y is represented as 10*x+y, e.g. 3.1 == 31
- unsigned PTXVersion;
- // SM version x.y is represented as 10*x+y, e.g. 3.1 == 31
- unsigned int SmVersion;
- const NVPTXTargetMachine &TM;
- NVPTXInstrInfo InstrInfo;
- NVPTXTargetLowering TLInfo;
- SelectionDAGTargetInfo TSInfo;
- // NVPTX does not have any call stack frame, but need a NVPTX specific
- // FrameLowering class because TargetFrameLowering is abstract.
- NVPTXFrameLowering FrameLowering;
- public:
- /// This constructor initializes the data members to match that
- /// of the specified module.
- ///
- NVPTXSubtarget(const Triple &TT, const std::string &CPU,
- const std::string &FS, const NVPTXTargetMachine &TM);
- const TargetFrameLowering *getFrameLowering() const override {
- return &FrameLowering;
- }
- const NVPTXInstrInfo *getInstrInfo() const override { return &InstrInfo; }
- const NVPTXRegisterInfo *getRegisterInfo() const override {
- return &InstrInfo.getRegisterInfo();
- }
- const NVPTXTargetLowering *getTargetLowering() const override {
- return &TLInfo;
- }
- const SelectionDAGTargetInfo *getSelectionDAGInfo() const override {
- return &TSInfo;
- }
- bool hasAtomAddF64() const { return SmVersion >= 60; }
- bool hasAtomScope() const { return SmVersion >= 60; }
- bool hasAtomBitwise64() const { return SmVersion >= 32; }
- bool hasAtomMinMax64() const { return SmVersion >= 32; }
- bool hasLDG() const { return SmVersion >= 32; }
- inline bool hasHWROT32() const { return SmVersion >= 32; }
- bool hasImageHandles() const;
- bool hasFP16Math() const { return SmVersion >= 53; }
- bool allowFP16Math() const;
- unsigned int getSmVersion() const { return SmVersion; }
- std::string getTargetName() const { return TargetName; }
- unsigned getPTXVersion() const { return PTXVersion; }
- NVPTXSubtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS);
- void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS);
- };
- } // End llvm namespace
- #endif
|