1# RUN: llc -mtriple amdgcn -run-pass livevars -run-pass phi-node-elimination -o - %s | FileCheck %s 2 3################################################################################ 4# This test used to hit an assert in PHIElimination: 5# PHIElimination::LowerPHINode(llvm::MachineBasicBlock&, llvm::MachineBasicBlock::iterator): Assertion `KillInst->readsRegister(SrcReg) && "Cannot find kill instruction"' 6 7--- 8name: foo 9tracksRegLiveness: true 10body: | 11 bb.0: 12 S_CBRANCH_SCC0 %bb.2, implicit undef $scc 13 14 bb.1: 15 %1:sreg_32_xm0 = S_MOV_B32 255 16 S_BRANCH %bb.3 17 18 bb.2: 19 %2:sreg_32_xm0 = S_MOV_B32 254 20 21 bb.3: 22 dead %3:sreg_32_xm0 = PHI undef %2, %bb.2, undef %1, %bb.1 23 %4:sreg_32_xm0 = PHI %2, %bb.2, %1, %bb.1 24 S_NOP 0, implicit %4 25... 26 27# CHECK-LABEL: name: foo 28# CHECK: bb.3: 29# CHECK-NEXT: dead %2:sreg_32_xm0 = IMPLICIT_DEF 30# CHECK-NEXT: %3:sreg_32_xm0 = COPY killed %4 31# CHECK-NEXT: S_NOP 0, implicit killed %3 32 33 34################################################################################ 35# Similar test as above, but with swapped order for the PHI nodes. 36# With this PHI node order we did not hit the assert, but we used to get 37# 38# bb.3: 39# dead %3:sreg_32_xm0 = COPY killed %4 40# %2:sreg_32_xm0 = COPY %4 41# S_NOP 0, implicit killed %2 42# 43# which looks weird regarding killed flags for %4. 44 45--- 46name: bar 47tracksRegLiveness: true 48body: | 49 bb.0: 50 S_CBRANCH_SCC0 %bb.2, implicit undef $scc 51 52 bb.1: 53 %1:sreg_32_xm0 = S_MOV_B32 255 54 S_BRANCH %bb.3 55 56 bb.2: 57 %2:sreg_32_xm0 = S_MOV_B32 254 58 59 bb.3: 60 %4:sreg_32_xm0 = PHI %2, %bb.2, %1, %bb.1 61 dead %3:sreg_32_xm0 = PHI undef %2, %bb.2, undef %1, %bb.1 62 S_NOP 0, implicit %4 63... 64 65# CHECK-LABEL: name: bar 66# CHECK: bb.3: 67# CHECK-NEXT: dead %3:sreg_32_xm0 = IMPLICIT_DEF 68# CHECK-NEXT: %2:sreg_32_xm0 = COPY killed %4 69# CHECK-NEXT: S_NOP 0, implicit killed %2 70 71 72# The following test crashes in phi-elimination hooks. 73# 74 75--- 76name: bax 77tracksRegLiveness: true 78body: | 79 bb.0: 80 S_CBRANCH_SCC0 %bb.2, implicit undef $scc 81 82 bb.1: 83 %1:sreg_32_xm0 = S_MOV_B32 255 84 S_BRANCH %bb.3 85 86 bb.2: 87 %2:sreg_32_xm0 = S_MOV_B32 254 88 89 bb.3: 90 %3:sreg_32_xm0 = PHI %2, %bb.2, %1, %bb.1 91... 92 93# CHECK-LABEL: name: bax 94# CHECK: bb.3: 95# CHECK-NEXT: %2:sreg_32_xm0 = COPY killed %3 96