brintos

brintos / llvm-project-archived public Read only

0
0
Text · 34.1 KiB · 4afa0d4 Raw
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