summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h')
-rw-r--r--llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h115
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;
OpenPOWER on IntegriCloud