# RUN: llc -run-pass opt-phis -mtriple=x86_64-- -o - %s | FileCheck %s # All PHIs should be removed since they can be securely replaced # by %8 register. # CHECK-NOT: PHI --- | define void @test() { ret void } ... --- name: test alignment: 16 tracksRegLiveness: true jumpTable: kind: block-address entries: - id: 0 blocks: [ '%bb.3', '%bb.2', '%bb.1', '%bb.4' ] body: | bb.0: liveins: $edi, $ymm0, $rsi %9:gr64 = COPY $rsi %8:vr256 = COPY $ymm0 %7:gr32 = COPY $edi %11:gr32 = SAR32ri %7, 31, implicit-def dead $eflags %12:gr32 = SHR32ri %11, 30, implicit-def dead $eflags %13:gr32 = ADD32rr %7, killed %12, implicit-def dead $eflags %14:gr32 = AND32ri8 %13, -4, implicit-def dead $eflags %15:gr32 = SUB32rr %7, %14, implicit-def dead $eflags %10:gr64_nosp = SUBREG_TO_REG 0, %15, %subreg.sub_32bit %16:gr32 = SUB32ri8 %15, 3, implicit-def $eflags JCC_1 %bb.8, 7, implicit $eflags bb.9: JMP64m $noreg, 8, %10, %jump-table.0, $noreg :: (load (s64) from jump-table) bb.1: %0:vr256 = COPY %8 JMP_1 %bb.5 bb.2: %1:vr256 = COPY %8 JMP_1 %bb.6 bb.3: %2:vr256 = COPY %8 JMP_1 %bb.7 bb.4: %3:vr256 = COPY %8 %17:vr128 = VEXTRACTF128rr %8, 1 VPEXTRDmr %9, 1, $noreg, 12, $noreg, killed %17, 2 bb.5: %4:vr256 = PHI %0, %bb.1, %3, %bb.4 %18:vr128 = VEXTRACTF128rr %4, 1 VPEXTRDmr %9, 1, $noreg, 8, $noreg, killed %18, 1 bb.6: %5:vr256 = PHI %1, %bb.2, %4, %bb.5 %19:vr128 = VEXTRACTF128rr %5, 1 VMOVPDI2DImr %9, 1, $noreg, 4, $noreg, killed %19 bb.7: %6:vr256 = PHI %2, %bb.3, %5, %bb.6 %20:vr128 = COPY %6.sub_xmm VPEXTRDmr %9, 1, $noreg, 0, $noreg, killed %20, 3 bb.8: RET 0 ...