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 /llvm/lib/Target | |
| 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
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/R600EmitClauseMarkers.cpp | 7 |
1 files changed, 5 insertions, 2 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) |

