diff options
| author | Jan Vesely <jan.vesely@rutgers.edu> | 2017-03-06 20:10:05 +0000 |
|---|---|---|
| committer | Jan Vesely <jan.vesely@rutgers.edu> | 2017-03-06 20:10:05 +0000 |
| commit | 3ea17044344cfb0f8b8d3c2553c670e023d5de6d (patch) | |
| tree | 513283215689056aefa6249f1eae39e0fbd8eaa7 | |
| parent | 77408b067c02d0ab6a1dd38fa55cb3c18f07245b (diff) | |
| download | bcm5719-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.cpp | 7 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AMDGPU/r600.alu-limits.ll | 4 |
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} |

