@@ -86,8 +86,152 @@ define double @s_uitofp_i32_to_f64_neg(i32 inreg %arg0) nounwind {
86
86
%cvt = uitofp i32 %arg0.neg to double
87
87
ret double %cvt
88
88
}
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