[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / ARM / GlobalISel / arm-legalize-control-flow.mir
blob6065b771efd71f7df0ae702110379e4a339cbc44
1 # RUN: llc -mtriple arm-- -run-pass=legalizer %s -o - | FileCheck %s
2 # RUN: llc -mtriple thumb-- -mattr=+v6t2 -run-pass=legalizer %s -o - | FileCheck %s
3 --- |
4   define void @test_brcond() { ret void }
6   define void @test_phi_s32() { ret void }
7   define void @test_phi_p0() { ret void }
8   define void @test_phi_s8() { ret void }
9 ...
10 ---
11 name:            test_brcond
12 # CHECK-LABEL: name: test_brcond
13 legalized:       false
14 # CHECK: legalized: true
15 regBankSelected: false
16 selected:        false
17 tracksRegLiveness: true
18 registers:
19   - { id: 0, class: _ }
20   - { id: 1, class: _ }
21   - { id: 2, class: _ }
22 body:             |
23   bb.0:
24     successors: %bb.1(0x40000000), %bb.2(0x40000000)
25     liveins: $r0, $r1
27     %0(s32) = COPY $r0
28     %1(s32) = COPY $r1
29     %2(s1) = G_ICMP intpred(sgt), %0(s32), %1
30     G_BRCOND %2(s1), %bb.1
31     ; G_BRCOND with s1 is legal, so we should find it unchanged in the output
32     ; CHECK: G_BRCOND {{%[0-9]+}}(s1), %bb.1
33     G_BR %bb.2
35   bb.1:
36     $r0 = COPY %1(s32)
37     BX_RET 14, $noreg, implicit $r0
39   bb.2:
40     $r0 = COPY %0(s32)
41     BX_RET 14, $noreg, implicit $r0
43 ...
44 ---
45 name:            test_phi_s32
46 # CHECK-LABEL: name: test_phi_s32
47 legalized:       false
48 # CHECK: legalized: true
49 regBankSelected: false
50 selected:        false
51 tracksRegLiveness: true
52 registers:
53   - { id: 0, class: _ }
54   - { id: 1, class: _ }
55   - { id: 2, class: _ }
56   - { id: 3, class: _ }
57   - { id: 4, class: _ }
58 body:             |
59   bb.0:
60     liveins: $r0, $r1, $r2
62     %0(s32) = COPY $r0
63     %1(s1) = G_TRUNC %0(s32)
65     %2(s32) = COPY $r1
66     %3(s32) = COPY $r2
68     G_BRCOND %1(s1), %bb.1
69     G_BR %bb.2
71   bb.1:
72     G_BR %bb.2
74   bb.2:
75     %4(s32) = G_PHI %2(s32), %bb.0, %3(s32), %bb.1
76     ; G_PHI with s32 is legal, so we should find it unchanged in the output
77     ; CHECK: G_PHI {{%[0-9]+}}(s32), %bb.0, {{%[0-9]+}}(s32), %bb.1
78     $r0 = COPY %4(s32)
79     BX_RET 14, $noreg, implicit $r0
80 ...
81 ---
82 name:            test_phi_p0
83 # CHECK-LABEL: name: test_phi_p0
84 legalized:       false
85 # CHECK: legalized: true
86 regBankSelected: false
87 selected:        false
88 tracksRegLiveness: true
89 registers:
90   - { id: 0, class: _ }
91   - { id: 1, class: _ }
92   - { id: 2, class: _ }
93   - { id: 3, class: _ }
94   - { id: 4, class: _ }
95 body:             |
96   bb.0:
97     liveins: $r0, $r1, $r2
99     %0(s32) = COPY $r0
100     %1(s1) = G_TRUNC %0(s32)
102     %2(p0) = COPY $r1
103     %3(p0) = COPY $r2
105     G_BRCOND %1(s1), %bb.1
106     G_BR %bb.2
108   bb.1:
109     G_BR %bb.2
111   bb.2:
112     %4(p0) = G_PHI %2(p0), %bb.0, %3(p0), %bb.1
113     ; G_PHI with p0 is legal, so we should find it unchanged in the output
114     ; CHECK: G_PHI {{%[0-9]+}}(p0), %bb.0, {{%[0-9]+}}(p0), %bb.1
115     $r0 = COPY %4(p0)
116     BX_RET 14, $noreg, implicit $r0
119 name:            test_phi_s8
120 # CHECK-LABEL: name: test_phi_s8
121 legalized:       false
122 # CHECK: legalized: true
123 regBankSelected: false
124 selected:        false
125 tracksRegLiveness: true
126 registers:
127   - { id: 0, class: _ }
128   - { id: 1, class: _ }
129   - { id: 2, class: _ }
130   - { id: 3, class: _ }
131   - { id: 4, class: _ }
132   - { id: 5, class: _ }
133   - { id: 6, class: _ }
134   - { id: 7, class: _ }
135 body:             |
136   bb.0:
137     liveins: $r0, $r1, $r2
139     %0(s32) = COPY $r0
140     %1(s1) = G_TRUNC %0(s32)
142     %2(s32) = COPY $r1
143     %3(s8) = G_TRUNC %2(s32)
144     ; CHECK: [[R1:%[0-9]+]]:_(s32) = COPY $r1
146     %4(s32) = COPY $r2
147     %5(s8) = G_TRUNC %4(s32)
148     ; CHECK: [[R2:%[0-9]+]]:_(s32) = COPY $r2
150     ; CHECK: [[V1:%[0-9]+]]:_(s32) = COPY [[R1]]
152     G_BRCOND %1(s1), %bb.1
153     G_BR %bb.2
155   bb.1:
156     ; CHECK: [[V2:%[0-9]+]]:_(s32) = COPY [[R2]]
157     G_BR %bb.2
159   bb.2:
160     %6(s8) = G_PHI %3(s8), %bb.0, %5(s8), %bb.1
161     ; G_PHI with s8 should widen, and all the truncs and exts should be combined
162     ; away into a bunch of redundant copies
163     ; CHECK: [[V:%[0-9]+]]:_(s32) = G_PHI [[V1]](s32), %bb.0, [[V2]](s32), %bb.1
165     %7(s32) = G_ANYEXT %6(s8)
166     $r0 = COPY %7(s32)
167     ; CHECK: [[R:%[0-9]+]]:_(s32) = COPY [[V]]
168     ; CHECK: $r0 = COPY [[R]](s32)
169     BX_RET 14, $noreg, implicit $r0