@@ -53,3 +53,67 @@ 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: [[DEF1:%[0-9]+]]:vgpr_16 = IMPLICIT_DEF
71+ ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vgpr_32 = REG_SEQUENCE [[V_CVT_F16_F32_t16_e64_]], %subreg.lo16, [[DEF1]], %subreg.hi16
72+ ; GCN-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[REG_SEQUENCE]], implicit $exec
73+ ; GCN-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 killed [[S_MOV_B32_]], killed [[V_READFIRSTLANE_B32_]], implicit-def dead $scc
74+ ; GCN-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 5
75+ ; GCN-NEXT: [[S_MUL_I32_:%[0-9]+]]:sreg_32 = S_MUL_I32 killed [[S_AND_B32_]], killed [[S_MOV_B32_1]]
76+ ; GCN-NEXT: [[S_MOV_B32_2:%[0-9]+]]:sreg_32 = S_MOV_B32 2
77+ ; GCN-NEXT: S_CMP_LG_U32 killed [[S_MUL_I32_]], killed [[S_MOV_B32_2]], implicit-def $scc
78+ ; GCN-NEXT: S_CBRANCH_SCC1 %bb.2, implicit $scc
79+ ; GCN-NEXT: S_BRANCH %bb.1
80+ ; GCN-NEXT: {{ $}}
81+ ; GCN-NEXT: bb.1:
82+ ; GCN-NEXT: [[S_MOV_B32_3:%[0-9]+]]:sreg_32 = S_MOV_B32 1
83+ ; GCN-NEXT: [[S_MOV_B32_4:%[0-9]+]]:sreg_32 = S_MOV_B32 killed [[S_MOV_B32_3]]
84+ ; GCN-NEXT: $sgpr0 = COPY [[S_MOV_B32_4]]
85+ ; GCN-NEXT: SI_RETURN_TO_EPILOG $sgpr0
86+ ; GCN-NEXT: {{ $}}
87+ ; GCN-NEXT: bb.2:
88+ ; GCN-NEXT: [[S_MOV_B32_5:%[0-9]+]]:sreg_32 = S_MOV_B32 2
89+ ; GCN-NEXT: [[S_MOV_B32_6:%[0-9]+]]:sreg_32 = S_MOV_B32 killed [[S_MOV_B32_5]]
90+ ; GCN-NEXT: $sgpr0 = COPY [[S_MOV_B32_6]]
91+ ; GCN-NEXT: SI_RETURN_TO_EPILOG $sgpr0
92+ bb.0.entry:
93+ successors: %bb.1(0x40000000), %bb.2(0x40000000); %bb.1(50.00%), %bb.2(50.00%)
94+
95+ %5:sreg_32 = IMPLICIT_DEF
96+ %6:vgpr_32 = COPY %5:sreg_32
97+ %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)
98+ %7:sgpr_32 = COPY %4.sub0:vreg_64
99+ %8:vgpr_16 = nofpexcept V_CVT_F16_F32_t16_e64 0, killed %7:sgpr_32, 0, 0, 0, implicit $mode, implicit $exec
100+ %9:sreg_32 = S_MOV_B32 65535
101+ %11:sreg_32 = COPY %8:vgpr_16
102+ %10:sreg_32 = S_AND_B32 killed %9:sreg_32, killed %11:sreg_32, implicit-def dead $scc
103+ %12:sreg_32 = S_MOV_B32 5
104+ %13:sreg_32 = S_MUL_I32 killed %10:sreg_32, killed %12:sreg_32
105+ %14:sreg_32 = S_MOV_B32 2
106+ S_CMP_LG_U32 killed %13:sreg_32, killed %14:sreg_32, implicit-def $scc
107+ S_CBRANCH_SCC1 %bb.2, implicit $scc
108+ S_BRANCH %bb.1
109+ bb.1:
110+ %17:sreg_32 = S_MOV_B32 1
111+ %18:sreg_32 = S_MOV_B32 killed %17:sreg_32
112+ $sgpr0 = COPY %18:sreg_32
113+ SI_RETURN_TO_EPILOG $sgpr0
114+ bb.2:
115+ %15:sreg_32 = S_MOV_B32 2
116+ %16:sreg_32 = S_MOV_B32 killed %15:sreg_32
117+ $sgpr0 = COPY %16:sreg_32
118+ SI_RETURN_TO_EPILOG $sgpr0
119+ ...
0 commit comments