@@ -1751,6 +1751,8 @@ def map_scan_local(expr, rec, callables_table, nresults, arg_dtypes,
17511751
17521752 def map_reduction (expr , rec , callables_table ,
17531753 guarding_predicates , nresults = 1 ):
1754+ nonlocal insn_changed
1755+
17541756 # Only expand one level of reduction at a time, going from outermost to
17551757 # innermost. Otherwise we get the (iname + insn) dependencies wrong.
17561758
@@ -1827,6 +1829,10 @@ def _error_if_force_scan_on(cls, msg):
18271829 ", " .join (str (kernel .iname_tags (iname ))
18281830 for iname in bad_inames )))
18291831
1832+ # }}}
1833+
1834+ insn_changed = True
1835+
18301836 if n_local_par == 0 and n_sequential == 0 :
18311837 from loopy .diagnostic import warn_with_kernel
18321838 warn_with_kernel (kernel , "empty_reduction" ,
@@ -1840,8 +1846,6 @@ def _error_if_force_scan_on(cls, msg):
18401846
18411847 return expr .expr , callables_table
18421848
1843- # }}}
1844-
18451849 if may_be_implemented_as_scan :
18461850 assert force_scan or automagic_scans_ok
18471851
@@ -1916,7 +1920,7 @@ def _error_if_force_scan_on(cls, msg):
19161920 domains = kernel .domains [:]
19171921
19181922 temp_kernel = kernel
1919- changed = False
1923+ kernel_changed = False
19201924
19211925 import loopy as lp
19221926 while insn_queue :
@@ -1925,6 +1929,7 @@ def _error_if_force_scan_on(cls, msg):
19251929 new_insn_add_within_inames = set ()
19261930
19271931 generated_insns = []
1932+ insn_changed = False
19281933
19291934 insn = insn_queue .pop (0 )
19301935
@@ -1947,7 +1952,7 @@ def _error_if_force_scan_on(cls, msg):
19471952 callables_table = cb_mapper .callables_table ,
19481953 guarding_predicates = insn .predicates ),
19491954
1950- if generated_insns :
1955+ if insn_changed :
19511956 # An expansion happened, so insert the generated stuff plus
19521957 # ourselves back into the queue.
19531958
@@ -2010,14 +2015,14 @@ def _error_if_force_scan_on(cls, msg):
20102015 domains = domains )
20112016 temp_kernel = lp .replace_instruction_ids (
20122017 temp_kernel , insn_id_replacements )
2013- changed = True
2018+ kernel_changed = True
20142019 else :
20152020 # nothing happened, we're done with insn
20162021 assert not new_insn_add_depends_on
20172022
20182023 new_insns .append (insn )
20192024
2020- if changed :
2025+ if kernel_changed :
20212026 kernel = kernel .copy (
20222027 instructions = new_insns ,
20232028 temporary_variables = new_temporary_variables ,
0 commit comments