diff --git a/lib/cretonne/meta/cdsl/xform.py b/lib/cretonne/meta/cdsl/xform.py index f25068480c..1d74eaccf9 100644 --- a/lib/cretonne/meta/cdsl/xform.py +++ b/lib/cretonne/meta/cdsl/xform.py @@ -68,6 +68,17 @@ class Rtl(object): [d.definitions() for d in self.rtl], set([])) + def free_vars(self): + # type: () -> Set[Var] + """ Return the set of free Vars used in self""" + def flow_f(s, d): + # type: (Set[Var], Def): Set[Var] + """Compute the change in the set of free vars across a Def""" + s = s.difference(set(d.defs)) + return s.union(set(a for a in d.expr.args if isinstance(a, Var))) + + return reduce(flow_f, reversed(self.rtl), set([])) + def substitution(self, other, s): # type: (Rtl, VarMap) -> Optional[VarMap] """