summaryrefslogtreecommitdiff
path: root/libclc
diff options
context:
space:
mode:
authorDaniel Stone <daniels@collabora.com>2020-09-15 13:01:04 -0400
committerJan Vesely <jano.vesely@gmail.com>2020-09-16 01:37:22 -0400
commit291bfff5dbb70360730e91b4019f8080e4e3d7f5 (patch)
tree0cc8e3b25b44717e2e67423085e7d6dbf0fd2a42 /libclc
parent9c40495a35a2cac89dd72db54892d6bd7a2abf0d (diff)
downloadllvm-291bfff5dbb70360730e91b4019f8080e4e3d7f5.tar.gz
libclc: Add a __builtin to let SPIRV targets select between SW and HW FMA
Reviewer: jenatali jvesely Differential Revision: https://reviews.llvm.org/D85910
Diffstat (limited to 'libclc')
-rw-r--r--libclc/generic/lib/math/math.h3
-rw-r--r--libclc/spirv/lib/math/fma.cl5
-rw-r--r--libclc/spirv64/lib/math/fma.cl5
3 files changed, 13 insertions, 0 deletions
diff --git a/libclc/generic/lib/math/math.h b/libclc/generic/lib/math/math.h
index c931d19a380c..351e37dc3f12 100644
--- a/libclc/generic/lib/math/math.h
+++ b/libclc/generic/lib/math/math.h
@@ -40,6 +40,9 @@
#if (defined __AMDGCN__ || defined __R600__) && !defined __HAS_FMAF__
#define HAVE_HW_FMA32() (0)
+#elif defined CLC_SPIRV || defined CLC_SPIRV64
+bool __attribute__((noinline)) __clc_runtime_has_hw_fma32(void);
+#define HAVE_HW_FMA32() __clc_runtime_has_hw_fma32()
#else
#define HAVE_HW_FMA32() (1)
#endif
diff --git a/libclc/spirv/lib/math/fma.cl b/libclc/spirv/lib/math/fma.cl
index 982ddc4374f3..79142425e52d 100644
--- a/libclc/spirv/lib/math/fma.cl
+++ b/libclc/spirv/lib/math/fma.cl
@@ -4,3 +4,8 @@
#define __CLC_BODY <fma.inc>
#define __FLOAT_ONLY
#include <clc/math/gentype.inc>
+
+bool __clc_runtime_has_hw_fma32()
+{
+ return false;
+}
diff --git a/libclc/spirv64/lib/math/fma.cl b/libclc/spirv64/lib/math/fma.cl
index 982ddc4374f3..79142425e52d 100644
--- a/libclc/spirv64/lib/math/fma.cl
+++ b/libclc/spirv64/lib/math/fma.cl
@@ -4,3 +4,8 @@
#define __CLC_BODY <fma.inc>
#define __FLOAT_ONLY
#include <clc/math/gentype.inc>
+
+bool __clc_runtime_has_hw_fma32()
+{
+ return false;
+}