[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-intrinsic-min-max.mir
blob3ad54ba3f17fb50b3033a04aef41a3ea9f453291
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN:llc %s -verify-machineinstrs -mtriple=aarch64-unknown-unknown -run-pass=legalizer -global-isel-abort=1 -o - | FileCheck %s
4 ---
5 name:            smin_s32
6 alignment:       4
7 tracksRegLiveness: true
8 liveins:
9   - { reg: '$w0' }
10   - { reg: '$w1' }
11 body:             |
12   bb.1:
13     liveins: $w0, $w1
15     ; CHECK-LABEL: name: smin_s32
16     ; CHECK: liveins: $w0, $w1
17     ; CHECK-NEXT: {{  $}}
18     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
19     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
20     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(slt), [[COPY]](s32), [[COPY1]]
21     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
22     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C]]
23     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[COPY]], [[COPY1]]
24     ; CHECK-NEXT: $w0 = COPY [[SELECT]](s32)
25     ; CHECK-NEXT: RET_ReallyLR implicit $w0
26     %0:_(s32) = COPY $w0
27     %1:_(s32) = COPY $w1
28     %2:_(s32) = G_SMIN %0, %1
29     $w0 = COPY %2(s32)
30     RET_ReallyLR implicit $w0
32 ...
33 ---
34 name:            smin_s64
35 alignment:       4
36 tracksRegLiveness: true
37 liveins:
38   - { reg: '$x0' }
39   - { reg: '$x1' }
40 body:             |
41   bb.1:
42     liveins: $x0, $x1
44     ; CHECK-LABEL: name: smin_s64
45     ; CHECK: liveins: $x0, $x1
46     ; CHECK-NEXT: {{  $}}
47     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
48     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
49     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(slt), [[COPY]](s64), [[COPY1]]
50     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
51     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C]]
52     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[AND]](s32), [[COPY]], [[COPY1]]
53     ; CHECK-NEXT: $x0 = COPY [[SELECT]](s64)
54     ; CHECK-NEXT: RET_ReallyLR implicit $x0
55     %0:_(s64) = COPY $x0
56     %1:_(s64) = COPY $x1
57     %2:_(s64) = G_SMIN %0, %1
58     $x0 = COPY %2(s64)
59     RET_ReallyLR implicit $x0
61 ...
62 ---
63 name:            smax_s32
64 alignment:       4
65 tracksRegLiveness: true
66 liveins:
67   - { reg: '$w0' }
68   - { reg: '$w1' }
69 body:             |
70   bb.1:
71     liveins: $w0, $w1
73     ; CHECK-LABEL: name: smax_s32
74     ; CHECK: liveins: $w0, $w1
75     ; CHECK-NEXT: {{  $}}
76     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
77     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
78     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(sgt), [[COPY]](s32), [[COPY1]]
79     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
80     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C]]
81     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[COPY]], [[COPY1]]
82     ; CHECK-NEXT: $w0 = COPY [[SELECT]](s32)
83     ; CHECK-NEXT: RET_ReallyLR implicit $w0
84     %0:_(s32) = COPY $w0
85     %1:_(s32) = COPY $w1
86     %2:_(s32) = G_SMAX %0, %1
87     $w0 = COPY %2(s32)
88     RET_ReallyLR implicit $w0
90 ...
91 ---
92 name:            smax_s64
93 alignment:       4
94 tracksRegLiveness: true
95 liveins:
96   - { reg: '$x0' }
97   - { reg: '$x1' }
98 body:             |
99   bb.1:
100     liveins: $x0, $x1
102     ; CHECK-LABEL: name: smax_s64
103     ; CHECK: liveins: $x0, $x1
104     ; CHECK-NEXT: {{  $}}
105     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
106     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
107     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(sgt), [[COPY]](s64), [[COPY1]]
108     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
109     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C]]
110     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[AND]](s32), [[COPY]], [[COPY1]]
111     ; CHECK-NEXT: $x0 = COPY [[SELECT]](s64)
112     ; CHECK-NEXT: RET_ReallyLR implicit $x0
113     %0:_(s64) = COPY $x0
114     %1:_(s64) = COPY $x1
115     %2:_(s64) = G_SMAX %0, %1
116     $x0 = COPY %2(s64)
117     RET_ReallyLR implicit $x0
123 name:            umin_s32
124 alignment:       4
125 tracksRegLiveness: true
126 liveins:
127   - { reg: '$w0' }
128   - { reg: '$w1' }
129 body:             |
130   bb.1:
131     liveins: $w0, $w1
133     ; CHECK-LABEL: name: umin_s32
134     ; CHECK: liveins: $w0, $w1
135     ; CHECK-NEXT: {{  $}}
136     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
137     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
138     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY]](s32), [[COPY1]]
139     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
140     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C]]
141     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[COPY]], [[COPY1]]
142     ; CHECK-NEXT: $w0 = COPY [[SELECT]](s32)
143     ; CHECK-NEXT: RET_ReallyLR implicit $w0
144     %0:_(s32) = COPY $w0
145     %1:_(s32) = COPY $w1
146     %2:_(s32) = G_UMIN %0, %1
147     $w0 = COPY %2(s32)
148     RET_ReallyLR implicit $w0
152 name:            umin_s64
153 alignment:       4
154 tracksRegLiveness: true
155 liveins:
156   - { reg: '$x0' }
157   - { reg: '$x1' }
158 body:             |
159   bb.1:
160     liveins: $x0, $x1
162     ; CHECK-LABEL: name: umin_s64
163     ; CHECK: liveins: $x0, $x1
164     ; CHECK-NEXT: {{  $}}
165     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
166     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
167     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY]](s64), [[COPY1]]
168     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
169     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C]]
170     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[AND]](s32), [[COPY]], [[COPY1]]
171     ; CHECK-NEXT: $x0 = COPY [[SELECT]](s64)
172     ; CHECK-NEXT: RET_ReallyLR implicit $x0
173     %0:_(s64) = COPY $x0
174     %1:_(s64) = COPY $x1
175     %2:_(s64) = G_UMIN %0, %1
176     $x0 = COPY %2(s64)
177     RET_ReallyLR implicit $x0
181 name:            umax_s32
182 alignment:       4
183 tracksRegLiveness: true
184 liveins:
185   - { reg: '$w0' }
186   - { reg: '$w1' }
187 body:             |
188   bb.1:
189     liveins: $w0, $w1
191     ; CHECK-LABEL: name: umax_s32
192     ; CHECK: liveins: $w0, $w1
193     ; CHECK-NEXT: {{  $}}
194     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
195     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
196     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[COPY1]]
197     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
198     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C]]
199     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[COPY]], [[COPY1]]
200     ; CHECK-NEXT: $w0 = COPY [[SELECT]](s32)
201     ; CHECK-NEXT: RET_ReallyLR implicit $w0
202     %0:_(s32) = COPY $w0
203     %1:_(s32) = COPY $w1
204     %2:_(s32) = G_UMAX %0, %1
205     $w0 = COPY %2(s32)
206     RET_ReallyLR implicit $w0
210 name:            umax_s64
211 alignment:       4
212 tracksRegLiveness: true
213 liveins:
214   - { reg: '$x0' }
215   - { reg: '$x1' }
216 body:             |
217   bb.1:
218     liveins: $x0, $x1
220     ; CHECK-LABEL: name: umax_s64
221     ; CHECK: liveins: $x0, $x1
222     ; CHECK-NEXT: {{  $}}
223     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
224     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
225     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s64), [[COPY1]]
226     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
227     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C]]
228     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[AND]](s32), [[COPY]], [[COPY1]]
229     ; CHECK-NEXT: $x0 = COPY [[SELECT]](s64)
230     ; CHECK-NEXT: RET_ReallyLR implicit $x0
231     %0:_(s64) = COPY $x0
232     %1:_(s64) = COPY $x1
233     %2:_(s64) = G_UMAX %0, %1
234     $x0 = COPY %2(s64)
235     RET_ReallyLR implicit $x0