From f37b83661887398de7d1c7fcfdafd31fd22b9690 Mon Sep 17 00:00:00 2001 From: nimlgen <138685161+nimlgen@users.noreply.github.com> Date: Sat, 6 Sep 2025 13:29:23 +0300 Subject: [PATCH] factor out _globalizable_rngs (#12054) --- tinygrad/codegen/opt/postrange.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tinygrad/codegen/opt/postrange.py b/tinygrad/codegen/opt/postrange.py index a948856da6..f6369b6eab 100644 --- a/tinygrad/codegen/opt/postrange.py +++ b/tinygrad/codegen/opt/postrange.py @@ -62,8 +62,7 @@ class Scheduler: self.ast = graph_rewrite(self.ast, pm_flatten_range, name="flatten range") return self.ast.replace(arg=KernelInfo(name=name, applied_opts=tuple(self.applied_opts), dont_use_locals=self.dont_use_locals), tag=1) - def convert_loop_to_global(self): - if not self.opts.has_local: return None + def _globalizable_rngs(self) -> list[UOp]: store_rngs = self.ast.src[0].src[2:] # filter any not in local stores @@ -71,8 +70,13 @@ class Scheduler: or (x.op is Ops.BUFFERIZE and x.arg == AddrSpace.LOCAL)] for ls in local_store_rngs: store_rngs = tuple([x for x in store_rngs if x in ls]) - store_rng = [x for x in UOp.sink(*store_rngs).toposort() if x.op is Ops.RANGE] if store_rngs else [] - rng = [x.replace(arg=(x.arg[0], AxisType.GLOBAL)) if x.arg[1] == AxisType.LOOP and x in store_rng else x for x in self.rngs] + return [x for x in UOp.sink(*store_rngs).toposort() if x.op is Ops.RANGE and x.arg[1] == AxisType.LOOP] if store_rngs else [] + + def convert_loop_to_global(self): + if not self.opts.has_local: return None + + globalizible_rngs = self._globalizable_rngs() + rng = [x.replace(arg=(x.arg[0], AxisType.GLOBAL)) if x in globalizible_rngs else x for x in self.rngs] self.ast = self.ast.substitute(dict(zip(self.rngs, rng)))