diff --git a/compiler/notes/compiler_design.html b/compiler/notes/compiler_design.html index 18eb4258a..46617ca15 100644 --- a/compiler/notes/compiler_design.html +++ b/compiler/notes/compiler_design.html @@ -1684,7 +1684,7 @@ that require definitive evaluation methods (e.g. inlining).
  • The next pass of this stage converts lambda expressions into higher-order predicate terms -that refer to freshly introduced separate predicates (lambda.m). +that refer to freshly introduced separate predicates (expand_lambdas.m). This pass needs to come after unique_modes.m to ensure that the modes we give to the introduced predicates are correct. It also needs to come after table_gen.m @@ -1734,34 +1734,38 @@ The next pass is termination analysis. The compiler contains two separate termination analysis systems, which are based on different principles.

    -The modules involved in the first system are: +The first system is based on the idea of +computing the set of "output supplier inputs", meaning +the inputs on whose size the sizes of the output outputs depends. +The modules of this system, +which are in the termination.term_osi package, are

    -The modules involved in the second system are: +The second system is based on the polyhedra that result +from the conjunction of several linear constraints, +The modules of this system, +which are in the termination.term_constr package, are

    +

    +The termination package also contains two other modules: +term_norm.m, which defines the metrics we can use +to measure the sizes of terms (inputs and outputs), and +term_post_analysis.m, which contains error checking routines and optimizations +that depend upon the information obtained by termination analysis.

  • Trailing analysis (trailing_analysis.mi) annotates each module with information about whether the procedures in the module modify the trail or not.