diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h | 115 |
1 files changed, 37 insertions, 78 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h b/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h index 251ad8d2fc8..ae41f9e9184 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h +++ b/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h @@ -46,7 +46,19 @@ namespace llvm { class StringRef; -class AMDGPUCommonSubtarget { +class AMDGPUSubtarget { +public: + enum Generation { + R600 = 0, + R700 = 1, + EVERGREEN = 2, + NORTHERN_ISLANDS = 3, + SOUTHERN_ISLANDS = 4, + SEA_ISLANDS = 5, + VOLCANIC_ISLANDS = 6, + GFX9 = 7 + }; + private: Triple TargetTriple; @@ -66,10 +78,10 @@ protected: unsigned WavefrontSize; public: - AMDGPUCommonSubtarget(const Triple &TT, const FeatureBitset &FeatureBits); + AMDGPUSubtarget(const Triple &TT, const FeatureBitset &FeatureBits); - static const AMDGPUCommonSubtarget &get(const MachineFunction &MF); - static const AMDGPUCommonSubtarget &get(const TargetMachine &TM, + static const AMDGPUSubtarget &get(const MachineFunction &MF); + static const AMDGPUSubtarget &get(const TargetMachine &TM, const Function &F); /// \returns Default range flat work group size for a calling convention. @@ -219,21 +231,12 @@ public: /// Creates value range metadata on an workitemid.* inrinsic call or load. bool makeLIDRangeMetadata(Instruction *I) const; - virtual ~AMDGPUCommonSubtarget() {} + virtual ~AMDGPUSubtarget() {} }; -class AMDGPUSubtarget : public AMDGPUGenSubtargetInfo, - public AMDGPUCommonSubtarget { +class GCNSubtarget : public AMDGPUGenSubtargetInfo, + public AMDGPUSubtarget { public: - enum Generation { - // Gap for R600 generations, so we can do comparisons between - // AMDGPUSubtarget and r600Subtarget. - SOUTHERN_ISLANDS = 4, - SEA_ISLANDS = 5, - VOLCANIC_ISLANDS = 6, - GFX9 = 7, - }; - enum { ISAVersion0_0_0, ISAVersion6_0_0, @@ -274,8 +277,6 @@ public: }; private: - SIFrameLowering FrameLowering; - /// GlobalISel related APIs. std::unique_ptr<AMDGPUCallLowering> CallLoweringInfo; std::unique_ptr<InstructionSelector> InstSelector; @@ -360,24 +361,34 @@ protected: SelectionDAGTargetInfo TSInfo; AMDGPUAS AS; +private: + SITargetLowering TLInfo; + SIInstrInfo InstrInfo; + SIFrameLowering FrameLowering; public: - AMDGPUSubtarget(const Triple &TT, StringRef GPU, StringRef FS, - const TargetMachine &TM); - ~AMDGPUSubtarget() override; + GCNSubtarget(const Triple &TT, StringRef GPU, StringRef FS, + const GCNTargetMachine &TM); + ~GCNSubtarget() override; - AMDGPUSubtarget &initializeSubtargetDependencies(const Triple &TT, + GCNSubtarget &initializeSubtargetDependencies(const Triple &TT, StringRef GPU, StringRef FS); - virtual const SIInstrInfo *getInstrInfo() const override = 0; + const SIInstrInfo *getInstrInfo() const override { + return &InstrInfo; + } const SIFrameLowering *getFrameLowering() const override { return &FrameLowering; } - virtual const SITargetLowering *getTargetLowering() const override = 0; + const SITargetLowering *getTargetLowering() const override { + return &TLInfo; + } - virtual const SIRegisterInfo *getRegisterInfo() const override = 0; + const SIRegisterInfo *getRegisterInfo() const override { + return &InstrInfo.getRegisterInfo(); + } const CallLowering *getCallLowering() const override { return CallLoweringInfo.get(); @@ -720,55 +731,7 @@ public: return AMDGPU::IsaInfo::getWavesPerWorkGroup( MCSubtargetInfo::getFeatureBits(), FlatWorkGroupSize); } -}; - -class SISubtarget final : public AMDGPUSubtarget { -private: - SIInstrInfo InstrInfo; - SIFrameLowering FrameLowering; - SITargetLowering TLInfo; - - /// GlobalISel related APIs. - std::unique_ptr<AMDGPUCallLowering> CallLoweringInfo; - std::unique_ptr<InstructionSelector> InstSelector; - std::unique_ptr<LegalizerInfo> Legalizer; - std::unique_ptr<RegisterBankInfo> RegBankInfo; - -public: - SISubtarget(const Triple &TT, StringRef CPU, StringRef FS, - const GCNTargetMachine &TM); - - const SIInstrInfo *getInstrInfo() const override { - return &InstrInfo; - } - - const SIFrameLowering *getFrameLowering() const override { - return &FrameLowering; - } - - const SITargetLowering *getTargetLowering() const override { - return &TLInfo; - } - - const CallLowering *getCallLowering() const override { - return CallLoweringInfo.get(); - } - - const InstructionSelector *getInstructionSelector() const override { - return InstSelector.get(); - } - const LegalizerInfo *getLegalizerInfo() const override { - return Legalizer.get(); - } - - const RegisterBankInfo *getRegBankInfo() const override { - return RegBankInfo.get(); - } - - const SIRegisterInfo *getRegisterInfo() const override { - return &InstrInfo.getRegisterInfo(); - } // static wrappers static bool hasHalfRate64Ops(const TargetSubtargetInfo &STI); @@ -988,12 +951,8 @@ public: const override; }; - class R600Subtarget final : public R600GenSubtargetInfo, - public AMDGPUCommonSubtarget { -public: - enum Generation { R600 = 0, R700 = 1, EVERGREEN = 2, NORTHERN_ISLANDS = 3 }; - + public AMDGPUSubtarget { private: R600InstrInfo InstrInfo; R600FrameLowering FrameLowering; |