1 ; RUN: llc < %s -march=mipsel -mcpu=mips32r2 -enable-no-nans-fp-math | FileCheck %s -check-prefix=32R2 2 ; RUN: llc < %s -march=mips64el -mcpu=mips64r2 -mattr=n64 -enable-no-nans-fp-math | FileCheck %s -check-prefix=64R2 3 ; RUN: llc < %s -march=mipsel -mcpu=mips32r2 | FileCheck %s -check-prefix=32R2NAN 4 ; RUN: llc < %s -march=mips64el -mcpu=mips64r2 -mattr=n64 | FileCheck %s -check-prefix=64R2NAN 5 6 define float @FOO0float(float %a, float %b, float %c) nounwind readnone { 7 entry: 8 ; CHECK: madd.s 9 %mul = fmul float %a, %b 10 %add = fadd float %mul, %c 11 %add1 = fadd float %add, 0.000000e+00 12 ret float %add1 13 } 14 15 define float @FOO1float(float %a, float %b, float %c) nounwind readnone { 16 entry: 17 ; CHECK: msub.s 18 %mul = fmul float %a, %b 19 %sub = fsub float %mul, %c 20 %add = fadd float %sub, 0.000000e+00 21 ret float %add 22 } 23 24 define float @FOO2float(float %a, float %b, float %c) nounwind readnone { 25 entry: 26 ; 32R2: nmadd.s 27 ; 64R2: nmadd.s 28 ; 32R2NAN: madd.s 29 ; 64R2NAN: madd.s 30 %mul = fmul float %a, %b 31 %add = fadd float %mul, %c 32 %sub = fsub float 0.000000e+00, %add 33 ret float %sub 34 } 35 36 define float @FOO3float(float %a, float %b, float %c) nounwind readnone { 37 entry: 38 ; 32R2: nmsub.s 39 ; 64R2: nmsub.s 40 ; 32R2NAN: msub.s 41 ; 64R2NAN: msub.s 42 %mul = fmul float %a, %b 43 %sub = fsub float %mul, %c 44 %sub1 = fsub float 0.000000e+00, %sub 45 ret float %sub1 46 } 47 48 define double @FOO10double(double %a, double %b, double %c) nounwind readnone { 49 entry: 50 ; CHECK: madd.d 51 %mul = fmul double %a, %b 52 %add = fadd double %mul, %c 53 %add1 = fadd double %add, 0.000000e+00 54 ret double %add1 55 } 56 57 define double @FOO11double(double %a, double %b, double %c) nounwind readnone { 58 entry: 59 ; CHECK: msub.d 60 %mul = fmul double %a, %b 61 %sub = fsub double %mul, %c 62 %add = fadd double %sub, 0.000000e+00 63 ret double %add 64 } 65 66 define double @FOO12double(double %a, double %b, double %c) nounwind readnone { 67 entry: 68 ; 32R2: nmadd.d 69 ; 64R2: nmadd.d 70 ; 32R2NAN: madd.d 71 ; 64R2NAN: madd.d 72 %mul = fmul double %a, %b 73 %add = fadd double %mul, %c 74 %sub = fsub double 0.000000e+00, %add 75 ret double %sub 76 } 77 78 define double @FOO13double(double %a, double %b, double %c) nounwind readnone { 79 entry: 80 ; 32R2: nmsub.d 81 ; 64R2: nmsub.d 82 ; 32R2NAN: msub.d 83 ; 64R2NAN: msub.d 84 %mul = fmul double %a, %b 85 %sub = fsub double %mul, %c 86 %sub1 = fsub double 0.000000e+00, %sub 87 ret double %sub1 88 } 89