From 1e59801fcc70341abbadb80b82ca842762a426a3 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Mon, 17 Jun 2013 10:31:57 -0400
Subject: [PATCH] Add mangling for INFINITY and max/min.

---
 loopy/kernel/data.py | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/loopy/kernel/data.py b/loopy/kernel/data.py
index 28e39e40c..6a4ac4038 100644
--- a/loopy/kernel/data.py
+++ b/loopy/kernel/data.py
@@ -462,7 +462,18 @@ def default_function_mangler(name, arg_dtypes):
 
 
 def opencl_function_mangler(name, arg_dtypes):
-    if name == "atan2" and len(arg_dtypes) == 2:
+    if name in ["max", "min"] and len(arg_dtypes) == 2:
+        dtype = np.find_common_type([], arg_dtypes)
+
+        if dtype.kind == "c":
+            raise RuntimeError("min/max do not support complex numbers")
+
+        if dtype.kind == "f":
+            name = "f" + name
+
+        return dtype, name
+
+    if name in "atan2" and len(arg_dtypes) == 2:
         return arg_dtypes[0], name
 
     if len(arg_dtypes) == 1:
@@ -511,6 +522,8 @@ def opencl_symbol_mangler(name):
             return np.dtype(np.float32), name
         else:
             return np.dtype(np.float64), name
+    elif name == "INFINITY":
+        return np.dtype(np.float32), name
     else:
         return None
 
-- 
GitLab