[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / select-static.mir
blob0151b1f62303cf386eab18160c9b398099f35180
1 # RUN: llc -O0 -mtriple=aarch64 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,LINUX-DEFAULT
3 --- |
4   target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
6   define dso_local void @frame_index() {
7     %ptr0 = alloca i64
8     ret void
9   }
11   define dso_local i8* @ptr_mask(i8* %in) { ret i8* undef }
13   @var_local = dso_local global i8 0
14   define dso_local i8* @global_local() { ret i8* undef }
16   @var_got = external dso_local global i8
17   define dso_local i8* @global_got() { ret i8* undef }
19   define dso_local void @icmp() { ret void }
20   define dso_local void @fcmp() { ret void }
22   define dso_local void @phi() { ret void }
24   define dso_local void @select() { ret void }
25 ...
27 ---
28 # CHECK-LABEL: name: frame_index
29 name:            frame_index
30 legalized:       true
31 regBankSelected: true
33 # CHECK:      registers:
34 # CHECK-NEXT:  - { id: 0, class: gpr64sp, preferred-register: '' }
35 registers:
36   - { id: 0, class: gpr }
38 stack:
39   - { id: 0, name: ptr0, offset: 0, size: 8, alignment: 8 }
41 # CHECK:  body:
42 # CHECK: %0:gpr64sp = ADDXri %stack.0.ptr0, 0, 0
43 body:             |
44   bb.0:
45     %0(p0) = G_FRAME_INDEX %stack.0.ptr0
46     $x0 = COPY %0(p0)
47 ...
49 ---
51 ---
52 # CHECK-LABEL: name: ptr_mask
53 name:            ptr_mask
54 legalized:       true
55 regBankSelected: true
57 # CHECK:  body:
58 # CHECK: %2:gpr64sp = ANDXri %0, 8060
59 body:             |
60   bb.0:
61       liveins: $x0
62     %0:gpr(p0) = COPY $x0
63     %const:gpr(s64) = G_CONSTANT i64 -8
64     %1:gpr(p0) = G_PTRMASK %0, %const
65     $x0 = COPY %1(p0)
66 ...
68 ---
69 # Global defined in the same linkage unit so no GOT is needed
70 # CHECK-LABEL: name: global_local
71 name:            global_local
72 legalized:       true
73 regBankSelected: true
74 registers:
75   - { id: 0, class: gpr }
77 # CHECK:  body:
78 # LINUX-DEFAULT: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_local, target-flags(aarch64-pageoff, aarch64-nc) @var_local
79 body:             |
80   bb.0:
81     %0(p0) = G_GLOBAL_VALUE @var_local
82     $x0 = COPY %0(p0)
83 ...
85 ---
86 # CHECK-LABEL: name: global_got
87 name:            global_got
88 legalized:       true
89 regBankSelected: true
90 registers:
91   - { id: 0, class: gpr }
93 # CHECK:  body:
94 # LINUX-DEFAULT: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_got, target-flags(aarch64-pageoff, aarch64-nc) @var_got
95 body:             |
96   bb.0:
97     %0(p0) = G_GLOBAL_VALUE @var_got
98     $x0 = COPY %0(p0)
99 ...
102 # CHECK-LABEL: name: icmp
103 name:            icmp
104 legalized:       true
105 regBankSelected: true
107 # CHECK:      registers:
108 # CHECK-NEXT:  - { id: 0, class: gpr32, preferred-register: '' }
109 # CHECK-NEXT:  - { id: 1, class: gpr32, preferred-register: '' }
110 # CHECK-NEXT:  - { id: 2, class: gpr64, preferred-register: '' }
111 # CHECK-NEXT:  - { id: 3, class: gpr32, preferred-register: '' }
112 # CHECK-NEXT:  - { id: 4, class: gpr64, preferred-register: '' }
113 # CHECK-NEXT:  - { id: 5, class: gpr32, preferred-register: '' }
114 registers:
115   - { id: 0, class: gpr }
116   - { id: 1, class: gpr }
117   - { id: 2, class: gpr }
118   - { id: 3, class: gpr }
119   - { id: 4, class: gpr }
120   - { id: 5, class: gpr }
121   - { id: 6, class: gpr }
122   - { id: 7, class: gpr }
123   - { id: 8, class: gpr }
124   - { id: 9, class: gpr }
125   - { id: 10, class: gpr }
126   - { id: 11, class: gpr }
128 # CHECK:  body:
129 # CHECK:    SUBSWrr %0, %0, implicit-def $nzcv
130 # CHECK:    %1:gpr32 = CSINCWr $wzr, $wzr, 1, implicit $nzcv
132 # CHECK:    SUBSXrr %2, %2, implicit-def $nzcv
133 # CHECK:    %3:gpr32 = CSINCWr $wzr, $wzr, 3, implicit $nzcv
135 # CHECK:    SUBSXrr %4, %4, implicit-def $nzcv
136 # CHECK:    %5:gpr32 = CSINCWr $wzr, $wzr, 0, implicit $nzcv
138 body:             |
139   bb.0:
140     liveins: $w0, $x0
142     %0(s32) = COPY $w0
143     %1(s32) = G_ICMP intpred(eq), %0, %0
144     %6(s1) = G_TRUNC %1(s32)
145     %9(s32) = G_ANYEXT %6
146     $w0 = COPY %9(s32)
148     %2(s64) = COPY $x0
149     %3(s32) = G_ICMP intpred(uge), %2, %2
150     %7(s1) = G_TRUNC %3(s32)
151     %10(s32) = G_ANYEXT %7
152     $w0 = COPY %10(s32)
154     %4(p0) = COPY $x0
155     %5(s32) = G_ICMP intpred(ne), %4, %4
156     %8(s1) = G_TRUNC %5(s32)
157     %11(s32) = G_ANYEXT %8
158     $w0 = COPY %11(s32)
162 # CHECK-LABEL: name: fcmp
163 name:            fcmp
164 legalized:       true
165 regBankSelected: true
167 # CHECK:      registers:
168 # CHECK-NEXT:  - { id: 0, class: fpr32, preferred-register: '' }
169 # CHECK-NEXT:  - { id: 1, class: gpr32, preferred-register: '' }
170 # CHECK-NEXT:  - { id: 2, class: fpr64, preferred-register: '' }
171 # CHECK-NEXT:  - { id: 3, class: gpr32, preferred-register: '' }
172 # CHECK-NEXT:  - { id: 4, class: gpr32, preferred-register: '' }
173 # CHECK-NEXT:  - { id: 5, class: gpr32, preferred-register: '' }
174 registers:
175   - { id: 0, class: fpr }
176   - { id: 1, class: gpr }
177   - { id: 2, class: fpr }
178   - { id: 3, class: gpr }
179   - { id: 4, class: gpr }
180   - { id: 5, class: gpr }
181   - { id: 6, class: gpr }
182   - { id: 7, class: gpr }
184 # CHECK:  body:
185 # CHECK:    FCMPSrr %0, %0, implicit-def $nzcv
186 # CHECK:    [[TST_MI:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 5, implicit $nzcv
187 # CHECK:    [[TST_GT:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 13, implicit $nzcv
188 # CHECK:    %1:gpr32 = ORRWrr [[TST_MI]], [[TST_GT]]
190 # CHECK:    FCMPDrr %2, %2, implicit-def $nzcv
191 # CHECK:    %3:gpr32 = CSINCWr $wzr, $wzr, 4, implicit $nzcv
193 body:             |
194   bb.0:
195     liveins: $w0, $x0
197     %0(s32) = COPY $s0
198     %1(s32) = G_FCMP floatpred(one), %0, %0
199     %4(s1) = G_TRUNC %1(s32)
200     %6(s32) = G_ANYEXT %4
201     $w0 = COPY %6(s32)
203     %2(s64) = COPY $d0
204     %3(s32) = G_FCMP floatpred(uge), %2, %2
205     %5(s1) = G_TRUNC %3(s32)
206     %7(s32) = G_ANYEXT %5
207     $w0 = COPY %7(s32)
212 # CHECK-LABEL: name: phi
213 name:            phi
214 legalized:       true
215 regBankSelected: true
216 tracksRegLiveness: true
218 # CHECK:      registers:
219 # CHECK-NEXT:  - { id: 0, class: fpr32, preferred-register: '' }
220 # CHECK-NEXT:  - { id: 1, class: gpr, preferred-register: '' }
221 # CHECK-NEXT:  - { id: 2, class: fpr32, preferred-register: '' }
222 # CHECK-NEXT:  - { id: 3, class: gpr32, preferred-register: '' }
223 registers:
224   - { id: 0, class: fpr }
225   - { id: 1, class: gpr }
226   - { id: 2, class: fpr }
228 # CHECK:  body:
229 # CHECK:    bb.1:
230 # CHECK:      %2:fpr32 = PHI %0, %bb.0, %2, %bb.1
232 body:             |
233   bb.0:
234     liveins: $s0, $w0
235     successors: %bb.1
236     %0(s32) = COPY $s0
237     %3:gpr(s32) = COPY $w0
238     %1(s1) = G_TRUNC %3
240   bb.1:
241     successors: %bb.1, %bb.2
242     %2(s32) = PHI %0, %bb.0, %2, %bb.1
243     G_BRCOND %1, %bb.1
245   bb.2:
246     $s0 = COPY %2
247     RET_ReallyLR implicit $s0
251 # CHECK-LABEL: name: select
252 name:            select
253 legalized:       true
254 regBankSelected: true
255 tracksRegLiveness: true
257 # CHECK:      registers:
258 # CHECK-NEXT:  - { id: 0, class: gpr32, preferred-register: '' }
259 # CHECK-NEXT:  - { id: 1, class: gpr32, preferred-register: '' }
260 # CHECK-NEXT:  - { id: 2, class: gpr32, preferred-register: '' }
261 # CHECK-NEXT:  - { id: 3, class: gpr32, preferred-register: '' }
262 # CHECK-NEXT:  - { id: 4, class: gpr64, preferred-register: '' }
263 # CHECK-NEXT:  - { id: 5, class: gpr64, preferred-register: '' }
264 # CHECK-NEXT:  - { id: 6, class: gpr64, preferred-register: '' }
265 # CHECK-NEXT:  - { id: 7, class: gpr64, preferred-register: '' }
266 # CHECK-NEXT:  - { id: 8, class: gpr64, preferred-register: '' }
267 # CHECK-NEXT:  - { id: 9, class: gpr64, preferred-register: '' }
268 registers:
269   - { id: 0, class: gpr }
270   - { id: 1, class: gpr }
271   - { id: 2, class: gpr }
272   - { id: 3, class: gpr }
273   - { id: 4, class: gpr }
274   - { id: 5, class: gpr }
275   - { id: 6, class: gpr }
276   - { id: 7, class: gpr }
277   - { id: 8, class: gpr }
278   - { id: 9, class: gpr }
280 # CHECK:  body:
281 # CHECK:      ANDSWri %10, 0, implicit-def $nzcv
282 # CHECK:      %3:gpr32 = CSELWr %1, %2, 1, implicit $nzcv
283 # CHECK:      ANDSWri %10, 0, implicit-def $nzcv
284 # CHECK:      %6:gpr64 = CSELXr %4, %5, 1, implicit $nzcv
285 # CHECK:      ANDSWri %10, 0, implicit-def $nzcv
286 # CHECK:      %9:gpr64 = CSELXr %7, %8, 1, implicit $nzcv
287 body:             |
288   bb.0:
289     liveins: $w0, $w1, $w2
290     %10:gpr(s32) = COPY $w0
291     %0(s1) = G_TRUNC %10
293     %1(s32) = COPY $w1
294     %2(s32) = COPY $w2
295     %3(s32) = G_SELECT %0, %1, %2
296     $w0 = COPY %3(s32)
298     %4(s64) = COPY $x0
299     %5(s64) = COPY $x1
300     %6(s64) = G_SELECT %0, %4, %5
301     $x0 = COPY %6(s64)
303     %7(p0) = COPY $x0
304     %8(p0) = COPY $x1
305     %9(p0) = G_SELECT %0, %7, %8
306     $x0 = COPY %9(p0)