diff options
author | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2020-01-13 14:30:21 -0800 |
---|---|---|
committer | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2020-01-14 01:08:30 -0800 |
commit | eca44745871bc46728903aaa262abc6344d4f959 (patch) | |
tree | c3710a6c32e95872f16ae2ed96ea2e9248191f35 /llvm/lib | |
parent | 547abdd921e45fd65a2fa60f21715facb4af31b2 (diff) | |
download | bcm5719-llvm-eca44745871bc46728903aaa262abc6344d4f959.tar.gz bcm5719-llvm-eca44745871bc46728903aaa262abc6344d4f959.zip |
[AMDGPU] Fix getInstrLatency() always returning 1
We do not have InstrItinerary so generic getInstLatency() was always
defaulting to return 1 cycle. We need to use TargetSchedModel instead
to compute an instruction's latency.
Differential Revision: https://reviews.llvm.org/D72655
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AMDGPU/SIInstrInfo.cpp | 8 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/SIInstrInfo.h | 2 |
2 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp index 4f81c25e815..d53950ca446 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp @@ -85,7 +85,9 @@ BranchOffsetBits("amdgpu-s-branch-bits", cl::ReallyHidden, cl::init(16), SIInstrInfo::SIInstrInfo(const GCNSubtarget &ST) : AMDGPUGenInstrInfo(AMDGPU::ADJCALLSTACKUP, AMDGPU::ADJCALLSTACKDOWN), - RI(ST), ST(ST) {} + RI(ST), ST(ST) { + SchedModel.init(&ST); +} //===----------------------------------------------------------------------===// // TargetInstrInfo callbacks @@ -6635,10 +6637,10 @@ unsigned SIInstrInfo::getInstrLatency(const InstrItineraryData *ItinData, unsigned Lat = 0, Count = 0; for (++I; I != E && I->isBundledWithPred(); ++I) { ++Count; - Lat = std::max(Lat, getInstrLatency(ItinData, *I, PredCost)); + Lat = std::max(Lat, SchedModel.computeInstrLatency(&*I)); } return Lat + Count - 1; } - return AMDGPUGenInstrInfo::getInstrLatency(ItinData, MI, PredCost); + return SchedModel.computeInstrLatency(&MI); } diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.h b/llvm/lib/Target/AMDGPU/SIInstrInfo.h index 899eba7d2a1..b151a94b0d1 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.h +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.h @@ -25,6 +25,7 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachineOperand.h" +#include "llvm/CodeGen/TargetSchedule.h" #include "llvm/MC/MCInstrDesc.h" #include "llvm/Support/Compiler.h" #include <cassert> @@ -46,6 +47,7 @@ class SIInstrInfo final : public AMDGPUGenInstrInfo { private: const SIRegisterInfo RI; const GCNSubtarget &ST; + TargetSchedModel SchedModel; // The inverse predicate should have the negative value. enum BranchPredicate { |