diff options
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp | 9 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AMDGPU/si-lower-i1-copies.mir | 33 |
2 files changed, 41 insertions, 1 deletions
diff --git a/llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp b/llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp index 823c9040c87..15ccef8ac83 100644 --- a/llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp +++ b/llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp @@ -504,6 +504,9 @@ void SILowerI1Copies::lowerPhis() { SmallVector<MachineBasicBlock *, 4> IncomingBlocks; SmallVector<unsigned, 4> IncomingRegs; SmallVector<unsigned, 4> IncomingUpdated; +#ifndef NDEBUG + DenseSet<unsigned> PhiRegisters; +#endif for (MachineBasicBlock &MBB : *MF) { LF.initialize(MBB); @@ -531,13 +534,17 @@ void SILowerI1Copies::lowerPhis() { } else if (IncomingDef->getOpcode() == AMDGPU::IMPLICIT_DEF) { continue; } else { - assert(IncomingDef->isPHI()); + assert(IncomingDef->isPHI() || PhiRegisters.count(IncomingReg)); } IncomingBlocks.push_back(IncomingMBB); IncomingRegs.push_back(IncomingReg); } +#ifndef NDEBUG + PhiRegisters.insert(DstReg); +#endif + // Phis in a loop that are observed outside the loop receive a simple but // conservatively correct treatment. MachineBasicBlock *PostDomBound = &MBB; diff --git a/llvm/test/CodeGen/AMDGPU/si-lower-i1-copies.mir b/llvm/test/CodeGen/AMDGPU/si-lower-i1-copies.mir new file mode 100644 index 00000000000..9312322c04a --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/si-lower-i1-copies.mir @@ -0,0 +1,33 @@ +# RUN: llc -mtriple=amdgcn-amd-amdhsa -verify-machineinstrs -run-pass=si-i1-copies -o - %s | FileCheck -check-prefixes=GCN %s + +# GCN-LABEL: name: lcssa_phi +--- +name: lcssa_phi +tracksRegLiveness: true +body: | + bb.0: + %0:sreg_64 = S_MOV_B64 0 + %8:vreg_1 = IMPLICIT_DEF + %10:sreg_64 = IMPLICIT_DEF + %11:sreg_64 = SI_IF %10, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec + S_BRANCH %bb.1 + + bb.1: + %1:sreg_64 = PHI %0, %bb.0, %3, %bb.1 + %2:sreg_64 = IMPLICIT_DEF + %3:sreg_64 = SI_IF_BREAK %2, %1, implicit-def dead $scc + %4:sreg_64 = IMPLICIT_DEF + %5:vreg_1 = COPY %4 + SI_LOOP %3, %bb.1, implicit-def dead $exec, implicit-def dead $scc, implicit $exec + S_BRANCH %bb.2 + + bb.2: + %6:vreg_1 = PHI %5, %bb.1 + SI_END_CF %3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec + + bb.3: + %7:vreg_1 = PHI %6, %bb.2, %8, %bb.0 + SI_END_CF %11, implicit-def dead $exec, implicit-def dead $scc, implicit $exec + S_ENDPGM 0 + +... |

