601 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck %s -check-prefixes=GCN3 4---5name: select_s32_scc6legalized: true7regBankSelected: true8 9body: |10 bb.0:11 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr312 13 ; GCN-LABEL: name: select_s32_scc14 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr315 ; GCN-NEXT: {{ $}}16 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr017 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr118 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr219 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr320 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc21 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc22 ; GCN-NEXT: $scc = COPY [[COPY4]]23 ; GCN-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY2]], [[COPY3]], implicit $scc24 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B32_]]25 %0:sgpr(s32) = COPY $sgpr026 %1:sgpr(s32) = COPY $sgpr127 %2:sgpr(s32) = COPY $sgpr228 %3:sgpr(s32) = COPY $sgpr329 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %130 %5:sgpr(s32) = G_SELECT %4, %2, %331 S_ENDPGM 0, implicit %532 33...34 35---36name: select_s64_scc37legalized: true38regBankSelected: true39 40body: |41 bb.0:42 liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr543 44 ; GCN-LABEL: name: select_s64_scc45 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr546 ; GCN-NEXT: {{ $}}47 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr048 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr149 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr350 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr551 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc52 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc53 ; GCN-NEXT: $scc = COPY [[COPY4]]54 ; GCN-NEXT: [[S_CSELECT_B64_:%[0-9]+]]:sreg_64 = S_CSELECT_B64 [[COPY2]], [[COPY3]], implicit $scc55 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B64_]]56 %0:sgpr(s32) = COPY $sgpr057 %1:sgpr(s32) = COPY $sgpr158 %2:sgpr(s64) = COPY $sgpr2_sgpr359 %3:sgpr(s64) = COPY $sgpr4_sgpr560 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %161 %5:sgpr(s64) = G_SELECT %4, %2, %362 S_ENDPGM 0, implicit %563 64...65 66---67name: select_p0_scc68legalized: true69regBankSelected: true70 71body: |72 bb.0:73 liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr574 75 ; GCN-LABEL: name: select_p0_scc76 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr577 ; GCN-NEXT: {{ $}}78 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr079 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr180 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr381 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr582 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc83 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc84 ; GCN-NEXT: $scc = COPY [[COPY4]]85 ; GCN-NEXT: [[S_CSELECT_B64_:%[0-9]+]]:sreg_64 = S_CSELECT_B64 [[COPY2]], [[COPY3]], implicit $scc86 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B64_]]87 %0:sgpr(s32) = COPY $sgpr088 %1:sgpr(s32) = COPY $sgpr189 %2:sgpr(p0) = COPY $sgpr2_sgpr390 %3:sgpr(p0) = COPY $sgpr4_sgpr591 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %192 %5:sgpr(p0) = G_SELECT %4, %2, %393 S_ENDPGM 0, implicit %594 95...96 97---98name: select_p1_scc99legalized: true100regBankSelected: true101 102body: |103 bb.0:104 liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5105 106 ; GCN-LABEL: name: select_p1_scc107 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5108 ; GCN-NEXT: {{ $}}109 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0110 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1111 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3112 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5113 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc114 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc115 ; GCN-NEXT: $scc = COPY [[COPY4]]116 ; GCN-NEXT: [[S_CSELECT_B64_:%[0-9]+]]:sreg_64 = S_CSELECT_B64 [[COPY2]], [[COPY3]], implicit $scc117 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B64_]]118 %0:sgpr(s32) = COPY $sgpr0119 %1:sgpr(s32) = COPY $sgpr1120 %2:sgpr(p1) = COPY $sgpr2_sgpr3121 %3:sgpr(p1) = COPY $sgpr4_sgpr5122 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %1123 %5:sgpr(p1) = G_SELECT %4, %2, %3124 S_ENDPGM 0, implicit %5125 126...127 128---129name: select_p999_scc130legalized: true131regBankSelected: true132 133body: |134 bb.0:135 liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5136 137 ; GCN-LABEL: name: select_p999_scc138 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5139 ; GCN-NEXT: {{ $}}140 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0141 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1142 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3143 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5144 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc145 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc146 ; GCN-NEXT: $scc = COPY [[COPY4]]147 ; GCN-NEXT: [[S_CSELECT_B64_:%[0-9]+]]:sreg_64 = S_CSELECT_B64 [[COPY2]], [[COPY3]], implicit $scc148 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B64_]]149 %0:sgpr(s32) = COPY $sgpr0150 %1:sgpr(s32) = COPY $sgpr1151 %2:sgpr(p999) = COPY $sgpr2_sgpr3152 %3:sgpr(p999) = COPY $sgpr4_sgpr5153 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %1154 %5:sgpr(p999) = G_SELECT %4, %2, %3155 S_ENDPGM 0, implicit %5156 157...158 159---160name: select_v4s16_scc161legalized: true162regBankSelected: true163 164body: |165 bb.0:166 liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5167 168 ; GCN-LABEL: name: select_v4s16_scc169 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5170 ; GCN-NEXT: {{ $}}171 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0172 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1173 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3174 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5175 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc176 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc177 ; GCN-NEXT: $scc = COPY [[COPY4]]178 ; GCN-NEXT: [[S_CSELECT_B64_:%[0-9]+]]:sreg_64 = S_CSELECT_B64 [[COPY2]], [[COPY3]], implicit $scc179 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B64_]]180 %0:sgpr(s32) = COPY $sgpr0181 %1:sgpr(s32) = COPY $sgpr1182 %2:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3183 %3:sgpr(<4 x s16>) = COPY $sgpr4_sgpr5184 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %1185 %5:sgpr(<4 x s16>) = G_SELECT %4, %2, %3186 S_ENDPGM 0, implicit %5187 188...189 190---191name: select_s16_scc192legalized: true193regBankSelected: true194 195body: |196 bb.0:197 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3198 199 ; GCN-LABEL: name: select_s16_scc200 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3201 ; GCN-NEXT: {{ $}}202 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0203 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1204 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2205 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3206 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY2]], [[COPY3]], implicit-def $scc207 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc208 ; GCN-NEXT: $scc = COPY [[COPY4]]209 ; GCN-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY]], [[COPY1]], implicit $scc210 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B32_]]211 %0:sgpr(s32) = COPY $sgpr0212 %1:sgpr(s32) = COPY $sgpr1213 %2:sgpr(s32) = COPY $sgpr2214 %3:sgpr(s32) = COPY $sgpr3215 %4:sgpr(s16) = G_TRUNC %0216 %5:sgpr(s16) = G_TRUNC %1217 %6:sgpr(s32) = G_ICMP intpred(eq), %2, %3218 %7:sgpr(s16) = G_SELECT %6, %4, %5219 S_ENDPGM 0, implicit %7220 221...222 223---224name: select_v2s16_scc225legalized: true226regBankSelected: true227 228body: |229 bb.0:230 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3231 232 ; GCN-LABEL: name: select_v2s16_scc233 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3234 ; GCN-NEXT: {{ $}}235 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0236 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1237 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2238 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3239 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc240 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc241 ; GCN-NEXT: $scc = COPY [[COPY4]]242 ; GCN-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY2]], [[COPY3]], implicit $scc243 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B32_]]244 %0:sgpr(s32) = COPY $sgpr0245 %1:sgpr(s32) = COPY $sgpr1246 %2:sgpr(<2 x s16>) = COPY $sgpr2247 %3:sgpr(<2 x s16>) = COPY $sgpr3248 %4:sgpr(s32) = G_ICMP intpred(eq), %0, %1249 %5:sgpr(<2 x s16>) = G_SELECT %4, %2, %3250 S_ENDPGM 0, implicit %5251 252...253 254---255name: select_s32_vcc256legalized: true257regBankSelected: true258 259body: |260 bb.0:261 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3262 263 ; GCN-LABEL: name: select_s32_vcc264 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3265 ; GCN-NEXT: {{ $}}266 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0267 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1268 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2269 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3270 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec271 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY3]], 0, [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit $exec272 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]273 %0:vgpr(s32) = COPY $vgpr0274 %1:vgpr(s32) = COPY $vgpr1275 %2:vgpr(s32) = COPY $vgpr2276 %3:vgpr(s32) = COPY $vgpr3277 %4:vcc(s1) = G_ICMP intpred(eq), %0, %1278 %5:vgpr(s32) = G_SELECT %4, %2, %3279 S_ENDPGM 0, implicit %5280 281...282 283---284name: select_s16_vcc285legalized: true286regBankSelected: true287 288body: |289 bb.0:290 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3291 292 ; GCN-LABEL: name: select_s16_vcc293 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3294 ; GCN-NEXT: {{ $}}295 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0296 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1297 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2298 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3299 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY2]], [[COPY3]], implicit $exec300 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY1]], 0, [[COPY]], [[V_CMP_EQ_U32_e64_]], implicit $exec301 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]302 %0:vgpr(s32) = COPY $vgpr0303 %1:vgpr(s32) = COPY $vgpr1304 %2:vgpr(s32) = COPY $vgpr2305 %3:vgpr(s32) = COPY $vgpr3306 %4:vgpr(s16) = G_TRUNC %0307 %5:vgpr(s16) = G_TRUNC %1308 %6:vcc(s1) = G_ICMP intpred(eq), %2, %3309 %7:vgpr(s16) = G_SELECT %6, %4, %5310 S_ENDPGM 0, implicit %7311 312...313 314---315name: select_v2s16_vcc316legalized: true317regBankSelected: true318 319body: |320 bb.0:321 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3322 323 ; GCN-LABEL: name: select_v2s16_vcc324 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3325 ; GCN-NEXT: {{ $}}326 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0327 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1328 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2329 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3330 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec331 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY3]], 0, [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit $exec332 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]333 %0:vgpr(s32) = COPY $vgpr0334 %1:vgpr(s32) = COPY $vgpr1335 %2:vgpr(<2 x s16>) = COPY $vgpr2336 %3:vgpr(<2 x s16>) = COPY $vgpr3337 %4:vcc(s1) = G_ICMP intpred(eq), %0, %1338 %5:vgpr(<2 x s16>) = G_SELECT %4, %2, %3339 S_ENDPGM 0, implicit %5340 341...342 343---344name: select_p3_vcc345legalized: true346regBankSelected: true347 348body: |349 bb.0:350 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3351 352 ; GCN-LABEL: name: select_p3_vcc353 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3354 ; GCN-NEXT: {{ $}}355 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0356 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1357 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2358 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3359 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec360 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY3]], 0, [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit $exec361 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]362 %0:vgpr(s32) = COPY $vgpr0363 %1:vgpr(s32) = COPY $vgpr1364 %2:vgpr(p3) = COPY $vgpr2365 %3:vgpr(p3) = COPY $vgpr3366 %4:vcc(s1) = G_ICMP intpred(eq), %0, %1367 %5:vgpr(p3) = G_SELECT %4, %2, %3368 S_ENDPGM 0, implicit %5369 370...371 372# Fold source modifiers into VOP select373---374name: select_s32_vcc_fneg_lhs375legalized: true376regBankSelected: true377 378body: |379 bb.0:380 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3381 382 ; GCN-LABEL: name: select_s32_vcc_fneg_lhs383 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3384 ; GCN-NEXT: {{ $}}385 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0386 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1387 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2388 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3389 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec390 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY3]], 1, [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit $exec391 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]392 %0:vgpr(s32) = COPY $vgpr0393 %1:vgpr(s32) = COPY $vgpr1394 %2:vgpr(s32) = COPY $vgpr2395 %3:vgpr(s32) = COPY $vgpr3396 %4:vgpr(s32) = G_FNEG %2397 %5:vcc(s1) = G_ICMP intpred(eq), %0, %1398 %6:vgpr(s32) = G_SELECT %5, %4, %3399 S_ENDPGM 0, implicit %6400 401...402 403---404name: select_s32_vcc_fneg_rhs405legalized: true406regBankSelected: true407 408body: |409 bb.0:410 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3411 412 ; GCN-LABEL: name: select_s32_vcc_fneg_rhs413 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3414 ; GCN-NEXT: {{ $}}415 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0416 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1417 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2418 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3419 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec420 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 1, [[COPY3]], 0, [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit $exec421 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]422 %0:vgpr(s32) = COPY $vgpr0423 %1:vgpr(s32) = COPY $vgpr1424 %2:vgpr(s32) = COPY $vgpr2425 %3:vgpr(s32) = COPY $vgpr3426 %4:vgpr(s32) = G_FNEG %3427 %5:vcc(s1) = G_ICMP intpred(eq), %0, %1428 %6:vgpr(s32) = G_SELECT %5, %2, %4429 S_ENDPGM 0, implicit %6430 431...432 433---434name: select_s32_vcc_fneg_fabs_lhs435legalized: true436regBankSelected: true437 438body: |439 bb.0:440 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3441 442 ; GCN-LABEL: name: select_s32_vcc_fneg_fabs_lhs443 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3444 ; GCN-NEXT: {{ $}}445 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0446 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1447 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2448 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3449 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec450 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 3, [[COPY3]], [[V_CMP_EQ_U32_e64_]], implicit $exec451 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]452 %0:vgpr(s32) = COPY $vgpr0453 %1:vgpr(s32) = COPY $vgpr1454 %2:vgpr(s32) = COPY $vgpr2455 %3:vgpr(s32) = COPY $vgpr3456 %4:vgpr(s32) = G_FABS %3457 %5:vgpr(s32) = G_FNEG %4458 %6:vcc(s1) = G_ICMP intpred(eq), %0, %1459 %7:vgpr(s32) = G_SELECT %6, %5, %2460 S_ENDPGM 0, implicit %7461 462...463 464# Make sure we don't try to fold source modifiers into non-32 bit value.465---466name: select_s16_vcc_fneg_lhs467legalized: true468regBankSelected: true469 470body: |471 bb.0:472 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3473 474 ; GCN-LABEL: name: select_s16_vcc_fneg_lhs475 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3476 ; GCN-NEXT: {{ $}}477 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0478 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1479 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2480 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3481 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768482 ; GCN-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec483 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY2]], [[COPY3]], implicit $exec484 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY1]], 0, [[V_XOR_B32_e64_]], [[V_CMP_EQ_U32_e64_]], implicit $exec485 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]486 %0:vgpr(s32) = COPY $vgpr0487 %1:vgpr(s32) = COPY $vgpr1488 %2:vgpr(s32) = COPY $vgpr2489 %3:vgpr(s32) = COPY $vgpr3490 %4:vgpr(s16) = G_TRUNC %0491 %5:vgpr(s16) = G_TRUNC %1492 %6:vgpr(s16) = G_FNEG %4493 %7:vcc(s1) = G_ICMP intpred(eq), %2, %3494 %8:vgpr(s16) = G_SELECT %7, %6, %5495 S_ENDPGM 0, implicit %8496 497...498 499 500# Make sure we don't try to fold source modifiers into a vector501---502name: select_v2s16_vcc_fneg_lhs503legalized: true504regBankSelected: true505 506body: |507 bb.0:508 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3509 510 ; GCN-LABEL: name: select_v2s16_vcc_fneg_lhs511 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3512 ; GCN-NEXT: {{ $}}513 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0514 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1515 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3516 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416517 ; GCN-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY2]], implicit $exec518 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec519 ; GCN-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[V_XOR_B32_e64_]], [[V_CMP_EQ_U32_e64_]], implicit $exec520 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]521 %0:vgpr(s32) = COPY $vgpr0522 %1:vgpr(s32) = COPY $vgpr1523 %2:vgpr(<2 x s16>) = COPY $vgpr2524 %3:vgpr(<2 x s16>) = COPY $vgpr3525 %4:vgpr(<2 x s16>) = G_FNEG %3526 %5:vcc(s1) = G_ICMP intpred(eq), %0, %1527 %6:vgpr(<2 x s16>) = G_SELECT %5, %4, %3528 S_ENDPGM 0, implicit %6529 530...531 532# Make sure we don't try to fold source modifiers into a scalar select533 534---535name: select_s32_scc_fneg_lhs536legalized: true537regBankSelected: true538 539body: |540 bb.0:541 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3542 543 ; GCN-LABEL: name: select_s32_scc_fneg_lhs544 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3545 ; GCN-NEXT: {{ $}}546 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0547 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1548 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2549 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3550 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648551 ; GCN-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY2]], [[S_MOV_B32_]], implicit-def dead $scc552 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc553 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc554 ; GCN-NEXT: $scc = COPY [[COPY4]]555 ; GCN-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[S_XOR_B32_]], [[COPY3]], implicit $scc556 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B32_]]557 %0:sgpr(s32) = COPY $sgpr0558 %1:sgpr(s32) = COPY $sgpr1559 %2:sgpr(s32) = COPY $sgpr2560 %3:sgpr(s32) = COPY $sgpr3561 %4:sgpr(s32) = G_FNEG %2562 %5:sgpr(s32) = G_ICMP intpred(eq), %0, %1563 %6:sgpr(s32) = G_SELECT %5, %4, %3564 S_ENDPGM 0, implicit %6565 566...567 568---569name: select_s32_scc_fneg_rhs570legalized: true571regBankSelected: true572 573body: |574 bb.0:575 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3576 577 ; GCN-LABEL: name: select_s32_scc_fneg_rhs578 ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3579 ; GCN-NEXT: {{ $}}580 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0581 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1582 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2583 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3584 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648585 ; GCN-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY3]], [[S_MOV_B32_]], implicit-def dead $scc586 ; GCN-NEXT: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc587 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $scc588 ; GCN-NEXT: $scc = COPY [[COPY4]]589 ; GCN-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY2]], [[S_XOR_B32_]], implicit $scc590 ; GCN-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B32_]]591 %0:sgpr(s32) = COPY $sgpr0592 %1:sgpr(s32) = COPY $sgpr1593 %2:sgpr(s32) = COPY $sgpr2594 %3:sgpr(s32) = COPY $sgpr3595 %4:sgpr(s32) = G_FNEG %3596 %5:sgpr(s32) = G_ICMP intpred(eq), %0, %1597 %6:sgpr(s32) = G_SELECT %5, %2, %4598 S_ENDPGM 0, implicit %6599 600...601