• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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