1 ; RUN: llc < %s -march=ppc32 -fp-contract=fast | FileCheck %s 2 3 define double @test_FMADD1(double %A, double %B, double %C) { 4 %D = fmul double %A, %B ; <double> [#uses=1] 5 %E = fadd double %D, %C ; <double> [#uses=1] 6 ret double %E 7 ; CHECK-LABEL: test_FMADD1: 8 ; CHECK: fmadd 9 ; CHECK-NEXT: blr 10 } 11 12 define double @test_FMADD2(double %A, double %B, double %C) { 13 %D = fmul double %A, %B ; <double> [#uses=1] 14 %E = fadd double %D, %C ; <double> [#uses=1] 15 ret double %E 16 ; CHECK-LABEL: test_FMADD2: 17 ; CHECK: fmadd 18 ; CHECK-NEXT: blr 19 } 20 21 define double @test_FMSUB(double %A, double %B, double %C) { 22 %D = fmul double %A, %B ; <double> [#uses=1] 23 %E = fsub double %D, %C ; <double> [#uses=1] 24 ret double %E 25 ; CHECK-LABEL: test_FMSUB: 26 ; CHECK: fmsub 27 ; CHECK-NEXT: blr 28 } 29 30 define double @test_FNMADD1(double %A, double %B, double %C) { 31 %D = fmul double %A, %B ; <double> [#uses=1] 32 %E = fadd double %D, %C ; <double> [#uses=1] 33 %F = fsub double -0.000000e+00, %E ; <double> [#uses=1] 34 ret double %F 35 ; CHECK-LABEL: test_FNMADD1: 36 ; CHECK: fnmadd 37 ; CHECK-NEXT: blr 38 } 39 40 define double @test_FNMADD2(double %A, double %B, double %C) { 41 %D = fmul double %A, %B ; <double> [#uses=1] 42 %E = fadd double %C, %D ; <double> [#uses=1] 43 %F = fsub double -0.000000e+00, %E ; <double> [#uses=1] 44 ret double %F 45 ; CHECK-LABEL: test_FNMADD2: 46 ; CHECK: fnmadd 47 ; CHECK-NEXT: blr 48 } 49 50 define double @test_FNMSUB1(double %A, double %B, double %C) { 51 %D = fmul double %A, %B ; <double> [#uses=1] 52 %E = fsub double %C, %D ; <double> [#uses=1] 53 ret double %E 54 ; CHECK-LABEL: test_FNMSUB1: 55 ; CHECK: fnmsub 56 ; CHECK-NEXT: blr 57 } 58 59 define double @test_FNMSUB2(double %A, double %B, double %C) { 60 %D = fmul double %A, %B ; <double> [#uses=1] 61 %E = fsub double %D, %C ; <double> [#uses=1] 62 %F = fsub double -0.000000e+00, %E ; <double> [#uses=1] 63 ret double %F 64 ; CHECK-LABEL: test_FNMSUB2: 65 ; CHECK: fnmsub 66 ; CHECK-NEXT: blr 67 } 68 69 define float @test_FNMSUBS(float %A, float %B, float %C) { 70 %D = fmul float %A, %B ; <float> [#uses=1] 71 %E = fsub float %D, %C ; <float> [#uses=1] 72 %F = fsub float -0.000000e+00, %E ; <float> [#uses=1] 73 ret float %F 74 ; CHECK-LABEL: test_FNMSUBS: 75 ; CHECK: fnmsubs 76 ; CHECK-NEXT: blr 77 } 78