From 1ccdb5254dcfb10c772e65db5085e9554ac7faa2 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Wed, 6 May 2026 10:57:10 -0500 Subject: [PATCH 1/2] add typing for get_constant_iname_length --- loopy/kernel/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loopy/kernel/__init__.py b/loopy/kernel/__init__.py index af51bebbd..da3da692a 100644 --- a/loopy/kernel/__init__.py +++ b/loopy/kernel/__init__.py @@ -850,7 +850,7 @@ def get_iname_bounds(self, size=size) @memoize_method - def get_constant_iname_length(self, iname): + def get_constant_iname_length(self, iname: str) -> int: from loopy.isl_helpers import static_max_of_pw_aff from loopy.symbolic import aff_to_expr return int(aff_to_expr(static_max_of_pw_aff( From d6d153c6ce76e1db650d641fc24ced7d2bf12ee0 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Wed, 6 May 2026 10:33:48 -0500 Subject: [PATCH 2/2] don't report write races for loops that have a single iteration --- loopy/check.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/loopy/check.py b/loopy/check.py index e9d239ec8..5d8ab73fc 100644 --- a/loopy/check.py +++ b/loopy/check.py @@ -607,6 +607,14 @@ def check_for_write_races(kernel: LoopKernel) -> None: """ from loopy.kernel.data import ConcurrentTag + def iname_has_single_iteration(iname: str) -> bool: + try: + if kernel.get_constant_iname_length(iname) == 1: + return True + except isl.Error: + pass + return False + for insn in kernel.instructions: for assignee_name, assignee_indices in zip( insn.assignee_var_names(), @@ -624,14 +632,16 @@ def check_for_write_races(kernel: LoopKernel) -> None: raceable_parallel_insn_inames = { iname for iname in insn.within_inames - if kernel.iname_tags_of_type(iname, ConcurrentTag)} + if kernel.iname_tags_of_type(iname, ConcurrentTag) + and not iname_has_single_iteration(iname)} elif assignee_name in kernel.temporary_variables: temp_var = kernel.temporary_variables[assignee_name] raceable_parallel_insn_inames = { iname for iname in insn.within_inames if any(_is_racing_iname_tag(temp_var, tag) - for tag in kernel.iname_tags(iname))} + for tag in kernel.iname_tags(iname)) + and not iname_has_single_iteration(iname)} else: raise LoopyError("invalid assignee name in instruction '%s'"