@@ -170,6 +170,65 @@ define double @fmul_X_1(double %a) {
170
170
ret double %b
171
171
}
172
172
173
+ define half @fmul_nnan_ninf_nneg_0.0 (i15 %x ) {
174
+ ; CHECK-LABEL: @fmul_nnan_ninf_nneg_0.0(
175
+ ; CHECK-NEXT: [[F:%.*]] = uitofp i15 [[X:%.*]] to half
176
+ ; CHECK-NEXT: [[R:%.*]] = fmul half [[F]], 0xH0000
177
+ ; CHECK-NEXT: ret half [[R]]
178
+ ;
179
+ %f = uitofp i15 %x to half
180
+ %r = fmul half %f , 0 .0
181
+ ret half %r
182
+ }
183
+
184
+ define half @fmul_nnan_ninf_nneg_n0.0 (i15 %x ) {
185
+ ; CHECK-LABEL: @fmul_nnan_ninf_nneg_n0.0(
186
+ ; CHECK-NEXT: [[F:%.*]] = uitofp i15 [[X:%.*]] to half
187
+ ; CHECK-NEXT: [[R:%.*]] = fmul half [[F]], 0xH8000
188
+ ; CHECK-NEXT: ret half [[R]]
189
+ ;
190
+ %f = uitofp i15 %x to half
191
+ %r = fmul half %f , -0 .0
192
+ ret half %r
193
+ }
194
+
195
+ define half @fmul_nnan_nneg_0.0 (i16 %x ) {
196
+ ; CHECK-LABEL: @fmul_nnan_nneg_0.0(
197
+ ; CHECK-NEXT: [[F:%.*]] = uitofp i16 [[X:%.*]] to half
198
+ ; CHECK-NEXT: [[R:%.*]] = fmul half [[F]], 0xH0000
199
+ ; CHECK-NEXT: ret half [[R]]
200
+ ;
201
+ %f = uitofp i16 %x to half
202
+ %r = fmul half %f , 0 .0
203
+ ret half %r
204
+ }
205
+
206
+ define double @fmul_nnan_ninf_nneg_n0.0_commute (i127 %x ) {
207
+ ; CHECK-LABEL: @fmul_nnan_ninf_nneg_n0.0_commute(
208
+ ; CHECK-NEXT: [[F:%.*]] = uitofp i127 [[X:%.*]] to float
209
+ ; CHECK-NEXT: [[E:%.*]] = fpext float [[F]] to double
210
+ ; CHECK-NEXT: [[R:%.*]] = fmul double -0.000000e+00, [[E]]
211
+ ; CHECK-NEXT: ret double [[R]]
212
+ ;
213
+ %f = uitofp i127 %x to float
214
+ %e = fpext float %f to double
215
+ %r = fmul double -0 .0 , %e
216
+ ret double %r
217
+ }
218
+
219
+ define double @fmul_nnan_ninf_nneg_0.0_commute (i128 %x ) {
220
+ ; CHECK-LABEL: @fmul_nnan_ninf_nneg_0.0_commute(
221
+ ; CHECK-NEXT: [[F:%.*]] = uitofp i128 [[X:%.*]] to float
222
+ ; CHECK-NEXT: [[E:%.*]] = fpext float [[F]] to double
223
+ ; CHECK-NEXT: [[R:%.*]] = fmul double 0.000000e+00, [[E]]
224
+ ; CHECK-NEXT: ret double [[R]]
225
+ ;
226
+ %f = uitofp i128 %x to float
227
+ %e = fpext float %f to double
228
+ %r = fmul double 0 .0 , %e
229
+ ret double %r
230
+ }
231
+
173
232
; PR2642
174
233
define <4 x float > @fmul_X_1_vec (<4 x float > %x ) {
175
234
; CHECK-LABEL: @fmul_X_1_vec(
0 commit comments