1# RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass=si-optimize-exec-masking-pre-ra -o - %s | FileCheck -check-prefix=GCN %s 2 3# GCN: name: negated_cond_vop2 4# GCN: %0:sgpr_32 = IMPLICIT_DEF 5# GCN-NEXT: $vcc_lo = S_ANDN2_B32 $exec_lo, %0, implicit-def dead $scc 6# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 7--- 8name: negated_cond_vop2 9body: | 10 bb.0: 11 %0:sgpr_32 = IMPLICIT_DEF 12 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 13 V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec 14 $vcc_lo = S_AND_B32 $exec_lo, killed $vcc_lo, implicit-def dead $scc 15 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 16 S_BRANCH %bb.1 17 18 bb.1: 19 S_BRANCH %bb.0 20 21 bb.2: 22 S_ENDPGM 0 23... 24 25# GCN: name: negated_cond_vop3 26# GCN: %0:sgpr_32 = IMPLICIT_DEF 27# GCN-NEXT: $vcc_lo = S_ANDN2_B32 $exec_lo, %0, implicit-def dead $scc 28# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 29--- 30name: negated_cond_vop3 31body: | 32 bb.0: 33 %0:sgpr_32 = IMPLICIT_DEF 34 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 35 %2:sgpr_32 = V_CMP_NE_U32_e64 %1, 1, implicit $exec 36 $vcc_lo = S_AND_B32 killed %2, $exec_lo, implicit-def dead $scc 37 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 38 S_BRANCH %bb.1 39 40 bb.1: 41 S_BRANCH %bb.0 42 43 bb.2: 44 S_ENDPGM 0 45... 46 47# GCN: name: negated_cond_vop2_redef_vcc1 48# GCN: %0:sgpr_32 = IMPLICIT_DEF 49# GCN-NEXT: %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 50# GCN-NEXT: V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec 51# GCN-NEXT: $vcc_lo = COPY $sgpr0 52# GCN-NEXT: $vcc_lo = S_AND_B32 $exec_lo, $vcc_lo, implicit-def dead $scc 53# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 54--- 55name: negated_cond_vop2_redef_vcc1 56body: | 57 bb.0: 58 %0:sgpr_32 = IMPLICIT_DEF 59 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 60 V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec 61 $vcc_lo = COPY $sgpr0 62 $vcc_lo = S_AND_B32 $exec_lo, killed $vcc_lo, implicit-def dead $scc 63 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 64 S_BRANCH %bb.1 65 66 bb.1: 67 S_BRANCH %bb.0 68 69 bb.2: 70 S_ENDPGM 0 71... 72 73# GCN: name: negated_cond_vop3_redef_cmp 74# GCN: %0:sgpr_32 = IMPLICIT_DEF 75# GCN-NEXT: %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 76# GCN-NEXT: %2:sgpr_32 = V_CMP_NE_U32_e64 %1, 1, implicit $exec 77# GCN-NEXT: %2:sgpr_32 = COPY $sgpr0 78# GCN-NEXT: $vcc_lo = S_AND_B32 %2, $exec_lo, implicit-def dead $scc 79# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 80--- 81name: negated_cond_vop3_redef_cmp 82body: | 83 bb.0: 84 %0:sgpr_32 = IMPLICIT_DEF 85 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 86 %2:sgpr_32 = V_CMP_NE_U32_e64 %1, 1, implicit $exec 87 %2 = COPY $sgpr0 88 $vcc_lo = S_AND_B32 killed %2, $exec_lo, implicit-def dead $scc 89 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 90 S_BRANCH %bb.1 91 92 bb.1: 93 S_BRANCH %bb.0 94 95 bb.2: 96 S_ENDPGM 0 97... 98 99# GCN: name: negated_cond_undef_vcc 100# GCN: $vcc_lo = S_AND_B32 $exec_lo, undef $vcc_lo, implicit-def dead $scc 101# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 102--- 103name: negated_cond_undef_vcc 104body: | 105 bb.0: 106 $vcc_lo = S_AND_B32 $exec_lo, undef $vcc_lo, implicit-def dead $scc 107 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 108 S_BRANCH %bb.1 109 110 bb.1: 111 S_BRANCH %bb.0 112 113 bb.2: 114 S_ENDPGM 0 115... 116 117# GCN: name: negated_cond_vop3_imp_vcc 118# GCN: $vcc_lo = IMPLICIT_DEF 119# GCN-NEXT: $vcc_lo = S_ANDN2_B32 $exec_lo, $vcc_lo, implicit-def dead $scc 120# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 121--- 122name: negated_cond_vop3_imp_vcc 123body: | 124 bb.0: 125 $vcc_lo = IMPLICIT_DEF 126 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, $vcc_lo, implicit $exec 127 %2:sgpr_32 = V_CMP_NE_U32_e64 %1, 1, implicit $exec 128 $vcc_lo = S_AND_B32 killed %2, $exec_lo, implicit-def dead $scc 129 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 130 S_BRANCH %bb.1 131 132 bb.1: 133 S_BRANCH %bb.0 134 135 bb.2: 136 S_ENDPGM 0 137... 138 139# GCN: name: negated_cond_vop2_imp_vcc 140# GCN: $vcc_lo = IMPLICIT_DEF 141# GCN-NEXT: $vcc_lo = S_ANDN2_B32 $exec_lo, $vcc_lo, implicit-def dead $scc 142# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 143--- 144name: negated_cond_vop2_imp_vcc 145body: | 146 bb.0: 147 $vcc_lo = IMPLICIT_DEF 148 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, $vcc_lo, implicit $exec 149 V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec 150 $vcc_lo = S_AND_B32 killed $vcc_lo, $exec_lo, implicit-def dead $scc 151 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 152 S_BRANCH %bb.1 153 154 bb.1: 155 S_BRANCH %bb.0 156 157 bb.2: 158 S_ENDPGM 0 159... 160 161# GCN: name: negated_cond_vop3_redef_sel 162# GCN: %0:sgpr_32 = IMPLICIT_DEF 163# GCN-NEXT: %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 164# GCN-NEXT: %1:vgpr_32 = COPY $vgpr0 165# GCN-NEXT: %2:sgpr_32 = V_CMP_NE_U32_e64 %1, 1, implicit $exec 166# GCN-NEXT: $vcc_lo = S_AND_B32 %2, $exec_lo, implicit-def dead $scc 167# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 168--- 169name: negated_cond_vop3_redef_sel 170body: | 171 bb.0: 172 %0:sgpr_32 = IMPLICIT_DEF 173 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 174 %1:vgpr_32 = COPY $vgpr0 175 %2:sgpr_32 = V_CMP_NE_U32_e64 %1, 1, implicit $exec 176 $vcc_lo = S_AND_B32 killed %2, $exec_lo, implicit-def dead $scc 177 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 178 S_BRANCH %bb.1 179 180 bb.1: 181 S_BRANCH %bb.0 182 183 bb.2: 184 S_ENDPGM 0 185... 186 187# GCN: name: negated_cond_vop2_used_sel 188# GCN: %0:sgpr_32 = IMPLICIT_DEF 189# GCN-NEXT: %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 190# GCN-NEXT: $vcc_lo = S_ANDN2_B32 $exec_lo, %0, implicit-def dead $scc 191# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 192--- 193name: negated_cond_vop2_used_sel 194body: | 195 bb.0: 196 %0:sgpr_32 = IMPLICIT_DEF 197 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 198 V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec 199 $vcc_lo = S_AND_B32 $exec_lo, killed $vcc_lo, implicit-def dead $scc 200 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 201 S_BRANCH %bb.1 202 203 bb.1: 204 S_BRANCH %bb.0 205 206 bb.2: 207 $vgpr0 = COPY %1 208 S_ENDPGM 0 209... 210 211# GCN: name: negated_cond_vop2_used_vcc 212# GCN: %0:sgpr_32 = IMPLICIT_DEF 213# GCN-NEXT: %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 214# GCN-NEXT: V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec 215# GCN-NEXT: $sgpr0_sgpr1 = COPY $vcc 216# GCN-NEXT: $vcc_lo = S_ANDN2_B32 $exec_lo, %0, implicit-def dead $scc 217# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 218--- 219name: negated_cond_vop2_used_vcc 220body: | 221 bb.0: 222 %0:sgpr_32 = IMPLICIT_DEF 223 %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 224 V_CMP_NE_U32_e32 1, %1, implicit-def $vcc, implicit $exec 225 $sgpr0_sgpr1 = COPY $vcc 226 $vcc_lo = S_AND_B32 $exec_lo, killed $vcc_lo, implicit-def dead $scc 227 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 228 S_BRANCH %bb.1 229 230 bb.1: 231 S_BRANCH %bb.0 232 233 bb.2: 234 S_ENDPGM 0 235... 236 237# GCN: name: negated_cond_vop3_sel_wrong_subreg1 238# GCN: %0:sgpr_32 = IMPLICIT_DEF 239# GCN-NEXT: %1.sub1:vreg_64 = IMPLICIT_DEF 240# GCN-NEXT: %1.sub0:vreg_64 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 241# GCN-NEXT: %2:sgpr_32 = V_CMP_NE_U32_e64 %1.sub1, 1, implicit $exec 242# GCN-NEXT: $vcc_lo = S_AND_B32 %2, $exec_lo, implicit-def dead $scc 243# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 244--- 245name: negated_cond_vop3_sel_wrong_subreg1 246body: | 247 bb.0: 248 %0:sgpr_32 = IMPLICIT_DEF 249 %1.sub1 = IMPLICIT_DEF 250 %1.sub0:vreg_64 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 251 %2:sgpr_32 = V_CMP_NE_U32_e64 %1.sub1, 1, implicit $exec 252 $vcc_lo = S_AND_B32 killed %2, $exec_lo, implicit-def dead $scc 253 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 254 S_BRANCH %bb.1 255 256 bb.1: 257 S_BRANCH %bb.0 258 259 bb.2: 260 S_ENDPGM 0 261... 262 263# GCN: name: negated_cond_vop3_sel_wrong_subreg2 264# GCN: %0:sgpr_32 = IMPLICIT_DEF 265# GCN-NEXT: %1.sub0:vreg_64 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 266# GCN-NEXT: %1.sub1:vreg_64 = IMPLICIT_DEF 267# GCN-NEXT: %2:sgpr_32 = V_CMP_NE_U32_e64 %1.sub1, 1, implicit $exec 268# GCN-NEXT: $vcc_lo = S_AND_B32 %2, $exec_lo, implicit-def dead $scc 269# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 270--- 271name: negated_cond_vop3_sel_wrong_subreg2 272body: | 273 bb.0: 274 %0:sgpr_32 = IMPLICIT_DEF 275 %1.sub0:vreg_64 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 276 %1.sub1 = IMPLICIT_DEF 277 %2:sgpr_32 = V_CMP_NE_U32_e64 %1.sub1, 1, implicit $exec 278 $vcc_lo = S_AND_B32 killed %2, $exec_lo, implicit-def dead $scc 279 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 280 S_BRANCH %bb.1 281 282 bb.1: 283 S_BRANCH %bb.0 284 285 bb.2: 286 S_ENDPGM 0 287... 288 289# GCN: name: negated_cond_vop3_sel_right_subreg1 290# GCN: %0:sgpr_32 = IMPLICIT_DEF 291# GCN-NEXT: %1.sub1:vreg_64 = IMPLICIT_DEF 292# GCN-NEXT: $vcc_lo = S_ANDN2_B32 $exec_lo, %0, implicit-def dead $scc 293# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 294--- 295name: negated_cond_vop3_sel_right_subreg1 296body: | 297 bb.0: 298 %0:sgpr_32 = IMPLICIT_DEF 299 %1.sub1 = IMPLICIT_DEF 300 %1.sub0:vreg_64 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 301 %2:sgpr_32 = V_CMP_NE_U32_e64 %1.sub0, 1, implicit $exec 302 $vcc_lo = S_AND_B32 killed %2, $exec_lo, implicit-def dead $scc 303 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 304 S_BRANCH %bb.1 305 306 bb.1: 307 S_BRANCH %bb.0 308 309 bb.2: 310 S_ENDPGM 0 311... 312 313# GCN: name: negated_cond_vop3_sel_right_subreg2 314# GCN: %0:sgpr_32 = IMPLICIT_DEF 315# GCN-NEXT: %1.sub1:vreg_64 = IMPLICIT_DEF 316# GCN-NEXT: $vcc_lo = S_ANDN2_B32 $exec_lo, %0, implicit-def dead $scc 317# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 318--- 319name: negated_cond_vop3_sel_right_subreg2 320body: | 321 bb.0: 322 %0:sgpr_32 = IMPLICIT_DEF 323 %1.sub0:vreg_64 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 324 %1.sub1 = IMPLICIT_DEF 325 %2:sgpr_32 = V_CMP_NE_U32_e64 %1.sub0, 1, implicit $exec 326 $vcc_lo = S_AND_B32 killed %2, $exec_lo, implicit-def dead $scc 327 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 328 S_BRANCH %bb.1 329 330 bb.1: 331 S_BRANCH %bb.0 332 333 bb.2: 334 S_ENDPGM 0 335... 336 337# GCN: name: negated_cond_vop3_sel_subreg_overlap 338# GCN: %0:sgpr_32 = IMPLICIT_DEF 339# GCN-NEXT: %1.sub2:vreg_128 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 340# GCN-NEXT: %1.sub2_sub3:vreg_128 = IMPLICIT_DEF 341# GCN-NEXT: %2:sgpr_32 = V_CMP_NE_U32_e64 %1.sub2, 1, implicit $exec 342# GCN-NEXT: $vcc_lo = S_AND_B32 %2, $exec_lo, implicit-def dead $scc 343# GCN-NEXT: S_CBRANCH_VCCNZ %bb.2, implicit $vcc 344--- 345name: negated_cond_vop3_sel_subreg_overlap 346body: | 347 bb.0: 348 %0:sgpr_32 = IMPLICIT_DEF 349 %1.sub2:vreg_128 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0, implicit $exec 350 %1.sub2_sub3 = IMPLICIT_DEF 351 %2:sgpr_32 = V_CMP_NE_U32_e64 %1.sub2, 1, implicit $exec 352 $vcc_lo = S_AND_B32 killed %2, $exec_lo, implicit-def dead $scc 353 S_CBRANCH_VCCNZ %bb.2, implicit killed $vcc 354 S_BRANCH %bb.1 355 356 bb.1: 357 S_BRANCH %bb.0 358 359 bb.2: 360 S_ENDPGM 0 361... 362