Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / select.mir
blobb3613f52c4ec6e36ba9c59eb40583f0d7a040775
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
2 # RUN: llc -O0 -mtriple=aarch64-apple-ios -run-pass=instruction-select -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=IOS
3 # RUN: llc -O0 -mtriple=aarch64-linux-gnu -relocation-model=pic -run-pass=instruction-select -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=LINUX-PIC
5 --- |
6   target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
8   define void @frame_index() {
9     %ptr0 = alloca i64
10     ret void
11   }
13   define ptr @ptr_mask(ptr %in) { ret ptr undef }
15   @var_local = global i8 0
16   define ptr @global_local() { ret ptr undef }
18   @var_got = external global i8
19   define ptr @global_got() { ret ptr undef }
21   define void @icmp() { ret void }
22   define void @fcmp() { ret void }
24   define void @phi() { ret void }
26   define void @select() { ret void }
27 ...
29 ---
30 name:            frame_index
31 legalized:       true
32 regBankSelected: true
33 stack:
34   - { id: 0, name: ptr0, offset: 0, size: 8, alignment: 8 }
35 body:             |
36   bb.0:
37     ; CHECK-LABEL: name: frame_index
38     ; CHECK: [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0.ptr0, 0, 0
39     ; CHECK-NEXT: $x0 = COPY [[ADDXri]]
40     %0:gpr(p0) = G_FRAME_INDEX %stack.0.ptr0
41     $x0 = COPY %0(p0)
42 ...
44 ---
46 ---
47 name:            ptr_mask
48 legalized:       true
49 regBankSelected: true
50 body:             |
51   bb.0:
52       liveins: $x0
53     ; CHECK-LABEL: name: ptr_mask
54     ; CHECK: liveins: $x0
55     ; CHECK-NEXT: {{  $}}
56     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
57     ; CHECK-NEXT: [[ANDXri:%[0-9]+]]:gpr64sp = ANDXri [[COPY]], 8060
58     ; CHECK-NEXT: $x0 = COPY [[ANDXri]]
59     %0:gpr(p0) = COPY $x0
60     %const:gpr(s64) = G_CONSTANT i64 -8
61     %1:gpr(p0) = G_PTRMASK %0, %const
62     $x0 = COPY %1(p0)
63 ...
65 ---
66 # Global defined in the same linkage unit so no GOT is needed
67 name:            global_local
68 legalized:       true
69 regBankSelected: true
70 body:             |
71   bb.0:
72     ; IOS-LABEL: name: global_local
73     ; IOS: [[MOVaddr:%[0-9]+]]:gpr64common = MOVaddr target-flags(aarch64-page) @var_local, target-flags(aarch64-pageoff, aarch64-nc) @var_local
74     ; IOS-NEXT: $x0 = COPY [[MOVaddr]]
75     ;
76     ; LINUX-PIC-LABEL: name: global_local
77     ; LINUX-PIC: [[LOADgot:%[0-9]+]]:gpr64common = LOADgot target-flags(aarch64-got) @var_local
78     ; LINUX-PIC-NEXT: $x0 = COPY [[LOADgot]]
79     %0:gpr(p0) = G_GLOBAL_VALUE @var_local
80     $x0 = COPY %0(p0)
81 ...
83 ---
84 name:            global_got
85 legalized:       true
86 regBankSelected: true
87 body:             |
88   bb.0:
89     ; CHECK-LABEL: name: global_got
90     ; CHECK: [[LOADgot:%[0-9]+]]:gpr64common = LOADgot target-flags(aarch64-got) @var_got
91     ; CHECK-NEXT: $x0 = COPY [[LOADgot]]
92     %0:gpr(p0) = G_GLOBAL_VALUE @var_got
93     $x0 = COPY %0(p0)
94 ...
96 ---
97 name:            icmp
98 legalized:       true
99 regBankSelected: true
100 body:             |
101   bb.0:
102     liveins: $w0, $x0
104     ; CHECK-LABEL: name: icmp
105     ; CHECK: liveins: $w0, $x0
106     ; CHECK-NEXT: {{  $}}
107     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
108     ; CHECK-NEXT: [[SUBSWrr:%[0-9]+]]:gpr32 = SUBSWrr [[COPY]], [[COPY]], implicit-def $nzcv
109     ; CHECK-NEXT: [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 1, implicit $nzcv
110     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32all = COPY [[CSINCWr]]
111     ; CHECK-NEXT: $w0 = COPY [[COPY1]]
112     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64 = COPY $x0
113     ; CHECK-NEXT: [[SUBSXrr:%[0-9]+]]:gpr64 = SUBSXrr [[COPY2]], [[COPY2]], implicit-def $nzcv
114     ; CHECK-NEXT: [[CSINCWr1:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 3, implicit $nzcv
115     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr32all = COPY [[CSINCWr1]]
116     ; CHECK-NEXT: $w0 = COPY [[COPY3]]
117     ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr64 = COPY $x0
118     ; CHECK-NEXT: [[SUBSXrr1:%[0-9]+]]:gpr64 = SUBSXrr [[COPY4]], [[COPY4]], implicit-def $nzcv
119     ; CHECK-NEXT: [[CSINCWr2:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 0, implicit $nzcv
120     ; CHECK-NEXT: [[COPY5:%[0-9]+]]:gpr32all = COPY [[CSINCWr2]]
121     ; CHECK-NEXT: $w0 = COPY [[COPY5]]
122     %0:gpr(s32) = COPY $w0
123     %1:gpr(s32) = G_ICMP intpred(eq), %0, %0
124     %6:gpr(s8) = G_TRUNC %1(s32)
125     %9:gpr(s32) = G_ANYEXT %6
126     $w0 = COPY %9(s32)
128     %2:gpr(s64) = COPY $x0
129     %3:gpr(s32) = G_ICMP intpred(uge), %2, %2
130     %7:gpr(s8) = G_TRUNC %3(s32)
131     %10:gpr(s32) = G_ANYEXT %7
132     $w0 = COPY %10(s32)
134     %4:gpr(p0) = COPY $x0
135     %5:gpr(s32) = G_ICMP intpred(ne), %4, %4
136     %8:gpr(s8) = G_TRUNC %5(s32)
137     %11:gpr(s32) = G_ANYEXT %8
138     $w0 = COPY %11(s32)
142 name:            fcmp
143 legalized:       true
144 regBankSelected: true
145 body:             |
146   bb.0:
147     liveins: $w0, $x0
149     ; CHECK-LABEL: name: fcmp
150     ; CHECK: liveins: $w0, $x0
151     ; CHECK-NEXT: {{  $}}
152     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr32 = COPY $s0
153     ; CHECK-NEXT: nofpexcept FCMPSrr [[COPY]], [[COPY]], implicit-def $nzcv, implicit $fpcr
154     ; CHECK-NEXT: [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 5, implicit $nzcv
155     ; CHECK-NEXT: [[CSINCWr1:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 13, implicit $nzcv
156     ; CHECK-NEXT: [[ORRWrr:%[0-9]+]]:gpr32 = ORRWrr [[CSINCWr]], [[CSINCWr1]]
157     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32all = COPY [[ORRWrr]]
158     ; CHECK-NEXT: $w0 = COPY [[COPY1]]
159     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:fpr64 = COPY $d0
160     ; CHECK-NEXT: nofpexcept FCMPDrr [[COPY2]], [[COPY2]], implicit-def $nzcv, implicit $fpcr
161     ; CHECK-NEXT: [[CSINCWr2:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 4, implicit $nzcv
162     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr32all = COPY [[CSINCWr2]]
163     ; CHECK-NEXT: $w0 = COPY [[COPY3]]
164     ; CHECK-NEXT: [[COPY4:%[0-9]+]]:fpr32 = COPY $s0
165     ; CHECK-NEXT: nofpexcept FCMPSrr [[COPY4]], [[COPY4]], implicit-def $nzcv, implicit $fpcr
166     ; CHECK-NEXT: [[CSINCWr3:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 15, implicit $nzcv
167     ; CHECK-NEXT: [[COPY5:%[0-9]+]]:gpr32all = COPY [[CSINCWr3]]
168     ; CHECK-NEXT: $w0 = COPY [[COPY5]]
169     ; CHECK-NEXT: [[COPY6:%[0-9]+]]:fpr64 = COPY $d0
170     ; CHECK-NEXT: nofpexcept FCMPDrr [[COPY6]], [[COPY6]], implicit-def $nzcv, implicit $fpcr
171     ; CHECK-NEXT: [[CSINCWr4:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 14, implicit $nzcv
172     ; CHECK-NEXT: [[COPY7:%[0-9]+]]:gpr32all = COPY [[CSINCWr4]]
173     ; CHECK-NEXT: $w0 = COPY [[COPY7]]
174     %0:fpr(s32) = COPY $s0
175     %1:gpr(s32) = G_FCMP floatpred(one), %0, %0
176     %2:gpr(s8) = G_TRUNC %1(s32)
177     %3:gpr(s32) = G_ANYEXT %2
178     $w0 = COPY %3(s32)
180     %4:fpr(s64) = COPY $d0
181     %5:gpr(s32) = G_FCMP floatpred(uge), %4, %4
182     %6:gpr(s8) = G_TRUNC %5(s32)
183     %7:gpr(s32) = G_ANYEXT %6
184     $w0 = COPY %7(s32)
186     %8:fpr(s32) = COPY $s0
187     %9:gpr(s32) = G_FCMP floatpred(true), %8, %8
188     %10:gpr(s8) = G_TRUNC %9(s32)
189     %11:gpr(s32) = G_ANYEXT %10
190     $w0 = COPY %11(s32)
192     %12:fpr(s64) = COPY $d0
193     %13:gpr(s32) = G_FCMP floatpred(false), %12, %12
194     %14:gpr(s8) = G_TRUNC %13(s32)
195     %15:gpr(s32) = G_ANYEXT %14
196     $w0 = COPY %15(s32)
201 name:            phi
202 legalized:       true
203 regBankSelected: true
204 tracksRegLiveness: true
205 body:             |
206   ; CHECK-LABEL: name: phi
207   ; CHECK: bb.0:
208   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
209   ; CHECK-NEXT:   liveins: $s0, $w0
210   ; CHECK-NEXT: {{  $}}
211   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:fpr32 = COPY $s0
212   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32 = COPY $w0
213   ; CHECK-NEXT: {{  $}}
214   ; CHECK-NEXT: bb.1:
215   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
216   ; CHECK-NEXT: {{  $}}
217   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:fpr32 = PHI [[COPY]], %bb.0, [[PHI]], %bb.1
218   ; CHECK-NEXT:   TBNZW [[COPY1]], 0, %bb.1
219   ; CHECK-NEXT: {{  $}}
220   ; CHECK-NEXT: bb.2:
221   ; CHECK-NEXT:   $s0 = COPY [[PHI]]
222   ; CHECK-NEXT:   RET_ReallyLR implicit $s0
223   bb.0:
224     liveins: $s0, $w0
225     successors: %bb.1
226     %0:fpr(s32) = COPY $s0
227     %3:gpr(s32) = COPY $w0
229   bb.1:
230     successors: %bb.1, %bb.2
231     %2:fpr(s32) = PHI %0, %bb.0, %2, %bb.1
232     G_BRCOND %3, %bb.1
234   bb.2:
235     $s0 = COPY %2
236     RET_ReallyLR implicit $s0
240 name:            select
241 legalized:       true
242 regBankSelected: true
243 tracksRegLiveness: true
244 body:             |
245   bb.0:
246     liveins: $w0, $w1, $w2
247     ; CHECK-LABEL: name: select
248     ; CHECK: liveins: $w0, $w1, $w2
249     ; CHECK-NEXT: {{  $}}
250     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
251     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
252     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr32 = COPY $w2
253     ; CHECK-NEXT: [[ANDSWri:%[0-9]+]]:gpr32 = ANDSWri [[COPY]], 0, implicit-def $nzcv
254     ; CHECK-NEXT: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[COPY1]], [[COPY2]], 1, implicit $nzcv
255     ; CHECK-NEXT: $w0 = COPY [[CSELWr]]
256     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr64 = COPY $x0
257     ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr64 = COPY $x1
258     ; CHECK-NEXT: [[ANDSWri1:%[0-9]+]]:gpr32 = ANDSWri [[COPY]], 0, implicit-def $nzcv
259     ; CHECK-NEXT: [[CSELXr:%[0-9]+]]:gpr64 = CSELXr [[COPY3]], [[COPY4]], 1, implicit $nzcv
260     ; CHECK-NEXT: $x0 = COPY [[CSELXr]]
261     ; CHECK-NEXT: [[COPY5:%[0-9]+]]:gpr64 = COPY $x0
262     ; CHECK-NEXT: [[COPY6:%[0-9]+]]:gpr64 = COPY $x1
263     ; CHECK-NEXT: [[ANDSWri2:%[0-9]+]]:gpr32 = ANDSWri [[COPY]], 0, implicit-def $nzcv
264     ; CHECK-NEXT: [[CSELXr1:%[0-9]+]]:gpr64 = CSELXr [[COPY5]], [[COPY6]], 1, implicit $nzcv
265     ; CHECK-NEXT: $x0 = COPY [[CSELXr1]]
266     %10:gpr(s32) = COPY $w0
268     %1:gpr(s32) = COPY $w1
269     %2:gpr(s32) = COPY $w2
270     %3:gpr(s32) = G_SELECT %10, %1, %2
271     $w0 = COPY %3(s32)
273     %4:gpr(s64) = COPY $x0
274     %5:gpr(s64) = COPY $x1
275     %6:gpr(s64) = G_SELECT %10, %4, %5
276     $x0 = COPY %6(s64)
278     %7:gpr(p0) = COPY $x0
279     %8:gpr(p0) = COPY $x1
280     %9:gpr(p0) = G_SELECT %10, %7, %8
281     $x0 = COPY %9(p0)