diff options
| author | Stefan Pintilie <stefanp@ca.ibm.com> | 2018-07-09 18:50:40 +0000 |
|---|---|---|
| committer | Stefan Pintilie <stefanp@ca.ibm.com> | 2018-07-09 18:50:40 +0000 |
| commit | 3dbde8a77843bb92a1cda9b5c1ef975edf8a3145 (patch) | |
| tree | b2d96d43e367dad592d9cc1cabf1de1f262f1f95 | |
| parent | 83a5fe146e0728a7e61c6f17b06a3a963c5b7e00 (diff) | |
| download | bcm5719-llvm-3dbde8a77843bb92a1cda9b5c1ef975edf8a3145.tar.gz bcm5719-llvm-3dbde8a77843bb92a1cda9b5c1ef975edf8a3145.zip | |
[Power9] Add __float128 builtins for Round To Odd
Add a number of builtins for __float128 Round To Odd.
This is the Clang portion of the builtins work.
Differential Revision: https://reviews.llvm.org/D47548
llvm-svn: 336579
| -rw-r--r-- | clang/include/clang/Basic/BuiltinsPPC.def | 8 | ||||
| -rw-r--r-- | clang/test/CodeGen/builtins-ppc-p9-f128.c | 45 |
2 files changed, 53 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/BuiltinsPPC.def b/clang/include/clang/Basic/BuiltinsPPC.def index faa70a48edc..e3d71385eb6 100644 --- a/clang/include/clang/Basic/BuiltinsPPC.def +++ b/clang/include/clang/Basic/BuiltinsPPC.def @@ -423,6 +423,14 @@ BUILTIN(__builtin_vsx_extractuword, "V2ULLiV16UcIi", "") BUILTIN(__builtin_vsx_xxpermdi, "v.", "t") BUILTIN(__builtin_vsx_xxsldwi, "v.", "t") +// Float 128 built-ins +BUILTIN(__builtin_sqrtf128_round_to_odd, "LLdLLd", "") +BUILTIN(__builtin_addf128_round_to_odd, "LLdLLdLLd", "") +BUILTIN(__builtin_subf128_round_to_odd, "LLdLLdLLd", "") +BUILTIN(__builtin_mulf128_round_to_odd, "LLdLLdLLd", "") +BUILTIN(__builtin_divf128_round_to_odd, "LLdLLdLLd", "") +BUILTIN(__builtin_fmaf128_round_to_odd, "LLdLLdLLdLLd", "") + // HTM builtins BUILTIN(__builtin_tbegin, "UiUIi", "") BUILTIN(__builtin_tend, "UiUIi", "") diff --git a/clang/test/CodeGen/builtins-ppc-p9-f128.c b/clang/test/CodeGen/builtins-ppc-p9-f128.c new file mode 100644 index 00000000000..c0e8f6485c4 --- /dev/null +++ b/clang/test/CodeGen/builtins-ppc-p9-f128.c @@ -0,0 +1,45 @@ +// RUN: %clang_cc1 -triple powerpc64le-unknown-linux-gnu -emit-llvm \ +// RUN: -target-cpu pwr9 -target-feature +float128 -o - %s | FileCheck %s + +__float128 A; +__float128 B; +__float128 C; + + +__float128 testSqrtOdd() { + return __builtin_sqrtf128_round_to_odd(A); +// CHECK: @llvm.ppc.sqrtf128.round.to.odd(fp128 +// CHECK-NEXT: ret fp128 +} + +__float128 testFMAOdd() { + return __builtin_fmaf128_round_to_odd(A, B, C); +// CHECK: @llvm.ppc.fmaf128.round.to.odd(fp128 %{{.+}}, fp128 %{{.+}}, fp128 +// CHECK-NEXT: ret fp128 +} + +__float128 testAddOdd() { + return __builtin_addf128_round_to_odd(A, B); +// CHECK: @llvm.ppc.addf128.round.to.odd(fp128 %{{.+}}, fp128 +// CHECK-NEXT: ret fp128 +} + +__float128 testSubOdd() { + return __builtin_subf128_round_to_odd(A, B); +// CHECK: @llvm.ppc.subf128.round.to.odd(fp128 %{{.+}}, fp128 +// CHECK-NEXT: ret fp128 +} + +__float128 testMulOdd() { + return __builtin_mulf128_round_to_odd(A, B); +// CHECK: @llvm.ppc.mulf128.round.to.odd(fp128 %{{.+}}, fp128 +// CHECK-NEXT: ret fp128 +} + +__float128 testDivOdd() { + return __builtin_divf128_round_to_odd(A, B); +// CHECK: @llvm.ppc.divf128.round.to.odd(fp128 %{{.+}}, fp128 +// CHECK-NEXT: ret fp128 +} + + |

