diff options
author | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2016-09-30 17:01:40 +0000 |
---|---|---|
committer | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2016-09-30 17:01:40 +0000 |
commit | 836cbff695fe6e9eba2846f8cb5dd8ad0d11443e (patch) | |
tree | 4aca0017be56fb3fbaf8ba44dad323f998842957 /llvm/lib/Target/AMDGPU/SIInsertWaits.cpp | |
parent | 3ccf825e229087b2b43f4f0be2ffe8c20db94282 (diff) | |
download | bcm5719-llvm-836cbff695fe6e9eba2846f8cb5dd8ad0d11443e.tar.gz bcm5719-llvm-836cbff695fe6e9eba2846f8cb5dd8ad0d11443e.zip |
[AMDGPU] Choose VMCNT, EXPCNT, LGKMCNT masks and shifts based on the isa version
Differential Revision: https://reviews.llvm.org/D24973
llvm-svn: 282877
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SIInsertWaits.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/SIInsertWaits.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIInsertWaits.cpp b/llvm/lib/Target/AMDGPU/SIInsertWaits.cpp index b9551bed256..71afd0b02c1 100644 --- a/llvm/lib/Target/AMDGPU/SIInsertWaits.cpp +++ b/llvm/lib/Target/AMDGPU/SIInsertWaits.cpp @@ -21,6 +21,7 @@ #include "SIDefines.h" #include "SIInstrInfo.h" #include "SIMachineFunctionInfo.h" +#include "Utils/AMDGPUBaseInfo.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstrBuilder.h" @@ -29,6 +30,7 @@ #define DEBUG_TYPE "si-insert-waits" using namespace llvm; +using namespace llvm::AMDGPU; namespace { @@ -59,6 +61,7 @@ private: const SIInstrInfo *TII; const SIRegisterInfo *TRI; const MachineRegisterInfo *MRI; + IsaVersion IV; /// \brief Constant hardware limits static const Counters WaitCounts; @@ -410,9 +413,9 @@ bool SIInsertWaits::insertWait(MachineBasicBlock &MBB, // Build the wait instruction BuildMI(MBB, I, DebugLoc(), TII->get(AMDGPU::S_WAITCNT)) - .addImm((Counts.Named.VM & 0xF) | - ((Counts.Named.EXP & 0x7) << 4) | - ((Counts.Named.LGKM & 0xF) << 8)); + .addImm(((Counts.Named.VM & getVmcntMask(IV)) << getVmcntShift(IV)) | + ((Counts.Named.EXP & getExpcntMask(IV)) << getExpcntShift(IV)) | + ((Counts.Named.LGKM & getLgkmcntMask(IV)) << getLgkmcntShift(IV))); LastOpcodeType = OTHER; LastInstWritesM0 = false; @@ -440,9 +443,9 @@ void SIInsertWaits::handleExistingWait(MachineBasicBlock::iterator I) { unsigned Imm = I->getOperand(0).getImm(); Counters Counts, WaitOn; - Counts.Named.VM = Imm & 0xF; - Counts.Named.EXP = (Imm >> 4) & 0x7; - Counts.Named.LGKM = (Imm >> 8) & 0xF; + Counts.Named.VM = (Imm >> getVmcntShift(IV)) & getVmcntMask(IV); + Counts.Named.EXP = (Imm >> getExpcntShift(IV)) & getExpcntMask(IV); + Counts.Named.LGKM = (Imm >> getLgkmcntShift(IV)) & getLgkmcntMask(IV); for (unsigned i = 0; i < 3; ++i) { if (Counts.Array[i] <= LastIssued.Array[i]) @@ -518,6 +521,7 @@ bool SIInsertWaits::runOnMachineFunction(MachineFunction &MF) { TII = ST->getInstrInfo(); TRI = &TII->getRegisterInfo(); MRI = &MF.getRegInfo(); + IV = getIsaVersion(ST->getFeatureBits()); WaitedOn = ZeroCounts; DelayedWaitOn = ZeroCounts; |