| # 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 |
| ... |