You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
5.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# RUN: llc -march=amdgcn -mcpu=gfx900 -start-before=twoaddressinstruction %s -o - | FileCheck %s -check-prefix=GCN
# Wait to sxpand SI_INDIRECT sequences that use VGPR indexing until after
# register allocation. We dont want to reschedule the mode switching or to
# have any instructions inserted within the sequence. The Two-Address
# instruction pass could insert bad copies here if it is expanded too early.
---
# GCN-LABEL: expand_si_indirect
# GCN: s_set_gpr_idx_on
# GCN-NEXT: v_mov_b32_e32
# GCN-NEXT: s_set_gpr_idx_off
# GCN: s_set_gpr_idx_on
# GCN-NEXT: v_mov_b32_e32
# GCN-NOT: v_mov_b32_e32
# GCN-NEXT: s_set_gpr_idx_off
name: expand_si_indirect
tracksRegLiveness: true
body: |
bb.0.entry:
liveins: $sgpr0_sgpr1
%0:sgpr_64 = COPY killed $sgpr0_sgpr1
%1:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
%2:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0(p4), 36, 0, 0
%3:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM killed %0(p4), 44, 0, 0
%4:sreg_32 = S_ADD_I32 %3, 1, implicit-def dead $scc
%5:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec
%6:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec
%7:vgpr_32 = V_MOV_B32_e32 1077936128, implicit $exec
%8:vgpr_32 = V_MOV_B32_e32 1082130432, implicit $exec
%9:vgpr_32 = V_MOV_B32_e32 1084227584, implicit $exec
%10:vgpr_32 = V_MOV_B32_e32 1086324736, implicit $exec
%11:vgpr_32 = V_MOV_B32_e32 1088421888, implicit $exec
%12:vgpr_32 = V_MOV_B32_e32 1090519040, implicit $exec
%13:vgpr_32 = V_MOV_B32_e32 1091567616, implicit $exec
%14:vgpr_32 = V_MOV_B32_e32 1092616192, implicit $exec
%15:vgpr_32 = V_MOV_B32_e32 1093664768, implicit $exec
%16:vgpr_32 = V_MOV_B32_e32 1094713344, implicit $exec
%17:vgpr_32 = V_MOV_B32_e32 1095761920, implicit $exec
%18:vgpr_32 = V_MOV_B32_e32 1096810496, implicit $exec
%19:vgpr_32 = V_MOV_B32_e32 1097859072, implicit $exec
%20:vgpr_32 = V_MOV_B32_e32 1098907648, implicit $exec
%21:vreg_512 = REG_SEQUENCE killed %5, %subreg.sub0, killed %6, %subreg.sub1, killed %7, %subreg.sub2, killed %8, %subreg.sub3, killed %9, %subreg.sub4, killed %10, %subreg.sub5, killed %11, %subreg.sub6, killed %12, %subreg.sub7, killed %13, %subreg.sub8, killed %14, %subreg.sub9, killed %15, %subreg.sub10, killed %16, %subreg.sub11, killed %17, %subreg.sub12, killed %18, %subreg.sub13, killed %19, %subreg.sub14, killed %20, %subreg.sub15
%22:vgpr_32 = V_MOV_B32_e32 1099431936, implicit $exec
%23:vreg_512 = V_INDIRECT_REG_WRITE_GPR_IDX_B32_V16 killed %21, %22, killed %4, 3, implicit-def $m0, implicit $m0, implicit $exec
%24:sreg_32 = S_ADD_I32 killed %3, 2, implicit-def dead $scc
%25:vreg_512 = V_INDIRECT_REG_WRITE_GPR_IDX_B32_V16 %23, killed %22, killed %24, 3, implicit-def $m0, implicit $m0, implicit $exec
%26:vgpr_32 = COPY %23.sub15
%27:vgpr_32 = COPY %23.sub14
%28:vgpr_32 = COPY %23.sub13
%29:vgpr_32 = COPY %23.sub12
%30:vreg_128 = REG_SEQUENCE killed %29, %subreg.sub0, killed %28, %subreg.sub1, killed %27, %subreg.sub2, killed %26, %subreg.sub3
GLOBAL_STORE_DWORDX4_SADDR %1, killed %30, %2, 48, 0, 0, 0, implicit $exec
%31:vgpr_32 = COPY %23.sub11
%32:vgpr_32 = COPY %23.sub10
%33:vgpr_32 = COPY %23.sub9
%34:vgpr_32 = COPY %23.sub8
%35:vreg_128 = REG_SEQUENCE killed %34, %subreg.sub0, killed %33, %subreg.sub1, killed %32, %subreg.sub2, killed %31, %subreg.sub3
GLOBAL_STORE_DWORDX4_SADDR %1, killed %35, %2, 32, 0, 0, 0, implicit $exec
%36:vgpr_32 = COPY %23.sub7
%37:vgpr_32 = COPY %23.sub6
%38:vgpr_32 = COPY %23.sub5
%39:vgpr_32 = COPY %23.sub4
%40:vreg_128 = REG_SEQUENCE killed %39, %subreg.sub0, killed %38, %subreg.sub1, killed %37, %subreg.sub2, killed %36, %subreg.sub3
GLOBAL_STORE_DWORDX4_SADDR %1, killed %40, %2, 16, 0, 0, 0, implicit $exec
%41:vgpr_32 = COPY %23.sub3
%42:vgpr_32 = COPY %23.sub2
%43:vgpr_32 = COPY %23.sub1
%44:vgpr_32 = COPY killed %23.sub0
%45:vreg_128 = REG_SEQUENCE killed %44, %subreg.sub0, killed %43, %subreg.sub1, killed %42, %subreg.sub2, killed %41, %subreg.sub3
GLOBAL_STORE_DWORDX4_SADDR %1, killed %45, %2, 0, 0, 0, 0, implicit $exec
%46:vgpr_32 = COPY %25.sub15
%47:vgpr_32 = COPY %25.sub14
%48:vgpr_32 = COPY %25.sub13
%49:vgpr_32 = COPY %25.sub12
%50:vreg_128 = REG_SEQUENCE killed %49, %subreg.sub0, killed %48, %subreg.sub1, killed %47, %subreg.sub2, killed %46, %subreg.sub3
GLOBAL_STORE_DWORDX4_SADDR %1, killed %50, %2, 112, 0, 0, 0, implicit $exec
%51:vgpr_32 = COPY %25.sub11
%52:vgpr_32 = COPY %25.sub10
%53:vgpr_32 = COPY %25.sub9
%54:vgpr_32 = COPY %25.sub8
%55:vreg_128 = REG_SEQUENCE killed %54, %subreg.sub0, killed %53, %subreg.sub1, killed %52, %subreg.sub2, killed %51, %subreg.sub3
GLOBAL_STORE_DWORDX4_SADDR %1, killed %55, %2, 96, 0, 0, 0, implicit $exec
%56:vgpr_32 = COPY %25.sub7
%57:vgpr_32 = COPY %25.sub6
%58:vgpr_32 = COPY %25.sub5
%59:vgpr_32 = COPY %25.sub4
%60:vreg_128 = REG_SEQUENCE killed %59, %subreg.sub0, killed %58, %subreg.sub1, killed %57, %subreg.sub2, killed %56, %subreg.sub3
GLOBAL_STORE_DWORDX4_SADDR %1, killed %60, %2, 80, 0, 0, 0, implicit $exec
%61:vgpr_32 = COPY %25.sub3
%62:vgpr_32 = COPY %25.sub2
%63:vgpr_32 = COPY %25.sub1
%64:vgpr_32 = COPY killed %25.sub0
%65:vreg_128 = REG_SEQUENCE killed %64, %subreg.sub0, killed %63, %subreg.sub1, killed %62, %subreg.sub2, killed %61, %subreg.sub3
GLOBAL_STORE_DWORDX4_SADDR killed %1, killed %65, killed %2, 64, 0, 0, 0, implicit $exec
S_ENDPGM 0
...