Use the recently added --trans-opt-deps-spec option to break cycles in
the trans-opt dependency graph for the standard library. This enables
more parallelism when making the .trans_opt files; it now takes about
half as long as before.
Ordering modules sensibly, so that .trans_opt files are created in a
logical order, also improves analysis results for many predicates and
functions. The only results which show a regression with this change are
for deprecated forwarding predicates/functions.
In future, we will probably be able to trim more dependencies to further
improve parallelism, without impacting analysis results.
configure.ac:
Check that the bootstrap compiler supports --trans-opt-deps-spec.
library/mer_std.trans_opt_deps_spec:
Add the spec file that adjusts dependencies in the trans-opt
dependency graph.
library/INTER_FLAGS:
Use the --trans-opt-deps-spec option when building with mmake.
scripts/prepare_install_dir.in:
tools/binary:
tools/bootcheck:
tools/unary:
Copy mer_std.trans_opt_deps_spec when preparing a copy of the
library directory.
Estimated hours taken: 20
Branches: main
Fix bugs that prevented the compiler from bootstrapping in deep profiling
grades with --deep-profile-tail-recursion enabled.
compiler/deep_profiler.m:
Apply the tail recursion optimization only to procedures that are
not mutually recursive with any other procedure. (The transformation
cannot keep track of invocation counts in such cases.) Apply this
restriction even when the possible mutual recursion is not visible
to dependency_graph.m.
Refer to the call_site_nums_N type constructors with the correct arity.
compiler/proc_gen.m:
The procedures generated by the tail recursion transformation
do not have their own proc_static structures; they use those
of the original procedure (whose clones they are). Do not
insist on them having their own proc_static structure.
tools/unary:
Add this new tool, which was instrumental in tracking down
the problems above.