# RUN: llc -mtriple amdgcn -run-pass livevars -run-pass phi-node-elimination -o - %s | FileCheck %s ################################################################################ # This test used to hit an assert in PHIElimination: # PHIElimination::LowerPHINode(llvm::MachineBasicBlock&, llvm::MachineBasicBlock::iterator): Assertion `KillInst->readsRegister(SrcReg) && "Cannot find kill instruction"' --- name: foo tracksRegLiveness: true body: | bb.0: S_CBRANCH_SCC0 %bb.2, implicit undef $scc bb.1: %1:sreg_32_xm0 = S_MOV_B32 255 S_BRANCH %bb.3 bb.2: %2:sreg_32_xm0 = S_MOV_B32 254 bb.3: dead %3:sreg_32_xm0 = PHI undef %2, %bb.2, undef %1, %bb.1 %4:sreg_32_xm0 = PHI %2, %bb.2, %1, %bb.1 S_NOP 0, implicit %4 ... # CHECK-LABEL: name: foo # CHECK: bb.3: # CHECK-NEXT: dead %2:sreg_32_xm0 = IMPLICIT_DEF # CHECK-NEXT: %3:sreg_32_xm0 = COPY killed %4 # CHECK-NEXT: S_NOP 0, implicit killed %3 ################################################################################ # Similar test as above, but with swapped order for the PHI nodes. # With this PHI node order we did not hit the assert, but we used to get # # bb.3: # dead %3:sreg_32_xm0 = COPY killed %4 # %2:sreg_32_xm0 = COPY %4 # S_NOP 0, implicit killed %2 # # which looks weird regarding killed flags for %4. --- name: bar tracksRegLiveness: true body: | bb.0: S_CBRANCH_SCC0 %bb.2, implicit undef $scc bb.1: %1:sreg_32_xm0 = S_MOV_B32 255 S_BRANCH %bb.3 bb.2: %2:sreg_32_xm0 = S_MOV_B32 254 bb.3: %4:sreg_32_xm0 = PHI %2, %bb.2, %1, %bb.1 dead %3:sreg_32_xm0 = PHI undef %2, %bb.2, undef %1, %bb.1 S_NOP 0, implicit %4 ... # CHECK-LABEL: name: bar # CHECK: bb.3: # CHECK-NEXT: dead %3:sreg_32_xm0 = IMPLICIT_DEF # CHECK-NEXT: %2:sreg_32_xm0 = COPY killed %4 # CHECK-NEXT: S_NOP 0, implicit killed %2 # The following test crashes in phi-elimination hooks. # --- name: bax tracksRegLiveness: true body: | bb.0: S_CBRANCH_SCC0 %bb.2, implicit undef $scc bb.1: %1:sreg_32_xm0 = S_MOV_B32 255 S_BRANCH %bb.3 bb.2: %2:sreg_32_xm0 = S_MOV_B32 254 bb.3: %3:sreg_32_xm0 = PHI %2, %bb.2, %1, %bb.1 ... # CHECK-LABEL: name: bax # CHECK: bb.3: # CHECK-NEXT: %2:sreg_32_xm0 = COPY killed %3