# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py # REQUIRES: asserts # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -verify-regalloc -misched-only-block=999 -start-before=machine-scheduler -stop-after=greedy,0 -o - %s | FileCheck %s # This run line is a total hack to get the live intervals to make it # to the verifier. This requires asserts to use # -misched-only-block. We use the scheduler only because -start-before # doesn't see si-optimize-exec-masking-pre-ra unless the scheduler is # part of the pass pipeline. --- name: subreg_value_undef tracksRegLiveness: true body: | ; CHECK-LABEL: name: subreg_value_undef ; CHECK: bb.0: ; CHECK-NEXT: successors: %bb.1(0x80000000) ; CHECK-NEXT: liveins: $sgpr0_sgpr1 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr0_sgpr1 ; CHECK-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (s128), align 8, addrspace 1) ; CHECK-NEXT: undef %2.sub1:sgpr_128 = S_MOV_B32 -1 ; CHECK-NEXT: $vcc_lo = S_ANDN2_B32 $exec_lo, undef %2.sub0, implicit-def dead $scc ; CHECK-NEXT: %2.sub1:sgpr_128 = COPY [[S_LOAD_DWORDX4_IMM]].sub0 ; CHECK-NEXT: S_CBRANCH_VCCNZ %bb.1, implicit $vcc ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1: ; CHECK-NEXT: S_NOP 0, implicit %2.sub1 bb.0: liveins: $sgpr0_sgpr1 %0:sgpr_64 = COPY $sgpr0_sgpr1 %1:sgpr_128 = S_LOAD_DWORDX4_IMM %0, 0, 0 :: (load (s128), align 8, addrspace 1) undef %2.sub1:sgpr_128 = S_MOV_B32 -1 %3:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, undef %2.sub0, implicit $exec %4:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 1, %3, implicit $exec $vcc_lo = S_AND_B32 $exec_lo, %4, implicit-def dead $scc %2.sub1:sgpr_128 = COPY %1.sub0 S_CBRANCH_VCCNZ %bb.1, implicit $vcc bb.1: S_NOP 0, implicit %2.sub1 ... --- name: needs_distribute_0 tracksRegLiveness: true body: | ; CHECK-LABEL: name: needs_distribute_0 ; CHECK: bb.0: ; CHECK-NEXT: successors: %bb.1(0x80000000) ; CHECK-NEXT: liveins: $sgpr0_sgpr1 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr0_sgpr1 ; CHECK-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (s128), align 8, addrspace 1) ; CHECK-NEXT: undef %2.sub0:sreg_64_xexec = S_MOV_B32 -1 ; CHECK-NEXT: $vcc_lo = S_ANDN2_B32 $exec_lo, %2.sub0, implicit-def dead $scc ; CHECK-NEXT: dead %2.sub1:sreg_64_xexec = COPY [[S_LOAD_DWORDX4_IMM]].sub0 ; CHECK-NEXT: S_CBRANCH_VCCNZ %bb.1, implicit $vcc ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1: bb.0: liveins: $sgpr0_sgpr1 %0:sgpr_64 = COPY $sgpr0_sgpr1 %1:sgpr_128 = S_LOAD_DWORDX4_IMM %0, 0, 0 :: (load (s128), align 8, addrspace 1) undef %2.sub0:sreg_64_xexec = S_MOV_B32 -1 %3:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %2.sub0, implicit $exec %4:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 1, %3, implicit $exec $vcc_lo = S_AND_B32 $exec_lo, %4, implicit-def dead $scc %2.sub1:sreg_64_xexec = COPY %1.sub0 S_CBRANCH_VCCNZ %bb.1, implicit $vcc bb.1: ... --- name: needs_distribute_1 tracksRegLiveness: true body: | ; CHECK-LABEL: name: needs_distribute_1 ; CHECK: bb.0: ; CHECK-NEXT: successors: %bb.1(0x80000000) ; CHECK-NEXT: liveins: $sgpr0_sgpr1 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr0_sgpr1 ; CHECK-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (s128), align 8, addrspace 1) ; CHECK-NEXT: undef %2.sub0:sreg_64_xexec = S_MOV_B32 -1 ; CHECK-NEXT: $vcc_lo = S_ANDN2_B32 $exec_lo, %2.sub0, implicit-def dead $scc ; CHECK-NEXT: %2.sub1:sreg_64_xexec = COPY [[S_LOAD_DWORDX4_IMM]].sub0 ; CHECK-NEXT: S_CBRANCH_VCCNZ %bb.1, implicit $vcc ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1: ; CHECK-NEXT: S_NOP 0, implicit %2.sub1 bb.0: liveins: $sgpr0_sgpr1 %0:sgpr_64 = COPY $sgpr0_sgpr1 %1:sgpr_128 = S_LOAD_DWORDX4_IMM %0, 0, 0 :: (load (s128), align 8, addrspace 1) undef %2.sub0:sreg_64_xexec = S_MOV_B32 -1 %3:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %2.sub0, implicit $exec %4:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 1, %3, implicit $exec $vcc_lo = S_AND_B32 $exec_lo, %4, implicit-def dead $scc %2.sub1:sreg_64_xexec = COPY %1.sub0 S_CBRANCH_VCCNZ %bb.1, implicit $vcc bb.1: S_NOP 0, implicit %2.sub1 ... --- name: needs_distribute_2 tracksRegLiveness: true body: | ; CHECK-LABEL: name: needs_distribute_2 ; CHECK: bb.0: ; CHECK-NEXT: successors: %bb.1(0x80000000) ; CHECK-NEXT: liveins: $sgpr0_sgpr1 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr0_sgpr1 ; CHECK-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (s128), align 8, addrspace 1) ; CHECK-NEXT: undef %2.sub0:sreg_64_xexec = S_MOV_B32 -1 ; CHECK-NEXT: $vcc_lo = S_ANDN2_B32 $exec_lo, %2.sub0, implicit-def dead $scc ; CHECK-NEXT: %2.sub1:sreg_64_xexec = COPY [[S_LOAD_DWORDX4_IMM]].sub0 ; CHECK-NEXT: S_CBRANCH_VCCNZ %bb.1, implicit $vcc ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1: ; CHECK-NEXT: S_NOP 0, implicit %2 bb.0: liveins: $sgpr0_sgpr1 %0:sgpr_64 = COPY $sgpr0_sgpr1 %1:sgpr_128 = S_LOAD_DWORDX4_IMM %0, 0, 0 :: (load (s128), align 8, addrspace 1) undef %2.sub0:sreg_64_xexec = S_MOV_B32 -1 %3:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %2.sub0, implicit $exec %4:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 1, %3, implicit $exec $vcc_lo = S_AND_B32 $exec_lo, %4, implicit-def dead $scc %2.sub1:sreg_64_xexec = COPY %1.sub0 S_CBRANCH_VCCNZ %bb.1, implicit $vcc bb.1: S_NOP 0, implicit %2 ... --- name: needs_distribute_3 tracksRegLiveness: true body: | ; CHECK-LABEL: name: needs_distribute_3 ; CHECK: bb.0: ; CHECK-NEXT: successors: %bb.1(0x80000000) ; CHECK-NEXT: liveins: $sgpr0_sgpr1 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr0_sgpr1 ; CHECK-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (s128), align 8, addrspace 1) ; CHECK-NEXT: undef %2.sub0:sreg_64_xexec = S_MOV_B32 -1 ; CHECK-NEXT: $vcc_lo = S_ANDN2_B32 $exec_lo, %2.sub0, implicit-def dead $scc ; CHECK-NEXT: %2.sub1:sreg_64_xexec = COPY [[S_LOAD_DWORDX4_IMM]].sub0 ; CHECK-NEXT: S_CBRANCH_VCCNZ %bb.1, implicit $vcc ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1: ; CHECK-NEXT: S_NOP 0, implicit %2.sub0 bb.0: liveins: $sgpr0_sgpr1 %0:sgpr_64 = COPY $sgpr0_sgpr1 %1:sgpr_128 = S_LOAD_DWORDX4_IMM %0, 0, 0 :: (load (s128), align 8, addrspace 1) undef %2.sub0:sreg_64_xexec = S_MOV_B32 -1 %3:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %2.sub0, implicit $exec %4:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 1, %3, implicit $exec $vcc_lo = S_AND_B32 $exec_lo, %4, implicit-def dead $scc %2.sub1:sreg_64_xexec = COPY %1.sub0 S_CBRANCH_VCCNZ %bb.1, implicit $vcc bb.1: S_NOP 0, implicit %2.sub0 ...