xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/select-phi.mir (revision 1ee315ae7964c8433b772e0b5d667834994ba753)
1# RUN: llc -mtriple=aarch64-unknown-unknown -o - -verify-machineinstrs -run-pass=instruction-select -global-isel-abort=1 %s | FileCheck %s
2--- |
3  ; ModuleID = '/tmp/test.ll'
4  source_filename = "/tmp/test.ll"
5  target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
6  target triple = "aarch64-unknown-unknown"
7
8  define i32 @test_phi(i32 %argc) {
9  entry:
10    %cmp = icmp ugt i32 %argc, 0
11    br i1 %cmp, label %case1, label %case2
12
13  case1:                                            ; preds = %entry
14    %tmp1 = add i32 %argc, 1
15    br label %return
16
17  case2:                                            ; preds = %entry
18    %tmp2 = add i32 %argc, 2
19    br label %return
20
21  return:                                           ; preds = %case2, %case1
22    %res = phi i32 [ %tmp1, %case1 ], [ %tmp2, %case2 ]
23    ret i32 %res
24  }
25
26  define ptr @test_phi_ptr(ptr %a, ptr %b, i1 %cond) {
27  entry:
28    ret ptr null
29  }
30
31...
32---
33name:            test_phi
34alignment:       4
35exposesReturnsTwice: false
36legalized:       true
37regBankSelected: true
38selected:        false
39tracksRegLiveness: true
40registers:
41  - { id: 0, class: gpr, preferred-register: '' }
42  - { id: 1, class: gpr, preferred-register: '' }
43  - { id: 2, class: gpr, preferred-register: '' }
44  - { id: 3, class: gpr, preferred-register: '' }
45  - { id: 4, class: gpr, preferred-register: '' }
46  - { id: 5, class: gpr, preferred-register: '' }
47  - { id: 6, class: gpr, preferred-register: '' }
48  - { id: 7, class: gpr, preferred-register: '' }
49  - { id: 8, class: gpr, preferred-register: '' }
50liveins:
51body:             |
52  bb.1.entry:
53    successors: %bb.2.case1(0x40000000), %bb.3.case2(0x40000000)
54    liveins: $w0
55    ; CHECK-LABEL: name: test_phi
56    ; CHECK: [[RES:%.*]]:gpr32 = PHI
57
58    %0(s32) = COPY $w0
59    %1(s32) = G_CONSTANT i32 0
60    %3(s32) = G_CONSTANT i32 1
61    %5(s32) = G_CONSTANT i32 2
62    %8(s32) = G_ICMP intpred(ugt), %0(s32), %1
63    G_BRCOND %8, %bb.2.case1
64    G_BR %bb.3.case2
65
66  bb.2.case1:
67    successors: %bb.4.return(0x80000000)
68
69    %4(s32) = G_ADD %0, %3
70    G_BR %bb.4.return
71
72  bb.3.case2:
73    successors: %bb.4.return(0x80000000)
74
75    %6(s32) = G_ADD %0, %5
76
77  bb.4.return:
78    %7(s32) = G_PHI %4(s32), %bb.2.case1, %6(s32), %bb.3.case2
79    $w0 = COPY %7(s32)
80    RET_ReallyLR implicit $w0
81
82...
83
84---
85name:            test_phi_ptr
86alignment:       4
87exposesReturnsTwice: false
88legalized:       true
89regBankSelected: true
90selected:        false
91tracksRegLiveness: true
92registers:
93  - { id: 0, class: gpr, preferred-register: '' }
94  - { id: 1, class: gpr, preferred-register: '' }
95  - { id: 2, class: gpr, preferred-register: '' }
96  - { id: 3, class: gpr, preferred-register: '' }
97  - { id: 4, class: _, preferred-register: '' }
98  - { id: 5, class: _, preferred-register: '' }
99liveins:
100body:             |
101  bb.0:
102    successors: %bb.1, %bb.2
103    liveins: $w2, $x0, $x1
104    ; CHECK-LABEL: name: test_phi_ptr
105
106    %0(p0) = COPY $x0
107    %1(p0) = COPY $x1
108    %2:gpr(s32) = COPY $w2
109    G_BRCOND %2, %bb.1
110    G_BR %bb.2
111
112  bb.1:
113    successors: %bb.2
114
115
116  bb.2:
117    ; CHECK: %{{[0-9]+}}:gpr64 = PHI %{{[0-9]+}}, %bb.0, %{{[0-9]+}}, %bb.1
118    %3(p0) = G_PHI %0(p0), %bb.0, %1(p0), %bb.1
119    $x0 = COPY %3(p0)
120    RET_ReallyLR implicit $x0
121
122...
123