@@ -1250,7 +1250,7 @@ define half @mul_zero_nnan(half %x) {
1250
1250
1251
1251
define <2 x float > @mul_zero_nnan_vec_poison (<2 x float > %x ) {
1252
1252
; CHECK-LABEL: @mul_zero_nnan_vec_poison(
1253
- ; CHECK-NEXT: [[R:%.*]] = call nnan <2 x float> @llvm.copysign.v2f32(<2 x float> <float 0.000000e+00, float poison> , <2 x float> [[X:%.*]])
1253
+ ; CHECK-NEXT: [[R:%.*]] = call nnan <2 x float> @llvm.copysign.v2f32(<2 x float> zeroinitializer , <2 x float> [[X:%.*]])
1254
1254
; CHECK-NEXT: ret <2 x float> [[R]]
1255
1255
;
1256
1256
%r = fmul nnan <2 x float > %x , <float 0 .0 , float poison>
@@ -1268,11 +1268,10 @@ define half @mul_zero(half %x) {
1268
1268
ret half %r
1269
1269
}
1270
1270
1271
- ; TODO: This could be fneg+copysign.
1272
-
1273
1271
define half @mul_negzero_nnan (half %x ) {
1274
1272
; CHECK-LABEL: @mul_negzero_nnan(
1275
- ; CHECK-NEXT: [[R:%.*]] = fmul nnan half [[X:%.*]], 0xH8000
1273
+ ; CHECK-NEXT: [[TMP1:%.*]] = fneg nnan half [[X:%.*]]
1274
+ ; CHECK-NEXT: [[R:%.*]] = call nnan half @llvm.copysign.f16(half 0xH0000, half [[TMP1]])
1276
1275
; CHECK-NEXT: ret half [[R]]
1277
1276
;
1278
1277
%r = fmul nnan half %x , -0 .0
@@ -1282,7 +1281,7 @@ define half @mul_negzero_nnan(half %x) {
1282
1281
define float @mul_pos_zero_nnan_ninf (float nofpclass(inf nan) %a ) {
1283
1282
; CHECK-LABEL: @mul_pos_zero_nnan_ninf(
1284
1283
; CHECK-NEXT: entry:
1285
- ; CHECK-NEXT: [[RET:%.*]] = fmul float [[A:%.*]], 0.000000e+00
1284
+ ; CHECK-NEXT: [[RET:%.*]] = call float @llvm.copysign.f32(float 0.000000e+00, float [[A:%.*]])
1286
1285
; CHECK-NEXT: ret float [[RET]]
1287
1286
;
1288
1287
entry:
@@ -1304,7 +1303,7 @@ entry:
1304
1303
define float @mul_pos_zero_nnan_ninf_fmf (float nofpclass(nan) %a ) {
1305
1304
; CHECK-LABEL: @mul_pos_zero_nnan_ninf_fmf(
1306
1305
; CHECK-NEXT: entry:
1307
- ; CHECK-NEXT: [[RET:%.*]] = fmul ninf float [[A:%.*]], 0.000000e+00
1306
+ ; CHECK-NEXT: [[RET:%.*]] = call ninf float @llvm.copysign.f32(float 0.000000e+00, float [[A:%.*]])
1308
1307
; CHECK-NEXT: ret float [[RET]]
1309
1308
;
1310
1309
entry:
@@ -1315,7 +1314,8 @@ entry:
1315
1314
define float @mul_neg_zero_nnan_ninf (float nofpclass(inf nan) %a ) {
1316
1315
; CHECK-LABEL: @mul_neg_zero_nnan_ninf(
1317
1316
; CHECK-NEXT: entry:
1318
- ; CHECK-NEXT: [[RET:%.*]] = fmul float [[A:%.*]], -0.000000e+00
1317
+ ; CHECK-NEXT: [[TMP0:%.*]] = fneg float [[A:%.*]]
1318
+ ; CHECK-NEXT: [[RET:%.*]] = call float @llvm.copysign.f32(float 0.000000e+00, float [[TMP0]])
1319
1319
; CHECK-NEXT: ret float [[RET]]
1320
1320
;
1321
1321
entry:
@@ -1326,7 +1326,8 @@ entry:
1326
1326
define float @mul_neg_zero_nnan_fmf (float %a ) {
1327
1327
; CHECK-LABEL: @mul_neg_zero_nnan_fmf(
1328
1328
; CHECK-NEXT: entry:
1329
- ; CHECK-NEXT: [[RET:%.*]] = fmul nnan float [[A:%.*]], -0.000000e+00
1329
+ ; CHECK-NEXT: [[TMP0:%.*]] = fneg nnan float [[A:%.*]]
1330
+ ; CHECK-NEXT: [[RET:%.*]] = call nnan float @llvm.copysign.f32(float 0.000000e+00, float [[TMP0]])
1330
1331
; CHECK-NEXT: ret float [[RET]]
1331
1332
;
1332
1333
entry:
@@ -1337,20 +1338,20 @@ entry:
1337
1338
define float @mul_neg_zero_nnan_ninf_fmf (float nofpclass(inf nan) %a ) {
1338
1339
; CHECK-LABEL: @mul_neg_zero_nnan_ninf_fmf(
1339
1340
; CHECK-NEXT: entry:
1340
- ; CHECK-NEXT: [[RET:%.*]] = fmul nnan ninf float [[A:%.*]], -0.000000e+00
1341
+ ; CHECK-NEXT: [[TMP0:%.*]] = fneg nnan ninf float [[A:%.*]]
1342
+ ; CHECK-NEXT: [[RET:%.*]] = call nnan ninf float @llvm.copysign.f32(float 0.000000e+00, float [[TMP0]])
1341
1343
; CHECK-NEXT: ret float [[RET]]
1342
1344
;
1343
1345
entry:
1344
1346
%ret = fmul nnan ninf float %a , -0 .000000e+00
1345
1347
ret float %ret
1346
1348
}
1347
1349
1348
- ; poison propagates through vector elements
1349
-
1350
1350
define <3 x float > @mul_neg_zero_nnan_ninf_vec (<3 x float > nofpclass(inf nan) %a ) {
1351
1351
; CHECK-LABEL: @mul_neg_zero_nnan_ninf_vec(
1352
1352
; CHECK-NEXT: entry:
1353
- ; CHECK-NEXT: [[RET:%.*]] = fmul <3 x float> [[A:%.*]], <float -0.000000e+00, float undef, float poison>
1353
+ ; CHECK-NEXT: [[TMP0:%.*]] = fneg <3 x float> [[A:%.*]]
1354
+ ; CHECK-NEXT: [[RET:%.*]] = call <3 x float> @llvm.copysign.v3f32(<3 x float> zeroinitializer, <3 x float> [[TMP0]])
1354
1355
; CHECK-NEXT: ret <3 x float> [[RET]]
1355
1356
;
1356
1357
entry:
0 commit comments