Documentation

Lean.Compiler.IR.Borrow

@[reducible, inline]
Equations
    Instances For
      Equations
        Instances For
          Equations
            Instances For
              @[reducible, inline]
              Equations
                Instances For
                  Equations
                    Instances For
                      Equations
                        Instances For

                          We perform borrow inference in a block of mutually recursive functions. Join points are viewed as local functions, and are identified using their local id + the name of the surrounding function. We keep a mapping from function and joint points to parameters (Array Param). Recall that Param contains the field borrow.

                          Instances For
                            Equations
                              Instances For
                                @[reducible, inline]
                                Equations
                                  Instances For
                                    Equations
                                      Instances For

                                        Mark parameters that take a reference as borrow

                                        Equations
                                          Instances For

                                            We do not perform borrow inference for constants marked as export. Reason: we current write wrappers in C++ for using exported functions. These wrappers use smart pointers such as object_ref. When writing a new wrapper we need to know whether an argument is a borrow inference or not. We can revise this decision when we implement code for generating the wrappers automatically.

                                            Equations
                                              Instances For
                                                Equations
                                                  Instances For

                                                    Apply the inferred borrow annotations stored at ParamMap to a block of mutually recursive functions.

                                                    Equations
                                                      Instances For
                                                        Equations
                                                          Instances For
                                                            Instances For
                                                              Instances For
                                                                @[reducible, inline]
                                                                abbrev Lean.IR.Borrow.M (α : Type) :
                                                                Equations
                                                                  Instances For
                                                                    Equations
                                                                      Instances For
                                                                        Equations
                                                                          Instances For
                                                                            Equations
                                                                              Instances For
                                                                                Equations
                                                                                  Instances For
                                                                                    Equations
                                                                                      Instances For
                                                                                        Equations
                                                                                          Instances For

                                                                                            Updates map[k] using the current set of owned variables.

                                                                                            Equations
                                                                                              Instances For
                                                                                                Equations
                                                                                                  Instances For

                                                                                                    For each ps[i], if ps[i] is owned, then mark xs[i] as owned.

                                                                                                    Equations
                                                                                                      Instances For

                                                                                                        For each xs[i], if xs[i] is owned, then mark ps[i] as owned. We use this action to preserve tail calls. That is, if we have a tail call f xs, if the i-th parameter is borrowed, but xs[i] is owned we would have to insert a dec xs[i] after f xs and consequently "break" the tail call.

                                                                                                        Equations
                                                                                                          Instances For

                                                                                                            Mark xs[i] as owned if it is one of the parameters ps. We use this action to mark function parameters that are being "packed" inside constructors. This is a heuristic, and is not related with the effectiveness of the reset/reuse optimization. It is useful for code such as

                                                                                                            def f (x y : obj) :=
                                                                                                            let z := ctor_1 x y;
                                                                                                            ret z
                                                                                                            
                                                                                                            Equations
                                                                                                              Instances For
                                                                                                                Equations
                                                                                                                  Instances For
                                                                                                                    Equations
                                                                                                                      Instances For
                                                                                                                        Equations
                                                                                                                          Instances For
                                                                                                                            Equations
                                                                                                                              Instances For

                                                                                                                                Keep executing x until it reaches a fixpoint

                                                                                                                                Equations
                                                                                                                                  Instances For
                                                                                                                                    Equations
                                                                                                                                      Instances For
                                                                                                                                        Equations
                                                                                                                                          Instances For