brintos

brintos / llvm-project-archived public Read only

0
0
Text · 56.1 KiB · cc45811 Raw
1525 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -run-pass=amdgpu-prelegalizer-combiner -simplify-mir -verify-machineinstrs -o - %s | FileCheck %s3 4---5name: no_fold_add_into_select_s32_0_multi_use6tracksRegLiveness: true7body: |8  bb.0:9    liveins: $vgpr010    ; CHECK-LABEL: name: no_fold_add_into_select_s32_0_multi_use11    ; CHECK: liveins: $vgpr012    ; CHECK-NEXT: {{  $}}13    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr014    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 015    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero16    ; CHECK-NEXT: %ten:_(s32) = G_CONSTANT i32 1017    ; CHECK-NEXT: %twenty:_(s32) = G_CONSTANT i32 2018    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %ten, %twenty19    ; CHECK-NEXT: %thirty:_(s32) = G_CONSTANT i32 3020    ; CHECK-NEXT: %add:_(s32) = G_ADD %select, %thirty21    ; CHECK-NEXT: S_ENDPGM 0, implicit %add(s32), implicit %select(s32)22    %reg:_(s32) = COPY $vgpr023    %zero:_(s32) = G_CONSTANT i32 024    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero25    %ten:_(s32) = G_CONSTANT i32 1026    %twenty:_(s32) = G_CONSTANT i32 2027    %select:_(s32) = G_SELECT %cond, %ten, %twenty28    %thirty:_(s32) = G_CONSTANT i32 3029    %add:_(s32) = G_ADD %select, %thirty30    S_ENDPGM 0, implicit %add, implicit %select31...32 33---34name: no_fold_add_into_select_s32_1_multi_use35tracksRegLiveness: true36body: |37  bb.0:38    liveins: $vgpr039    ; CHECK-LABEL: name: no_fold_add_into_select_s32_1_multi_use40    ; CHECK: liveins: $vgpr041    ; CHECK-NEXT: {{  $}}42    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr043    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 044    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero45    ; CHECK-NEXT: %ten:_(s32) = G_CONSTANT i32 1046    ; CHECK-NEXT: %twenty:_(s32) = G_CONSTANT i32 2047    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %ten, %twenty48    ; CHECK-NEXT: %thirty:_(s32) = G_CONSTANT i32 3049    ; CHECK-NEXT: %add:_(s32) = G_ADD %select, %thirty50    ; CHECK-NEXT: S_ENDPGM 0, implicit %add(s32), implicit %select(s32)51    %reg:_(s32) = COPY $vgpr052    %zero:_(s32) = G_CONSTANT i32 053    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero54    %ten:_(s32) = G_CONSTANT i32 1055    %twenty:_(s32) = G_CONSTANT i32 2056    %select:_(s32) = G_SELECT %cond, %ten, %twenty57    %thirty:_(s32) = G_CONSTANT i32 3058    %add:_(s32) = G_ADD %thirty, %select59    S_ENDPGM 0, implicit %add, implicit %select60...61 62---63name: no_fold_sub_into_select_s32_nonconst_rhs64tracksRegLiveness: true65body: |66  bb.0:67    liveins: $vgpr0, $vgpr168    ; CHECK-LABEL: name: no_fold_sub_into_select_s32_nonconst_rhs69    ; CHECK: liveins: $vgpr0, $vgpr170    ; CHECK-NEXT: {{  $}}71    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr072    ; CHECK-NEXT: %variable:_(s32) = COPY $vgpr073    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 074    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero75    ; CHECK-NEXT: %ten:_(s32) = G_CONSTANT i32 1076    ; CHECK-NEXT: %twenty:_(s32) = G_CONSTANT i32 2077    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %ten, %twenty78    ; CHECK-NEXT: %sub:_(s32) = G_SUB %select, %variable79    ; CHECK-NEXT: S_ENDPGM 0, implicit %sub(s32)80    %reg:_(s32) = COPY $vgpr081    %variable:_(s32) = COPY $vgpr082    %zero:_(s32) = G_CONSTANT i32 083    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero84    %ten:_(s32) = G_CONSTANT i32 1085    %twenty:_(s32) = G_CONSTANT i32 2086    %select:_(s32) = G_SELECT %cond, %ten, %twenty87    %thirty:_(s32) = G_CONSTANT i32 3088    %sub:_(s32) = G_SUB %select, %variable89    S_ENDPGM 0, implicit %sub90...91 92---93name: no_fold_sub_into_select_s32_nonconst_lhs94tracksRegLiveness: true95body: |96  bb.0:97    liveins: $vgpr0, $vgpr198    ; CHECK-LABEL: name: no_fold_sub_into_select_s32_nonconst_lhs99    ; CHECK: liveins: $vgpr0, $vgpr1100    ; CHECK-NEXT: {{  $}}101    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0102    ; CHECK-NEXT: %variable:_(s32) = COPY $vgpr0103    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0104    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero105    ; CHECK-NEXT: %ten:_(s32) = G_CONSTANT i32 10106    ; CHECK-NEXT: %twenty:_(s32) = G_CONSTANT i32 20107    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %ten, %twenty108    ; CHECK-NEXT: %sub:_(s32) = G_SUB %variable, %select109    ; CHECK-NEXT: S_ENDPGM 0, implicit %sub(s32)110    %reg:_(s32) = COPY $vgpr0111    %variable:_(s32) = COPY $vgpr0112    %zero:_(s32) = G_CONSTANT i32 0113    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero114    %ten:_(s32) = G_CONSTANT i32 10115    %twenty:_(s32) = G_CONSTANT i32 20116    %select:_(s32) = G_SELECT %cond, %ten, %twenty117    %thirty:_(s32) = G_CONSTANT i32 30118    %sub:_(s32) = G_SUB %variable, %select119    S_ENDPGM 0, implicit %sub120...121 122---123name: fold_add_into_select_s32_0124tracksRegLiveness: true125body: |126  bb.0:127    liveins: $vgpr0128    ; CHECK-LABEL: name: fold_add_into_select_s32_0129    ; CHECK: liveins: $vgpr0130    ; CHECK-NEXT: {{  $}}131    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0132    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0133    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero134    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 40135    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 50136    ; CHECK-NEXT: %add:_(s32) = G_SELECT %cond(s1), [[C]], [[C1]]137    ; CHECK-NEXT: S_ENDPGM 0, implicit %add(s32)138    %reg:_(s32) = COPY $vgpr0139    %zero:_(s32) = G_CONSTANT i32 0140    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero141    %ten:_(s32) = G_CONSTANT i32 10142    %twenty:_(s32) = G_CONSTANT i32 20143    %select:_(s32) = G_SELECT %cond, %ten, %twenty144    %thirty:_(s32) = G_CONSTANT i32 30145    %add:_(s32) = G_ADD %select, %thirty146    S_ENDPGM 0, implicit %add147...148 149---150name: fold_add_into_select_s32_1151tracksRegLiveness: true152body: |153  bb.0:154    liveins: $vgpr0155    ; CHECK-LABEL: name: fold_add_into_select_s32_1156    ; CHECK: liveins: $vgpr0157    ; CHECK-NEXT: {{  $}}158    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0159    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0160    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero161    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 40162    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 50163    ; CHECK-NEXT: %add:_(s32) = G_SELECT %cond(s1), [[C]], [[C1]]164    ; CHECK-NEXT: S_ENDPGM 0, implicit %add(s32)165    %reg:_(s32) = COPY $vgpr0166    %zero:_(s32) = G_CONSTANT i32 0167    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero168    %ten:_(s32) = G_CONSTANT i32 10169    %twenty:_(s32) = G_CONSTANT i32 20170    %select:_(s32) = G_SELECT %cond, %ten, %twenty171    %thirty:_(s32) = G_CONSTANT i32 30172    %add:_(s32) = G_ADD %thirty, %select173    S_ENDPGM 0, implicit %add174...175 176---177name: fold_add_into_select_v2s32_splat178tracksRegLiveness: true179body: |180  bb.0:181    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3182    ; CHECK-LABEL: name: fold_add_into_select_v2s32_splat183    ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3184    ; CHECK-NEXT: {{  $}}185    ; CHECK-NEXT: %reg0:_(<2 x s32>) = COPY $vgpr0_vgpr1186    ; CHECK-NEXT: %reg1:_(<2 x s32>) = COPY $vgpr2_vgpr3187    ; CHECK-NEXT: %cond:_(<2 x s1>) = G_ICMP intpred(eq), %reg0(<2 x s32>), %reg1188    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 40189    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32)190    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 50191    ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C1]](s32), [[C1]](s32)192    ; CHECK-NEXT: %add:_(<2 x s32>) = G_SELECT %cond(<2 x s1>), [[BUILD_VECTOR]], [[BUILD_VECTOR1]]193    ; CHECK-NEXT: S_ENDPGM 0, implicit %add(<2 x s32>)194    %reg0:_(<2 x s32>) = COPY $vgpr0_vgpr1195    %reg1:_(<2 x s32>) = COPY $vgpr2_vgpr3196    %cond:_(<2 x s1>) = G_ICMP intpred(eq), %reg0, %reg1197    %ten:_(s32) = G_CONSTANT i32 10198    %twenty:_(s32) = G_CONSTANT i32 20199    %ten_vec:_(<2 x s32>) = G_BUILD_VECTOR %ten, %ten200    %twenty_vec:_(<2 x s32>) = G_BUILD_VECTOR %twenty, %twenty201    %select:_(<2 x s32>) = G_SELECT %cond, %ten_vec, %twenty_vec202    %thirty:_(s32) = G_CONSTANT i32 30203    %thirty_vec:_(<2 x s32>) = G_BUILD_VECTOR %thirty, %thirty204    %add:_(<2 x s32>) = G_ADD %select, %thirty_vec205    S_ENDPGM 0, implicit %add206...207 208---209name: fold_add_into_select_v2s32_nonsplat210tracksRegLiveness: true211body: |212  bb.0:213    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3214    ; CHECK-LABEL: name: fold_add_into_select_v2s32_nonsplat215    ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3216    ; CHECK-NEXT: {{  $}}217    ; CHECK-NEXT: %reg0:_(<2 x s32>) = COPY $vgpr0_vgpr1218    ; CHECK-NEXT: %reg1:_(<2 x s32>) = COPY $vgpr2_vgpr3219    ; CHECK-NEXT: %cond:_(<2 x s1>) = G_ICMP intpred(eq), %reg0(<2 x s32>), %reg1220    ; CHECK-NEXT: %twenty:_(s32) = G_CONSTANT i32 20221    ; CHECK-NEXT: %thirty:_(s32) = G_CONSTANT i32 30222    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 40223    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C]](s32), %thirty(s32)224    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 50225    ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[C1]](s32), %twenty(s32)226    ; CHECK-NEXT: %add:_(<2 x s32>) = G_SELECT %cond(<2 x s1>), [[BUILD_VECTOR]], [[BUILD_VECTOR1]]227    ; CHECK-NEXT: S_ENDPGM 0, implicit %add(<2 x s32>)228    %reg0:_(<2 x s32>) = COPY $vgpr0_vgpr1229    %reg1:_(<2 x s32>) = COPY $vgpr2_vgpr3230    %cond:_(<2 x s1>) = G_ICMP intpred(eq), %reg0, %reg1231    %ten:_(s32) = G_CONSTANT i32 10232    %twenty:_(s32) = G_CONSTANT i32 20233    %const_vec0:_(<2 x s32>) = G_BUILD_VECTOR %ten, %twenty234    %const_vec1:_(<2 x s32>) = G_BUILD_VECTOR %twenty, %ten235    %select:_(<2 x s32>) = G_SELECT %cond, %const_vec0, %const_vec1236    %thirty:_(s32) = G_CONSTANT i32 30237    %const_vec3:_(<2 x s32>) = G_BUILD_VECTOR %thirty, %ten238    %add:_(<2 x s32>) = G_ADD %select, %const_vec3239    S_ENDPGM 0, implicit %add240...241 242---243name: fold_add_into_select_v2s32_nonsplat_undef244tracksRegLiveness: true245body: |246  bb.0:247    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3248    ; CHECK-LABEL: name: fold_add_into_select_v2s32_nonsplat_undef249    ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3250    ; CHECK-NEXT: {{  $}}251    ; CHECK-NEXT: %reg0:_(<2 x s32>) = COPY $vgpr0_vgpr1252    ; CHECK-NEXT: %reg1:_(<2 x s32>) = COPY $vgpr2_vgpr3253    ; CHECK-NEXT: %cond:_(<2 x s1>) = G_ICMP intpred(eq), %reg0(<2 x s32>), %reg1254    ; CHECK-NEXT: %twenty:_(s32) = G_CONSTANT i32 20255    ; CHECK-NEXT: %undef:_(s32) = G_IMPLICIT_DEF256    ; CHECK-NEXT: %const_vec0:_(<2 x s32>) = G_BUILD_VECTOR %undef(s32), %twenty(s32)257    ; CHECK-NEXT: %const_vec1:_(<2 x s32>) = G_BUILD_VECTOR %twenty(s32), %undef(s32)258    ; CHECK-NEXT: %thirty:_(s32) = G_CONSTANT i32 30259    ; CHECK-NEXT: %const_vec3:_(<2 x s32>) = G_BUILD_VECTOR %thirty(s32), %undef(s32)260    ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<2 x s32>) = G_ADD %const_vec0, %const_vec3261    ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(<2 x s32>) = G_ADD %const_vec1, %const_vec3262    ; CHECK-NEXT: %add:_(<2 x s32>) = G_SELECT %cond(<2 x s1>), [[ADD]], [[ADD1]]263    ; CHECK-NEXT: S_ENDPGM 0, implicit %add(<2 x s32>)264    %reg0:_(<2 x s32>) = COPY $vgpr0_vgpr1265    %reg1:_(<2 x s32>) = COPY $vgpr2_vgpr3266    %cond:_(<2 x s1>) = G_ICMP intpred(eq), %reg0, %reg1267    %ten:_(s32) = G_CONSTANT i32 10268    %twenty:_(s32) = G_CONSTANT i32 20269    %undef:_(s32) = G_IMPLICIT_DEF270    %const_vec0:_(<2 x s32>) = G_BUILD_VECTOR %undef, %twenty271    %const_vec1:_(<2 x s32>) = G_BUILD_VECTOR %twenty, %undef272    %select:_(<2 x s32>) = G_SELECT %cond, %const_vec0, %const_vec1273    %thirty:_(s32) = G_CONSTANT i32 30274    %const_vec3:_(<2 x s32>) = G_BUILD_VECTOR %thirty, %undef275    %add:_(<2 x s32>) = G_ADD %select, %const_vec3276    S_ENDPGM 0, implicit %add277...278 279---280name: fold_sub_into_select_s32_0281tracksRegLiveness: true282body: |283  bb.0:284    liveins: $vgpr0285    ; CHECK-LABEL: name: fold_sub_into_select_s32_0286    ; CHECK: liveins: $vgpr0287    ; CHECK-NEXT: {{  $}}288    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0289    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0290    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero291    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -20292    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -10293    ; CHECK-NEXT: %sub:_(s32) = G_SELECT %cond(s1), [[C]], [[C1]]294    ; CHECK-NEXT: S_ENDPGM 0, implicit %sub(s32)295    %reg:_(s32) = COPY $vgpr0296    %zero:_(s32) = G_CONSTANT i32 0297    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero298    %ten:_(s32) = G_CONSTANT i32 10299    %twenty:_(s32) = G_CONSTANT i32 20300    %select:_(s32) = G_SELECT %cond, %ten, %twenty301    %thirty:_(s32) = G_CONSTANT i32 30302    %sub:_(s32) = G_SUB %select, %thirty303    S_ENDPGM 0, implicit %sub304...305 306---307name: fold_sub_into_select_s32_1308tracksRegLiveness: true309body: |310  bb.0:311    liveins: $vgpr0312    ; CHECK-LABEL: name: fold_sub_into_select_s32_1313    ; CHECK: liveins: $vgpr0314    ; CHECK-NEXT: {{  $}}315    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0316    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0317    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero318    ; CHECK-NEXT: %ten:_(s32) = G_CONSTANT i32 10319    ; CHECK-NEXT: %twenty:_(s32) = G_CONSTANT i32 20320    ; CHECK-NEXT: %sub:_(s32) = G_SELECT %cond(s1), %twenty, %ten321    ; CHECK-NEXT: S_ENDPGM 0, implicit %sub(s32)322    %reg:_(s32) = COPY $vgpr0323    %zero:_(s32) = G_CONSTANT i32 0324    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero325    %ten:_(s32) = G_CONSTANT i32 10326    %twenty:_(s32) = G_CONSTANT i32 20327    %select:_(s32) = G_SELECT %cond, %ten, %twenty328    %thirty:_(s32) = G_CONSTANT i32 30329    %sub:_(s32) = G_SUB %thirty, %select330    S_ENDPGM 0, implicit %sub331...332 333---334name: fold_ptr_add_into_select_p3_0335tracksRegLiveness: true336body: |337  bb.0:338    liveins: $vgpr0339    ; CHECK-LABEL: name: fold_ptr_add_into_select_p3_0340    ; CHECK: liveins: $vgpr0341    ; CHECK-NEXT: {{  $}}342    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0343    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0344    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero345    ; CHECK-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 40346    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(p3) = G_CONSTANT i32 50347    ; CHECK-NEXT: %ptr_add:_(p3) = G_SELECT %cond(s1), [[C]], [[C1]]348    ; CHECK-NEXT: S_ENDPGM 0, implicit %ptr_add(p3)349    %reg:_(s32) = COPY $vgpr0350    %zero:_(s32) = G_CONSTANT i32 0351    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero352    %ten:_(p3) = G_CONSTANT i32 10353    %twenty:_(p3) = G_CONSTANT i32 20354    %select:_(p3) = G_SELECT %cond, %ten, %twenty355    %thirty:_(s32) = G_CONSTANT i32 30356    %ptr_add:_(p3) = G_PTR_ADD %select, %thirty357    S_ENDPGM 0, implicit %ptr_add358...359 360---361name: fold_ptr_add_into_select_p3_1362tracksRegLiveness: true363body: |364  bb.0:365    liveins: $vgpr0366    ; CHECK-LABEL: name: fold_ptr_add_into_select_p3_1367    ; CHECK: liveins: $vgpr0368    ; CHECK-NEXT: {{  $}}369    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0370    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0371    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero372    ; CHECK-NEXT: [[C:%[0-9]+]]:_(p3) = G_CONSTANT i32 40373    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(p3) = G_CONSTANT i32 50374    ; CHECK-NEXT: %ptr_add:_(p3) = G_SELECT %cond(s1), [[C]], [[C1]]375    ; CHECK-NEXT: S_ENDPGM 0, implicit %ptr_add(p3)376    %reg:_(s32) = COPY $vgpr0377    %zero:_(s32) = G_CONSTANT i32 0378    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero379    %ten:_(s32) = G_CONSTANT i32 10380    %twenty:_(s32) = G_CONSTANT i32 20381    %select:_(s32) = G_SELECT %cond, %ten, %twenty382    %thirty:_(p3) = G_CONSTANT i32 30383    %ptr_add:_(p3) = G_PTR_ADD %thirty, %select384    S_ENDPGM 0, implicit %ptr_add385...386 387---388name: fold_shl_into_select_s64_0389tracksRegLiveness: true390body: |391  bb.0:392    liveins: $vgpr0393    ; CHECK-LABEL: name: fold_shl_into_select_s64_0394    ; CHECK: liveins: $vgpr0395    ; CHECK-NEXT: {{  $}}396    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0397    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0398    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero399    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1280400    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2560401    ; CHECK-NEXT: %shl:_(s64) = G_SELECT %cond(s1), [[C]], [[C1]]402    ; CHECK-NEXT: S_ENDPGM 0, implicit %shl(s64)403    %reg:_(s32) = COPY $vgpr0404    %zero:_(s32) = G_CONSTANT i32 0405    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero406    %ten:_(s64) = G_CONSTANT i64 10407    %twenty:_(s64) = G_CONSTANT i64 20408    %select:_(s64) = G_SELECT %cond, %ten, %twenty409    %seven:_(s32) = G_CONSTANT i32 7410    %shl:_(s64) = G_SHL %select, %seven411    S_ENDPGM 0, implicit %shl412...413 414---415name: fold_shl_into_select_s64_1416tracksRegLiveness: true417body: |418  bb.0:419    liveins: $vgpr0420    ; CHECK-LABEL: name: fold_shl_into_select_s64_1421    ; CHECK: liveins: $vgpr0422    ; CHECK-NEXT: {{  $}}423    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0424    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0425    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero426    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8192427    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 524288428    ; CHECK-NEXT: %shl:_(s64) = G_SELECT %cond(s1), [[C]], [[C1]]429    ; CHECK-NEXT: S_ENDPGM 0, implicit %shl(s64)430    %reg:_(s32) = COPY $vgpr0431    %zero:_(s32) = G_CONSTANT i32 0432    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero433    %ten:_(s32) = G_CONSTANT i32 10434    %sixteen:_(s32) = G_CONSTANT i32 16435    %select:_(s32) = G_SELECT %cond, %ten, %sixteen436    %eight:_(s64) = G_CONSTANT i64 8437    %shl:_(s64) = G_SHL %eight, %select438    S_ENDPGM 0, implicit %shl439...440 441---442name: fold_and_variable_into_select_zero_neg1_s32443tracksRegLiveness: true444body: |445  bb.0:446    liveins: $vgpr0, $vgpr1447    ; CHECK-LABEL: name: fold_and_variable_into_select_zero_neg1_s32448    ; CHECK: liveins: $vgpr0, $vgpr1449    ; CHECK-NEXT: {{  $}}450    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0451    ; CHECK-NEXT: %variable:_(s32) = COPY $vgpr0452    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0453    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(ne), %reg(s32), %zero454    ; CHECK-NEXT: %select:_(s32) = G_SEXT %cond(s1)455    ; CHECK-NEXT: %and:_(s32) = G_AND %select, %variable456    ; CHECK-NEXT: S_ENDPGM 0, implicit %and(s32)457    %reg:_(s32) = COPY $vgpr0458    %variable:_(s32) = COPY $vgpr0459    %zero:_(s32) = G_CONSTANT i32 0460    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero461    %neg1:_(s32) = G_CONSTANT i32 -1462    %select:_(s32) = G_SELECT %cond, %zero, %neg1463    %and:_(s32) = G_AND %select, %variable464    S_ENDPGM 0, implicit %and465...466 467---468name: fold_and_variable_into_select_neg1_zero_s32469tracksRegLiveness: true470body: |471  bb.0:472    liveins: $vgpr0, $vgpr1473    ; CHECK-LABEL: name: fold_and_variable_into_select_neg1_zero_s32474    ; CHECK: liveins: $vgpr0, $vgpr1475    ; CHECK-NEXT: {{  $}}476    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0477    ; CHECK-NEXT: %variable:_(s32) = COPY $vgpr0478    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0479    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero480    ; CHECK-NEXT: %select:_(s32) = G_SEXT %cond(s1)481    ; CHECK-NEXT: %and:_(s32) = G_AND %select, %variable482    ; CHECK-NEXT: S_ENDPGM 0, implicit %and(s32)483    %reg:_(s32) = COPY $vgpr0484    %variable:_(s32) = COPY $vgpr0485    %zero:_(s32) = G_CONSTANT i32 0486    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero487    %neg1:_(s32) = G_CONSTANT i32 -1488    %select:_(s32) = G_SELECT %cond, %neg1, %zero489    %and:_(s32) = G_AND %select, %variable490    S_ENDPGM 0, implicit %and491...492 493---494name: fold_or_variable_into_select_zero_neg1_s32495tracksRegLiveness: true496body: |497  bb.0:498    liveins: $vgpr0, $vgpr1499    ; CHECK-LABEL: name: fold_or_variable_into_select_zero_neg1_s32500    ; CHECK: liveins: $vgpr0, $vgpr1501    ; CHECK-NEXT: {{  $}}502    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0503    ; CHECK-NEXT: %variable:_(s32) = COPY $vgpr0504    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0505    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(ne), %reg(s32), %zero506    ; CHECK-NEXT: %select:_(s32) = G_SEXT %cond(s1)507    ; CHECK-NEXT: %or:_(s32) = G_OR %select, %variable508    ; CHECK-NEXT: S_ENDPGM 0, implicit %or(s32)509    %reg:_(s32) = COPY $vgpr0510    %variable:_(s32) = COPY $vgpr0511    %zero:_(s32) = G_CONSTANT i32 0512    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero513    %neg1:_(s32) = G_CONSTANT i32 -1514    %select:_(s32) = G_SELECT %cond, %zero, %neg1515    %or:_(s32) = G_OR %select, %variable516    S_ENDPGM 0, implicit %or517...518 519---520name: fold_or_variable_into_select_neg1_zero_s32521tracksRegLiveness: true522body: |523  bb.0:524    liveins: $vgpr0, $vgpr1525    ; CHECK-LABEL: name: fold_or_variable_into_select_neg1_zero_s32526    ; CHECK: liveins: $vgpr0, $vgpr1527    ; CHECK-NEXT: {{  $}}528    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0529    ; CHECK-NEXT: %variable:_(s32) = COPY $vgpr0530    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0531    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero532    ; CHECK-NEXT: %select:_(s32) = G_SEXT %cond(s1)533    ; CHECK-NEXT: %or:_(s32) = G_OR %select, %variable534    ; CHECK-NEXT: S_ENDPGM 0, implicit %or(s32)535    %reg:_(s32) = COPY $vgpr0536    %variable:_(s32) = COPY $vgpr0537    %zero:_(s32) = G_CONSTANT i32 0538    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero539    %neg1:_(s32) = G_CONSTANT i32 -1540    %select:_(s32) = G_SELECT %cond, %neg1, %zero541    %or:_(s32) = G_OR %select, %variable542    S_ENDPGM 0, implicit %or543...544 545---546name: fold_and_variable_into_select_undef_neg1_s32547tracksRegLiveness: true548body: |549  bb.0:550    liveins: $vgpr0, $vgpr1551    ; CHECK-LABEL: name: fold_and_variable_into_select_undef_neg1_s32552    ; CHECK: liveins: $vgpr0, $vgpr1553    ; CHECK-NEXT: {{  $}}554    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0555    ; CHECK-NEXT: %variable:_(s32) = COPY $vgpr0556    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0557    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero558    ; CHECK-NEXT: %undef:_(s32) = G_IMPLICIT_DEF559    ; CHECK-NEXT: %neg1:_(s32) = G_CONSTANT i32 -1560    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %undef, %neg1561    ; CHECK-NEXT: %and:_(s32) = G_AND %select, %variable562    ; CHECK-NEXT: S_ENDPGM 0, implicit %and(s32)563    %reg:_(s32) = COPY $vgpr0564    %variable:_(s32) = COPY $vgpr0565    %zero:_(s32) = G_CONSTANT i32 0566    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero567    %undef:_(s32) = G_IMPLICIT_DEF568    %neg1:_(s32) = G_CONSTANT i32 -1569    %select:_(s32) = G_SELECT %cond, %undef, %neg1570    %and:_(s32) = G_AND %select, %variable571    S_ENDPGM 0, implicit %and572...573 574---575name: fold_and_variable_into_select_undef_zero_s32576tracksRegLiveness: true577body: |578  bb.0:579    liveins: $vgpr0, $vgpr1580    ; CHECK-LABEL: name: fold_and_variable_into_select_undef_zero_s32581    ; CHECK: liveins: $vgpr0, $vgpr1582    ; CHECK-NEXT: {{  $}}583    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0584    ; CHECK-NEXT: %variable:_(s32) = COPY $vgpr0585    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0586    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero587    ; CHECK-NEXT: %undef:_(s32) = G_IMPLICIT_DEF588    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %undef, %zero589    ; CHECK-NEXT: %and:_(s32) = G_AND %select, %variable590    ; CHECK-NEXT: S_ENDPGM 0, implicit %and(s32)591    %reg:_(s32) = COPY $vgpr0592    %variable:_(s32) = COPY $vgpr0593    %zero:_(s32) = G_CONSTANT i32 0594    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero595    %undef:_(s32) = G_IMPLICIT_DEF596    %select:_(s32) = G_SELECT %cond, %undef, %zero597    %and:_(s32) = G_AND %select, %variable598    S_ENDPGM 0, implicit %and599...600 601---602name: fold_or_variable_into_select_neg1_fpzero_s32603tracksRegLiveness: true604body: |605  bb.0:606    liveins: $vgpr0, $vgpr1607    ; CHECK-LABEL: name: fold_or_variable_into_select_neg1_fpzero_s32608    ; CHECK: liveins: $vgpr0, $vgpr1609    ; CHECK-NEXT: {{  $}}610    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0611    ; CHECK-NEXT: %variable:_(s32) = COPY $vgpr0612    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0613    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero614    ; CHECK-NEXT: %neg1:_(s32) = G_CONSTANT i32 -1615    ; CHECK-NEXT: %fpzero:_(s32) = G_FCONSTANT float 0.000000e+00616    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR %fpzero, %variable617    ; CHECK-NEXT: %or:_(s32) = G_SELECT %cond(s1), %neg1, [[OR]]618    ; CHECK-NEXT: S_ENDPGM 0, implicit %or(s32)619    %reg:_(s32) = COPY $vgpr0620    %variable:_(s32) = COPY $vgpr0621    %zero:_(s32) = G_CONSTANT i32 0622    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero623    %neg1:_(s32) = G_CONSTANT i32 -1624    %fpzero:_(s32) = G_FCONSTANT float 0.0625    %select:_(s32) = G_SELECT %cond, %neg1, %fpzero626    %or:_(s32) = G_OR %select, %variable627    S_ENDPGM 0, implicit %or628...629 630---631name: no_fold_or_variable_into_select_neg1_fpnegzero_s32632tracksRegLiveness: true633body: |634  bb.0:635    liveins: $vgpr0, $vgpr1636    ; CHECK-LABEL: name: no_fold_or_variable_into_select_neg1_fpnegzero_s32637    ; CHECK: liveins: $vgpr0, $vgpr1638    ; CHECK-NEXT: {{  $}}639    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0640    ; CHECK-NEXT: %variable:_(s32) = COPY $vgpr0641    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0642    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero643    ; CHECK-NEXT: %neg1:_(s32) = G_CONSTANT i32 -1644    ; CHECK-NEXT: %fpzero:_(s32) = G_FCONSTANT float -0.000000e+00645    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %neg1, %fpzero646    ; CHECK-NEXT: %or:_(s32) = G_OR %select, %variable647    ; CHECK-NEXT: S_ENDPGM 0, implicit %or(s32)648    %reg:_(s32) = COPY $vgpr0649    %variable:_(s32) = COPY $vgpr0650    %zero:_(s32) = G_CONSTANT i32 0651    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero652    %neg1:_(s32) = G_CONSTANT i32 -1653    %fpzero:_(s32) = G_FCONSTANT float -0.0654    %select:_(s32) = G_SELECT %cond, %neg1, %fpzero655    %or:_(s32) = G_OR %select, %variable656    S_ENDPGM 0, implicit %or657...658 659---660name: no_fold_or_variable_into_select_neg1_other_const_s32661tracksRegLiveness: true662body: |663  bb.0:664    liveins: $vgpr0, $vgpr1665    ; CHECK-LABEL: name: no_fold_or_variable_into_select_neg1_other_const_s32666    ; CHECK: liveins: $vgpr0, $vgpr1667    ; CHECK-NEXT: {{  $}}668    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0669    ; CHECK-NEXT: %variable:_(s32) = COPY $vgpr0670    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0671    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero672    ; CHECK-NEXT: %otherconst:_(s32) = G_CONSTANT i32 123673    ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT %cond(s1)674    ; CHECK-NEXT: %select:_(s32) = G_OR [[SEXT]], %otherconst675    ; CHECK-NEXT: %or:_(s32) = G_OR %select, %variable676    ; CHECK-NEXT: S_ENDPGM 0, implicit %or(s32)677    %reg:_(s32) = COPY $vgpr0678    %variable:_(s32) = COPY $vgpr0679    %zero:_(s32) = G_CONSTANT i32 0680    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero681    %neg1:_(s32) = G_CONSTANT i32 -1682    %otherconst:_(s32) = G_CONSTANT i32 123683    %select:_(s32) = G_SELECT %cond, %neg1, %otherconst684    %or:_(s32) = G_OR %select, %variable685    S_ENDPGM 0, implicit %or686...687 688---689name: fold_xor_into_select_s32_0690tracksRegLiveness: true691body: |692  bb.0:693    liveins: $vgpr0694    ; CHECK-LABEL: name: fold_xor_into_select_s32_0695    ; CHECK: liveins: $vgpr0696    ; CHECK-NEXT: {{  $}}697    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0698    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0699    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero700    ; CHECK-NEXT: %ten:_(s32) = G_CONSTANT i32 10701    ; CHECK-NEXT: %twenty:_(s32) = G_CONSTANT i32 20702    ; CHECK-NEXT: %xor:_(s32) = G_SELECT %cond(s1), %twenty, %ten703    ; CHECK-NEXT: S_ENDPGM 0, implicit %xor(s32)704    %reg:_(s32) = COPY $vgpr0705    %zero:_(s32) = G_CONSTANT i32 0706    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero707    %ten:_(s32) = G_CONSTANT i32 10708    %twenty:_(s32) = G_CONSTANT i32 20709    %select:_(s32) = G_SELECT %cond, %ten, %twenty710    %thirty:_(s32) = G_CONSTANT i32 30711    %xor:_(s32) = G_XOR %select, %thirty712    S_ENDPGM 0, implicit %xor713...714 715---716name: fold_sdiv_into_select_s32_0717tracksRegLiveness: true718body: |719  bb.0:720    liveins: $vgpr0721    ; CHECK-LABEL: name: fold_sdiv_into_select_s32_0722    ; CHECK: liveins: $vgpr0723    ; CHECK-NEXT: {{  $}}724    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0725    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0726    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero727    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 50728    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 21729    ; CHECK-NEXT: %sdiv:_(s32) = G_SELECT %cond(s1), [[C]], [[C1]]730    ; CHECK-NEXT: S_ENDPGM 0, implicit %sdiv(s32)731    %reg:_(s32) = COPY $vgpr0732    %zero:_(s32) = G_CONSTANT i32 0733    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero734    %hundred:_(s32) = G_CONSTANT i32 100735    %fortytwo:_(s32) = G_CONSTANT i32 42736    %select:_(s32) = G_SELECT %cond, %hundred, %fortytwo737    %two:_(s32) = G_CONSTANT i32 2738    %sdiv:_(s32) = G_SDIV %select, %two739    S_ENDPGM 0, implicit %sdiv740...741 742---743name: fold_srem_into_select_s32_0744tracksRegLiveness: true745body: |746  bb.0:747    liveins: $vgpr0748    ; CHECK-LABEL: name: fold_srem_into_select_s32_0749    ; CHECK: liveins: $vgpr0750    ; CHECK-NEXT: {{  $}}751    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0752    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0753    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero754    ; CHECK-NEXT: %srem:_(s32) = G_ZEXT %cond(s1)755    ; CHECK-NEXT: S_ENDPGM 0, implicit %srem(s32)756    %reg:_(s32) = COPY $vgpr0757    %zero:_(s32) = G_CONSTANT i32 0758    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero759    %hundred:_(s32) = G_CONSTANT i32 100760    %fortytwo:_(s32) = G_CONSTANT i32 42761    %select:_(s32) = G_SELECT %cond, %hundred, %fortytwo762    %three:_(s32) = G_CONSTANT i32 3763    %srem:_(s32) = G_SREM %select, %three764    S_ENDPGM 0, implicit %srem765...766 767---768name: fold_udiv_into_select_s32_0769tracksRegLiveness: true770body: |771  bb.0:772    liveins: $vgpr0773    ; CHECK-LABEL: name: fold_udiv_into_select_s32_0774    ; CHECK: liveins: $vgpr0775    ; CHECK-NEXT: {{  $}}776    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0777    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0778    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero779    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 50780    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 21781    ; CHECK-NEXT: %udiv:_(s32) = G_SELECT %cond(s1), [[C]], [[C1]]782    ; CHECK-NEXT: S_ENDPGM 0, implicit %udiv(s32)783    %reg:_(s32) = COPY $vgpr0784    %zero:_(s32) = G_CONSTANT i32 0785    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero786    %hundred:_(s32) = G_CONSTANT i32 100787    %fortytwo:_(s32) = G_CONSTANT i32 42788    %select:_(s32) = G_SELECT %cond, %hundred, %fortytwo789    %two:_(s32) = G_CONSTANT i32 2790    %udiv:_(s32) = G_UDIV %select, %two791    S_ENDPGM 0, implicit %udiv792...793 794---795name: fold_urem_into_select_s32_0796tracksRegLiveness: true797body: |798  bb.0:799    liveins: $vgpr0800    ; CHECK-LABEL: name: fold_urem_into_select_s32_0801    ; CHECK: liveins: $vgpr0802    ; CHECK-NEXT: {{  $}}803    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0804    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0805    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero806    ; CHECK-NEXT: %udiv:_(s32) = G_ZEXT %cond(s1)807    ; CHECK-NEXT: S_ENDPGM 0, implicit %udiv(s32)808    %reg:_(s32) = COPY $vgpr0809    %zero:_(s32) = G_CONSTANT i32 0810    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero811    %hundred:_(s32) = G_CONSTANT i32 100812    %fortytwo:_(s32) = G_CONSTANT i32 42813    %select:_(s32) = G_SELECT %cond, %hundred, %fortytwo814    %three:_(s32) = G_CONSTANT i32 3815    %udiv:_(s32) = G_UREM %select, %three816    S_ENDPGM 0, implicit %udiv817...818 819---820name: fold_lshr_into_select_s64_0821tracksRegLiveness: true822body: |823  bb.0:824    liveins: $vgpr0825    ; CHECK-LABEL: name: fold_lshr_into_select_s64_0826    ; CHECK: liveins: $vgpr0827    ; CHECK-NEXT: {{  $}}828    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0829    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0830    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero831    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 2832    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 5833    ; CHECK-NEXT: %lshr:_(s64) = G_SELECT %cond(s1), [[C]], [[C1]]834    ; CHECK-NEXT: S_ENDPGM 0, implicit %lshr(s64)835    %reg:_(s32) = COPY $vgpr0836    %zero:_(s32) = G_CONSTANT i32 0837    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero838    %ten:_(s64) = G_CONSTANT i64 10839    %twenty:_(s64) = G_CONSTANT i64 20840    %select:_(s64) = G_SELECT %cond, %ten, %twenty841    %two:_(s32) = G_CONSTANT i32 2842    %lshr:_(s64) = G_LSHR %select, %two843    S_ENDPGM 0, implicit %lshr844...845 846---847name: fold_lshr_into_select_s64_1848tracksRegLiveness: true849body: |850  bb.0:851    liveins: $vgpr0852    ; CHECK-LABEL: name: fold_lshr_into_select_s64_1853    ; CHECK: liveins: $vgpr0854    ; CHECK-NEXT: {{  $}}855    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0856    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0857    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero858    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1012859    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 253860    ; CHECK-NEXT: %lshr:_(s64) = G_SELECT %cond(s1), [[C]], [[C1]]861    ; CHECK-NEXT: S_ENDPGM 0, implicit %lshr(s64)862    %reg:_(s32) = COPY $vgpr0863    %zero:_(s32) = G_CONSTANT i32 0864    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero865    %three:_(s32) = G_CONSTANT i32 3866    %five:_(s32) = G_CONSTANT i32 5867    %select:_(s32) = G_SELECT %cond, %three, %five868    %val:_(s64) = G_CONSTANT i64 8096869    %lshr:_(s64) = G_LSHR %val, %select870    S_ENDPGM 0, implicit %lshr871...872 873---874name: fold_ashr_into_select_s64_0875tracksRegLiveness: true876body: |877  bb.0:878    liveins: $vgpr0879    ; CHECK-LABEL: name: fold_ashr_into_select_s64_0880    ; CHECK: liveins: $vgpr0881    ; CHECK-NEXT: {{  $}}882    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0883    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0884    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero885    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 2886    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 5887    ; CHECK-NEXT: %ashr:_(s64) = G_SELECT %cond(s1), [[C]], [[C1]]888    ; CHECK-NEXT: S_ENDPGM 0, implicit %ashr(s64)889    %reg:_(s32) = COPY $vgpr0890    %zero:_(s32) = G_CONSTANT i32 0891    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero892    %ten:_(s64) = G_CONSTANT i64 10893    %twenty:_(s64) = G_CONSTANT i64 20894    %select:_(s64) = G_SELECT %cond, %ten, %twenty895    %two:_(s32) = G_CONSTANT i32 2896    %ashr:_(s64) = G_ASHR %select, %two897    S_ENDPGM 0, implicit %ashr898...899 900---901name: fold_ashr_into_select_s64_1902tracksRegLiveness: true903body: |904  bb.0:905    liveins: $vgpr0906    ; CHECK-LABEL: name: fold_ashr_into_select_s64_1907    ; CHECK: liveins: $vgpr0908    ; CHECK-NEXT: {{  $}}909    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0910    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0911    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero912    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1012913    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -253914    ; CHECK-NEXT: %ashr:_(s64) = G_SELECT %cond(s1), [[C]], [[C1]]915    ; CHECK-NEXT: S_ENDPGM 0, implicit %ashr(s64)916    %reg:_(s32) = COPY $vgpr0917    %zero:_(s32) = G_CONSTANT i32 0918    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero919    %three:_(s32) = G_CONSTANT i32 3920    %five:_(s32) = G_CONSTANT i32 5921    %select:_(s32) = G_SELECT %cond, %three, %five922    %val:_(s64) = G_CONSTANT i64 -8096923    %ashr:_(s64) = G_ASHR %val, %select924    S_ENDPGM 0, implicit %ashr925...926 927---928name: fold_smin_into_select_s32_0929tracksRegLiveness: true930body: |931  bb.0:932    liveins: $vgpr0933    ; CHECK-LABEL: name: fold_smin_into_select_s32_0934    ; CHECK: liveins: $vgpr0935    ; CHECK-NEXT: {{  $}}936    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0937    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0938    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero939    ; CHECK-NEXT: %ten:_(s32) = G_CONSTANT i32 10940    ; CHECK-NEXT: %twenty:_(s32) = G_CONSTANT i32 20941    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %ten, %twenty942    ; CHECK-NEXT: S_ENDPGM 0, implicit %select(s32)943    %reg:_(s32) = COPY $vgpr0944    %zero:_(s32) = G_CONSTANT i32 0945    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero946    %ten:_(s32) = G_CONSTANT i32 10947    %twenty:_(s32) = G_CONSTANT i32 20948    %select:_(s32) = G_SELECT %cond, %ten, %twenty949    %thirty:_(s32) = G_CONSTANT i32 30950    %smin:_(s32) = G_SMIN %select, %thirty951    S_ENDPGM 0, implicit %smin952...953 954---955name: fold_smax_into_select_s32_0956tracksRegLiveness: true957body: |958  bb.0:959    liveins: $vgpr0960    ; CHECK-LABEL: name: fold_smax_into_select_s32_0961    ; CHECK: liveins: $vgpr0962    ; CHECK-NEXT: {{  $}}963    ; CHECK-NEXT: %thirty:_(s32) = G_CONSTANT i32 30964    ; CHECK-NEXT: S_ENDPGM 0, implicit %thirty(s32)965    %reg:_(s32) = COPY $vgpr0966    %zero:_(s32) = G_CONSTANT i32 0967    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero968    %ten:_(s32) = G_CONSTANT i32 10969    %twenty:_(s32) = G_CONSTANT i32 20970    %select:_(s32) = G_SELECT %cond, %ten, %twenty971    %thirty:_(s32) = G_CONSTANT i32 30972    %smax:_(s32) = G_SMAX %select, %thirty973    S_ENDPGM 0, implicit %smax974...975 976---977name: fold_umin_into_select_s32_0978tracksRegLiveness: true979body: |980  bb.0:981    liveins: $vgpr0982    ; CHECK-LABEL: name: fold_umin_into_select_s32_0983    ; CHECK: liveins: $vgpr0984    ; CHECK-NEXT: {{  $}}985    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr0986    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0987    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero988    ; CHECK-NEXT: %ten:_(s32) = G_CONSTANT i32 10989    ; CHECK-NEXT: %twenty:_(s32) = G_CONSTANT i32 20990    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %ten, %twenty991    ; CHECK-NEXT: S_ENDPGM 0, implicit %select(s32)992    %reg:_(s32) = COPY $vgpr0993    %zero:_(s32) = G_CONSTANT i32 0994    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero995    %ten:_(s32) = G_CONSTANT i32 10996    %twenty:_(s32) = G_CONSTANT i32 20997    %select:_(s32) = G_SELECT %cond, %ten, %twenty998    %thirty:_(s32) = G_CONSTANT i32 30999    %umin:_(s32) = G_UMIN %select, %thirty1000    S_ENDPGM 0, implicit %umin1001...1002 1003---1004name: fold_umax_into_select_s32_01005tracksRegLiveness: true1006body: |1007  bb.0:1008    liveins: $vgpr01009    ; CHECK-LABEL: name: fold_umax_into_select_s32_01010    ; CHECK: liveins: $vgpr01011    ; CHECK-NEXT: {{  $}}1012    ; CHECK-NEXT: %thirty:_(s32) = G_CONSTANT i32 301013    ; CHECK-NEXT: S_ENDPGM 0, implicit %thirty(s32)1014    %reg:_(s32) = COPY $vgpr01015    %zero:_(s32) = G_CONSTANT i32 01016    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1017    %ten:_(s32) = G_CONSTANT i32 101018    %twenty:_(s32) = G_CONSTANT i32 201019    %select:_(s32) = G_SELECT %cond, %ten, %twenty1020    %thirty:_(s32) = G_CONSTANT i32 301021    %umax:_(s32) = G_UMAX %select, %thirty1022    S_ENDPGM 0, implicit %umax1023...1024 1025---1026name: fold_fadd_into_select_s32_01027tracksRegLiveness: true1028body: |1029  bb.0:1030    liveins: $vgpr01031    ; CHECK-LABEL: name: fold_fadd_into_select_s32_01032    ; CHECK: liveins: $vgpr01033    ; CHECK-NEXT: {{  $}}1034    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01035    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01036    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1037    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.800000e+011038    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_FCONSTANT float 2.000000e+011039    ; CHECK-NEXT: %fadd:_(s32) = nnan G_SELECT %cond(s1), [[C]], [[C1]]1040    ; CHECK-NEXT: S_ENDPGM 0, implicit %fadd(s32)1041    %reg:_(s32) = COPY $vgpr01042    %zero:_(s32) = G_CONSTANT i32 01043    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1044    %two:_(s32) = G_FCONSTANT float 2.01045    %four:_(s32) = G_FCONSTANT float 4.01046    %select:_(s32) = G_SELECT %cond, %two, %four1047    %sixteen:_(s32) = G_FCONSTANT float 16.01048    %fadd:_(s32) = nnan G_FADD %select, %sixteen1049    S_ENDPGM 0, implicit %fadd1050...1051 1052---1053name: fold_fadd_into_select_s32_11054tracksRegLiveness: true1055body: |1056  bb.0:1057    liveins: $vgpr01058    ; CHECK-LABEL: name: fold_fadd_into_select_s32_11059    ; CHECK: liveins: $vgpr01060    ; CHECK-NEXT: {{  $}}1061    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01062    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01063    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1064    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.800000e+011065    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_FCONSTANT float 2.000000e+011066    ; CHECK-NEXT: %fadd:_(s32) = nnan G_SELECT %cond(s1), [[C]], [[C1]]1067    ; CHECK-NEXT: S_ENDPGM 0, implicit %fadd(s32)1068    %reg:_(s32) = COPY $vgpr01069    %zero:_(s32) = G_CONSTANT i32 01070    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1071    %two:_(s32) = G_FCONSTANT float 2.01072    %four:_(s32) = G_FCONSTANT float 4.01073    %select:_(s32) = G_SELECT %cond, %two, %four1074    %sixteen:_(s32) = G_FCONSTANT float 16.01075    %fadd:_(s32) = nnan G_FADD %sixteen, %select1076    S_ENDPGM 0, implicit %fadd1077...1078 1079---1080name: fold_fsub_into_select_s32_01081tracksRegLiveness: true1082body: |1083  bb.0:1084    liveins: $vgpr01085    ; CHECK-LABEL: name: fold_fsub_into_select_s32_01086    ; CHECK: liveins: $vgpr01087    ; CHECK-NEXT: {{  $}}1088    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01089    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01090    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1091    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float -1.400000e+011092    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_FCONSTANT float -1.200000e+011093    ; CHECK-NEXT: %fsub:_(s32) = nnan G_SELECT %cond(s1), [[C]], [[C1]]1094    ; CHECK-NEXT: S_ENDPGM 0, implicit %fsub(s32)1095    %reg:_(s32) = COPY $vgpr01096    %zero:_(s32) = G_CONSTANT i32 01097    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1098    %two:_(s32) = G_FCONSTANT float 2.01099    %four:_(s32) = G_FCONSTANT float 4.01100    %select:_(s32) = G_SELECT %cond, %two, %four1101    %sixteen:_(s32) = G_FCONSTANT float 16.01102    %fsub:_(s32) = nnan G_FSUB %select, %sixteen1103    S_ENDPGM 0, implicit %fsub1104...1105 1106---1107name: fold_fmul_into_select_s32_01108tracksRegLiveness: true1109body: |1110  bb.0:1111    liveins: $vgpr01112    ; CHECK-LABEL: name: fold_fmul_into_select_s32_01113    ; CHECK: liveins: $vgpr01114    ; CHECK-NEXT: {{  $}}1115    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01116    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01117    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1118    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 3.200000e+011119    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_FCONSTANT float 6.400000e+011120    ; CHECK-NEXT: %fmul:_(s32) = nnan G_SELECT %cond(s1), [[C]], [[C1]]1121    ; CHECK-NEXT: S_ENDPGM 0, implicit %fmul(s32)1122    %reg:_(s32) = COPY $vgpr01123    %zero:_(s32) = G_CONSTANT i32 01124    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1125    %two:_(s32) = G_FCONSTANT float 2.01126    %four:_(s32) = G_FCONSTANT float 4.01127    %select:_(s32) = G_SELECT %cond, %two, %four1128    %sixteen:_(s32) = G_FCONSTANT float 16.01129    %fmul:_(s32) = nnan G_FMUL %select, %sixteen1130    S_ENDPGM 0, implicit %fmul1131...1132 1133---1134name: fold_fdiv_into_select_s32_01135tracksRegLiveness: true1136body: |1137  bb.0:1138    liveins: $vgpr01139    ; CHECK-LABEL: name: fold_fdiv_into_select_s32_01140    ; CHECK: liveins: $vgpr01141    ; CHECK-NEXT: {{  $}}1142    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01143    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01144    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1145    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.250000e-011146    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_FCONSTANT float 2.500000e-011147    ; CHECK-NEXT: %fdiv:_(s32) = nnan G_SELECT %cond(s1), [[C]], [[C1]]1148    ; CHECK-NEXT: S_ENDPGM 0, implicit %fdiv(s32)1149    %reg:_(s32) = COPY $vgpr01150    %zero:_(s32) = G_CONSTANT i32 01151    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1152    %two:_(s32) = G_FCONSTANT float 2.01153    %four:_(s32) = G_FCONSTANT float 4.01154    %select:_(s32) = G_SELECT %cond, %two, %four1155    %sixteen:_(s32) = G_FCONSTANT float 16.01156    %fdiv:_(s32) = nnan G_FDIV %select, %sixteen1157    S_ENDPGM 0, implicit %fdiv1158...1159 1160---1161name: fold_frem_into_select_s32_01162tracksRegLiveness: true1163body: |1164  bb.0:1165    liveins: $vgpr01166    ; CHECK-LABEL: name: fold_frem_into_select_s32_01167    ; CHECK: liveins: $vgpr01168    ; CHECK-NEXT: {{  $}}1169    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01170    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01171    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1172    ; CHECK-NEXT: %two:_(s32) = G_FCONSTANT float 2.000000e+001173    ; CHECK-NEXT: %four:_(s32) = G_FCONSTANT float 4.000000e+001174    ; CHECK-NEXT: %frem:_(s32) = nnan G_SELECT %cond(s1), %two, %four1175    ; CHECK-NEXT: S_ENDPGM 0, implicit %frem(s32)1176    %reg:_(s32) = COPY $vgpr01177    %zero:_(s32) = G_CONSTANT i32 01178    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1179    %two:_(s32) = G_FCONSTANT float 2.01180    %four:_(s32) = G_FCONSTANT float 4.01181    %select:_(s32) = G_SELECT %cond, %two, %four1182    %sixteen:_(s32) = G_FCONSTANT float 16.01183    %frem:_(s32) = nnan G_FREM %select, %sixteen1184    S_ENDPGM 0, implicit %frem1185...1186 1187---1188name: fold_fpow_into_select_s32_01189tracksRegLiveness: true1190body: |1191  bb.0:1192    liveins: $vgpr01193    ; CHECK-LABEL: name: fold_fpow_into_select_s32_01194    ; CHECK: liveins: $vgpr01195    ; CHECK-NEXT: {{  $}}1196    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01197    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01198    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1199    ; CHECK-NEXT: %two:_(s32) = G_FCONSTANT float 2.000000e+001200    ; CHECK-NEXT: %four:_(s32) = G_FCONSTANT float 4.000000e+001201    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %two, %four1202    ; CHECK-NEXT: %sixteen:_(s32) = G_FCONSTANT float 1.600000e+011203    ; CHECK-NEXT: %fpow:_(s32) = nnan G_FPOW %select, %sixteen1204    ; CHECK-NEXT: S_ENDPGM 0, implicit %fpow(s32)1205    %reg:_(s32) = COPY $vgpr01206    %zero:_(s32) = G_CONSTANT i32 01207    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1208    %two:_(s32) = G_FCONSTANT float 2.01209    %four:_(s32) = G_FCONSTANT float 4.01210    %select:_(s32) = G_SELECT %cond, %two, %four1211    %sixteen:_(s32) = G_FCONSTANT float 16.01212    %fpow:_(s32) = nnan G_FPOW %select, %sixteen1213    S_ENDPGM 0, implicit %fpow1214...1215 1216---1217name: fold_fminnum_into_select_s32_01218tracksRegLiveness: true1219body: |1220  bb.0:1221    liveins: $vgpr01222    ; CHECK-LABEL: name: fold_fminnum_into_select_s32_01223    ; CHECK: liveins: $vgpr01224    ; CHECK-NEXT: {{  $}}1225    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01226    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01227    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1228    ; CHECK-NEXT: %two:_(s32) = G_FCONSTANT float 2.000000e+001229    ; CHECK-NEXT: %four:_(s32) = G_FCONSTANT float 4.000000e+001230    ; CHECK-NEXT: %fminnum:_(s32) = nnan G_SELECT %cond(s1), %two, %four1231    ; CHECK-NEXT: S_ENDPGM 0, implicit %fminnum(s32)1232    %reg:_(s32) = COPY $vgpr01233    %zero:_(s32) = G_CONSTANT i32 01234    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1235    %two:_(s32) = G_FCONSTANT float 2.01236    %four:_(s32) = G_FCONSTANT float 4.01237    %select:_(s32) = G_SELECT %cond, %two, %four1238    %sixteen:_(s32) = G_FCONSTANT float 16.01239    %fminnum:_(s32) = nnan G_FMINNUM %select, %sixteen1240    S_ENDPGM 0, implicit %fminnum1241...1242 1243---1244name: fold_fminnum_ieee_into_select_s32_01245tracksRegLiveness: true1246body: |1247  bb.0:1248    liveins: $vgpr01249    ; CHECK-LABEL: name: fold_fminnum_ieee_into_select_s32_01250    ; CHECK: liveins: $vgpr01251    ; CHECK-NEXT: {{  $}}1252    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01253    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01254    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1255    ; CHECK-NEXT: %two:_(s32) = G_FCONSTANT float 2.000000e+001256    ; CHECK-NEXT: %four:_(s32) = G_FCONSTANT float 4.000000e+001257    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %two, %four1258    ; CHECK-NEXT: %sixteen:_(s32) = G_FCONSTANT float 1.600000e+011259    ; CHECK-NEXT: %fminnum_ieee:_(s32) = nnan G_FMINNUM_IEEE %select, %sixteen1260    ; CHECK-NEXT: S_ENDPGM 0, implicit %fminnum_ieee(s32)1261    %reg:_(s32) = COPY $vgpr01262    %zero:_(s32) = G_CONSTANT i32 01263    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1264    %two:_(s32) = G_FCONSTANT float 2.01265    %four:_(s32) = G_FCONSTANT float 4.01266    %select:_(s32) = G_SELECT %cond, %two, %four1267    %sixteen:_(s32) = G_FCONSTANT float 16.01268    %fminnum_ieee:_(s32) = nnan G_FMINNUM_IEEE %select, %sixteen1269    S_ENDPGM 0, implicit %fminnum_ieee1270...1271 1272---1273name: fold_fmaxnum_into_select_s32_01274tracksRegLiveness: true1275body: |1276  bb.0:1277    liveins: $vgpr01278    ; CHECK-LABEL: name: fold_fmaxnum_into_select_s32_01279    ; CHECK: liveins: $vgpr01280    ; CHECK-NEXT: {{  $}}1281    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01282    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01283    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1284    ; CHECK-NEXT: %four:_(s32) = G_FCONSTANT float 4.000000e+001285    ; CHECK-NEXT: %three:_(s32) = G_FCONSTANT float 3.000000e+001286    ; CHECK-NEXT: %fmaxnum:_(s32) = nnan G_SELECT %cond(s1), %three, %four1287    ; CHECK-NEXT: S_ENDPGM 0, implicit %fmaxnum(s32)1288    %reg:_(s32) = COPY $vgpr01289    %zero:_(s32) = G_CONSTANT i32 01290    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1291    %two:_(s32) = G_FCONSTANT float 2.01292    %four:_(s32) = G_FCONSTANT float 4.01293    %select:_(s32) = G_SELECT %cond, %two, %four1294    %three:_(s32) = G_FCONSTANT float 3.01295    %fmaxnum:_(s32) = nnan G_FMAXNUM %select, %three1296    S_ENDPGM 0, implicit %fmaxnum1297...1298 1299---1300name: fold_fmaxnum_ieee_into_select_s32_01301tracksRegLiveness: true1302body: |1303  bb.0:1304    liveins: $vgpr01305    ; CHECK-LABEL: name: fold_fmaxnum_ieee_into_select_s32_01306    ; CHECK: liveins: $vgpr01307    ; CHECK-NEXT: {{  $}}1308    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01309    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01310    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1311    ; CHECK-NEXT: %two:_(s32) = G_FCONSTANT float 2.000000e+001312    ; CHECK-NEXT: %four:_(s32) = G_FCONSTANT float 4.000000e+001313    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %two, %four1314    ; CHECK-NEXT: %three:_(s32) = G_FCONSTANT float 3.000000e+001315    ; CHECK-NEXT: %fmaxnum_ieee:_(s32) = nnan G_FMAXNUM_IEEE %select, %three1316    ; CHECK-NEXT: S_ENDPGM 0, implicit %fmaxnum_ieee(s32)1317    %reg:_(s32) = COPY $vgpr01318    %zero:_(s32) = G_CONSTANT i32 01319    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1320    %two:_(s32) = G_FCONSTANT float 2.01321    %four:_(s32) = G_FCONSTANT float 4.01322    %select:_(s32) = G_SELECT %cond, %two, %four1323    %three:_(s32) = G_FCONSTANT float 3.01324    %fmaxnum_ieee:_(s32) = nnan G_FMAXNUM_IEEE %select, %three1325    S_ENDPGM 0, implicit %fmaxnum_ieee1326...1327 1328---1329name: fold_fminimum_into_select_s32_01330tracksRegLiveness: true1331body: |1332  bb.0:1333    liveins: $vgpr01334    ; CHECK-LABEL: name: fold_fminimum_into_select_s32_01335    ; CHECK: liveins: $vgpr01336    ; CHECK-NEXT: {{  $}}1337    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01338    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01339    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1340    ; CHECK-NEXT: %two:_(s32) = G_FCONSTANT float 2.000000e+001341    ; CHECK-NEXT: %four:_(s32) = G_FCONSTANT float 4.000000e+001342    ; CHECK-NEXT: %fminimum:_(s32) = nnan G_SELECT %cond(s1), %two, %four1343    ; CHECK-NEXT: S_ENDPGM 0, implicit %fminimum(s32)1344    %reg:_(s32) = COPY $vgpr01345    %zero:_(s32) = G_CONSTANT i32 01346    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1347    %two:_(s32) = G_FCONSTANT float 2.01348    %four:_(s32) = G_FCONSTANT float 4.01349    %select:_(s32) = G_SELECT %cond, %two, %four1350    %sixteen:_(s32) = G_FCONSTANT float 16.01351    %fminimum:_(s32) = nnan G_FMINIMUM %select, %sixteen1352    S_ENDPGM 0, implicit %fminimum1353...1354 1355---1356name: fold_fmaximum_into_select_s32_01357tracksRegLiveness: true1358body: |1359  bb.0:1360    liveins: $vgpr01361    ; CHECK-LABEL: name: fold_fmaximum_into_select_s32_01362    ; CHECK: liveins: $vgpr01363    ; CHECK-NEXT: {{  $}}1364    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01365    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01366    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1367    ; CHECK-NEXT: %four:_(s32) = G_FCONSTANT float 4.000000e+001368    ; CHECK-NEXT: %three:_(s32) = G_FCONSTANT float 3.000000e+001369    ; CHECK-NEXT: %fmaximum:_(s32) = nnan G_SELECT %cond(s1), %three, %four1370    ; CHECK-NEXT: S_ENDPGM 0, implicit %fmaximum(s32)1371    %reg:_(s32) = COPY $vgpr01372    %zero:_(s32) = G_CONSTANT i32 01373    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1374    %two:_(s32) = G_FCONSTANT float 2.01375    %four:_(s32) = G_FCONSTANT float 4.01376    %select:_(s32) = G_SELECT %cond, %two, %four1377    %three:_(s32) = G_FCONSTANT float 3.01378    %fmaximum:_(s32) = nnan G_FMAXIMUM %select, %three1379    S_ENDPGM 0, implicit %fmaximum1380...1381 1382---1383name: fold_fcopysign_into_select_s32_01384tracksRegLiveness: true1385body: |1386  bb.0:1387    liveins: $vgpr01388    ; CHECK-LABEL: name: fold_fcopysign_into_select_s32_01389    ; CHECK: liveins: $vgpr01390    ; CHECK-NEXT: {{  $}}1391    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01392    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01393    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1394    ; CHECK-NEXT: %two:_(s32) = G_FCONSTANT float 2.000000e+001395    ; CHECK-NEXT: %four:_(s32) = G_FCONSTANT float 4.000000e+001396    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %two, %four1397    ; CHECK-NEXT: %sixteen:_(s32) = G_FCONSTANT float 1.600000e+011398    ; CHECK-NEXT: %fcopysign:_(s32) = nnan G_FCOPYSIGN %select, %sixteen(s32)1399    ; CHECK-NEXT: S_ENDPGM 0, implicit %fcopysign(s32)1400    %reg:_(s32) = COPY $vgpr01401    %zero:_(s32) = G_CONSTANT i32 01402    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1403    %two:_(s32) = G_FCONSTANT float 2.01404    %four:_(s32) = G_FCONSTANT float 4.01405    %select:_(s32) = G_SELECT %cond, %two, %four1406    %sixteen:_(s32) = G_FCONSTANT float 16.01407    %fcopysign:_(s32) = nnan G_FCOPYSIGN %select, %sixteen1408    S_ENDPGM 0, implicit %fcopysign1409...1410 1411---1412name: fold_fcopysign_into_select_s32_s64_01413tracksRegLiveness: true1414body: |1415  bb.0:1416    liveins: $vgpr01417    ; CHECK-LABEL: name: fold_fcopysign_into_select_s32_s64_01418    ; CHECK: liveins: $vgpr01419    ; CHECK-NEXT: {{  $}}1420    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01421    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01422    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1423    ; CHECK-NEXT: %two:_(s32) = G_FCONSTANT float 2.000000e+001424    ; CHECK-NEXT: %four:_(s32) = G_FCONSTANT float 4.000000e+001425    ; CHECK-NEXT: %select:_(s32) = G_SELECT %cond(s1), %two, %four1426    ; CHECK-NEXT: %sixteen:_(s64) = G_FCONSTANT double 1.600000e+011427    ; CHECK-NEXT: %fcopysign:_(s32) = nnan G_FCOPYSIGN %select, %sixteen(s64)1428    ; CHECK-NEXT: S_ENDPGM 0, implicit %fcopysign(s32)1429    %reg:_(s32) = COPY $vgpr01430    %zero:_(s32) = G_CONSTANT i32 01431    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1432    %two:_(s32) = G_FCONSTANT float 2.01433    %four:_(s32) = G_FCONSTANT float 4.01434    %select:_(s32) = G_SELECT %cond, %two, %four1435    %sixteen:_(s64) = G_FCONSTANT double 16.01436    %fcopysign:_(s32) = nnan G_FCOPYSIGN %select, %sixteen1437    S_ENDPGM 0, implicit %fcopysign1438...1439 1440---1441name: fold_fcopysign_into_select_s64_s32_01442tracksRegLiveness: true1443body: |1444  bb.0:1445    liveins: $vgpr01446    ; CHECK-LABEL: name: fold_fcopysign_into_select_s64_s32_01447    ; CHECK: liveins: $vgpr01448    ; CHECK-NEXT: {{  $}}1449    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01450    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01451    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1452    ; CHECK-NEXT: %two:_(s64) = G_FCONSTANT double 2.000000e+001453    ; CHECK-NEXT: %four:_(s64) = G_FCONSTANT double 4.000000e+001454    ; CHECK-NEXT: %select:_(s64) = G_SELECT %cond(s1), %two, %four1455    ; CHECK-NEXT: %sixteen:_(s32) = G_FCONSTANT float 1.600000e+011456    ; CHECK-NEXT: %fcopysign:_(s64) = nnan G_FCOPYSIGN %select, %sixteen(s32)1457    ; CHECK-NEXT: S_ENDPGM 0, implicit %fcopysign(s64)1458    %reg:_(s32) = COPY $vgpr01459    %zero:_(s32) = G_CONSTANT i32 01460    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1461    %two:_(s64) = G_FCONSTANT double 2.01462    %four:_(s64) = G_FCONSTANT double 4.01463    %select:_(s64) = G_SELECT %cond, %two, %four1464    %sixteen:_(s32) = G_FCONSTANT float 16.01465    %fcopysign:_(s64) = nnan G_FCOPYSIGN %select, %sixteen1466    S_ENDPGM 0, implicit %fcopysign1467...1468 1469# Test handling of intermediate copy between add and select.1470---1471name: fold_add_copy_into_select_s32_01472tracksRegLiveness: true1473body: |1474  bb.0:1475    liveins: $vgpr01476    ; CHECK-LABEL: name: fold_add_copy_into_select_s32_01477    ; CHECK: liveins: $vgpr01478    ; CHECK-NEXT: {{  $}}1479    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01480    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01481    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1482    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 401483    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 501484    ; CHECK-NEXT: %add:_(s32) = G_SELECT %cond(s1), [[C]], [[C1]]1485    ; CHECK-NEXT: S_ENDPGM 0, implicit %add(s32)1486    %reg:_(s32) = COPY $vgpr01487    %zero:_(s32) = G_CONSTANT i32 01488    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1489    %ten:_(s32) = G_CONSTANT i32 101490    %twenty:_(s32) = G_CONSTANT i32 201491    %select:_(s32) = G_SELECT %cond, %ten, %twenty1492    %thirty:_(s32) = G_CONSTANT i32 301493    %copy_select:_(s32) = COPY %select1494    %add:_(s32) = G_ADD %copy_select, %thirty1495    S_ENDPGM 0, implicit %add1496...1497 1498---1499name: fold_add_copy_into_select_s32_11500tracksRegLiveness: true1501body: |1502  bb.0:1503    liveins: $vgpr01504    ; CHECK-LABEL: name: fold_add_copy_into_select_s32_11505    ; CHECK: liveins: $vgpr01506    ; CHECK-NEXT: {{  $}}1507    ; CHECK-NEXT: %reg:_(s32) = COPY $vgpr01508    ; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 01509    ; CHECK-NEXT: %cond:_(s1) = G_ICMP intpred(eq), %reg(s32), %zero1510    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 401511    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 501512    ; CHECK-NEXT: %add:_(s32) = G_SELECT %cond(s1), [[C]], [[C1]]1513    ; CHECK-NEXT: S_ENDPGM 0, implicit %add(s32)1514    %reg:_(s32) = COPY $vgpr01515    %zero:_(s32) = G_CONSTANT i32 01516    %cond:_(s1) = G_ICMP intpred(eq), %reg, %zero1517    %ten:_(s32) = G_CONSTANT i32 101518    %twenty:_(s32) = G_CONSTANT i32 201519    %select:_(s32) = G_SELECT %cond, %ten, %twenty1520    %thirty:_(s32) = G_CONSTANT i32 301521    %copy_select:_(s32) = COPY %select1522    %add:_(s32) = G_ADD %thirty, %copy_select1523    S_ENDPGM 0, implicit %add1524...1525