@@ -369,5 +369,91 @@ define float @fmuladd_x_1_z_fast(float %x, float %z) {
369
369
ret float %fmuladd
370
370
}
371
371
372
+ define <2 x double > @fmuladd_a_0_b (<2 x double > %a , <2 x double > %b ) {
373
+ ; CHECK-LABEL: @fmuladd_a_0_b(
374
+ ; CHECK-NEXT: entry:
375
+ ; CHECK-NEXT: [[RES:%.*]] = call nnan nsz <2 x double> @llvm.fmuladd.v2f64(<2 x double> [[A:%.*]], <2 x double> zeroinitializer, <2 x double> [[B:%.*]])
376
+ ; CHECK-NEXT: ret <2 x double> [[RES]]
377
+ ;
378
+ entry:
379
+ %res = call nnan nsz <2 x double > @llvm.fmuladd.v2f64 (<2 x double > %a , <2 x double > zeroinitializer , <2 x double > %b )
380
+ ret <2 x double > %res
381
+ }
382
+
383
+ define <2 x double > @fmuladd_0_a_b (<2 x double > %a , <2 x double > %b ) {
384
+ ; CHECK-LABEL: @fmuladd_0_a_b(
385
+ ; CHECK-NEXT: entry:
386
+ ; CHECK-NEXT: [[RES:%.*]] = call nnan nsz <2 x double> @llvm.fmuladd.v2f64(<2 x double> [[A:%.*]], <2 x double> zeroinitializer, <2 x double> [[B:%.*]])
387
+ ; CHECK-NEXT: ret <2 x double> [[RES]]
388
+ ;
389
+ entry:
390
+ %res = call nnan nsz <2 x double > @llvm.fmuladd.v2f64 (<2 x double > zeroinitializer , <2 x double > %a , <2 x double > %b )
391
+ ret <2 x double > %res
392
+ }
393
+
394
+ define <2 x double > @fmuladd_a_0_b_missing_flags (<2 x double > %a , <2 x double > %b ) {
395
+ ; CHECK-LABEL: @fmuladd_a_0_b_missing_flags(
396
+ ; CHECK-NEXT: entry:
397
+ ; CHECK-NEXT: [[RES:%.*]] = call nnan <2 x double> @llvm.fmuladd.v2f64(<2 x double> [[A:%.*]], <2 x double> zeroinitializer, <2 x double> [[B:%.*]])
398
+ ; CHECK-NEXT: ret <2 x double> [[RES]]
399
+ ;
400
+ entry:
401
+ %res = call nnan <2 x double > @llvm.fmuladd.v2f64 (<2 x double > %a , <2 x double > zeroinitializer , <2 x double > %b )
402
+ ret <2 x double > %res
403
+ }
404
+
405
+ declare <2 x double > @llvm.fmuladd.v2f64 (<2 x double >, <2 x double >, <2 x double >)
406
+
407
+ define <2 x double > @fma_a_0_b (<2 x double > %a , <2 x double > %b ) {
408
+ ; CHECK-LABEL: @fma_a_0_b(
409
+ ; CHECK-NEXT: entry:
410
+ ; CHECK-NEXT: [[RES:%.*]] = call nnan nsz <2 x double> @llvm.fma.v2f64(<2 x double> [[A:%.*]], <2 x double> zeroinitializer, <2 x double> [[B:%.*]])
411
+ ; CHECK-NEXT: ret <2 x double> [[RES]]
412
+ ;
413
+ entry:
414
+ %res = call nnan nsz <2 x double > @llvm.fma.v2f64 (<2 x double > %a , <2 x double > zeroinitializer , <2 x double > %b )
415
+ ret <2 x double > %res
416
+ }
417
+
418
+ define <2 x double > @fma_0_a_b (<2 x double > %a , <2 x double > %b ) {
419
+ ; CHECK-LABEL: @fma_0_a_b(
420
+ ; CHECK-NEXT: entry:
421
+ ; CHECK-NEXT: [[RES:%.*]] = call nnan nsz <2 x double> @llvm.fma.v2f64(<2 x double> [[A:%.*]], <2 x double> zeroinitializer, <2 x double> [[B:%.*]])
422
+ ; CHECK-NEXT: ret <2 x double> [[RES]]
423
+ ;
424
+ entry:
425
+ %res = call nnan nsz <2 x double > @llvm.fma.v2f64 (<2 x double > zeroinitializer , <2 x double > %a , <2 x double > %b )
426
+ ret <2 x double > %res
427
+ }
428
+
429
+ define <2 x double > @fma_0_a_b_missing_flags (<2 x double > %a , <2 x double > %b ) {
430
+ ; CHECK-LABEL: @fma_0_a_b_missing_flags(
431
+ ; CHECK-NEXT: entry:
432
+ ; CHECK-NEXT: [[RES:%.*]] = call nsz <2 x double> @llvm.fma.v2f64(<2 x double> [[A:%.*]], <2 x double> zeroinitializer, <2 x double> [[B:%.*]])
433
+ ; CHECK-NEXT: ret <2 x double> [[RES]]
434
+ ;
435
+ entry:
436
+ %res = call nsz <2 x double > @llvm.fma.v2f64 (<2 x double > zeroinitializer , <2 x double > %a , <2 x double > %b )
437
+ ret <2 x double > %res
438
+ }
439
+
440
+ define <2 x double > @fma_sqrt (<2 x double > %a , <2 x double > %b ) {
441
+ ; CHECK-LABEL: @fma_sqrt(
442
+ ; CHECK-NEXT: entry:
443
+ ; CHECK-NEXT: [[SQRT:%.*]] = call fast <2 x double> @llvm.sqrt.v2f64(<2 x double> [[A:%.*]])
444
+ ; CHECK-NEXT: [[RES:%.*]] = call fast <2 x double> @llvm.fma.v2f64(<2 x double> [[SQRT]], <2 x double> [[SQRT]], <2 x double> [[B:%.*]])
445
+ ; CHECK-NEXT: ret <2 x double> [[RES]]
446
+ ;
447
+ entry:
448
+ %sqrt = call fast <2 x double > @llvm.sqrt.v2f64 (<2 x double > %a )
449
+ %res = call fast <2 x double > @llvm.fma.v2f64 (<2 x double > %sqrt , <2 x double > %sqrt , <2 x double > %b )
450
+ ret <2 x double > %res
451
+ }
452
+
453
+
454
+ declare <2 x double > @llvm.fma.v2f64 (<2 x double >, <2 x double >, <2 x double >)
455
+ declare <2 x double > @llvm.sqrt.v2f64 (<2 x double >)
456
+
457
+
372
458
attributes #0 = { nounwind }
373
459
attributes #1 = { nounwind readnone }
0 commit comments