mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-17 14:57:03 +00:00
Estimated hours taken: 120. Branches: main. Extend constraints based mode analysis. Constraints on the producing and consuming goals for program variables are now solved, and the solutions used for conjunction reordering. The resulting HLDS is then thrown away, after maybe being dumped (stage 33). Extend dumping of mode analysis constraints. Constraints are no longer dumped to file - they are displayed as error messages when the --debug-mode-constraints is set. After conjunction ordering, the original goal paths are printed in the order they now appear. compiler/options.m: Added the option described above, and some comments describing various mode constraint options. compiler/check_hlds.m: Grouped ":- include_module"s for propagation solver constraints based mode analysis, and included new modules in this area - mcsolver and ordering_mode_constraints. compiler/mode_constraints.m: Changes to the nature of constraint dumping - introduction of the use of --debug-mode-constraints. Introduction of conjunction ordering (call to module ordering_mode_constraints). compiler/prop_mode_constraints.m: Changes to way constraints are dumped as described above. Changes to the way constraint variables are created - constraint variables can now be constructed as needed when the constraints are built. Structural changes to make constraint generation more natural (eg introduction of state variables, instead of use of functions). compiler/abstract_mode_constraints.m: Changes to the way constraints are stored - the old speculative code became redundant with the introduction of rafe's solver (see mcsolver.m). New, specialised constraint generation predicates. Constraints are now created with a context attached, and space was left for adding other information. compiler/build_mode_constraints.m: Changes to the way constraint variables are created - constraint variables can now be constructed as needed when the constraints are built. Structural changes to make constraint generation more natural (eg introduction of state variables, instead of use of functions). Constraints are now created with a context attached. compiler/ordering_mode_constraints.m: New file. Uses solutions to the producer/consumer constraints to order conjunctions for mode analysis. Does not yet do mode inference. compiler/mcsolver.m: New file. Written by rafe, modified by myself to accomodate the rest of the mode constraints branch (and a new constraint type). Solves mode constraints to produce bindings for constraint variables from producer/consumer analysis. compiler/notes/compiler_design.html: Updated notes about constraints based mode analysis.