LLVM will introduce if/else/endif block if clamp the value in one statement.
Split to two select to avoid branching.
It seems that LLVM 3.6 is not correct when convert one statement. Split also 
workaround this issue.

Signed-off-by: Yang Rong <[email protected]>
---
 backend/src/libocl/script/ocl_convert.sh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/backend/src/libocl/script/ocl_convert.sh 
b/backend/src/libocl/script/ocl_convert.sh
index 4f720fe..736452c 100755
--- a/backend/src/libocl/script/ocl_convert.sh
+++ b/backend/src/libocl/script/ocl_convert.sh
@@ -161,7 +161,8 @@ else
     echo '
 #define DEF(DSTTYPE, SRCTYPE, MIN, MAX) \
 OVERLOADABLE DSTTYPE convert_ ## DSTTYPE ## _sat(SRCTYPE x) { \
-  return x >= MAX ? (DSTTYPE)MAX : x <= MIN ? (DSTTYPE)MIN : x; \
+  x = x >= MAX ? MAX : x; \
+  return x <= MIN ? (DSTTYPE)MIN : x; \
 }
 '
 fi
-- 
1.9.1

_______________________________________________
Beignet mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/beignet

Reply via email to