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