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