@@ -86,8 +86,152 @@ define double @s_uitofp_i32_to_f64_neg(i32 inreg %arg0) nounwind {
8686 %cvt = uitofp i32 %arg0.neg to double
8787 ret double %cvt
8888}
89- ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
90- ; GFX11-FAKE16: {{.*}}
91- ; GFX11-TRUE16: {{.*}}
92- ; GFX7: {{.*}}
93- ; GFX9: {{.*}}
89+
90+ define half @v_uitofp_i16_to_f16_abs (i16 %arg0 ) nounwind {
91+ ; GFX7-LABEL: v_uitofp_i16_to_f16_abs:
92+ ; GFX7: ; %bb.0:
93+ ; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
94+ ; GFX7-NEXT: v_and_b32_e32 v0, 0x7fff, v0
95+ ; GFX7-NEXT: v_cvt_f32_u32_e32 v0, v0
96+ ; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
97+ ; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
98+ ; GFX7-NEXT: s_setpc_b64 s[30:31]
99+ ;
100+ ; GFX9-LABEL: v_uitofp_i16_to_f16_abs:
101+ ; GFX9: ; %bb.0:
102+ ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
103+ ; GFX9-NEXT: v_and_b32_e32 v0, 0x7fff, v0
104+ ; GFX9-NEXT: v_cvt_f16_u16_e32 v0, v0
105+ ; GFX9-NEXT: s_setpc_b64 s[30:31]
106+ ;
107+ ; GFX11-TRUE16-LABEL: v_uitofp_i16_to_f16_abs:
108+ ; GFX11-TRUE16: ; %bb.0:
109+ ; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
110+ ; GFX11-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v0.l
111+ ; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
112+ ; GFX11-TRUE16-NEXT: v_cvt_f16_u16_e32 v0.l, v0.l
113+ ; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]
114+ ;
115+ ; GFX11-FAKE16-LABEL: v_uitofp_i16_to_f16_abs:
116+ ; GFX11-FAKE16: ; %bb.0:
117+ ; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
118+ ; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x7fff, v0
119+ ; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
120+ ; GFX11-FAKE16-NEXT: v_cvt_f16_u16_e32 v0, v0
121+ ; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
122+ %arg0.abs = and i16 %arg0 , u0x7fff
123+ %cvt = uitofp i16 %arg0.abs to half
124+ ret half %cvt
125+ }
126+
127+ define half @v_uitofp_i16_to_f16_neg (i16 %arg0 ) nounwind {
128+ ; GFX7-LABEL: v_uitofp_i16_to_f16_neg:
129+ ; GFX7: ; %bb.0:
130+ ; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
131+ ; GFX7-NEXT: v_and_b32_e32 v0, 0x8000, v0
132+ ; GFX7-NEXT: v_cvt_f32_u32_e32 v0, v0
133+ ; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
134+ ; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
135+ ; GFX7-NEXT: s_setpc_b64 s[30:31]
136+ ;
137+ ; GFX9-LABEL: v_uitofp_i16_to_f16_neg:
138+ ; GFX9: ; %bb.0:
139+ ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
140+ ; GFX9-NEXT: v_and_b32_e32 v0, 0xffff8000, v0
141+ ; GFX9-NEXT: v_cvt_f16_u16_e32 v0, v0
142+ ; GFX9-NEXT: s_setpc_b64 s[30:31]
143+ ;
144+ ; GFX11-TRUE16-LABEL: v_uitofp_i16_to_f16_neg:
145+ ; GFX11-TRUE16: ; %bb.0:
146+ ; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
147+ ; GFX11-TRUE16-NEXT: v_and_b16 v0.l, 0x8000, v0.l
148+ ; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
149+ ; GFX11-TRUE16-NEXT: v_cvt_f16_u16_e32 v0.l, v0.l
150+ ; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]
151+ ;
152+ ; GFX11-FAKE16-LABEL: v_uitofp_i16_to_f16_neg:
153+ ; GFX11-FAKE16: ; %bb.0:
154+ ; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
155+ ; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff8000, v0
156+ ; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
157+ ; GFX11-FAKE16-NEXT: v_cvt_f16_u16_e32 v0, v0
158+ ; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
159+ %arg0.neg = and i16 %arg0 , u0x8000
160+ %cvt = uitofp i16 %arg0.neg to half
161+ ret half %cvt
162+ }
163+
164+ define half @s_uitofp_i16_to_f16_abs (i16 inreg %arg0 ) nounwind {
165+ ; GFX7-LABEL: s_uitofp_i16_to_f16_abs:
166+ ; GFX7: ; %bb.0:
167+ ; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
168+ ; GFX7-NEXT: s_and_b32 s4, s16, 0x7fff
169+ ; GFX7-NEXT: v_cvt_f32_u32_e32 v0, s4
170+ ; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
171+ ; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
172+ ; GFX7-NEXT: s_setpc_b64 s[30:31]
173+ ;
174+ ; GFX9-LABEL: s_uitofp_i16_to_f16_abs:
175+ ; GFX9: ; %bb.0:
176+ ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
177+ ; GFX9-NEXT: s_and_b32 s4, s16, 0x7fff
178+ ; GFX9-NEXT: v_cvt_f16_u16_e32 v0, s4
179+ ; GFX9-NEXT: s_setpc_b64 s[30:31]
180+ ;
181+ ; GFX11-TRUE16-LABEL: s_uitofp_i16_to_f16_abs:
182+ ; GFX11-TRUE16: ; %bb.0:
183+ ; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
184+ ; GFX11-TRUE16-NEXT: s_and_b32 s0, s0, 0x7fff
185+ ; GFX11-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
186+ ; GFX11-TRUE16-NEXT: v_cvt_f16_u16_e32 v0.l, s0
187+ ; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]
188+ ;
189+ ; GFX11-FAKE16-LABEL: s_uitofp_i16_to_f16_abs:
190+ ; GFX11-FAKE16: ; %bb.0:
191+ ; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
192+ ; GFX11-FAKE16-NEXT: s_and_b32 s0, s0, 0x7fff
193+ ; GFX11-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
194+ ; GFX11-FAKE16-NEXT: v_cvt_f16_u16_e32 v0, s0
195+ ; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
196+ %arg0.abs = and i16 %arg0 , u0x7fff
197+ %cvt = uitofp i16 %arg0.abs to half
198+ ret half %cvt
199+ }
200+
201+ define half @s_uitofp_i16_to_f16_neg (i16 inreg %arg0 ) nounwind {
202+ ; GFX7-LABEL: s_uitofp_i16_to_f16_neg:
203+ ; GFX7: ; %bb.0:
204+ ; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
205+ ; GFX7-NEXT: s_and_b32 s4, s16, 0x8000
206+ ; GFX7-NEXT: v_cvt_f32_u32_e32 v0, s4
207+ ; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
208+ ; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
209+ ; GFX7-NEXT: s_setpc_b64 s[30:31]
210+ ;
211+ ; GFX9-LABEL: s_uitofp_i16_to_f16_neg:
212+ ; GFX9: ; %bb.0:
213+ ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
214+ ; GFX9-NEXT: s_and_b32 s4, s16, 0x8000
215+ ; GFX9-NEXT: v_cvt_f16_u16_e32 v0, s4
216+ ; GFX9-NEXT: s_setpc_b64 s[30:31]
217+ ;
218+ ; GFX11-TRUE16-LABEL: s_uitofp_i16_to_f16_neg:
219+ ; GFX11-TRUE16: ; %bb.0:
220+ ; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
221+ ; GFX11-TRUE16-NEXT: s_and_b32 s0, s0, 0x8000
222+ ; GFX11-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
223+ ; GFX11-TRUE16-NEXT: v_cvt_f16_u16_e32 v0.l, s0
224+ ; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]
225+ ;
226+ ; GFX11-FAKE16-LABEL: s_uitofp_i16_to_f16_neg:
227+ ; GFX11-FAKE16: ; %bb.0:
228+ ; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
229+ ; GFX11-FAKE16-NEXT: s_and_b32 s0, s0, 0x8000
230+ ; GFX11-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
231+ ; GFX11-FAKE16-NEXT: v_cvt_f16_u16_e32 v0, s0
232+ ; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
233+ %arg0.neg = and i16 %arg0 , u0x8000
234+ %cvt = uitofp i16 %arg0.neg to half
235+ ret half %cvt
236+ }
237+
0 commit comments