1# RUN: llc -run-pass opt-phis -mtriple=x86_64-- -o - %s | FileCheck %s 2# All PHIs should be removed since they can be securely replaced 3# by %8 register. 4# CHECK-NOT: PHI 5--- | 6 define void @test() { 7 ret void 8 } 9... 10--- 11name: test 12alignment: 16 13tracksRegLiveness: true 14jumpTable: 15 kind: block-address 16 entries: 17 - id: 0 18 blocks: [ '%bb.3', '%bb.2', '%bb.1', '%bb.4' ] 19body: | 20 bb.0: 21 liveins: $edi, $ymm0, $rsi 22 23 %9:gr64 = COPY $rsi 24 %8:vr256 = COPY $ymm0 25 %7:gr32 = COPY $edi 26 %11:gr32 = SAR32ri %7, 31, implicit-def dead $eflags 27 %12:gr32 = SHR32ri %11, 30, implicit-def dead $eflags 28 %13:gr32 = ADD32rr %7, killed %12, implicit-def dead $eflags 29 %14:gr32 = AND32ri8 %13, -4, implicit-def dead $eflags 30 %15:gr32 = SUB32rr %7, %14, implicit-def dead $eflags 31 %10:gr64_nosp = SUBREG_TO_REG 0, %15, %subreg.sub_32bit 32 %16:gr32 = SUB32ri8 %15, 3, implicit-def $eflags 33 JCC_1 %bb.8, 7, implicit $eflags 34 35 bb.9: 36 JMP64m $noreg, 8, %10, %jump-table.0, $noreg :: (load 8 from jump-table) 37 38 bb.1: 39 %0:vr256 = COPY %8 40 JMP_1 %bb.5 41 42 bb.2: 43 %1:vr256 = COPY %8 44 JMP_1 %bb.6 45 46 bb.3: 47 %2:vr256 = COPY %8 48 JMP_1 %bb.7 49 50 bb.4: 51 %3:vr256 = COPY %8 52 %17:vr128 = VEXTRACTF128rr %8, 1 53 VPEXTRDmr %9, 1, $noreg, 12, $noreg, killed %17, 2 54 55 bb.5: 56 %4:vr256 = PHI %0, %bb.1, %3, %bb.4 57 %18:vr128 = VEXTRACTF128rr %4, 1 58 VPEXTRDmr %9, 1, $noreg, 8, $noreg, killed %18, 1 59 60 bb.6: 61 %5:vr256 = PHI %1, %bb.2, %4, %bb.5 62 %19:vr128 = VEXTRACTF128rr %5, 1 63 VMOVPDI2DImr %9, 1, $noreg, 4, $noreg, killed %19 64 65 bb.7: 66 %6:vr256 = PHI %2, %bb.3, %5, %bb.6 67 %20:vr128 = COPY %6.sub_xmm 68 VPEXTRDmr %9, 1, $noreg, 0, $noreg, killed %20, 3 69 70 bb.8: 71 RET 0 72... 73