diff options
Diffstat (limited to 'llvm/lib/Target/SPIRV/SPIRVSubtarget.h')
-rw-r--r-- | llvm/lib/Target/SPIRV/SPIRVSubtarget.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/llvm/lib/Target/SPIRV/SPIRVSubtarget.h b/llvm/lib/Target/SPIRV/SPIRVSubtarget.h new file mode 100644 index 000000000000..a6332cfefa8e --- /dev/null +++ b/llvm/lib/Target/SPIRV/SPIRVSubtarget.h @@ -0,0 +1,93 @@ +//===-- SPIRVSubtarget.h - SPIR-V Subtarget Information --------*- 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 SPIR-V specific subclass of TargetSubtargetInfo. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIB_TARGET_SPIRV_SPIRVSUBTARGET_H +#define LLVM_LIB_TARGET_SPIRV_SPIRVSUBTARGET_H + +#include "SPIRVCallLowering.h" +#include "SPIRVFrameLowering.h" +#include "SPIRVISelLowering.h" +#include "SPIRVInstrInfo.h" +#include "llvm/CodeGen/GlobalISel/CallLowering.h" +#include "llvm/CodeGen/GlobalISel/InstructionSelector.h" +#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h" +#include "llvm/CodeGen/SelectionDAGTargetInfo.h" +#include "llvm/CodeGen/TargetSubtargetInfo.h" +#include "llvm/IR/DataLayout.h" +#include "llvm/Target/TargetMachine.h" + +#define GET_SUBTARGETINFO_HEADER +#include "SPIRVGenSubtargetInfo.inc" + +namespace llvm { +class StringRef; +class SPIRVGlobalRegistry; +class SPIRVTargetMachine; + +class SPIRVSubtarget : public SPIRVGenSubtargetInfo { +private: + const unsigned PointerSize; + uint32_t SPIRVVersion; + + std::unique_ptr<SPIRVGlobalRegistry> GR; + + SPIRVInstrInfo InstrInfo; + SPIRVFrameLowering FrameLowering; + SPIRVTargetLowering TLInfo; + + // GlobalISel related APIs. + std::unique_ptr<CallLowering> CallLoweringInfo; + std::unique_ptr<RegisterBankInfo> RegBankInfo; + std::unique_ptr<LegalizerInfo> Legalizer; + std::unique_ptr<InstructionSelector> InstSelector; + +public: + // This constructor initializes the data members to match that + // of the specified triple. + SPIRVSubtarget(const Triple &TT, const std::string &CPU, + const std::string &FS, const SPIRVTargetMachine &TM); + SPIRVSubtarget &initSubtargetDependencies(StringRef CPU, StringRef FS); + + // Parses features string setting specified subtarget options. + // The definition of this function is auto generated by tblgen. + void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS); + unsigned getPointerSize() const { return PointerSize; } + bool canDirectlyComparePointers() const; + uint32_t getSPIRVVersion() const { return SPIRVVersion; }; + SPIRVGlobalRegistry *getSPIRVGlobalRegistry() const { return GR.get(); } + + const CallLowering *getCallLowering() const override { + return CallLoweringInfo.get(); + } + const RegisterBankInfo *getRegBankInfo() const override { + return RegBankInfo.get(); + } + const LegalizerInfo *getLegalizerInfo() const override { + return Legalizer.get(); + } + InstructionSelector *getInstructionSelector() const override { + return InstSelector.get(); + } + const SPIRVInstrInfo *getInstrInfo() const override { return &InstrInfo; } + const SPIRVFrameLowering *getFrameLowering() const override { + return &FrameLowering; + } + const SPIRVTargetLowering *getTargetLowering() const override { + return &TLInfo; + } + const SPIRVRegisterInfo *getRegisterInfo() const override { + return &InstrInfo.getRegisterInfo(); + } +}; +} // namespace llvm + +#endif // LLVM_LIB_TARGET_SPIRV_SPIRVSUBTARGET_H |