summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Vesely <jan.vesely@rutgers.edu>2017-03-06 20:10:05 +0000
committerJan Vesely <jan.vesely@rutgers.edu>2017-03-06 20:10:05 +0000
commit3ea17044344cfb0f8b8d3c2553c670e023d5de6d (patch)
tree513283215689056aefa6249f1eae39e0fbd8eaa7
parent77408b067c02d0ab6a1dd38fa55cb3c18f07245b (diff)
downloadbcm5719-llvm-3ea17044344cfb0f8b8d3c2553c670e023d5de6d.tar.gz
bcm5719-llvm-3ea17044344cfb0f8b8d3c2553c670e023d5de6d.zip
AMDGPU/R600: Fix ALU clause markers use detection
also exit early on kill instead of redefinition. Differential Revision: https://reviews.llvm.org/D30230 llvm-svn: 297060
-rw-r--r--llvm/lib/Target/AMDGPU/R600EmitClauseMarkers.cpp7
-rw-r--r--llvm/test/CodeGen/AMDGPU/r600.alu-limits.ll4
2 files changed, 7 insertions, 4 deletions
diff --git a/llvm/lib/Target/AMDGPU/R600EmitClauseMarkers.cpp b/llvm/lib/Target/AMDGPU/R600EmitClauseMarkers.cpp
index 81c2152cb89..03fc1aff5ec 100644
--- a/llvm/lib/Target/AMDGPU/R600EmitClauseMarkers.cpp
+++ b/llvm/lib/Target/AMDGPU/R600EmitClauseMarkers.cpp
@@ -196,6 +196,7 @@ private:
MachineBasicBlock::iterator Def,
MachineBasicBlock::iterator BBEnd) {
const R600RegisterInfo &TRI = TII->getRegisterInfo();
+ //TODO: change this to defs?
for (MachineInstr::const_mop_iterator
MOI = Def->operands_begin(),
MOE = Def->operands_end(); MOI != MOE; ++MOI) {
@@ -218,15 +219,17 @@ private:
if (AluInstCount >= TII->getMaxAlusPerClause())
return false;
+ // TODO: Is this true? kill flag appears to work OK below
// Register kill flags have been cleared by the time we get to this
// pass, but it is safe to assume that all uses of this register
// occur in the same basic block as its definition, because
// it is illegal for the scheduler to schedule them in
// different blocks.
- if (UseI->findRegisterUseOperandIdx(MOI->getReg()))
+ if (UseI->readsRegister(MOI->getReg()))
LastUseCount = AluInstCount;
- if (UseI != Def && UseI->findRegisterDefOperandIdx(MOI->getReg()) != -1)
+ // Exit early if the current use kills the register
+ if (UseI != Def && UseI->killsRegister(MOI->getReg()))
break;
}
if (LastUseCount)
diff --git a/llvm/test/CodeGen/AMDGPU/r600.alu-limits.ll b/llvm/test/CodeGen/AMDGPU/r600.alu-limits.ll
index 1f8a0e6588f..c5b89343616 100644
--- a/llvm/test/CodeGen/AMDGPU/r600.alu-limits.ll
+++ b/llvm/test/CodeGen/AMDGPU/r600.alu-limits.ll
@@ -1,8 +1,8 @@
; RUN: opt -loop-unroll -unroll-threshold=2000 -S < %s | llc -march=r600 -mcpu=cypress | FileCheck %s
-; XFAIL: *
; REQUIRES: asserts
-; CHECK: {{^}}@alu_limits:
+; CHECK: {{^}}alu_limits:
+; CHECK: CF_END
%struct.foo = type {i32, i32, i32}
OpenPOWER on IntegriCloud