forked from OSchip/llvm-project
[WebAssembly] Implement fma.
It is lowered to a libcall for now, but this is expected to change in the future. llvm-svn: 255219
This commit is contained in:
parent
60520e2203
commit
9341c1d4b3
|
@ -134,7 +134,7 @@ WebAssemblyTargetLowering::WebAssemblyTargetLowering(
|
|||
setCondCodeAction(CC, T, Expand);
|
||||
// Expand floating-point library function operators.
|
||||
for (auto Op : {ISD::FSIN, ISD::FCOS, ISD::FSINCOS, ISD::FPOWI, ISD::FPOW,
|
||||
ISD::FREM})
|
||||
ISD::FREM, ISD::FMA})
|
||||
setOperationAction(Op, T, Expand);
|
||||
// Note supported floating-point library function operators that otherwise
|
||||
// default to expand.
|
||||
|
|
|
@ -13,6 +13,7 @@ declare float @llvm.floor.f32(float)
|
|||
declare float @llvm.trunc.f32(float)
|
||||
declare float @llvm.nearbyint.f32(float)
|
||||
declare float @llvm.rint.f32(float)
|
||||
declare float @llvm.fma.f32(float, float, float)
|
||||
|
||||
; CHECK-LABEL: fadd32:
|
||||
; CHECK-NEXT: .param f32, f32{{$}}
|
||||
|
@ -143,3 +144,11 @@ define float @fmax32(float %x) {
|
|||
%b = select i1 %a, float %x, float 0.0
|
||||
ret float %b
|
||||
}
|
||||
|
||||
; CHECK-LABEL: fma32:
|
||||
; CHECK: call $push0=, fmaf, $0, $1, $2{{$}}
|
||||
; CHECK-NEXT: return $pop0{{$}}
|
||||
define float @fma32(float %a, float %b, float %c) {
|
||||
%d = call float @llvm.fma.f32(float %a, float %b, float %c)
|
||||
ret float %d
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ declare double @llvm.floor.f64(double)
|
|||
declare double @llvm.trunc.f64(double)
|
||||
declare double @llvm.nearbyint.f64(double)
|
||||
declare double @llvm.rint.f64(double)
|
||||
declare double @llvm.fma.f64(double, double, double)
|
||||
|
||||
; CHECK-LABEL: fadd64:
|
||||
; CHECK-NEXT: .param f64, f64{{$}}
|
||||
|
@ -143,3 +144,11 @@ define double @fmax64(double %x) {
|
|||
%b = select i1 %a, double %x, double 0.0
|
||||
ret double %b
|
||||
}
|
||||
|
||||
; CHECK-LABEL: fma64:
|
||||
; CHECK: call $push0=, fma, $0, $1, $2{{$}}
|
||||
; CHECK-NEXT: return $pop0{{$}}
|
||||
define double @fma64(double %a, double %b, double %c) {
|
||||
%d = call double @llvm.fma.f64(double %a, double %b, double %c)
|
||||
ret double %d
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue