1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-amd-amdhsa -run-pass=liveintervals,si-lower-control-flow,si-lower-control-flow -verify-machineinstrs %s -o - | FileCheck -check-prefixes=GCN %s 3 4# Check that assert is not triggered 5 6--- 7name: si-lower-control-flow 8body: | 9 bb.0: 10 ; GCN-LABEL: name: si-lower-control-flow 11 ; GCN: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5 12 ; GCN-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 16, 0 13 ; GCN-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0 = S_AND_B32 [[S_LOAD_DWORD_IMM]], 255, implicit-def $scc 14 ; GCN-NEXT: dead %3:sreg_32_xm0 = S_AND_B32 65535, [[S_AND_B32_]], implicit-def $scc 15 ; GCN-NEXT: S_ENDPGM 0 16 %0:sgpr_64 = COPY $sgpr4_sgpr5 17 %1:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 16, 0 18 %2:sreg_32_xm0 = S_AND_B32 %1, 255, implicit-def $scc 19 %3:sreg_32_xm0 = S_AND_B32 65535, %2, implicit-def $scc 20 S_ENDPGM 0 21... 22 23--- 24name: preserve_undef_flag_si_if_src 25tracksRegLiveness: true 26body: | 27 ; GCN-LABEL: name: preserve_undef_flag_si_if_src 28 ; GCN: bb.0: 29 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) 30 ; GCN-NEXT: {{ $}} 31 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec 32 ; GCN-NEXT: [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc 33 ; GCN-NEXT: dead %0:sreg_64 = S_XOR_B64 [[S_AND_B64_]], [[COPY]], implicit-def dead $scc 34 ; GCN-NEXT: $exec = S_MOV_B64_term [[S_AND_B64_]] 35 ; GCN-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec 36 ; GCN-NEXT: S_BRANCH %bb.1 37 ; GCN-NEXT: {{ $}} 38 ; GCN-NEXT: bb.1: 39 ; GCN-NEXT: successors: %bb.2(0x80000000) 40 ; GCN-NEXT: {{ $}} 41 ; GCN-NEXT: {{ $}} 42 ; GCN-NEXT: bb.2: 43 ; GCN-NEXT: S_ENDPGM 0 44 bb.0: 45 successors: %bb.1, %bb.2 46 47 %1:sreg_64 = SI_IF undef %0:sreg_64, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec 48 S_BRANCH %bb.1 49 50 bb.1: 51 successors: %bb.2 52 53 bb.2: 54 S_ENDPGM 0 55 56... 57 58# We need to split the block for SI_END_CF, but 59--- 60name: end_cf_split_block_end 61tracksRegLiveness: true 62body: | 63 ; GCN-LABEL: name: end_cf_split_block_end 64 ; GCN: bb.0: 65 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) 66 ; GCN-NEXT: liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31 67 ; GCN-NEXT: {{ $}} 68 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 69 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 70 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec 71 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec 72 ; GCN-NEXT: [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc 73 ; GCN-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc 74 ; GCN-NEXT: $exec = S_MOV_B64_term [[S_AND_B64_]] 75 ; GCN-NEXT: [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec 76 ; GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 77 ; GCN-NEXT: S_BRANCH %bb.2 78 ; GCN-NEXT: {{ $}} 79 ; GCN-NEXT: bb.1: 80 ; GCN-NEXT: successors: %bb.2(0x80000000) 81 ; GCN-NEXT: {{ $}} 82 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]] 83 ; GCN-NEXT: $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc 84 ; GCN-NEXT: {{ $}} 85 ; GCN-NEXT: bb.2: 86 ; GCN-NEXT: S_ENDPGM 0 87 bb.0: 88 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31 89 90 %0:vgpr_32 = COPY killed $vgpr0 91 %1:vgpr_32 = COPY killed $vgpr1 92 %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec 93 %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec 94 %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec 95 S_BRANCH %bb.2 96 97 bb.1: 98 successors: %bb.2 99 100 %6:sreg_64_xexec = COPY %5 101 SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec 102 103 bb.2: 104 S_ENDPGM 0 105 106... 107 108--- 109name: end_cf_split_block_physreg_livein 110tracksRegLiveness: true 111body: | 112 ; GCN-LABEL: name: end_cf_split_block_physreg_livein 113 ; GCN: bb.0: 114 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) 115 ; GCN-NEXT: liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5 116 ; GCN-NEXT: {{ $}} 117 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 118 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 119 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec 120 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec 121 ; GCN-NEXT: [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc 122 ; GCN-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc 123 ; GCN-NEXT: $exec = S_MOV_B64_term [[S_AND_B64_]] 124 ; GCN-NEXT: [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec 125 ; GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 126 ; GCN-NEXT: S_BRANCH %bb.2 127 ; GCN-NEXT: {{ $}} 128 ; GCN-NEXT: bb.1: 129 ; GCN-NEXT: successors: %bb.3(0x80000000) 130 ; GCN-NEXT: liveins: $vgpr0, $sgpr4_sgpr5 131 ; GCN-NEXT: {{ $}} 132 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]] 133 ; GCN-NEXT: S_NOP 0 134 ; GCN-NEXT: $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc 135 ; GCN-NEXT: {{ $}} 136 ; GCN-NEXT: bb.3: 137 ; GCN-NEXT: successors: %bb.2(0x80000000) 138 ; GCN-NEXT: liveins: $vgpr0, $sgpr4_sgpr5 139 ; GCN-NEXT: {{ $}} 140 ; GCN-NEXT: S_SLEEP 3 141 ; GCN-NEXT: S_NOP 0, implicit $vgpr0, implicit $sgpr4_sgpr5 142 ; GCN-NEXT: {{ $}} 143 ; GCN-NEXT: bb.2: 144 ; GCN-NEXT: S_ENDPGM 0 145 bb.0: 146 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5 147 148 %0:vgpr_32 = COPY killed $vgpr0 149 %1:vgpr_32 = COPY killed $vgpr1 150 %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec 151 %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec 152 %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec 153 S_BRANCH %bb.2 154 155 bb.1: 156 successors: %bb.2 157 liveins: $vgpr0, $sgpr4_sgpr5 158 159 %6:sreg_64_xexec = COPY %5 160 S_NOP 0 161 SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec 162 S_SLEEP 3 163 S_NOP 0, implicit $vgpr0, implicit $sgpr4_sgpr5 164 165 bb.2: 166 S_ENDPGM 0 167 168... 169 170--- 171name: end_cf_split_block_physreg_livein_liveout 172tracksRegLiveness: true 173body: | 174 ; GCN-LABEL: name: end_cf_split_block_physreg_livein_liveout 175 ; GCN: bb.0: 176 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) 177 ; GCN-NEXT: liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x0000000000000003 178 ; GCN-NEXT: {{ $}} 179 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 180 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 181 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec 182 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec 183 ; GCN-NEXT: [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc 184 ; GCN-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc 185 ; GCN-NEXT: $exec = S_MOV_B64_term [[S_AND_B64_]] 186 ; GCN-NEXT: [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec 187 ; GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 188 ; GCN-NEXT: S_BRANCH %bb.2 189 ; GCN-NEXT: {{ $}} 190 ; GCN-NEXT: bb.1: 191 ; GCN-NEXT: successors: %bb.3(0x80000000) 192 ; GCN-NEXT: liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x0000000000000003 193 ; GCN-NEXT: {{ $}} 194 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]] 195 ; GCN-NEXT: $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc 196 ; GCN-NEXT: {{ $}} 197 ; GCN-NEXT: bb.3: 198 ; GCN-NEXT: successors: %bb.2(0x80000000) 199 ; GCN-NEXT: liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9 200 ; GCN-NEXT: {{ $}} 201 ; GCN-NEXT: S_SLEEP 3 202 ; GCN-NEXT: S_NOP 0 203 ; GCN-NEXT: {{ $}} 204 ; GCN-NEXT: bb.2: 205 ; GCN-NEXT: liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x0000000000000003 206 ; GCN-NEXT: {{ $}} 207 ; GCN-NEXT: S_ENDPGM 0, implicit $vgpr0, implicit $sgpr4_sgpr5, implicit $sgpr8_sgpr9_sgpr10_sgpr11 208 bb.0: 209 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x00000003 210 211 %0:vgpr_32 = COPY killed $vgpr0 212 %1:vgpr_32 = COPY killed $vgpr1 213 %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec 214 %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec 215 %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec 216 S_BRANCH %bb.2 217 218 bb.1: 219 successors: %bb.2 220 liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x00000003 221 222 %6:sreg_64_xexec = COPY %5 223 SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec 224 S_SLEEP 3 225 S_NOP 0 226 227 bb.2: 228 liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x00000003 229 S_ENDPGM 0, implicit $vgpr0, implicit $sgpr4_sgpr5, implicit $sgpr8_sgpr9_sgpr10_sgpr11 230 231... 232 233--- 234name: end_cf_split_block_physreg_liveout 235tracksRegLiveness: true 236body: | 237 ; GCN-LABEL: name: end_cf_split_block_physreg_liveout 238 ; GCN: bb.0: 239 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) 240 ; GCN-NEXT: liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31 241 ; GCN-NEXT: {{ $}} 242 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 243 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 244 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec 245 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec 246 ; GCN-NEXT: [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc 247 ; GCN-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc 248 ; GCN-NEXT: $exec = S_MOV_B64_term [[S_AND_B64_]] 249 ; GCN-NEXT: [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec 250 ; GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 251 ; GCN-NEXT: S_BRANCH %bb.2 252 ; GCN-NEXT: {{ $}} 253 ; GCN-NEXT: bb.1: 254 ; GCN-NEXT: successors: %bb.3(0x80000000) 255 ; GCN-NEXT: {{ $}} 256 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]] 257 ; GCN-NEXT: $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc 258 ; GCN-NEXT: {{ $}} 259 ; GCN-NEXT: bb.3: 260 ; GCN-NEXT: successors: %bb.2(0x80000000) 261 ; GCN-NEXT: {{ $}} 262 ; GCN-NEXT: $vgpr3 = V_MOV_B32_e32 0, implicit $exec 263 ; GCN-NEXT: $sgpr4_sgpr5 = S_MOV_B64 32 264 ; GCN-NEXT: {{ $}} 265 ; GCN-NEXT: bb.2: 266 ; GCN-NEXT: liveins: $vgpr3, $sgpr4_sgpr5 267 ; GCN-NEXT: {{ $}} 268 ; GCN-NEXT: S_ENDPGM 0, implicit $vgpr3, implicit $sgpr4_sgpr5 269 bb.0: 270 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31 271 272 %0:vgpr_32 = COPY killed $vgpr0 273 %1:vgpr_32 = COPY killed $vgpr1 274 %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec 275 %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec 276 %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec 277 S_BRANCH %bb.2 278 279 bb.1: 280 successors: %bb.2 281 282 %6:sreg_64_xexec = COPY %5 283 SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec 284 $vgpr3 = V_MOV_B32_e32 0, implicit $exec 285 $sgpr4_sgpr5 = S_MOV_B64 32 286 287 bb.2: 288 liveins: $vgpr3, $sgpr4_sgpr5 289 S_ENDPGM 0, implicit $vgpr3, implicit $sgpr4_sgpr5 290 291... 292 293--- 294name: end_cf_split_block_physreg_live_across_split 295tracksRegLiveness: true 296body: | 297 ; GCN-LABEL: name: end_cf_split_block_physreg_live_across_split 298 ; GCN: bb.0: 299 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) 300 ; GCN-NEXT: liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5 301 ; GCN-NEXT: {{ $}} 302 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 303 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 304 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec 305 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec 306 ; GCN-NEXT: [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc 307 ; GCN-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc 308 ; GCN-NEXT: $exec = S_MOV_B64_term [[S_AND_B64_]] 309 ; GCN-NEXT: [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec 310 ; GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 311 ; GCN-NEXT: S_BRANCH %bb.2 312 ; GCN-NEXT: {{ $}} 313 ; GCN-NEXT: bb.1: 314 ; GCN-NEXT: successors: %bb.3(0x80000000) 315 ; GCN-NEXT: liveins: $vgpr0, $sgpr4_sgpr5 316 ; GCN-NEXT: {{ $}} 317 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]] 318 ; GCN-NEXT: $sgpr4_sgpr5 = S_MOV_B64 32 319 ; GCN-NEXT: $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc 320 ; GCN-NEXT: {{ $}} 321 ; GCN-NEXT: bb.3: 322 ; GCN-NEXT: successors: %bb.2(0x80000000) 323 ; GCN-NEXT: liveins: $vgpr0, $sgpr4_sgpr5 324 ; GCN-NEXT: {{ $}} 325 ; GCN-NEXT: S_SLEEP 3, implicit $sgpr4_sgpr5 326 ; GCN-NEXT: S_NOP 0 327 ; GCN-NEXT: {{ $}} 328 ; GCN-NEXT: bb.2: 329 ; GCN-NEXT: liveins: $vgpr0, $sgpr4_sgpr5 330 ; GCN-NEXT: {{ $}} 331 ; GCN-NEXT: S_ENDPGM 0, implicit $vgpr0, implicit $sgpr4_sgpr5 332 bb.0: 333 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5 334 335 %0:vgpr_32 = COPY killed $vgpr0 336 %1:vgpr_32 = COPY killed $vgpr1 337 %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec 338 %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec 339 %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec 340 S_BRANCH %bb.2 341 342 bb.1: 343 successors: %bb.2 344 liveins: $vgpr0, $sgpr4_sgpr5 345 346 %6:sreg_64_xexec = COPY %5 347 $sgpr4_sgpr5 = S_MOV_B64 32 348 SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec 349 S_SLEEP 3, implicit $sgpr4_sgpr5 350 S_NOP 0 351 352 bb.2: 353 liveins: $vgpr0, $sgpr4_sgpr5 354 S_ENDPGM 0, implicit $vgpr0, implicit $sgpr4_sgpr5 355 356... 357 358--- 359name: end_cf_split_block_process_next_inst 360tracksRegLiveness: true 361body: | 362 ; GCN-LABEL: name: end_cf_split_block_process_next_inst 363 ; GCN: bb.0: 364 ; GCN-NEXT: successors: %bb.1(0x80000000) 365 ; GCN-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2 366 ; GCN-NEXT: {{ $}} 367 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 368 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 369 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 370 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec 371 ; GCN-NEXT: [[V_CMP_EQ_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY2]], implicit $exec 372 ; GCN-NEXT: dead %5:sreg_64_xexec = S_MOV_B64 0 373 ; GCN-NEXT: {{ $}} 374 ; GCN-NEXT: bb.1: 375 ; GCN-NEXT: successors: %bb.3(0x80000000) 376 ; GCN-NEXT: {{ $}} 377 ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[V_CMP_EQ_U32_e64_]] 378 ; GCN-NEXT: $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc 379 ; GCN-NEXT: {{ $}} 380 ; GCN-NEXT: bb.3: 381 ; GCN-NEXT: successors: %bb.2(0x80000000) 382 ; GCN-NEXT: {{ $}} 383 ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec 384 ; GCN-NEXT: [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY4]], [[V_CMP_EQ_U32_e64_1]], implicit-def dead $scc 385 ; GCN-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY4]], implicit-def dead $scc 386 ; GCN-NEXT: $exec = S_MOV_B64_term [[S_AND_B64_]] 387 ; GCN-NEXT: dead %8:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec 388 ; GCN-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec 389 ; GCN-NEXT: {{ $}} 390 ; GCN-NEXT: bb.2: 391 ; GCN-NEXT: S_ENDPGM 0 392 bb.0: 393 liveins: $vgpr0, $vgpr1, $vgpr2 394 395 %0:vgpr_32 = COPY killed $vgpr0 396 %1:vgpr_32 = COPY killed $vgpr1 397 %2:vgpr_32 = COPY killed $vgpr2 398 %3:sreg_64_xexec = V_CMP_EQ_U32_e64 %0, killed %1, implicit $exec 399 %4:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %2, implicit $exec 400 %5:sreg_64_xexec = S_MOV_B64 0 401 402 bb.1: 403 successors: %bb.2 404 405 %6:sreg_64_xexec = COPY %3 406 SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec 407 %7:sreg_64_xexec = SI_IF %4, %bb.2, implicit-def $exec, implicit-def dead $scc, implicit $exec 408 %8:sreg_64_xexec = S_MOV_B64_term %7, implicit $exec 409 410 bb.2: 411 S_ENDPGM 0 412 413... 414