diff --git a/loopy/kernel/function_interface.py b/loopy/kernel/function_interface.py index 17bd60ff2a335ebbf8232ae4223ca8b635806736..f2c24b293595e015d4cd5bc599870a186d8fae2c 100644 --- a/loopy/kernel/function_interface.py +++ b/loopy/kernel/function_interface.py @@ -275,7 +275,8 @@ class InKernelCallable(ImmutableRecord): its keyword identifier. """ - if self.arg_id_to_dtype: + if self.arg_id_to_dtype is not None: + # specializing an already specialized function. for id, dtype in arg_id_to_dtype.items(): diff --git a/loopy/type_inference.py b/loopy/type_inference.py index b1b1446db123fbfb0296f2bccbe14df1b9d4fb13..ee4bf38bec2e4de7309003f07f16a1c48a34f19a 100644 --- a/loopy/type_inference.py +++ b/loopy/type_inference.py @@ -120,6 +120,11 @@ class TypeInferenceMapper(CombineMapper): 0 <= len(dtype_set) <= 1 for dtype_set in dtype_sets) + # Can't infer types if one of the dtypes is unknown + for dtype_set in dtype_sets: + if dtype_set == []: + return [] + from pytools import is_single_valued dtypes = [dtype @@ -667,8 +672,7 @@ def infer_unknown_types(kernel, expect_completion=False): #------------------------------------------------------------------------ # KK: - # FIXME: more type scoped function type specialization but needed for the - # specialization of the in kernel callables + # FIXME: # for example if an instruction is : # `[i]:z[i] = a_kernel_function([j]:x[j], [k]: y[k])` # and if the user already provided the types of the args: x, y, z.