950 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs -mtriple aarch64-unknown-unknown %s -o - | FileCheck %s3# RUN: llc -debugify-and-strip-all-safe -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs -mtriple aarch64-unknown-unknown %s -o - | FileCheck %s4# REQUIRES: asserts5 6---7# select (c, x, x) -> x8name: test_combine_select_same_res9body: |10 bb.1:11 liveins: $x0, $x112 ; CHECK-LABEL: name: test_combine_select_same_res13 ; CHECK: liveins: $x0, $x114 ; CHECK-NEXT: {{ $}}15 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x016 ; CHECK-NEXT: $x0 = COPY [[COPY]](s64)17 %0:_(s64) = COPY $x018 %1:_(s1) = G_TRUNC %019 %2:_(s64) = G_SELECT %1, %0, %020 $x0 = COPY %2(s64)21...22---23# select (undef, x, y) -> y24name: test_combine_select_undef_res0_res125body: |26 bb.1:27 liveins: $x0, $x128 ; CHECK-LABEL: name: test_combine_select_undef_res0_res129 ; CHECK: liveins: $x0, $x130 ; CHECK-NEXT: {{ $}}31 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x132 ; CHECK-NEXT: $x0 = COPY [[COPY]](s64)33 %0:_(s64) = COPY $x034 %1:_(s64) = COPY $x135 %2:_(s1) = G_IMPLICIT_DEF36 %3:_(s64) = G_SELECT %2, %0, %137 $x0 = COPY %3(s64)38...39---40# select (false, x, y) -> y41name: test_combine_select_false_res0_res142body: |43 bb.1:44 liveins: $x0, $x145 ; CHECK-LABEL: name: test_combine_select_false_res0_res146 ; CHECK: liveins: $x0, $x147 ; CHECK-NEXT: {{ $}}48 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x149 ; CHECK-NEXT: $x0 = COPY [[COPY]](s64)50 %0:_(s64) = COPY $x051 %1:_(s64) = COPY $x152 %2:_(s1) = G_CONSTANT i1 false53 %3:_(s64) = G_SELECT %2, %0, %154 $x0 = COPY %3(s64)55...56---57# vector select (false, x, y) -> y58name: test_combine_vector_select_false_res0_res159body: |60 bb.1:61 liveins: $q0, $q162 ; CHECK-LABEL: name: test_combine_vector_select_false_res0_res163 ; CHECK: liveins: $q0, $q164 ; CHECK-NEXT: {{ $}}65 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q166 ; CHECK-NEXT: $q0 = COPY [[COPY]](<4 x s32>)67 %0:_(<4 x s32>) = COPY $q068 %1:_(<4 x s32>) = COPY $q169 %2:_(s1) = G_CONSTANT i1 false70 %condvec:_(<4 x s1>) = G_BUILD_VECTOR %2, %2, %2, %271 %3:_(<4 x s32>) = G_SELECT %condvec, %0, %172 $q0 = COPY %3(<4 x s32>)73...74---75# select (true, x, y) -> x76name: test_combine_select_true_res0_res177body: |78 bb.1:79 liveins: $x0, $x180 ; CHECK-LABEL: name: test_combine_select_true_res0_res181 ; CHECK: liveins: $x0, $x182 ; CHECK-NEXT: {{ $}}83 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x084 ; CHECK-NEXT: $x0 = COPY [[COPY]](s64)85 %0:_(s64) = COPY $x086 %1:_(s64) = COPY $x187 %2:_(s1) = G_CONSTANT i1 true88 %3:_(s64) = G_SELECT %2, %0, %189 $x0 = COPY %3(s64)90...91---92# vector select (true, x, y) -> x93name: test_combine_vector_select_true_res0_res194body: |95 bb.1:96 liveins: $q0, $q197 ; CHECK-LABEL: name: test_combine_vector_select_true_res0_res198 ; CHECK: liveins: $q0, $q199 ; CHECK-NEXT: {{ $}}100 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0101 ; CHECK-NEXT: $q0 = COPY [[COPY]](<4 x s32>)102 %0:_(<4 x s32>) = COPY $q0103 %1:_(<4 x s32>) = COPY $q1104 %2:_(s1) = G_CONSTANT i1 true105 %condvec:_(<4 x s1>) = G_BUILD_VECTOR %2, %2, %2, %2106 %3:_(<4 x s32>) = G_SELECT %condvec, %0, %1107 $q0 = COPY %3(<4 x s32>)108...109---110# select Cond, Cond, F --> or Cond, F111name: bool_cond_cond_false112body: |113 bb.1:114 liveins: $x0, $x1, $x2115 ; CHECK-LABEL: name: bool_cond_cond_false116 ; CHECK: liveins: $x0, $x1, $x2117 ; CHECK-NEXT: {{ $}}118 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0119 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x2120 ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s64) = G_FREEZE [[COPY1]]121 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[COPY]], [[FREEZE]]122 ; CHECK-NEXT: %sel:_(s1) = G_TRUNC [[OR]](s64)123 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s1)124 ; CHECK-NEXT: $w0 = COPY %ext(s32)125 %0:_(s64) = COPY $x0126 %1:_(s64) = COPY $x1127 %2:_(s64) = COPY $x2128 %c:_(s1) = G_TRUNC %0129 %t:_(s1) = G_TRUNC %1130 %f:_(s1) = G_TRUNC %2131 %sel:_(s1) = G_SELECT %c, %c, %f132 %ext:_(s32) = G_ANYEXT %sel133 $w0 = COPY %ext(s32)134...135---136# select Cond, 1, F --> or Cond, F137name: bool_cond_one_false138body: |139 bb.1:140 liveins: $x0, $x1, $x2141 ; CHECK-LABEL: name: bool_cond_one_false142 ; CHECK: liveins: $x0, $x1, $x2143 ; CHECK-NEXT: {{ $}}144 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0145 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x2146 ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s64) = G_FREEZE [[COPY1]]147 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[COPY]], [[FREEZE]]148 ; CHECK-NEXT: %sel:_(s1) = G_TRUNC [[OR]](s64)149 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s1)150 ; CHECK-NEXT: $w0 = COPY %ext(s32)151 %0:_(s64) = COPY $x0152 %1:_(s64) = COPY $x1153 %2:_(s64) = COPY $x2154 %c:_(s1) = G_TRUNC %0155 %t:_(s1) = G_TRUNC %1156 %f:_(s1) = G_TRUNC %2157 %one:_(s1) = G_CONSTANT i1 1158 %sel:_(s1) = G_SELECT %c, %one, %f159 %ext:_(s32) = G_ANYEXT %sel160 $w0 = COPY %ext(s32)161...162---163# select Cond, 1, F --> or Cond, F164name: bool_cond_one_false_vector165body: |166 bb.1:167 liveins: $d0, $d1, $d2168 ; CHECK-LABEL: name: bool_cond_one_false_vector169 ; CHECK: liveins: $d0, $d1, $d2170 ; CHECK-NEXT: {{ $}}171 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0172 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d2173 ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<2 x s32>) = G_FREEZE [[COPY1]]174 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s32>) = G_OR [[COPY]], [[FREEZE]]175 ; CHECK-NEXT: $d0 = COPY [[OR]](<2 x s32>)176 %0:_(<2 x s32>) = COPY $d0177 %1:_(<2 x s32>) = COPY $d1178 %2:_(<2 x s32>) = COPY $d2179 %c:_(<2 x s1>) = G_TRUNC %0180 %t:_(<2 x s1>) = G_TRUNC %1181 %f:_(<2 x s1>) = G_TRUNC %2182 %one:_(s1) = G_CONSTANT i1 1183 %one_vec:_(<2 x s1>) = G_BUILD_VECTOR %one, %one184 %sel:_(<2 x s1>) = G_SELECT %c, %one_vec, %f185 %ext:_(<2 x s32>) = G_ANYEXT %sel186 $d0 = COPY %ext(<2 x s32>)187...188---189# select Cond, T, Cond --> and Cond, T190name: bool_cond_true_cond191body: |192 bb.1:193 liveins: $x0, $x1, $x2194 ; CHECK-LABEL: name: bool_cond_true_cond195 ; CHECK: liveins: $x0, $x1, $x2196 ; CHECK-NEXT: {{ $}}197 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0198 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1199 ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s64) = G_FREEZE [[COPY1]]200 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[FREEZE]]201 ; CHECK-NEXT: %sel:_(s1) = G_TRUNC [[AND]](s64)202 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s1)203 ; CHECK-NEXT: $w0 = COPY %ext(s32)204 %0:_(s64) = COPY $x0205 %1:_(s64) = COPY $x1206 %2:_(s64) = COPY $x2207 %c:_(s1) = G_TRUNC %0208 %t:_(s1) = G_TRUNC %1209 %f:_(s1) = G_TRUNC %2210 %one:_(s1) = G_CONSTANT i1 1211 %sel:_(s1) = G_SELECT %c, %t, %c212 %ext:_(s32) = G_ANYEXT %sel213 $w0 = COPY %ext(s32)214...215---216# select Cond, T, 0 --> and Cond, T217name: bool_cond_true_zero218body: |219 bb.1:220 liveins: $x0, $x1, $x2221 ; CHECK-LABEL: name: bool_cond_true_zero222 ; CHECK: liveins: $x0, $x1, $x2223 ; CHECK-NEXT: {{ $}}224 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0225 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1226 ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s64) = G_FREEZE [[COPY1]]227 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[FREEZE]]228 ; CHECK-NEXT: %sel:_(s1) = G_TRUNC [[AND]](s64)229 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s1)230 ; CHECK-NEXT: $w0 = COPY %ext(s32)231 %0:_(s64) = COPY $x0232 %1:_(s64) = COPY $x1233 %2:_(s64) = COPY $x2234 %c:_(s1) = G_TRUNC %0235 %t:_(s1) = G_TRUNC %1236 %f:_(s1) = G_TRUNC %2237 %zero:_(s1) = G_CONSTANT i1 0238 %sel:_(s1) = G_SELECT %c, %t, %zero239 %ext:_(s32) = G_ANYEXT %sel240 $w0 = COPY %ext(s32)241...242---243# select Cond, T, 1 --> or (not Cond), T244name: bool_cond_true_one245body: |246 bb.1:247 liveins: $x0, $x1, $x2248 ; CHECK-LABEL: name: bool_cond_true_one249 ; CHECK: liveins: $x0, $x1, $x2250 ; CHECK-NEXT: {{ $}}251 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0252 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1253 ; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)254 ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s64) = G_FREEZE [[COPY1]]255 ; CHECK-NEXT: %t:_(s1) = G_TRUNC [[FREEZE]](s64)256 ; CHECK-NEXT: %one:_(s1) = G_CONSTANT i1 true257 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s1) = G_XOR %c, %one258 ; CHECK-NEXT: %sel:_(s1) = G_OR [[XOR]], %t259 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s1)260 ; CHECK-NEXT: $w0 = COPY %ext(s32)261 %0:_(s64) = COPY $x0262 %1:_(s64) = COPY $x1263 %2:_(s64) = COPY $x2264 %c:_(s1) = G_TRUNC %0265 %t:_(s1) = G_TRUNC %1266 %f:_(s1) = G_TRUNC %2267 %one:_(s1) = G_CONSTANT i1 1268 %sel:_(s1) = G_SELECT %c, %t, %one269 %ext:_(s32) = G_ANYEXT %sel270 $w0 = COPY %ext(s32)271...272---273# select Cond, 0, F --> and (not Cond), F274name: bool_cond_zero_false275body: |276 bb.1:277 liveins: $x0, $x1, $x2278 ; CHECK-LABEL: name: bool_cond_zero_false279 ; CHECK: liveins: $x0, $x1, $x2280 ; CHECK-NEXT: {{ $}}281 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0282 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x2283 ; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)284 ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s64) = G_FREEZE [[COPY1]]285 ; CHECK-NEXT: %f:_(s1) = G_TRUNC [[FREEZE]](s64)286 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true287 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s1) = G_XOR %c, [[C]]288 ; CHECK-NEXT: %sel:_(s1) = G_AND [[XOR]], %f289 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s1)290 ; CHECK-NEXT: $w0 = COPY %ext(s32)291 %0:_(s64) = COPY $x0292 %1:_(s64) = COPY $x1293 %2:_(s64) = COPY $x2294 %c:_(s1) = G_TRUNC %0295 %t:_(s1) = G_TRUNC %1296 %f:_(s1) = G_TRUNC %2297 %zero:_(s1) = G_CONSTANT i1 0298 %sel:_(s1) = G_SELECT %c, %zero, %f299 %ext:_(s32) = G_ANYEXT %sel300 $w0 = COPY %ext(s32)301...302---303# select cond, 1, 0 --> zext(Cond)304name: select_cond_1_0_to_zext_cond305body: |306 bb.1:307 liveins: $x0, $x1, $x2308 ; CHECK-LABEL: name: select_cond_1_0_to_zext_cond309 ; CHECK: liveins: $x0, $x1, $x2310 ; CHECK-NEXT: {{ $}}311 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0312 ; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)313 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %c(s1)314 ; CHECK-NEXT: $w0 = COPY %ext(s32)315 %0:_(s64) = COPY $x0316 %1:_(s64) = COPY $x1317 %2:_(s64) = COPY $x2318 %c:_(s1) = G_TRUNC %0319 %t:_(s1) = G_TRUNC %1320 %f:_(s1) = G_TRUNC %2321 %zero:_(s1) = G_CONSTANT i1 0322 %one:_(s1) = G_CONSTANT i1 1323 %sel:_(s1) = G_SELECT %c, %one, %zero324 %ext:_(s32) = G_ANYEXT %sel325 $w0 = COPY %ext(s32)326...327---328# select cond, 0, 1 --> zext(!Cond)329name: select_cond_0_1_to_sext_not_cond330body: |331 bb.1:332 liveins: $x0, $x1, $x2333 ; CHECK-LABEL: name: select_cond_0_1_to_sext_not_cond334 ; CHECK: liveins: $x0, $x1, $x2335 ; CHECK-NEXT: {{ $}}336 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0337 ; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)338 ; CHECK-NEXT: %one:_(s1) = G_CONSTANT i1 true339 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s1) = G_XOR %c, %one340 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT [[XOR]](s1)341 ; CHECK-NEXT: $w0 = COPY %ext(s32)342 %0:_(s64) = COPY $x0343 %1:_(s64) = COPY $x1344 %2:_(s64) = COPY $x2345 %c:_(s1) = G_TRUNC %0346 %t:_(s1) = G_TRUNC %1347 %f:_(s1) = G_TRUNC %2348 %zero:_(s1) = G_CONSTANT i1 0349 %one:_(s1) = G_CONSTANT i1 1350 %sel:_(s1) = G_SELECT %c, %zero, %one351 %ext:_(s32) = G_ANYEXT %sel352 $w0 = COPY %ext(s32)353...354---355# select cond, 2, 1 --> and (zext Cond), false356name: select_cond_2_1_to_and_zext_cond_false357body: |358 bb.1:359 liveins: $x0, $x1, $x2360 ; CHECK-LABEL: name: select_cond_2_1_to_and_zext_cond_false361 ; CHECK: liveins: $x0, $x1, $x2362 ; CHECK-NEXT: {{ $}}363 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0364 ; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)365 ; CHECK-NEXT: %one:_(s8) = G_CONSTANT i8 101366 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s8) = G_ZEXT %c(s1)367 ; CHECK-NEXT: %sel:_(s8) = G_ADD [[ZEXT]], %one368 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s8)369 ; CHECK-NEXT: $w0 = COPY %ext(s32)370 %0:_(s64) = COPY $x0371 %1:_(s64) = COPY $x1372 %2:_(s64) = COPY $x2373 %c:_(s1) = G_TRUNC %0374 %t:_(s1) = G_TRUNC %1375 %f:_(s1) = G_TRUNC %2376 %two:_(s8) = G_CONSTANT i8 102377 %one:_(s8) = G_CONSTANT i8 101378 %sel:_(s8) = G_SELECT %c, %two, %one379 %ext:_(s32) = G_ANYEXT %sel380 $w0 = COPY %ext(s32)381...382---383# select cond, 1, 2 --> and (ext Cond), false384name: select_cond_1_2_to_and_sext_cond_false385body: |386 bb.1:387 liveins: $x0, $x1, $x2388 ; CHECK-LABEL: name: select_cond_1_2_to_and_sext_cond_false389 ; CHECK: liveins: $x0, $x1, $x2390 ; CHECK-NEXT: {{ $}}391 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0392 ; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)393 ; CHECK-NEXT: %one:_(s8) = G_CONSTANT i8 102394 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s8) = G_SEXT %c(s1)395 ; CHECK-NEXT: %sel:_(s8) = G_ADD [[SEXT]], %one396 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s8)397 ; CHECK-NEXT: $w0 = COPY %ext(s32)398 %0:_(s64) = COPY $x0399 %1:_(s64) = COPY $x1400 %2:_(s64) = COPY $x2401 %c:_(s1) = G_TRUNC %0402 %t:_(s1) = G_TRUNC %1403 %f:_(s1) = G_TRUNC %2404 %two:_(s8) = G_CONSTANT i8 101405 %one:_(s8) = G_CONSTANT i8 102406 %sel:_(s8) = G_SELECT %c, %two, %one407 %ext:_(s32) = G_ANYEXT %sel408 $w0 = COPY %ext(s32)409...410---411# select cond, 64, 0 --> (zext Cond) << log2(Pow2)412name: select_cond_64_0_to_shift413body: |414 bb.1:415 liveins: $x0, $x1, $x2416 ; CHECK-LABEL: name: select_cond_64_0_to_shift417 ; CHECK: liveins: $x0, $x1, $x2418 ; CHECK-NEXT: {{ $}}419 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0420 ; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)421 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s8) = G_ZEXT %c(s1)422 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 6423 ; CHECK-NEXT: %sel:_(s8) = G_SHL [[ZEXT]], [[C]](s8)424 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s8)425 ; CHECK-NEXT: $w0 = COPY %ext(s32)426 %0:_(s64) = COPY $x0427 %1:_(s64) = COPY $x1428 %2:_(s64) = COPY $x2429 %c:_(s1) = G_TRUNC %0430 %t:_(s1) = G_TRUNC %1431 %f:_(s1) = G_TRUNC %2432 %two:_(s8) = G_CONSTANT i8 64433 %one:_(s8) = G_CONSTANT i8 0434 %sel:_(s8) = G_SELECT %c, %two, %one435 %ext:_(s32) = G_ANYEXT %sel436 $w0 = COPY %ext(s32)437...438---439# select cond, 0, 64 --> (zext (!Cond)) << log2(Pow2)440name: select_cond_0_64_to_shift441body: |442 bb.1:443 liveins: $x0, $x1, $x2444 ; CHECK-LABEL: name: select_cond_0_64_to_shift445 ; CHECK: liveins: $x0, $x1, $x2446 ; CHECK-NEXT: {{ $}}447 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0448 ; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)449 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true450 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s1) = G_XOR %c, [[C]]451 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s8) = G_ZEXT [[XOR]](s1)452 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s8) = G_CONSTANT i8 6453 ; CHECK-NEXT: %sel:_(s8) = G_SHL [[ZEXT]], [[C1]](s8)454 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s8)455 ; CHECK-NEXT: $w0 = COPY %ext(s32)456 %0:_(s64) = COPY $x0457 %1:_(s64) = COPY $x1458 %2:_(s64) = COPY $x2459 %c:_(s1) = G_TRUNC %0460 %t:_(s1) = G_TRUNC %1461 %f:_(s1) = G_TRUNC %2462 %two:_(s8) = G_CONSTANT i8 0463 %one:_(s8) = G_CONSTANT i8 64464 %sel:_(s8) = G_SELECT %c, %two, %one465 %ext:_(s32) = G_ANYEXT %sel466 $w0 = COPY %ext(s32)467...468---469# select cond, -1, 0 --> sext Cond470name: select_cond_minus_1_0_to_sext_cond471body: |472 bb.1:473 liveins: $x0, $x1, $x2474 ; CHECK-LABEL: name: select_cond_minus_1_0_to_sext_cond475 ; CHECK: liveins: $x0, $x1, $x2476 ; CHECK-NEXT: {{ $}}477 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0478 ; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)479 ; CHECK-NEXT: %ext:_(s32) = G_SEXT %c(s1)480 ; CHECK-NEXT: $w0 = COPY %ext(s32)481 %0:_(s64) = COPY $x0482 %1:_(s64) = COPY $x1483 %2:_(s64) = COPY $x2484 %c:_(s1) = G_TRUNC %0485 %t:_(s1) = G_TRUNC %1486 %f:_(s1) = G_TRUNC %2487 %two:_(s8) = G_CONSTANT i8 255488 %one:_(s8) = G_CONSTANT i8 0489 %sel:_(s8) = G_SELECT %c, %two, %one490 %ext:_(s32) = G_ANYEXT %sel491 $w0 = COPY %ext(s32)492...493---494# select cond, 0, -1 --> sext (!Cond)495name: select_cond_0_minus_1_to_sext_not_cond496body: |497 bb.1:498 liveins: $x0, $x1, $x2499 ; CHECK-LABEL: name: select_cond_0_minus_1_to_sext_not_cond500 ; CHECK: liveins: $x0, $x1, $x2501 ; CHECK-NEXT: {{ $}}502 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0503 ; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)504 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true505 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s1) = G_XOR %c, [[C]]506 ; CHECK-NEXT: %ext:_(s32) = G_SEXT [[XOR]](s1)507 ; CHECK-NEXT: $w0 = COPY %ext(s32)508 %0:_(s64) = COPY $x0509 %1:_(s64) = COPY $x1510 %2:_(s64) = COPY $x2511 %c:_(s1) = G_TRUNC %0512 %t:_(s1) = G_TRUNC %1513 %f:_(s1) = G_TRUNC %2514 %two:_(s8) = G_CONSTANT i8 0515 %one:_(s8) = G_CONSTANT i8 255516 %sel:_(s8) = G_SELECT %c, %two, %one517 %ext:_(s32) = G_ANYEXT %sel518 $w0 = COPY %ext(s32)519...520---521# select cond, -1, 101 --> or (sext Cond), 101522name: select_cond_minus_1_101_to_or_sext_cond_101523body: |524 bb.1:525 liveins: $x0, $x1, $x2526 ; CHECK-LABEL: name: select_cond_minus_1_101_to_or_sext_cond_101527 ; CHECK: liveins: $x0, $x1, $x2528 ; CHECK-NEXT: {{ $}}529 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0530 ; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)531 ; CHECK-NEXT: %one:_(s8) = G_CONSTANT i8 101532 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s8) = G_SEXT %c(s1)533 ; CHECK-NEXT: %sel:_(s8) = G_OR [[SEXT]], %one534 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s8)535 ; CHECK-NEXT: $w0 = COPY %ext(s32)536 %0:_(s64) = COPY $x0537 %1:_(s64) = COPY $x1538 %2:_(s64) = COPY $x2539 %c:_(s1) = G_TRUNC %0540 %t:_(s1) = G_TRUNC %1541 %f:_(s1) = G_TRUNC %2542 %two:_(s8) = G_CONSTANT i8 255543 %one:_(s8) = G_CONSTANT i8 101544 %sel:_(s8) = G_SELECT %c, %two, %one545 %ext:_(s32) = G_ANYEXT %sel546 $w0 = COPY %ext(s32)547...548---549# select cond, 101, -1 --> or (sext (not Cond), 101550name: select_cond_101_minus_1_to_or_sext_not_cond_101551body: |552 bb.1:553 liveins: $x0, $x1, $x2554 ; CHECK-LABEL: name: select_cond_101_minus_1_to_or_sext_not_cond_101555 ; CHECK: liveins: $x0, $x1, $x2556 ; CHECK-NEXT: {{ $}}557 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0558 ; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)559 ; CHECK-NEXT: %two:_(s8) = G_CONSTANT i8 101560 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true561 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s1) = G_XOR %c, [[C]]562 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s8) = G_SEXT [[XOR]](s1)563 ; CHECK-NEXT: %sel:_(s8) = G_OR [[SEXT]], %two564 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s8)565 ; CHECK-NEXT: $w0 = COPY %ext(s32)566 %0:_(s64) = COPY $x0567 %1:_(s64) = COPY $x1568 %2:_(s64) = COPY $x2569 %c:_(s1) = G_TRUNC %0570 %t:_(s1) = G_TRUNC %1571 %f:_(s1) = G_TRUNC %2572 %two:_(s8) = G_CONSTANT i8 101573 %one:_(s8) = G_CONSTANT i8 255574 %sel:_(s8) = G_SELECT %c, %two, %one575 %ext:_(s32) = G_ANYEXT %sel576 $w0 = COPY %ext(s32)577...578---579# select test(failed,registers) select icmp_ugt t,f_t_f --> umax(t,f)580name: select_failed_icmp_ugt_t_f_t_f_umax_t_f581body: |582 bb.1:583 liveins: $x0, $x1, $x2584 ; CHECK-LABEL: name: select_failed_icmp_ugt_t_f_t_f_umax_t_f585 ; CHECK: liveins: $x0, $x1, $x2586 ; CHECK-NEXT: {{ $}}587 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0588 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1589 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2590 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3591 ; CHECK-NEXT: %t:_(s8) = G_TRUNC [[COPY]](s64)592 ; CHECK-NEXT: %f:_(s8) = G_TRUNC [[COPY1]](s64)593 ; CHECK-NEXT: %y:_(s8) = G_TRUNC [[COPY2]](s64)594 ; CHECK-NEXT: %z:_(s8) = G_TRUNC [[COPY3]](s64)595 ; CHECK-NEXT: %c:_(s8) = G_ICMP intpred(ugt), %t(s8), %y596 ; CHECK-NEXT: %sel:_(s8) = exact G_SELECT %c(s8), %f, %z597 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s8)598 ; CHECK-NEXT: $w0 = COPY %ext(s32)599 %0:_(s64) = COPY $x0600 %1:_(s64) = COPY $x1601 %2:_(s64) = COPY $x2602 %3:_(s64) = COPY $x3603 %4:_(s64) = COPY $x4604 %t:_(s8) = G_TRUNC %0605 %f:_(s8) = G_TRUNC %1606 %y:_(s8) = G_TRUNC %2607 %z:_(s8) = G_TRUNC %3608 %c:_(s8) = G_ICMP intpred(ugt), %t(s8), %y(s8)609 %sel:_(s8) = exact G_SELECT %c, %f, %z610 %ext:_(s32) = G_ANYEXT %sel611 $w0 = COPY %ext(s32)612...613---614# test select icmp_ugt t,f_t_f --> umax(t,f)615name: select_icmp_ugt_t_f_t_f_umax_t_f616body: |617 bb.1:618 liveins: $x0, $x1, $x2619 ; CHECK-LABEL: name: select_icmp_ugt_t_f_t_f_umax_t_f620 ; CHECK: liveins: $x0, $x1, $x2621 ; CHECK-NEXT: {{ $}}622 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0623 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1624 ; CHECK-NEXT: %t1:_(s32) = G_TRUNC [[COPY]](s64)625 ; CHECK-NEXT: %f1:_(s32) = G_TRUNC [[COPY1]](s64)626 ; CHECK-NEXT: %t:_(<4 x s32>) = G_BUILD_VECTOR %t1(s32), %t1(s32), %t1(s32), %t1(s32)627 ; CHECK-NEXT: %f:_(<4 x s32>) = G_BUILD_VECTOR %f1(s32), %f1(s32), %f1(s32), %f1(s32)628 ; CHECK-NEXT: %sel:_(<4 x s32>) = G_UMAX %t, %f629 ; CHECK-NEXT: $q0 = COPY %sel(<4 x s32>)630 %0:_(s64) = COPY $x0631 %1:_(s64) = COPY $x1632 %t1:_(s32) = G_TRUNC %0633 %f1:_(s32) = G_TRUNC %1634 %t:_(<4 x s32>) = G_BUILD_VECTOR %t1, %t1, %t1, %t1635 %f:_(<4 x s32>) = G_BUILD_VECTOR %f1, %f1, %f1, %f1636 %c:_(<4 x s32>) = G_ICMP intpred(ugt), %t(<4 x s32>), %f(<4 x s32>)637 %sel:_(<4 x s32>) = exact G_SELECT %c, %t, %f638 $q0 = COPY %sel(<4 x s32>)639...640---641# test select icmp_uge t,f_t_f --> umax(t,f)642name: select_icmp_uge_t_f_t_f_umax_t_f643body: |644 bb.1:645 liveins: $x0, $x1, $x2646 ; CHECK-LABEL: name: select_icmp_uge_t_f_t_f_umax_t_f647 ; CHECK: liveins: $x0, $x1, $x2648 ; CHECK-NEXT: {{ $}}649 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0650 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1651 ; CHECK-NEXT: %t1:_(s32) = G_TRUNC [[COPY]](s64)652 ; CHECK-NEXT: %f1:_(s32) = G_TRUNC [[COPY1]](s64)653 ; CHECK-NEXT: %t:_(<4 x s32>) = G_BUILD_VECTOR %t1(s32), %t1(s32), %t1(s32), %t1(s32)654 ; CHECK-NEXT: %f:_(<4 x s32>) = G_BUILD_VECTOR %f1(s32), %f1(s32), %f1(s32), %f1(s32)655 ; CHECK-NEXT: %sel:_(<4 x s32>) = G_UMAX %t, %f656 ; CHECK-NEXT: $q0 = COPY %sel(<4 x s32>)657 %0:_(s64) = COPY $x0658 %1:_(s64) = COPY $x1659 %t1:_(s32) = G_TRUNC %0660 %f1:_(s32) = G_TRUNC %1661 %t:_(<4 x s32>) = G_BUILD_VECTOR %t1, %t1, %t1, %t1662 %f:_(<4 x s32>) = G_BUILD_VECTOR %f1, %f1, %f1, %f1663 %c:_(<4 x s32>) = G_ICMP intpred(uge), %t(<4 x s32>), %f(<4 x s32>)664 %sel:_(<4 x s32>) = exact G_SELECT %c, %t, %f665 $q0 = COPY %sel(<4 x s32>)666...667---668# test select icmp_sgt t,f_t_f --> smax(t,f)669name: select_icmp_sgt_t_f_t_f_smax_t_f670body: |671 bb.1:672 liveins: $x0, $x1, $x2673 ; CHECK-LABEL: name: select_icmp_sgt_t_f_t_f_smax_t_f674 ; CHECK: liveins: $x0, $x1, $x2675 ; CHECK-NEXT: {{ $}}676 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0677 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1678 ; CHECK-NEXT: %t1:_(s32) = G_TRUNC [[COPY]](s64)679 ; CHECK-NEXT: %f1:_(s32) = G_TRUNC [[COPY1]](s64)680 ; CHECK-NEXT: %t:_(<4 x s32>) = G_BUILD_VECTOR %t1(s32), %t1(s32), %t1(s32), %t1(s32)681 ; CHECK-NEXT: %f:_(<4 x s32>) = G_BUILD_VECTOR %f1(s32), %f1(s32), %f1(s32), %f1(s32)682 ; CHECK-NEXT: %sel:_(<4 x s32>) = G_SMAX %t, %f683 ; CHECK-NEXT: $q0 = COPY %sel(<4 x s32>)684 %0:_(s64) = COPY $x0685 %1:_(s64) = COPY $x1686 %t1:_(s32) = G_TRUNC %0687 %f1:_(s32) = G_TRUNC %1688 %t:_(<4 x s32>) = G_BUILD_VECTOR %t1, %t1, %t1, %t1689 %f:_(<4 x s32>) = G_BUILD_VECTOR %f1, %f1, %f1, %f1690 %c:_(<4 x s32>) = G_ICMP intpred(sgt), %t(<4 x s32>), %f(<4 x s32>)691 %sel:_(<4 x s32>) = exact G_SELECT %c, %t, %f692 $q0 = COPY %sel(<4 x s32>)693...694---695# test select icmp_sge t,f_t_f --> smax(t,f)696name: select_icmp_sge_t_f_t_f_smax_t_f697body: |698 bb.1:699 liveins: $x0, $x1, $x2700 ; CHECK-LABEL: name: select_icmp_sge_t_f_t_f_smax_t_f701 ; CHECK: liveins: $x0, $x1, $x2702 ; CHECK-NEXT: {{ $}}703 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0704 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1705 ; CHECK-NEXT: %t1:_(s32) = G_TRUNC [[COPY]](s64)706 ; CHECK-NEXT: %f1:_(s32) = G_TRUNC [[COPY1]](s64)707 ; CHECK-NEXT: %t:_(<4 x s32>) = G_BUILD_VECTOR %t1(s32), %t1(s32), %t1(s32), %t1(s32)708 ; CHECK-NEXT: %f:_(<4 x s32>) = G_BUILD_VECTOR %f1(s32), %f1(s32), %f1(s32), %f1(s32)709 ; CHECK-NEXT: %sel:_(<4 x s32>) = G_SMAX %t, %f710 ; CHECK-NEXT: $q0 = COPY %sel(<4 x s32>)711 %0:_(s64) = COPY $x0712 %1:_(s64) = COPY $x1713 %t1:_(s32) = G_TRUNC %0714 %f1:_(s32) = G_TRUNC %1715 %t:_(<4 x s32>) = G_BUILD_VECTOR %t1, %t1, %t1, %t1716 %f:_(<4 x s32>) = G_BUILD_VECTOR %f1, %f1, %f1, %f1717 %c:_(<4 x s32>) = G_ICMP intpred(sge), %t(<4 x s32>), %f(<4 x s32>)718 %sel:_(<4 x s32>) = exact G_SELECT %c, %t, %f719 $q0 = COPY %sel(<4 x s32>)720...721---722# test select icmp_ult t,f_t_f --> umin(t,f)723name: select_icmp_ult_t_f_t_f_umin_t_f724body: |725 bb.1:726 liveins: $x0, $x1, $x2727 ; CHECK-LABEL: name: select_icmp_ult_t_f_t_f_umin_t_f728 ; CHECK: liveins: $x0, $x1, $x2729 ; CHECK-NEXT: {{ $}}730 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0731 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1732 ; CHECK-NEXT: %t1:_(s32) = G_TRUNC [[COPY]](s64)733 ; CHECK-NEXT: %f1:_(s32) = G_TRUNC [[COPY1]](s64)734 ; CHECK-NEXT: %t:_(<4 x s32>) = G_BUILD_VECTOR %t1(s32), %t1(s32), %t1(s32), %t1(s32)735 ; CHECK-NEXT: %f:_(<4 x s32>) = G_BUILD_VECTOR %f1(s32), %f1(s32), %f1(s32), %f1(s32)736 ; CHECK-NEXT: %sel:_(<4 x s32>) = G_UMIN %t, %f737 ; CHECK-NEXT: $q0 = COPY %sel(<4 x s32>)738 %0:_(s64) = COPY $x0739 %1:_(s64) = COPY $x1740 %t1:_(s32) = G_TRUNC %0741 %f1:_(s32) = G_TRUNC %1742 %t:_(<4 x s32>) = G_BUILD_VECTOR %t1, %t1, %t1, %t1743 %f:_(<4 x s32>) = G_BUILD_VECTOR %f1, %f1, %f1, %f1744 %c:_(<4 x s32>) = G_ICMP intpred(ult), %t(<4 x s32>), %f(<4 x s32>)745 %sel:_(<4 x s32>) = exact G_SELECT %c, %t, %f746 $q0 = COPY %sel(<4 x s32>)747...748---749# test select icmp_ule t,f_t_f --> umin(t,f)750name: select_icmp_ule_t_f_t_f_umin_t_f751body: |752 bb.1:753 liveins: $x0, $x1, $x2754 ; CHECK-LABEL: name: select_icmp_ule_t_f_t_f_umin_t_f755 ; CHECK: liveins: $x0, $x1, $x2756 ; CHECK-NEXT: {{ $}}757 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0758 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1759 ; CHECK-NEXT: %t1:_(s32) = G_TRUNC [[COPY]](s64)760 ; CHECK-NEXT: %f1:_(s32) = G_TRUNC [[COPY1]](s64)761 ; CHECK-NEXT: %t:_(<4 x s32>) = G_BUILD_VECTOR %t1(s32), %t1(s32), %t1(s32), %t1(s32)762 ; CHECK-NEXT: %f:_(<4 x s32>) = G_BUILD_VECTOR %f1(s32), %f1(s32), %f1(s32), %f1(s32)763 ; CHECK-NEXT: %sel:_(<4 x s32>) = G_UMIN %t, %f764 ; CHECK-NEXT: $q0 = COPY %sel(<4 x s32>)765 %0:_(s64) = COPY $x0766 %1:_(s64) = COPY $x1767 %t1:_(s32) = G_TRUNC %0768 %f1:_(s32) = G_TRUNC %1769 %t:_(<4 x s32>) = G_BUILD_VECTOR %t1, %t1, %t1, %t1770 %f:_(<4 x s32>) = G_BUILD_VECTOR %f1, %f1, %f1, %f1771 %c:_(<4 x s32>) = G_ICMP intpred(ule), %t(<4 x s32>), %f(<4 x s32>)772 %sel:_(<4 x s32>) = exact G_SELECT %c, %t, %f773 $q0 = COPY %sel(<4 x s32>)774...775---776# test select icmp_slt t,f_t_f --> smin(t,f)777name: select_icmp_slt_t_f_t_f_smin_t_f778body: |779 bb.1:780 liveins: $x0, $x1, $x2781 ; CHECK-LABEL: name: select_icmp_slt_t_f_t_f_smin_t_f782 ; CHECK: liveins: $x0, $x1, $x2783 ; CHECK-NEXT: {{ $}}784 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0785 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1786 ; CHECK-NEXT: %t1:_(s32) = G_TRUNC [[COPY]](s64)787 ; CHECK-NEXT: %f1:_(s32) = G_TRUNC [[COPY1]](s64)788 ; CHECK-NEXT: %t:_(<4 x s32>) = G_BUILD_VECTOR %t1(s32), %t1(s32), %t1(s32), %t1(s32)789 ; CHECK-NEXT: %f:_(<4 x s32>) = G_BUILD_VECTOR %f1(s32), %f1(s32), %f1(s32), %f1(s32)790 ; CHECK-NEXT: %sel:_(<4 x s32>) = G_SMIN %t, %f791 ; CHECK-NEXT: $q0 = COPY %sel(<4 x s32>)792 %0:_(s64) = COPY $x0793 %1:_(s64) = COPY $x1794 %t1:_(s32) = G_TRUNC %0795 %f1:_(s32) = G_TRUNC %1796 %t:_(<4 x s32>) = G_BUILD_VECTOR %t1, %t1, %t1, %t1797 %f:_(<4 x s32>) = G_BUILD_VECTOR %f1, %f1, %f1, %f1798 %c:_(<4 x s32>) = G_ICMP intpred(slt), %t(<4 x s32>), %f(<4 x s32>)799 %sel:_(<4 x s32>) = exact G_SELECT %c, %t, %f800 $q0 = COPY %sel(<4 x s32>)801...802---803# test select icmp_sle t,f_t_f --> smin(t,f)804name: select_icmp_sle_t_f_t_f_smin_t_f805body: |806 bb.1:807 liveins: $x0, $x1, $x2808 ; CHECK-LABEL: name: select_icmp_sle_t_f_t_f_smin_t_f809 ; CHECK: liveins: $x0, $x1, $x2810 ; CHECK-NEXT: {{ $}}811 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0812 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1813 ; CHECK-NEXT: %t1:_(s32) = G_TRUNC [[COPY]](s64)814 ; CHECK-NEXT: %f1:_(s32) = G_TRUNC [[COPY1]](s64)815 ; CHECK-NEXT: %t:_(<4 x s32>) = G_BUILD_VECTOR %t1(s32), %t1(s32), %t1(s32), %t1(s32)816 ; CHECK-NEXT: %f:_(<4 x s32>) = G_BUILD_VECTOR %f1(s32), %f1(s32), %f1(s32), %f1(s32)817 ; CHECK-NEXT: %sel:_(<4 x s32>) = G_SMIN %t, %f818 ; CHECK-NEXT: $q0 = COPY %sel(<4 x s32>)819 %0:_(s64) = COPY $x0820 %1:_(s64) = COPY $x1821 %t1:_(s32) = G_TRUNC %0822 %f1:_(s32) = G_TRUNC %1823 %t:_(<4 x s32>) = G_BUILD_VECTOR %t1, %t1, %t1, %t1824 %f:_(<4 x s32>) = G_BUILD_VECTOR %f1, %f1, %f1, %f1825 %c:_(<4 x s32>) = G_ICMP intpred(sle), %t(<4 x s32>), %f(<4 x s32>)826 %sel:_(<4 x s32>) = exact G_SELECT %c, %t, %f827 $q0 = COPY %sel(<4 x s32>)828...829---830# multi use test select icmp_sle t,f_t_f --> smin(t,f) failed831name: multi_use_select_icmp_sle_t_f_t_f_smin_t_f_failed832body: |833 bb.1:834 liveins: $x0, $x1, $x2835 ; CHECK-LABEL: name: multi_use_select_icmp_sle_t_f_t_f_smin_t_f_failed836 ; CHECK: liveins: $x0, $x1, $x2837 ; CHECK-NEXT: {{ $}}838 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0839 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1840 ; CHECK-NEXT: %t1:_(s32) = G_TRUNC [[COPY]](s64)841 ; CHECK-NEXT: %f1:_(s32) = G_TRUNC [[COPY1]](s64)842 ; CHECK-NEXT: %t:_(<4 x s32>) = G_BUILD_VECTOR %t1(s32), %t1(s32), %t1(s32), %t1(s32)843 ; CHECK-NEXT: %f:_(<4 x s32>) = G_BUILD_VECTOR %f1(s32), %f1(s32), %f1(s32), %f1(s32)844 ; CHECK-NEXT: %c:_(<4 x s32>) = G_ICMP intpred(sle), %t(<4 x s32>), %f845 ; CHECK-NEXT: $q1 = COPY %c(<4 x s32>)846 ; CHECK-NEXT: %sel:_(<4 x s32>) = exact G_SELECT %c(<4 x s32>), %t, %f847 ; CHECK-NEXT: $q0 = COPY %sel(<4 x s32>)848 %0:_(s64) = COPY $x0849 %1:_(s64) = COPY $x1850 %t1:_(s32) = G_TRUNC %0851 %f1:_(s32) = G_TRUNC %1852 %t:_(<4 x s32>) = G_BUILD_VECTOR %t1, %t1, %t1, %t1853 %f:_(<4 x s32>) = G_BUILD_VECTOR %f1, %f1, %f1, %f1854 %c:_(<4 x s32>) = G_ICMP intpred(sle), %t(<4 x s32>), %f(<4 x s32>)855 $q1 = COPY %c(<4 x s32>)856 %sel:_(<4 x s32>) = exact G_SELECT %c, %t, %f857 $q0 = COPY %sel(<4 x s32>)858...859---860name: dont_combine_pointer_type861body: |862 bb.1:863 liveins: $x0864 865 ; CHECK-LABEL: name: dont_combine_pointer_type866 ; CHECK: liveins: $x0867 ; CHECK-NEXT: {{ $}}868 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0869 ; CHECK-NEXT: [[C:%[0-9]+]]:_(p0) = G_CONSTANT i64 0870 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[C]](p0) :: (load (p0))871 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ugt), [[LOAD]](p0), [[C]]872 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ICMP]](s1), [[LOAD]], [[C]]873 ; CHECK-NEXT: G_STORE [[SELECT]](p0), [[COPY]](p0) :: (store (p0))874 ; CHECK-NEXT: $x0 = COPY [[C]](p0)875 ; CHECK-NEXT: RET_ReallyLR implicit $x0876 %0:_(p0) = COPY $x0877 %2:_(p0) = G_CONSTANT i64 0878 %1:_(p0) = G_LOAD %2(p0) :: (load (p0))879 %3:_(s1) = G_ICMP intpred(ugt), %1(p0), %2880 %4:_(p0) = G_SELECT %3(s1), %1, %2881 G_STORE %4(p0), %0(p0) :: (store (p0))882 $x0 = COPY %2(p0)883 RET_ReallyLR implicit $x0884 885...886---887name: dont_combine_pointer_type_select_of_constant888alignment: 4889liveins:890 - { reg: '$w0' }891 - { reg: '$x1' }892body: |893 bb.1:894 liveins: $w0, $x1895 896 ; CHECK-LABEL: name: dont_combine_pointer_type_select_of_constant897 ; CHECK: liveins: $w0, $x1898 ; CHECK-NEXT: {{ $}}899 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0900 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)901 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1902 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s8) = G_ASSERT_ZEXT [[TRUNC]], 1903 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ASSERT_ZEXT]](s8)904 ; CHECK-NEXT: [[C:%[0-9]+]]:_(p0) = G_CONSTANT i64 0905 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1906 ; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:_(p0) = G_INTTOPTR [[C1]](s64)907 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[TRUNC1]](s1), [[C]], [[INTTOPTR]]908 ; CHECK-NEXT: G_STORE [[SELECT]](p0), [[COPY1]](p0) :: (store (p0))909 ; CHECK-NEXT: RET_ReallyLR910 %3:_(s32) = COPY $w0911 %2:_(s8) = G_TRUNC %3(s32)912 %1:_(p0) = COPY $x1913 %4:_(s8) = G_ASSERT_ZEXT %2, 1914 %0:_(s1) = G_TRUNC %4(s8)915 %6:_(p0) = G_CONSTANT i64 0916 %8:_(s64) = G_CONSTANT i64 -1917 %7:_(p0) = G_INTTOPTR %8(s64)918 %5:_(p0) = G_SELECT %0(s1), %6, %7919 G_STORE %5(p0), %1(p0) :: (store (p0))920 RET_ReallyLR921 922...923---924# test failed select icmp_slef,t_t_f --> smin(t,f)925name: select_icmp_sle_f_t_t_f_smin_t_f926body: |927 bb.1:928 liveins: $x0, $x1, $x2929 ; CHECK-LABEL: name: select_icmp_sle_f_t_t_f_smin_t_f930 ; CHECK: liveins: $x0, $x1, $x2931 ; CHECK-NEXT: {{ $}}932 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0933 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1934 ; CHECK-NEXT: %t1:_(s32) = G_TRUNC [[COPY]](s64)935 ; CHECK-NEXT: %f1:_(s32) = G_TRUNC [[COPY1]](s64)936 ; CHECK-NEXT: %t:_(<4 x s32>) = G_BUILD_VECTOR %t1(s32), %t1(s32), %t1(s32), %t1(s32)937 ; CHECK-NEXT: %f:_(<4 x s32>) = G_BUILD_VECTOR %f1(s32), %f1(s32), %f1(s32), %f1(s32)938 ; CHECK-NEXT: %sel:_(<4 x s32>) = G_SMAX %t, %f939 ; CHECK-NEXT: $q0 = COPY %sel(<4 x s32>)940 %0:_(s64) = COPY $x0941 %1:_(s64) = COPY $x1942 %t1:_(s32) = G_TRUNC %0943 %f1:_(s32) = G_TRUNC %1944 %t:_(<4 x s32>) = G_BUILD_VECTOR %t1, %t1, %t1, %t1945 %f:_(<4 x s32>) = G_BUILD_VECTOR %f1, %f1, %f1, %f1946 %c:_(<4 x s32>) = G_ICMP intpred(sle), %f(<4 x s32>), %t(<4 x s32>)947 %sel:_(<4 x s32>) = exact G_SELECT %c, %t, %f948 $q0 = COPY %sel(<4 x s32>)949...950