diff --git a/loopy/codegen/__init__.py b/loopy/codegen/__init__.py index 59df3af620050eef712881e955098af6678cea79..4056c0dea785a6d27225a4fd2b3337c9c9a14db9 100644 --- a/loopy/codegen/__init__.py +++ b/loopy/codegen/__init__.py @@ -637,6 +637,7 @@ def generate_body(kernel): seen_dtypes = set() seen_functions = set() + seen_atomic_dtypes = set() initial_implemented_domain = isl.BasicSet.from_params(kernel.assumptions) codegen_state = CodeGenerationState( @@ -645,6 +646,7 @@ def generate_body(kernel): implemented_predicates=frozenset(), seen_dtypes=seen_dtypes, seen_functions=seen_functions, + seen_atomic_dtypes=seen_atomic_dtypes, var_subst_map={}, allow_complex=allow_complex) diff --git a/loopy/library/reduction.py b/loopy/library/reduction.py index 90dd27133c03d6dfde5cb49707b25980d28348f1..3eb590b80e9273e70c3d71108ec130a16afee692 100644 --- a/loopy/library/reduction.py +++ b/loopy/library/reduction.py @@ -163,7 +163,8 @@ class _ArgExtremumReductionOperation(ReductionOperation): struct_dtype = np.dtype([("value", dtype), ("index", np.int32)]) ARGEXT_STRUCT_DTYPES[dtype] = NumpyType(struct_dtype, target) - target.get_or_register_dtype(self.prefix(dtype)+"_result", struct_dtype) + target.get_or_register_dtype(self.prefix(dtype)+"_result", + NumpyType(struct_dtype)) return ARGEXT_STRUCT_DTYPES[dtype] def neutral_element(self, dtype, inames): diff --git a/loopy/target/c/__init__.py b/loopy/target/c/__init__.py index f9a5e4390d07231e3933127e262e86e58c4c5279..66210bb2ab326a48609debc0e491aeac4350ed65 100644 --- a/loopy/target/c/__init__.py +++ b/loopy/target/c/__init__.py @@ -178,7 +178,7 @@ class CTarget(TargetBase): base_storage_to_is_local = {} base_storage_to_align_bytes = {} - from cgen import ArrayOf, Pointer, Initializer, AlignedAttribute + from cgen import ArrayOf, Pointer, Initializer, AlignedAttribute, Value from loopy.codegen import POD # uses the correct complex type class ConstRestrictPointer(Pointer): @@ -251,7 +251,7 @@ class CTarget(TargetBase): * product(si for si in idi.shape)) for bs_name, bs_sizes in sorted(six.iteritems(base_storage_sizes)): - bs_var_decl = POD(self, np.int8, bs_name) + bs_var_decl = Value("char", bs_name) bs_var_decl = self.wrap_temporary_decl( bs_var_decl, base_storage_to_is_local[bs_name]) bs_var_decl = ArrayOf(bs_var_decl, max(bs_sizes)) diff --git a/loopy/target/opencl.py b/loopy/target/opencl.py index 1e224ff1f87f37270802736fe441cfebff4c9a4a..43c4ea7dc30f139261a3c8ea46e32860c265412f 100644 --- a/loopy/target/opencl.py +++ b/loopy/target/opencl.py @@ -44,8 +44,8 @@ class DTypeRegistryWrapperWithAtomics(DTypeRegistryWrapper): return super(self.wrapped_registry.get_or_register_dtype( names, NumpyType(dtype.dtype))) - return super(self.wrapped_registry.get_or_register_dtype( - names, dtype)) + return super(DTypeRegistryWrapperWithAtomics, self).get_or_register_dtype( + names, dtype) class DTypeRegistryWrapperWithCL1Atomics(DTypeRegistryWrapperWithAtomics): diff --git a/loopy/types.py b/loopy/types.py index 21567b9a4e7db4c34e05ecb852db4d25993a3014..d80650eb6b203c70b2abf60481ebb9e38ca99b9f 100644 --- a/loopy/types.py +++ b/loopy/types.py @@ -107,13 +107,13 @@ class NumpyType(LoopyType): if self.target is None: raise RuntimeError("unable to pickle dtype: target not known") - c_name = self.target.dtype_to_typename(self.dtype) + c_name = self.target.dtype_to_typename(NumpyType(self.dtype)) return (self.target, c_name, self.dtype) def __setstate__(self, state): target, name, dtype = state self.target = target - self.dtype = self.target.get_or_register_dtype([name], dtype) + self.dtype = self.target.get_or_register_dtype([name], NumpyType(dtype)) def with_target(self, target): if (self.target is not None diff --git a/loopy/version.py b/loopy/version.py index 2ade5ba548b79cad3103bd52f32bbc1447537486..60e310a7c70e34be42b3152d3d0e89601ef092ed 100644 --- a/loopy/version.py +++ b/loopy/version.py @@ -32,4 +32,4 @@ except ImportError: else: _islpy_version = islpy.version.VERSION_TEXT -DATA_MODEL_VERSION = "v22-islpy%s" % _islpy_version +DATA_MODEL_VERSION = "v23-islpy%s" % _islpy_version