From b2f09fd60313675f9f8066a71bb9764ce016a6be Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Tue, 16 Jul 2013 17:24:08 -0400 Subject: [PATCH] Add a regstration interface for library bits --- doc/reference.rst | 11 ++++++++ loopy/__init__.py | 55 +++++++++++++++++++++++++++++++++++++--- loopy/kernel/__init__.py | 4 --- 3 files changed, 62 insertions(+), 8 deletions(-) diff --git a/doc/reference.rst b/doc/reference.rst index a35cf510e..81d1acd14 100644 --- a/doc/reference.rst +++ b/doc/reference.rst @@ -298,6 +298,17 @@ Manipulating Instructions .. autofunction:: add_dependency +Library interface +^^^^^^^^^^^^^^^^^ + +.. autofunction:: register_reduction_parser + +.. autofunction:: register_preamble_generators + +.. autofunction:: register_symbol_manglers + +.. autofunction:: register_function_manglers + Argument types ^^^^^^^^^^^^^^ diff --git a/loopy/__init__.py b/loopy/__init__.py index 989d1a406..c2289f478 100644 --- a/loopy/__init__.py +++ b/loopy/__init__.py @@ -90,6 +90,10 @@ __all__ = [ "make_kernel", "register_reduction_parser", + "extract_subst", "expand_subst", + "precompute", + "split_arg_axis", "find_padding_multiple", "add_padding" + "get_dot_dependency_graph", "add_argument_dtypes", "infer_argument_dtypes", "add_and_infer_argument_dtypes", @@ -104,11 +108,22 @@ __all__ = [ "LoopyFlags", "make_kernel", + + # {{{ from this file + "split_iname", "join_inames", "tag_inames", "duplicate_inames", - "split_dimension", "join_dimensions", "tag_dimensions", - "extract_subst", "expand_subst", - "precompute", "add_prefetch", - "split_arg_axis", "find_padding_multiple", "add_padding" + "rename_iname", "link_inames", "remove_unused_inames", + "set_loop_priority", "add_prefetch" + "find_instructions", "map_instructions", + "set_instruction_priority", "add_dependency", + "change_arg_to_image", "tag_data_axes", + "split_reduction_inward", "split_reduction_outward", + "fix_parameters", + "register_preamble_generators", + "register_symbol_manglers", + "register_function_manglers", + + # }}} ] @@ -1219,4 +1234,36 @@ def fix_parameter(kernel, name, value): # }}} + +# {{{ library registration + +def register_preamble_generators(kernel, preamble_generators): + new_pgens = kernel.preamble_generators[:] + for pgen in preamble_generators: + if pgen not in new_pgens: + new_pgens.append(pgen) + + return kernel.copy(preamble_generators=new_pgens) + + +def register_symbol_manglers(kernel, manglers): + new_manglers = kernel.symbol_manglers[:] + for m in manglers: + if m not in manglers: + new_manglers.append(m) + + return kernel.copy(symbol_manglers=new_manglers) + + +def register_function_manglers(kernel, manglers): + new_manglers = kernel.function_manglers[:] + for m in manglers: + if m not in manglers: + new_manglers.append(m) + + return kernel.copy(function_manglers=new_manglers) + +# }}} + + # vim: foldmethod=marker diff --git a/loopy/kernel/__init__.py b/loopy/kernel/__init__.py index 04ec45757..efc606c24 100644 --- a/loopy/kernel/__init__.py +++ b/loopy/kernel/__init__.py @@ -275,10 +275,6 @@ class LoopKernel(Record): # {{{ function mangling - def register_function_mangler(self, mangler): - return self.copy( - function_manglers=[mangler]+self.function_manglers) - def mangle_function(self, identifier, arg_dtypes): for mangler in self.function_manglers: mangle_result = mangler(identifier, arg_dtypes) -- GitLab