diff options
author | Cameron Zwarich <zwarich@apple.com> | 2011-07-08 21:39:21 +0000 |
---|---|---|
committer | Cameron Zwarich <zwarich@apple.com> | 2011-07-08 21:39:21 +0000 |
commit | 33390848a7eca75301d04a59b89b516d83e19ee0 (patch) | |
tree | 78f81419440b86ae4fa8a150780b7f211668b781 /include | |
parent | cc0ddc707d5a7b1dd11141881df0bf4210f8aeee (diff) | |
download | llvm-33390848a7eca75301d04a59b89b516d83e19ee0.tar.gz llvm-33390848a7eca75301d04a59b89b516d83e19ee0.tar.bz2 llvm-33390848a7eca75301d04a59b89b516d83e19ee0.tar.xz |
Add an intrinsic and codegen support for fused multiply-accumulate. The intent
is to use this for architectures that have a native FMA instruction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134742 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/CodeGen/ISDOpcodes.h | 2 | ||||
-rw-r--r-- | include/llvm/CodeGen/RuntimeLibcalls.h | 4 | ||||
-rw-r--r-- | include/llvm/Intrinsics.td | 6 |
3 files changed, 11 insertions, 1 deletions
diff --git a/include/llvm/CodeGen/ISDOpcodes.h b/include/llvm/CodeGen/ISDOpcodes.h index 498614e7fd..459cecda21 100644 --- a/include/llvm/CodeGen/ISDOpcodes.h +++ b/include/llvm/CodeGen/ISDOpcodes.h @@ -232,7 +232,7 @@ namespace ISD { SMULO, UMULO, // Simple binary floating point operators. - FADD, FSUB, FMUL, FDIV, FREM, + FADD, FSUB, FMUL, FMA, FDIV, FREM, // FCOPYSIGN(X, Y) - Return the value of X with the sign of Y. NOTE: This // DAG node does not require that X and Y have the same type, just that they diff --git a/include/llvm/CodeGen/RuntimeLibcalls.h b/include/llvm/CodeGen/RuntimeLibcalls.h index 44d9477978..4bfd4ab530 100644 --- a/include/llvm/CodeGen/RuntimeLibcalls.h +++ b/include/llvm/CodeGen/RuntimeLibcalls.h @@ -103,6 +103,10 @@ namespace RTLIB { REM_F64, REM_F80, REM_PPCF128, + FMA_F32, + FMA_F64, + FMA_F80, + FMA_PPCF128, POWI_F32, POWI_F64, POWI_F80, diff --git a/include/llvm/Intrinsics.td b/include/llvm/Intrinsics.td index c854471036..947cf1be7d 100644 --- a/include/llvm/Intrinsics.td +++ b/include/llvm/Intrinsics.td @@ -255,6 +255,12 @@ let Properties = [IntrReadMem] in { def int_exp2 : Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>]>; } +let Properties = [IntrNoMem] in { + def int_fma : Intrinsic<[llvm_anyfloat_ty], + [LLVMMatchType<0>, LLVMMatchType<0>, + LLVMMatchType<0>]>; +} + // NOTE: these are internal interfaces. def int_setjmp : Intrinsic<[llvm_i32_ty], [llvm_ptr_ty]>; def int_longjmp : Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty]>; |