summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/SIInsertWaits.cpp
diff options
context:
space:
mode:
authorKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2016-09-30 17:01:40 +0000
committerKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2016-09-30 17:01:40 +0000
commit836cbff695fe6e9eba2846f8cb5dd8ad0d11443e (patch)
tree4aca0017be56fb3fbaf8ba44dad323f998842957 /llvm/lib/Target/AMDGPU/SIInsertWaits.cpp
parent3ccf825e229087b2b43f4f0be2ffe8c20db94282 (diff)
downloadbcm5719-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.cpp16
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;
OpenPOWER on IntegriCloud