• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# RUN: llc -O0 -mtriple=aarch64 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,LINUX-DEFAULT
2
3--- |
4  target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
5
6  define void @frame_index() {
7    %ptr0 = alloca i64
8    ret void
9  }
10
11  define i8* @ptr_mask(i8* %in) { ret i8* undef }
12
13  @var_local = global i8 0
14  define i8* @global_local() { ret i8* undef }
15
16  @var_got = external dso_local global i8
17  define i8* @global_got() { ret i8* undef }
18
19  define void @icmp() { ret void }
20  define void @fcmp() { ret void }
21
22  define void @phi() { ret void }
23
24  define void @select() { ret void }
25...
26
27---
28# CHECK-LABEL: name: frame_index
29name:            frame_index
30legalized:       true
31regBankSelected: true
32
33# CHECK:      registers:
34# CHECK-NEXT:  - { id: 0, class: gpr64sp, preferred-register: '' }
35registers:
36  - { id: 0, class: gpr }
37
38stack:
39  - { id: 0, name: ptr0, offset: 0, size: 8, alignment: 8 }
40
41# CHECK:  body:
42# CHECK: %0:gpr64sp = ADDXri %stack.0.ptr0, 0, 0
43body:             |
44  bb.0:
45    %0(p0) = G_FRAME_INDEX %stack.0.ptr0
46    $x0 = COPY %0(p0)
47...
48
49---
50
51---
52# CHECK-LABEL: name: ptr_mask
53name:            ptr_mask
54legalized:       true
55regBankSelected: true
56
57# CHECK:  body:
58# CHECK: %2:gpr64sp = ANDXri %0, 8060
59body:             |
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...
67
68---
69# Global defined in the same linkage unit so no GOT is needed
70# CHECK-LABEL: name: global_local
71name:            global_local
72legalized:       true
73regBankSelected: true
74registers:
75  - { id: 0, class: gpr }
76
77# CHECK:  body:
78# LINUX-DEFAULT: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_local, target-flags(aarch64-pageoff, aarch64-nc) @var_local
79body:             |
80  bb.0:
81    %0(p0) = G_GLOBAL_VALUE @var_local
82    $x0 = COPY %0(p0)
83...
84
85---
86# CHECK-LABEL: name: global_got
87name:            global_got
88legalized:       true
89regBankSelected: true
90registers:
91  - { id: 0, class: gpr }
92
93# CHECK:  body:
94# LINUX-DEFAULT: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_got, target-flags(aarch64-pageoff, aarch64-nc) @var_got
95body:             |
96  bb.0:
97    %0(p0) = G_GLOBAL_VALUE @var_got
98    $x0 = COPY %0(p0)
99...
100
101---
102# CHECK-LABEL: name: icmp
103name:            icmp
104legalized:       true
105regBankSelected: true
106
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: '' }
114registers:
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 }
127
128# CHECK:  body:
129# CHECK:    SUBSWrr %0, %0, implicit-def $nzcv
130# CHECK:    %1:gpr32 = CSINCWr $wzr, $wzr, 1, implicit $nzcv
131
132# CHECK:    SUBSXrr %2, %2, implicit-def $nzcv
133# CHECK:    %3:gpr32 = CSINCWr $wzr, $wzr, 3, implicit $nzcv
134
135# CHECK:    SUBSXrr %4, %4, implicit-def $nzcv
136# CHECK:    %5:gpr32 = CSINCWr $wzr, $wzr, 0, implicit $nzcv
137
138body:             |
139  bb.0:
140    liveins: $w0, $x0
141
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)
147
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)
153
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)
159...
160
161---
162# CHECK-LABEL: name: fcmp
163name:            fcmp
164legalized:       true
165regBankSelected: true
166
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: '' }
174registers:
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 }
183
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]]
189
190# CHECK:    FCMPDrr %2, %2, implicit-def $nzcv
191# CHECK:    %3:gpr32 = CSINCWr $wzr, $wzr, 4, implicit $nzcv
192
193body:             |
194  bb.0:
195    liveins: $w0, $x0
196
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)
202
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)
208
209...
210
211---
212# CHECK-LABEL: name: phi
213name:            phi
214legalized:       true
215regBankSelected: true
216tracksRegLiveness: true
217
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: '' }
223registers:
224  - { id: 0, class: fpr }
225  - { id: 1, class: gpr }
226  - { id: 2, class: fpr }
227
228# CHECK:  body:
229# CHECK:    bb.1:
230# CHECK:      %2:fpr32 = PHI %0, %bb.0, %2, %bb.1
231
232body:             |
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
239
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
244
245  bb.2:
246    $s0 = COPY %2
247    RET_ReallyLR implicit $s0
248...
249
250---
251# CHECK-LABEL: name: select
252name:            select
253legalized:       true
254regBankSelected: true
255tracksRegLiveness: true
256
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: '' }
268registers:
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 }
279
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
287body:             |
288  bb.0:
289    liveins: $w0, $w1, $w2
290    %10:gpr(s32) = COPY $w0
291    %0(s1) = G_TRUNC %10
292
293    %1(s32) = COPY $w1
294    %2(s32) = COPY $w2
295    %3(s32) = G_SELECT %0, %1, %2
296    $w0 = COPY %3(s32)
297
298    %4(s64) = COPY $x0
299    %5(s64) = COPY $x1
300    %6(s64) = G_SELECT %0, %4, %5
301    $x0 = COPY %6(s64)
302
303    %7(p0) = COPY $x0
304    %8(p0) = COPY $x1
305    %9(p0) = G_SELECT %0, %7, %8
306    $x0 = COPY %9(p0)
307...
308