[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / regbank-select.mir
blobe700c834a93cde0a7531f881a2e876ddd8cc3bc9
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64-apple-darwin -run-pass=regbankselect -verify-machineinstrs %s -o - | FileCheck %s
4 ...
5 ---
6 name:            select_f32
7 alignment:       4
8 legalized:       true
9 tracksRegLiveness: true
10 machineFunctionInfo: {}
11 body:             |
12   bb.0:
13     liveins: $s0, $s1, $w0
15     ; CHECK-LABEL: name: select_f32
16     ; CHECK: liveins: $s0, $s1, $w0
17     ; CHECK-NEXT: {{  $}}
18     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
19     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr(s32) = COPY $s0
20     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:fpr(s32) = COPY $s1
21     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:fpr(s32) = G_SELECT [[COPY]](s32), [[COPY1]], [[COPY2]]
22     ; CHECK-NEXT: $s0 = COPY [[SELECT]](s32)
23     ; CHECK-NEXT: RET_ReallyLR implicit $s0
24     %3:_(s32) = COPY $w0
25     %1:_(s32) = COPY $s0
26     %2:_(s32) = COPY $s1
27     %4:_(s32) = G_SELECT %3, %1, %2
28     $s0 = COPY %4(s32)
29     RET_ReallyLR implicit $s0
31 ...
32 ---
33 name:            select_f64
34 alignment:       4
35 legalized:       true
36 tracksRegLiveness: true
37 machineFunctionInfo: {}
38 body:             |
39   bb.0:
40     liveins: $d0, $d1, $w0
42     ; CHECK-LABEL: name: select_f64
43     ; CHECK: liveins: $d0, $d1, $w0
44     ; CHECK-NEXT: {{  $}}
45     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
46     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr(s64) = COPY $d0
47     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:fpr(s64) = COPY $d1
48     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:fpr(s64) = G_SELECT [[COPY]](s32), [[COPY1]], [[COPY2]]
49     ; CHECK-NEXT: $d0 = COPY [[SELECT]](s64)
50     ; CHECK-NEXT: RET_ReallyLR implicit $d0
51     %3:_(s32) = COPY $w0
52     %1:_(s64) = COPY $d0
53     %2:_(s64) = COPY $d1
54     %4:_(s64) = G_SELECT %3, %1, %2
55     $d0 = COPY %4(s64)
56     RET_ReallyLR implicit $d0
58 ...
59 ---
60 name:            two_fpr_inputs_gpr_output
61 alignment:       4
62 legalized:       true
63 tracksRegLiveness: true
64 machineFunctionInfo: {}
65 body:             |
66   bb.0:
67     liveins: $d0, $d1, $w0
69     ; Verify that the G_SELECT only has FPRs.
70     ; The only difference between fcsel and csel are the register banks. So,
71     ; if we have two FPR inputs and a GPR output, we should do a floating point
72     ; select anyway. This will cost one copy for the output, but that's less
73     ; than doing two to put the inputs on GPRs.
75     ; CHECK-LABEL: name: two_fpr_inputs_gpr_output
76     ; CHECK: liveins: $d0, $d1, $w0
77     ; CHECK-NEXT: {{  $}}
78     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
79     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr(s64) = COPY $d0
80     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:fpr(s64) = COPY $d1
81     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:fpr(s64) = G_SELECT [[COPY]](s32), [[COPY1]], [[COPY2]]
82     ; CHECK-NEXT: $x0 = COPY [[SELECT]](s64)
83     ; CHECK-NEXT: RET_ReallyLR implicit $x0
84     %3:_(s32) = COPY $w0
85     %1:_(s64) = COPY $d0
86     %2:_(s64) = COPY $d1
87     %4:_(s64) = G_SELECT %3, %1, %2
88     $x0 = COPY %4(s64)
89     RET_ReallyLR implicit $x0
91 ...
92 ---
93 name:            one_fpr_input_fpr_output
94 alignment:       4
95 legalized:       true
96 tracksRegLiveness: true
97 machineFunctionInfo: {}
98 body:             |
99   bb.0:
100     liveins: $d0, $x1, $w0
102     ; Same idea as the above test. If the output is an FPR, and one of the
103     ; inputs is an FPR, then it's fewer copies to just do a FCSEL.
105     ; CHECK-LABEL: name: one_fpr_input_fpr_output
106     ; CHECK: liveins: $d0, $x1, $w0
107     ; CHECK-NEXT: {{  $}}
108     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
109     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr(s64) = COPY $d0
110     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr(s64) = COPY $x1
111     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:fpr(s64) = COPY [[COPY2]](s64)
112     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:fpr(s64) = G_SELECT [[COPY]](s32), [[COPY1]], [[COPY3]]
113     ; CHECK-NEXT: $d0 = COPY [[SELECT]](s64)
114     ; CHECK-NEXT: RET_ReallyLR implicit $d0
115     %3:_(s32) = COPY $w0
116     %1:_(s64) = COPY $d0
117     %2:_(s64) = COPY $x1
118     %4:_(s64) = G_SELECT %3, %1, %2
119     $d0 = COPY %4(s64)
120     RET_ReallyLR implicit $d0
124 name:            one_fpr_input_gpr_output
125 alignment:       4
126 legalized:       true
127 tracksRegLiveness: true
128 machineFunctionInfo: {}
129 body:             |
130   bb.0:
131     liveins: $d0, $x1, $w0
133     ; Now we have more GPR registers on the G_SELECT. It's cheaper here to put
134     ; everything on GPR.
136     ; CHECK-LABEL: name: one_fpr_input_gpr_output
137     ; CHECK: liveins: $d0, $x1, $w0
138     ; CHECK-NEXT: {{  $}}
139     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
140     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr(s64) = COPY $d0
141     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr(s64) = COPY $x1
142     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr(s64) = COPY [[COPY1]](s64)
143     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:gpr(s64) = G_SELECT [[COPY]](s32), [[COPY3]], [[COPY2]]
144     ; CHECK-NEXT: $x0 = COPY [[SELECT]](s64)
145     ; CHECK-NEXT: RET_ReallyLR implicit $x0
146     %3:_(s32) = COPY $w0
147     %1:_(s64) = COPY $d0
148     %2:_(s64) = COPY $x1
149     %4:_(s64) = G_SELECT %3, %1, %2
150     $x0 = COPY %4(s64)
151     RET_ReallyLR implicit $x0
155 name:            two_gpr_input_fpr_output
156 alignment:       4
157 legalized:       true
158 tracksRegLiveness: true
159 machineFunctionInfo: {}
160 body:             |
161   bb.0:
162     liveins: $x0, $x1, $w0
164     ; Same as above. The G_SELECT should get all GPRS.
166     ; CHECK-LABEL: name: two_gpr_input_fpr_output
167     ; CHECK: liveins: $x0, $x1, $w0
168     ; CHECK-NEXT: {{  $}}
169     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
170     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr(s64) = COPY $x0
171     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr(s64) = COPY $x1
172     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:gpr(s64) = G_SELECT [[COPY]](s32), [[COPY1]], [[COPY2]]
173     ; CHECK-NEXT: $d0 = COPY [[SELECT]](s64)
174     ; CHECK-NEXT: RET_ReallyLR implicit $d0
175     %3:_(s32) = COPY $w0
176     %1:_(s64) = COPY $x0
177     %2:_(s64) = COPY $x1
178     %4:_(s64) = G_SELECT %3, %1, %2
179     $d0 = COPY %4(s64)
180     RET_ReallyLR implicit $d0