diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-06-24 06:30:11 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-06-24 06:30:11 +0000 |
commit | 43e92fe306ac1fa4fb36062a458a18a9aed23855 (patch) | |
tree | 275b08407e8fb1478bd185b851b497c43fbe0877 /llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp | |
parent | f11b9798f4cd1d3dbcae7e0003d79c7b428b4d04 (diff) | |
download | bcm5719-llvm-43e92fe306ac1fa4fb36062a458a18a9aed23855.tar.gz bcm5719-llvm-43e92fe306ac1fa4fb36062a458a18a9aed23855.zip |
AMDGPU: Cleanup subtarget handling.
Split AMDGPUSubtarget into amdgcn/r600 specific subclasses.
This removes most of the static_casting of the basic codegen
classes everywhere, and tries to restrict the features
visible on the wrong target.
llvm-svn: 273652
Diffstat (limited to 'llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp index 4b6cc6524f5..29b1f79187d 100644 --- a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp +++ b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp @@ -25,7 +25,8 @@ using namespace llvm; GCNHazardRecognizer::GCNHazardRecognizer(const MachineFunction &MF) : CurrCycleInstr(nullptr), - MF(MF) { + MF(MF), + ST(MF.getSubtarget<SISubtarget>()) { MaxLookAhead = 5; } @@ -81,8 +82,7 @@ void GCNHazardRecognizer::AdvanceCycle() { if (!CurrCycleInstr) return; - const SIInstrInfo *TII = - static_cast<const SIInstrInfo*>(MF.getSubtarget().getInstrInfo()); + const SIInstrInfo *TII = ST.getInstrInfo(); unsigned NumWaitStates = TII->getNumWaitStates(*CurrCycleInstr); // Keep track of emitted instructions @@ -114,8 +114,7 @@ void GCNHazardRecognizer::RecedeCycle() { int GCNHazardRecognizer::getWaitStatesSinceDef( unsigned Reg, function_ref<bool(MachineInstr *)> IsHazardDef) { - const TargetRegisterInfo *TRI = - MF.getSubtarget<AMDGPUSubtarget>().getRegisterInfo(); + const SIRegisterInfo *TRI = ST.getRegisterInfo(); int WaitStates = -1; for (MachineInstr *MI : EmittedInstrs) { @@ -141,10 +140,8 @@ static void addRegsToSet(iterator_range<MachineInstr::const_mop_iterator> Ops, } int GCNHazardRecognizer::checkSMEMSoftClauseHazards(MachineInstr *SMEM) { - const AMDGPUSubtarget &ST = MF.getSubtarget<AMDGPUSubtarget>(); - // SMEM soft clause are only present on VI+ - if (ST.getGeneration() < AMDGPUSubtarget::VOLCANIC_ISLANDS) + if (ST.getGeneration() < SISubtarget::VOLCANIC_ISLANDS) return 0; // A soft-clause is any group of consecutive SMEM instructions. The @@ -198,14 +195,14 @@ int GCNHazardRecognizer::checkSMEMSoftClauseHazards(MachineInstr *SMEM) { } int GCNHazardRecognizer::checkSMRDHazards(MachineInstr *SMRD) { - const AMDGPUSubtarget &ST = MF.getSubtarget<AMDGPUSubtarget>(); - const SIInstrInfo *TII = static_cast<const SIInstrInfo*>(ST.getInstrInfo()); + const SISubtarget &ST = MF.getSubtarget<SISubtarget>(); + const SIInstrInfo *TII = ST.getInstrInfo(); int WaitStatesNeeded = 0; WaitStatesNeeded = checkSMEMSoftClauseHazards(SMRD); // This SMRD hazard only affects SI. - if (ST.getGeneration() != AMDGPUSubtarget::SOUTHERN_ISLANDS) + if (ST.getGeneration() != SISubtarget::SOUTHERN_ISLANDS) return WaitStatesNeeded; // A read of an SGPR by SMRD instruction requires 4 wait states when the @@ -224,10 +221,9 @@ int GCNHazardRecognizer::checkSMRDHazards(MachineInstr *SMRD) { } int GCNHazardRecognizer::checkVMEMHazards(MachineInstr* VMEM) { - const AMDGPUSubtarget &ST = MF.getSubtarget<AMDGPUSubtarget>(); - const SIInstrInfo *TII = static_cast<const SIInstrInfo*>(ST.getInstrInfo()); + const SIInstrInfo *TII = ST.getInstrInfo(); - if (ST.getGeneration() < AMDGPUSubtarget::VOLCANIC_ISLANDS) + if (ST.getGeneration() < SISubtarget::VOLCANIC_ISLANDS) return 0; const SIRegisterInfo &TRI = TII->getRegisterInfo(); @@ -250,9 +246,7 @@ int GCNHazardRecognizer::checkVMEMHazards(MachineInstr* VMEM) { } int GCNHazardRecognizer::checkDPPHazards(MachineInstr *DPP) { - const AMDGPUSubtarget &ST = MF.getSubtarget<AMDGPUSubtarget>(); - const SIRegisterInfo *TRI = - static_cast<const SIRegisterInfo*>(ST.getRegisterInfo()); + const SIRegisterInfo *TRI = ST.getRegisterInfo(); // Check for DPP VGPR read after VALU VGPR write. int DppVgprWaitStates = 2; |