@@ -1203,22 +1203,26 @@ define <vscale x 2 x float> @mul_scalable_splat_zero(<vscale x 2 x float> %z) {
1203
1203
1204
1204
define half @mul_zero_nnan (half %x ) {
1205
1205
; CHECK-LABEL: @mul_zero_nnan(
1206
- ; CHECK-NEXT: [[R :%.*]] = fmul nnan half [[X:%.*]], 0xH0000
1207
- ; CHECK-NEXT: ret half [[R ]]
1206
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call nnan half @llvm.copysign.f16(half 0xH0000, half [[X:%.*]])
1207
+ ; CHECK-NEXT: ret half [[TMP1 ]]
1208
1208
;
1209
1209
%r = fmul nnan half %x , 0 .0
1210
1210
ret half %r
1211
1211
}
1212
1212
1213
+ ; poison propagates through vector elements
1214
+
1213
1215
define <2 x float > @mul_zero_nnan_vec_poison (<2 x float > %x ) {
1214
1216
; CHECK-LABEL: @mul_zero_nnan_vec_poison(
1215
- ; CHECK-NEXT: [[R :%.*]] = fmul nnan <2 x float> [[X:%.*]], <float 0.000000e+00, float poison>
1216
- ; CHECK-NEXT: ret <2 x float> [[R ]]
1217
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call nnan <2 x float> @llvm.copysign.v2f32(<2 x float> <float 0.000000e+00, float poison>, <2 x float> [[X:%.*]])
1218
+ ; CHECK-NEXT: ret <2 x float> [[TMP1 ]]
1217
1219
;
1218
1220
%r = fmul nnan <2 x float > %x , <float 0 .0 , float poison>
1219
1221
ret <2 x float > %r
1220
1222
}
1221
1223
1224
+ ; negative test - must have nnan
1225
+
1222
1226
define half @mul_zero (half %x ) {
1223
1227
; CHECK-LABEL: @mul_zero(
1224
1228
; CHECK-NEXT: [[R:%.*]] = fmul ninf nsz half [[X:%.*]], 0xH0000
@@ -1228,6 +1232,8 @@ define half @mul_zero(half %x) {
1228
1232
ret half %r
1229
1233
}
1230
1234
1235
+ ; TODO: This could be fneg+copysign.
1236
+
1231
1237
define half @mul_negzero_nnan (half %x ) {
1232
1238
; CHECK-LABEL: @mul_negzero_nnan(
1233
1239
; CHECK-NEXT: [[R:%.*]] = fmul nnan half [[X:%.*]], 0xH8000
0 commit comments