488 lines · plain
1# RUN: llc -mtriple=amdgcn -verify-machineinstrs -run-pass=si-optimize-exec-masking-pre-ra -o - %s | FileCheck -check-prefix=GCN %s2 3# GCN: name: negated_cond_vop24# GCN: %0:sreg_64_xexec = IMPLICIT_DEF5# GCN-NEXT: $vcc = S_ANDN2_B64 $exec, %0, implicit-def dead $scc6# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc7---8name: negated_cond_vop29body: |10 bb.0:11 %0:sreg_64_xexec = IMPLICIT_DEF12 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec13 V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec14 $vcc = S_AND_B64 $exec, killed $vcc, implicit-def dead $scc15 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc16 S_BRANCH %bb.117 18 bb.1:19 S_BRANCH %bb.220 21 bb.2:22 S_ENDPGM 023...24 25# GCN: name: negated_cond_vop326# GCN: %0:sreg_64_xexec = IMPLICIT_DEF27# GCN-NEXT: $vcc = S_ANDN2_B64 $exec, %0, implicit-def dead $scc28# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc29---30name: negated_cond_vop331body: |32 bb.0:33 %0:sreg_64_xexec = IMPLICIT_DEF34 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec35 %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1, 1, implicit $exec36 $vcc = S_AND_B64 killed %2, $exec, implicit-def dead $scc37 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc38 S_BRANCH %bb.139 40 bb.1:41 S_BRANCH %bb.242 43 bb.2:44 S_ENDPGM 045...46 47# GCN: name: negated_cond_vop2_redef_vcc148# GCN: %0:sreg_64_xexec = IMPLICIT_DEF49# GCN-NEXT: %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec50# GCN-NEXT: V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec51# GCN-NEXT: $vcc_lo = COPY $sgpr052# GCN-NEXT: $vcc = S_AND_B64 $exec, $vcc, implicit-def dead $scc53# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc54---55name: negated_cond_vop2_redef_vcc156body: |57 bb.0:58 %0:sreg_64_xexec = IMPLICIT_DEF59 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec60 V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec61 $vcc_lo = COPY $sgpr062 $vcc = S_AND_B64 $exec, killed $vcc, implicit-def dead $scc63 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc64 S_BRANCH %bb.165 66 bb.1:67 S_BRANCH %bb.268 69 bb.2:70 S_ENDPGM 071...72 73# GCN: name: negated_cond_vop2_redef_vcc274# GCN: %0:sreg_64_xexec = IMPLICIT_DEF75# GCN-NEXT: %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec76# GCN-NEXT: V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec77# GCN-NEXT: $vcc_hi = COPY $sgpr078# GCN-NEXT: $vcc = S_AND_B64 $exec, $vcc, implicit-def dead $scc79# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc80---81name: negated_cond_vop2_redef_vcc282body: |83 bb.0:84 %0:sreg_64_xexec = IMPLICIT_DEF85 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec86 V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec87 $vcc_hi = COPY $sgpr088 $vcc = S_AND_B64 $exec, killed $vcc, implicit-def dead $scc89 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc90 S_BRANCH %bb.191 92 bb.1:93 S_BRANCH %bb.294 95 bb.2:96 S_ENDPGM 097...98 99# GCN: name: negated_cond_vop3_redef_cmp100# GCN: %0:sreg_64_xexec = IMPLICIT_DEF101# GCN-NEXT: %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec102# GCN-NEXT: %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1, 1, implicit $exec103# GCN-NEXT: %2.sub1:sreg_64_xexec = COPY $sgpr0104# GCN-NEXT: $vcc = S_AND_B64 %2, $exec, implicit-def dead $scc105# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc106---107name: negated_cond_vop3_redef_cmp108body: |109 bb.0:110 %0:sreg_64_xexec = IMPLICIT_DEF111 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec112 %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1, 1, implicit $exec113 %2.sub1 = COPY $sgpr0114 $vcc = S_AND_B64 killed %2, $exec, implicit-def dead $scc115 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc116 S_BRANCH %bb.1117 118 bb.1:119 S_BRANCH %bb.2120 121 bb.2:122 S_ENDPGM 0123...124 125# GCN: name: negated_cond_undef_vcc126# GCN: $vcc = S_AND_B64 $exec, undef $vcc, implicit-def dead $scc127# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc128---129name: negated_cond_undef_vcc130body: |131 bb.0:132 $vcc = S_AND_B64 $exec, undef $vcc, implicit-def dead $scc133 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc134 S_BRANCH %bb.1135 136 bb.1:137 S_BRANCH %bb.2138 139 bb.2:140 S_ENDPGM 0141...142 143# GCN: name: negated_cond_vop3_imp_vcc144# GCN: $vcc = IMPLICIT_DEF145# GCN-NEXT: $vcc = S_ANDN2_B64 $exec, $vcc, implicit-def dead $scc146# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc147---148name: negated_cond_vop3_imp_vcc149body: |150 bb.0:151 $vcc = IMPLICIT_DEF152 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, $vcc, implicit $exec153 %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1, 1, implicit $exec154 $vcc = S_AND_B64 killed %2, $exec, implicit-def dead $scc155 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc156 S_BRANCH %bb.1157 158 bb.1:159 S_BRANCH %bb.2160 161 bb.2:162 S_ENDPGM 0163...164 165# GCN: name: negated_cond_vop2_imp_vcc166# GCN: $vcc = IMPLICIT_DEF167# GCN-NEXT: $vcc = S_ANDN2_B64 $exec, $vcc, implicit-def dead $scc168# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc169---170name: negated_cond_vop2_imp_vcc171body: |172 bb.0:173 $vcc = IMPLICIT_DEF174 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, $vcc, implicit $exec175 V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec176 $vcc = S_AND_B64 killed $vcc, $exec, implicit-def dead $scc177 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc178 S_BRANCH %bb.1179 180 bb.1:181 S_BRANCH %bb.2182 183 bb.2:184 S_ENDPGM 0185...186 187# GCN: name: negated_cond_vop3_redef_sel188# GCN: %0:sreg_64_xexec = IMPLICIT_DEF189# GCN-NEXT: dead %3:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec190# GCN-NEXT: %1:vgpr_32 = COPY $vgpr0191# GCN-NEXT: %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1, 1, implicit $exec192# GCN-NEXT: $vcc = S_AND_B64 %2, $exec, implicit-def dead $scc193# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc194---195name: negated_cond_vop3_redef_sel196body: |197 bb.0:198 %0:sreg_64_xexec = IMPLICIT_DEF199 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec200 %1:vgpr_32 = COPY $vgpr0201 %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1, 1, implicit $exec202 $vcc = S_AND_B64 killed %2, $exec, implicit-def dead $scc203 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc204 S_BRANCH %bb.1205 206 bb.1:207 S_BRANCH %bb.2208 209 bb.2:210 S_ENDPGM 0211...212 213# GCN: name: negated_cond_vop2_used_sel214# GCN: %0:sreg_64_xexec = IMPLICIT_DEF215# GCN-NEXT: %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec216# GCN-NEXT: $vcc = S_ANDN2_B64 $exec, %0, implicit-def dead $scc217# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc218---219name: negated_cond_vop2_used_sel220body: |221 bb.0:222 %0:sreg_64_xexec = IMPLICIT_DEF223 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec224 V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec225 $vcc = S_AND_B64 $exec, killed $vcc, implicit-def dead $scc226 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc227 S_BRANCH %bb.1228 229 bb.1:230 S_BRANCH %bb.2231 232 bb.2:233 $vgpr0 = COPY %1234 S_ENDPGM 0, implicit $vgpr0235...236 237# GCN: name: negated_cond_vop2_used_vcc238# GCN: %0:sreg_64_xexec = IMPLICIT_DEF239# GCN-NEXT: %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec240# GCN-NEXT: V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec241# GCN-NEXT: $sgpr0_sgpr1 = COPY $vcc242# GCN-NEXT: $vcc = S_ANDN2_B64 $exec, %0, implicit-def dead $scc243# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc244---245name: negated_cond_vop2_used_vcc246body: |247 bb.0:248 %0:sreg_64_xexec = IMPLICIT_DEF249 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec250 V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec251 $sgpr0_sgpr1 = COPY $vcc252 $vcc = S_AND_B64 $exec, killed $vcc, implicit-def dead $scc253 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc254 S_BRANCH %bb.1255 256 bb.1:257 S_BRANCH %bb.2258 259 bb.2:260 S_ENDPGM 0, implicit $vgpr0261...262 263# GCN: name: negated_cond_vop3_sel_wrong_subreg1264# GCN: %0:sreg_64_xexec = IMPLICIT_DEF265# GCN-NEXT: %1.sub1:vreg_64 = IMPLICIT_DEF266# GCN-NEXT: %1.sub0:vreg_64 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec267# GCN-NEXT: %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1.sub1, 1, implicit $exec268# GCN-NEXT: $vcc = S_AND_B64 %2, $exec, implicit-def dead $scc269# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc270---271name: negated_cond_vop3_sel_wrong_subreg1272body: |273 bb.0:274 %0:sreg_64_xexec = IMPLICIT_DEF275 undef %1.sub1 = IMPLICIT_DEF276 %1.sub0:vreg_64 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec277 %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1.sub1, 1, implicit $exec278 $vcc = S_AND_B64 killed %2, $exec, implicit-def dead $scc279 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc280 S_BRANCH %bb.1281 282 bb.1:283 S_BRANCH %bb.2284 285 bb.2:286 S_ENDPGM 0287...288 289# GCN: name: negated_cond_vop3_sel_wrong_subreg2290# GCN: %0:sreg_64_xexec = IMPLICIT_DEF291# GCN-NEXT: %1.sub0:vreg_64 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec292# GCN-NEXT: %1.sub1:vreg_64 = IMPLICIT_DEF293# GCN-NEXT: %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1.sub1, 1, implicit $exec294# GCN-NEXT: $vcc = S_AND_B64 %2, $exec, implicit-def dead $scc295# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc296---297name: negated_cond_vop3_sel_wrong_subreg2298body: |299 bb.0:300 %0:sreg_64_xexec = IMPLICIT_DEF301 undef %1.sub0:vreg_64 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec302 %1.sub1 = IMPLICIT_DEF303 %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1.sub1, 1, implicit $exec304 $vcc = S_AND_B64 killed %2, $exec, implicit-def dead $scc305 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc306 S_BRANCH %bb.1307 308 bb.1:309 S_BRANCH %bb.2310 311 bb.2:312 S_ENDPGM 0313...314 315# GCN: name: negated_cond_vop3_sel_right_subreg1316# GCN: %0:sreg_64_xexec = IMPLICIT_DEF317# GCN-NEXT: %1.sub1:vreg_64 = IMPLICIT_DEF318# GCN-NEXT: $vcc = S_ANDN2_B64 $exec, %0, implicit-def dead $scc319# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc320---321name: negated_cond_vop3_sel_right_subreg1322body: |323 bb.0:324 %0:sreg_64_xexec = IMPLICIT_DEF325 undef %1.sub1 = IMPLICIT_DEF326 %1.sub0:vreg_64 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec327 %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1.sub0, 1, implicit $exec328 $vcc = S_AND_B64 killed %2, $exec, implicit-def dead $scc329 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc330 S_BRANCH %bb.1331 332 bb.1:333 S_BRANCH %bb.2334 335 bb.2:336 S_ENDPGM 0337...338 339# GCN: name: negated_cond_vop3_sel_right_subreg2340# GCN: %0:sreg_64_xexec = IMPLICIT_DEF341# GCN-NEXT: %1.sub1:vreg_64 = IMPLICIT_DEF342# GCN-NEXT: $vcc = S_ANDN2_B64 $exec, %0, implicit-def dead $scc343# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc344---345name: negated_cond_vop3_sel_right_subreg2346body: |347 bb.0:348 %0:sreg_64_xexec = IMPLICIT_DEF349 undef %1.sub0:vreg_64 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec350 %1.sub1 = IMPLICIT_DEF351 %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1.sub0, 1, implicit $exec352 $vcc = S_AND_B64 killed %2, $exec, implicit-def dead $scc353 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc354 S_BRANCH %bb.1355 356 bb.1:357 S_BRANCH %bb.2358 359 bb.2:360 S_ENDPGM 0361...362 363# GCN: name: negated_cond_vop3_sel_subreg_overlap364# GCN: %0:sreg_64_xexec = IMPLICIT_DEF365# GCN-NEXT: %1.sub2:vreg_128 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec366# GCN-NEXT: %1.sub2_sub3:vreg_128 = IMPLICIT_DEF367# GCN-NEXT: %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1.sub2, 1, implicit $exec368# GCN-NEXT: $vcc = S_AND_B64 %2, $exec, implicit-def dead $scc369# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc370---371name: negated_cond_vop3_sel_subreg_overlap372body: |373 bb.0:374 %0:sreg_64_xexec = IMPLICIT_DEF375 undef %1.sub2:vreg_128 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec376 %1.sub2_sub3 = IMPLICIT_DEF377 %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1.sub2, 1, implicit $exec378 $vcc = S_AND_B64 killed %2, $exec, implicit-def dead $scc379 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc380 S_BRANCH %bb.1381 382 bb.1:383 S_BRANCH %bb.2384 385 bb.2:386 S_ENDPGM 0387...388 389# GCN: name: negated_cond_vop2_dominated_blocks390# GCN: %0:sreg_64_xexec = IMPLICIT_DEF391# GCN: $vcc = S_ANDN2_B64 $exec, %0, implicit-def dead $scc392# GCN-NEXT: S_CBRANCH_VCCNZ %bb.3, implicit $vcc393---394name: negated_cond_vop2_dominated_blocks395body: |396 bb.0:397 %0:sreg_64_xexec = IMPLICIT_DEF398 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec399 400 bb.1:401 V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec402 $vcc = S_AND_B64 $exec, killed $vcc, implicit-def dead $scc403 S_CBRANCH_VCCNZ %bb.3, implicit killed $vcc404 S_BRANCH %bb.2405 406 bb.2:407 S_BRANCH %bb.1408 409 bb.3:410 S_ENDPGM 0411...412 413# GCN: name: negated_cond_vop2_different_blocks_cmp_and414# GCN: %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec415# GCN: $vcc = S_AND_B64 $exec, %2, implicit-def dead $scc416# GCN-NEXT: S_CBRANCH_VCCNZ %bb.3, implicit $vcc417---418name: negated_cond_vop2_different_blocks_cmp_and419body: |420 bb.0:421 %0:sreg_64_xexec = IMPLICIT_DEF422 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec423 %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1, 1, implicit $exec424 425 bb.1:426 $vcc = S_AND_B64 $exec, %2, implicit-def dead $scc427 S_CBRANCH_VCCNZ %bb.3, implicit killed $vcc428 S_BRANCH %bb.2429 430 bb.2:431 S_BRANCH %bb.1432 433 bb.3:434 S_ENDPGM 0435...436 437# GCN: name: negated_cond_vop2_not_dominated_blocks438# GCN: V_CNDMASK_B32_e64 0, 0, 0, 1,439# GCN: $vcc = S_AND_B64 $exec, $vcc, implicit-def dead $scc440# GCN-NEXT: S_CBRANCH_VCCNZ %bb.4, implicit $vcc441---442name: negated_cond_vop2_not_dominated_blocks443body: |444 bb.0:445 $vcc = IMPLICIT_DEF446 %1 = IMPLICIT_DEF447 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc448 S_BRANCH %bb.1449 450 bb.1:451 %0:sreg_64_xexec = IMPLICIT_DEF452 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec453 454 bb.2:455 V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec456 $vcc = S_AND_B64 $exec, killed $vcc, implicit-def dead $scc457 S_CBRANCH_VCCNZ %bb.4, implicit killed $vcc458 S_BRANCH %bb.3459 460 bb.3:461 S_BRANCH %bb.2462 463 bb.4:464 S_ENDPGM 0465...466 467# GCN: name: negated_cond_subreg468# GCN: %0.sub0_sub1:sgpr_128 = IMPLICIT_DEF469# GCN-NEXT: $vcc = S_ANDN2_B64 $exec, %0.sub0_sub1, implicit-def dead $scc470# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc471---472name: negated_cond_subreg473body: |474 bb.0:475 undef %0.sub0_sub1:sgpr_128 = IMPLICIT_DEF476 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0.sub0_sub1, implicit $exec477 undef %2.sub0_sub1:sgpr_128 = V_CMP_NE_U32_e64 %1, 1, implicit $exec478 $vcc = S_AND_B64 $exec, %2.sub0_sub1:sgpr_128, implicit-def dead $scc479 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc480 S_BRANCH %bb.1481 482 bb.1:483 S_BRANCH %bb.2484 485 bb.2:486 S_ENDPGM 0487...488