1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
3
4---
5name:            cbz_s32
6legalized:       true
7regBankSelected: true
8
9body:             |
10  ; CHECK-LABEL: name: cbz_s32
11  ; CHECK: bb.0:
12  ; CHECK:   successors: %bb.0(0x40000000), %bb.1(0x40000000)
13  ; CHECK:   [[COPY:%[0-9]+]]:gpr32 = COPY $w0
14  ; CHECK:   CBZW [[COPY]], %bb.1
15  ; CHECK:   B %bb.0
16  ; CHECK: bb.1:
17  bb.0:
18    liveins: $w0
19    successors: %bb.0, %bb.1
20
21    %0:gpr(s32) = COPY $w0
22    %1:gpr(s32) = G_CONSTANT i32 0
23    %2:gpr(s32) = G_ICMP intpred(eq), %0, %1
24    %3:gpr(s1) = G_TRUNC %2(s32)
25    G_BRCOND %3(s1), %bb.1
26    G_BR %bb.0
27
28  bb.1:
29...
30
31---
32name:            cbz_s64
33legalized:       true
34regBankSelected: true
35
36body:             |
37  ; CHECK-LABEL: name: cbz_s64
38  ; CHECK: bb.0:
39  ; CHECK:   successors: %bb.0(0x40000000), %bb.1(0x40000000)
40  ; CHECK:   [[COPY:%[0-9]+]]:gpr64 = COPY $x0
41  ; CHECK:   CBZX [[COPY]], %bb.1
42  ; CHECK:   B %bb.0
43  ; CHECK: bb.1:
44  bb.0:
45    liveins: $x0
46    successors: %bb.0, %bb.1
47
48    %0:gpr(s64) = COPY $x0
49    %1:gpr(s64) = G_CONSTANT i64 0
50    %2:gpr(s32) = G_ICMP intpred(eq), %0, %1
51    %3:gpr(s1) = G_TRUNC %2(s32)
52    G_BRCOND %3(s1), %bb.1
53    G_BR %bb.0
54
55  bb.1:
56...
57
58---
59name:            cbnz_s32
60legalized:       true
61regBankSelected: true
62
63body:             |
64  ; CHECK-LABEL: name: cbnz_s32
65  ; CHECK: bb.0:
66  ; CHECK:   successors: %bb.0(0x40000000), %bb.1(0x40000000)
67  ; CHECK:   [[COPY:%[0-9]+]]:gpr32 = COPY $w0
68  ; CHECK:   CBNZW [[COPY]], %bb.1
69  ; CHECK:   B %bb.0
70  ; CHECK: bb.1:
71  bb.0:
72    liveins: $w0
73    successors: %bb.0, %bb.1
74
75    %0:gpr(s32) = COPY $w0
76    %1:gpr(s32) = G_CONSTANT i32 0
77    %2:gpr(s32) = G_ICMP intpred(ne), %0, %1
78    %3:gpr(s1) = G_TRUNC %2(s32)
79    G_BRCOND %3(s1), %bb.1
80    G_BR %bb.0
81
82  bb.1:
83...
84
85---
86name:            cbnz_s64
87legalized:       true
88regBankSelected: true
89
90body:             |
91  ; CHECK-LABEL: name: cbnz_s64
92  ; CHECK: bb.0:
93  ; CHECK:   successors: %bb.0(0x40000000), %bb.1(0x40000000)
94  ; CHECK:   [[COPY:%[0-9]+]]:gpr64 = COPY $x0
95  ; CHECK:   CBNZX [[COPY]], %bb.1
96  ; CHECK:   B %bb.0
97  ; CHECK: bb.1:
98  bb.0:
99    liveins: $x0
100    successors: %bb.0, %bb.1
101
102    %0:gpr(s64) = COPY $x0
103    %1:gpr(s64) = G_CONSTANT i64 0
104    %2:gpr(s32) = G_ICMP intpred(ne), %0, %1
105    %3:gpr(s1) = G_TRUNC %2(s32)
106    G_BRCOND %3(s1), %bb.1
107    G_BR %bb.0
108
109  bb.1:
110...
111---
112name:            test_rhs_inttoptr
113alignment:       4
114legalized:       true
115regBankSelected: true
116tracksRegLiveness: true
117body:             |
118  ; CHECK-LABEL: name: test_rhs_inttoptr
119  ; CHECK: bb.0:
120  ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
121  ; CHECK:   liveins: $x0
122  ; CHECK:   [[COPY:%[0-9]+]]:gpr64common = COPY $x0
123  ; CHECK:   CBZX [[COPY]], %bb.2
124  ; CHECK: bb.1:
125  ; CHECK:   successors: %bb.2(0x80000000)
126  ; CHECK:   STRXui $xzr, [[COPY]], 0 :: (store 8)
127  ; CHECK: bb.2:
128  ; CHECK:   RET_ReallyLR
129  bb.1:
130    successors: %bb.2, %bb.3
131    liveins: $x0
132
133    %0:gpr(p0) = COPY $x0
134    %2:gpr(s64) = G_CONSTANT i64 0
135    %1:gpr(p0) = G_INTTOPTR %2(s64)
136    %4:gpr(s32) = G_ICMP intpred(eq), %0(p0), %1
137    %3:gpr(s1) = G_TRUNC %4(s32)
138    G_BRCOND %3(s1), %bb.3
139
140  bb.2:
141    %5:gpr(s64) = G_CONSTANT i64 0
142    G_STORE %5(s64), %0(p0) :: (store 8)
143
144  bb.3:
145    RET_ReallyLR
146
147...
148---
149name:            test_rhs_unknown
150alignment:       4
151legalized:       true
152regBankSelected: true
153tracksRegLiveness: true
154body:             |
155  ; CHECK-LABEL: name: test_rhs_unknown
156  ; CHECK: bb.0:
157  ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
158  ; CHECK:   liveins: $x0
159  ; CHECK:   [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
160  ; CHECK:   [[LDRXui:%[0-9]+]]:gpr64common = LDRXui [[COPY]], 0 :: (load 8)
161  ; CHECK:   [[SUBSXri:%[0-9]+]]:gpr64 = SUBSXri [[LDRXui]], 42, 0, implicit-def $nzcv
162  ; CHECK:   Bcc 0, %bb.2, implicit $nzcv
163  ; CHECK: bb.1:
164  ; CHECK:   successors: %bb.2(0x80000000)
165  ; CHECK:   STRXui $xzr, [[COPY]], 0 :: (store 8)
166  ; CHECK: bb.2:
167  ; CHECK:   RET_ReallyLR
168  bb.1:
169    successors: %bb.2, %bb.3
170    liveins: $x0
171
172    %0:gpr(p0) = COPY $x0
173    %2:gpr(s64) = G_CONSTANT i64 42
174    %4:gpr(s64) = G_CONSTANT i64 0
175    %1:gpr(s64) = G_LOAD %0(p0) :: (load 8)
176    %5:gpr(s32) = G_ICMP intpred(eq), %1(s64), %2
177    %3:gpr(s1) = G_TRUNC %5(s32)
178    G_BRCOND %3(s1), %bb.3
179
180  bb.2:
181    %6:gpr(s64) = G_CONSTANT i64 0
182    G_STORE %6(s64), %0(p0) :: (store 8)
183
184  bb.3:
185    RET_ReallyLR
186
187
188