[Beignet] [PATCH OCL20 V2 3/4] Backend: Add workaround for instcombine will optimize fabs

Xiuli Pan xiuli.pan at intel.com
Fri Apr 29 03:25:19 UTC 2016


From: Pan Xiuli <xiuli.pan at intel.com>

LLVM will combine
  %bc = bitcast float %x to i32
  %and = and i32 %bc, 2147483647
into
  %and = bitcast float %fabs to i32
and fabs will ignore the denorm numbers, so need to workaround for
denorm numbers.

Signed-off-by: Pan Xiuli <xiuli.pan at intel.com>
---
 backend/src/libocl/tmpl/ocl_math.tmpl.cl | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/backend/src/libocl/tmpl/ocl_math.tmpl.cl b/backend/src/libocl/tmpl/ocl_math.tmpl.cl
index d8fa4ae..ba3b6b0 100644
--- a/backend/src/libocl/tmpl/ocl_math.tmpl.cl
+++ b/backend/src/libocl/tmpl/ocl_math.tmpl.cl
@@ -2630,6 +2630,10 @@ OVERLOADABLE float nextafter(float x, float y) {
   hy = as_int(y);
   ix = hx & 0x7fffffff;
   iy = hy & 0x7fffffff;
+  if(ix == 0)
+    ix = hx & 0x7fffff;
+  if(iy == 0)
+    iy = hy & 0x7fffff;
   if(ix>0x7f800000 || iy>0x7f800000)
     return x+y;
   if(hx == hy)
-- 
2.5.0



More information about the Beignet mailing list