@@ -53,3 +53,66 @@ body: |
5353 %3:sreg_32 = S_OR_B32 %2:sreg_32, %2:sreg_32, implicit-def $scc
5454 %4:vgpr_16 = V_CVT_F16_U16_t16_e64 0, %3:sreg_32, 0, 0, 0, implicit $mode, implicit $exec
5555 ...
56+
57+ ---
58+ name : vgpr16_to_spgr32
59+ body : |
60+ ; GCN-LABEL: name: vgpr16_to_spgr32
61+ ; GCN: bb.0.entry:
62+ ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
63+ ; GCN-NEXT: {{ $}}
64+ ; GCN-NEXT: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF
65+ ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[DEF]]
66+ ; GCN-NEXT: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 killed [[COPY]], 0, 1, 0, implicit $exec :: (load (s64) from `ptr addrspace(3) poison` + 8, align 4, addrspace 3)
67+ ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[DS_READ2_B32_gfx9_]].sub0
68+ ; GCN-NEXT: [[V_CVT_F16_F32_t16_e64_:%[0-9]+]]:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, killed [[COPY1]], 0, 0, 0, implicit $mode, implicit $exec
69+ ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65535
70+ ; GCN-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:vgpr_32 = SUBREG_TO_REG 0, [[V_CVT_F16_F32_t16_e64_]], %subreg.lo16
71+ ; GCN-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[SUBREG_TO_REG]], implicit $exec
72+ ; GCN-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 killed [[S_MOV_B32_]], killed [[V_READFIRSTLANE_B32_]], implicit-def dead $scc
73+ ; GCN-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 5
74+ ; GCN-NEXT: [[S_MUL_I32_:%[0-9]+]]:sreg_32 = S_MUL_I32 killed [[S_AND_B32_]], killed [[S_MOV_B32_1]]
75+ ; GCN-NEXT: [[S_MOV_B32_2:%[0-9]+]]:sreg_32 = S_MOV_B32 2
76+ ; GCN-NEXT: S_CMP_LG_U32 killed [[S_MUL_I32_]], killed [[S_MOV_B32_2]], implicit-def $scc
77+ ; GCN-NEXT: S_CBRANCH_SCC1 %bb.2, implicit $scc
78+ ; GCN-NEXT: S_BRANCH %bb.1
79+ ; GCN-NEXT: {{ $}}
80+ ; GCN-NEXT: bb.1:
81+ ; GCN-NEXT: [[S_MOV_B32_3:%[0-9]+]]:sreg_32 = S_MOV_B32 1
82+ ; GCN-NEXT: [[S_MOV_B32_4:%[0-9]+]]:sreg_32 = S_MOV_B32 killed [[S_MOV_B32_3]]
83+ ; GCN-NEXT: $sgpr0 = COPY [[S_MOV_B32_4]]
84+ ; GCN-NEXT: SI_RETURN_TO_EPILOG $sgpr0
85+ ; GCN-NEXT: {{ $}}
86+ ; GCN-NEXT: bb.2:
87+ ; GCN-NEXT: [[S_MOV_B32_5:%[0-9]+]]:sreg_32 = S_MOV_B32 2
88+ ; GCN-NEXT: [[S_MOV_B32_6:%[0-9]+]]:sreg_32 = S_MOV_B32 killed [[S_MOV_B32_5]]
89+ ; GCN-NEXT: $sgpr0 = COPY [[S_MOV_B32_6]]
90+ ; GCN-NEXT: SI_RETURN_TO_EPILOG $sgpr0
91+ bb.0.entry:
92+ successors: %bb.1(0x40000000), %bb.2(0x40000000); %bb.1(50.00%), %bb.2(50.00%)
93+
94+ %5:sreg_32 = IMPLICIT_DEF
95+ %6:vgpr_32 = COPY %5:sreg_32
96+ %4:vreg_64 = DS_READ2_B32_gfx9 killed %6:vgpr_32, 0, 1, 0, implicit $exec :: (load (s64) from `ptr addrspace(3) poison` + 8, align 4, addrspace 3)
97+ %7:sgpr_32 = COPY %4.sub0:vreg_64
98+ %8:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, killed %7:sgpr_32, 0, 0, 0, implicit $mode, implicit $exec
99+ %9:sreg_32 = S_MOV_B32 65535
100+ %11:sreg_32 = COPY %8:vgpr_16
101+ %10:sreg_32 = S_AND_B32 killed %9:sreg_32, killed %11:sreg_32, implicit-def dead $scc
102+ %12:sreg_32 = S_MOV_B32 5
103+ %13:sreg_32 = S_MUL_I32 killed %10:sreg_32, killed %12:sreg_32
104+ %14:sreg_32 = S_MOV_B32 2
105+ S_CMP_LG_U32 killed %13:sreg_32, killed %14:sreg_32, implicit-def $scc
106+ S_CBRANCH_SCC1 %bb.2, implicit $scc
107+ S_BRANCH %bb.1
108+ bb.1:
109+ %17:sreg_32 = S_MOV_B32 1
110+ %18:sreg_32 = S_MOV_B32 killed %17:sreg_32
111+ $sgpr0 = COPY %18:sreg_32
112+ SI_RETURN_TO_EPILOG $sgpr0
113+ bb.2:
114+ %15:sreg_32 = S_MOV_B32 2
115+ %16:sreg_32 = S_MOV_B32 killed %15:sreg_32
116+ $sgpr0 = COPY %16:sreg_32
117+ SI_RETURN_TO_EPILOG $sgpr0
118+ ...
0 commit comments