mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 17:33:38 +00:00
... including the --inline-linear-tail-rec-sccs-max-extra option
that was its parameter.
This option was added as a quick-and-dirty workaround before we taught
the MLDS backend how to implement tail recursion for mutually recursive
predicates, and has not been needed since that capability has proven itself.
compiler/options.m:
Delete both options from the option table.
tools/make_optimization_options_db:
Delete both options from the opt_tuple.
compiler/inlining.m:
Delete the implementation of this option.
compiler/mercury_compile_middle_passes.m:
compiler/optimization_options.m:
doc/user_guide.texi:
Conform to the changes above.
3960 lines
130 KiB
Mathematica
3960 lines
130 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ft=mercury ts=4 sw=4 et
|
|
%---------------------------------------------------------------------------%
|
|
% Copyright (C) 2020,2025 The Mercury team.
|
|
% This file may only be copied under the terms of the GNU General
|
|
% Public License - see the file COPYING in the Mercury distribution.
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% File: optimization_options.m
|
|
% Main author: zs
|
|
%
|
|
% THIS MODULE IS AUTOMATICALLY GENERATED BY tools/make_optimization_options.
|
|
% DO NOT EDIT.
|
|
%
|
|
% This module manages optimization options. It defines a type, the opt_tuple,
|
|
% that allows quick access to them, sets their default values, and implements
|
|
% the turning on of optimizations when a given optimization level is selected.
|
|
%
|
|
|
|
:- module libs.optimization_options.
|
|
:- interface.
|
|
|
|
:- import_module libs.options.
|
|
|
|
:- import_module bool.
|
|
:- import_module getopt.
|
|
:- import_module list.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- type maybe_allow_inlining
|
|
---> allow_inlining
|
|
; do_not_allow_inlining.
|
|
:- type maybe_inline_simple
|
|
---> inline_simple
|
|
; do_not_inline_simple.
|
|
:- type maybe_inline_builtins
|
|
---> inline_builtins
|
|
; do_not_inline_builtins.
|
|
:- type maybe_inline_single_use
|
|
---> inline_single_use
|
|
; do_not_inline_single_use.
|
|
:- type maybe_enable_const_struct_poly
|
|
---> enable_const_struct_poly
|
|
; do_not_enable_const_struct_poly.
|
|
:- type maybe_enable_const_struct_user
|
|
---> enable_const_struct_user
|
|
; do_not_enable_const_struct_user.
|
|
:- type maybe_opt_common_structs
|
|
---> opt_common_structs
|
|
; do_not_opt_common_structs.
|
|
:- type maybe_prop_constraints
|
|
---> prop_constraints
|
|
; do_not_prop_constraints.
|
|
:- type maybe_prop_local_constraints
|
|
---> prop_local_constraints
|
|
; do_not_prop_local_constraints.
|
|
:- type maybe_opt_dup_calls
|
|
---> opt_dup_calls
|
|
; do_not_opt_dup_calls.
|
|
:- type maybe_prop_constants
|
|
---> prop_constants
|
|
; do_not_prop_constants.
|
|
:- type maybe_elim_excess_assigns
|
|
---> elim_excess_assigns
|
|
; do_not_elim_excess_assigns.
|
|
:- type maybe_merge_code_after_switch
|
|
---> merge_code_after_switch
|
|
; do_not_merge_code_after_switch.
|
|
:- type maybe_opt_format_calls
|
|
---> opt_format_calls
|
|
; do_not_opt_format_calls.
|
|
:- type maybe_split_switch_arms
|
|
---> split_switch_arms
|
|
; do_not_split_switch_arms.
|
|
:- type maybe_opt_loop_invariants
|
|
---> opt_loop_invariants
|
|
; do_not_opt_loop_invariants.
|
|
:- type maybe_opt_saved_vars_const
|
|
---> opt_saved_vars_const
|
|
; do_not_opt_saved_vars_const.
|
|
:- type maybe_opt_svcell
|
|
---> opt_svcell
|
|
; do_not_opt_svcell.
|
|
:- type maybe_opt_svcell_loop
|
|
---> opt_svcell_loop
|
|
; do_not_opt_svcell_loop.
|
|
:- type maybe_opt_svcell_full_path
|
|
---> opt_svcell_full_path
|
|
; do_not_opt_svcell_full_path.
|
|
:- type maybe_opt_svcell_on_stack
|
|
---> opt_svcell_on_stack
|
|
; do_not_opt_svcell_on_stack.
|
|
:- type maybe_opt_svcell_candidate_headvars
|
|
---> opt_svcell_candidate_headvars
|
|
; do_not_opt_svcell_candidate_headvars.
|
|
:- type maybe_opt_svcell_all_candidates
|
|
---> opt_svcell_all_candidates
|
|
; do_not_opt_svcell_all_candidates.
|
|
:- type maybe_delay_constructs
|
|
---> delay_constructs
|
|
; do_not_delay_constructs.
|
|
:- type maybe_opt_follow_code
|
|
---> opt_follow_code
|
|
; do_not_opt_follow_code.
|
|
:- type maybe_opt_unused_args
|
|
---> opt_unused_args
|
|
; do_not_opt_unused_args.
|
|
:- type maybe_opt_unused_args_intermod
|
|
---> opt_unused_args_intermod
|
|
; do_not_opt_unused_args_intermod.
|
|
:- type maybe_opt_higher_order
|
|
---> opt_higher_order
|
|
; do_not_opt_higher_order.
|
|
:- type maybe_opt_unneeded_code
|
|
---> opt_unneeded_code
|
|
; do_not_opt_unneeded_code.
|
|
:- type maybe_spec_types
|
|
---> spec_types
|
|
; do_not_spec_types.
|
|
:- type maybe_spec_types_user_guided
|
|
---> spec_types_user_guided
|
|
; do_not_spec_types_user_guided.
|
|
:- type maybe_introduce_accumulators
|
|
---> introduce_accumulators
|
|
; do_not_introduce_accumulators.
|
|
:- type maybe_opt_lcmc_accumulator
|
|
---> opt_lcmc_accumulator
|
|
; do_not_opt_lcmc_accumulator.
|
|
:- type maybe_opt_lcmc_null
|
|
---> opt_lcmc_null
|
|
; do_not_opt_lcmc_null.
|
|
:- type maybe_opt_lcmc
|
|
---> opt_lcmc
|
|
; do_not_opt_lcmc.
|
|
:- type maybe_opt_dead_procs
|
|
---> opt_dead_procs
|
|
; do_not_opt_dead_procs.
|
|
:- type maybe_deforest
|
|
---> deforest
|
|
; do_not_deforest.
|
|
:- type maybe_untuple
|
|
---> untuple
|
|
; do_not_untuple.
|
|
:- type maybe_tuple
|
|
---> tuple
|
|
; do_not_tuple.
|
|
:- type maybe_inline_par_builtins
|
|
---> inline_par_builtins
|
|
; do_not_inline_par_builtins.
|
|
:- type maybe_spec_in_all_dep_par_conjs
|
|
---> spec_in_all_dep_par_conjs
|
|
; do_not_spec_in_all_dep_par_conjs.
|
|
:- type maybe_allow_some_paths_only_waits
|
|
---> allow_some_paths_only_waits
|
|
; do_not_allow_some_paths_only_waits.
|
|
:- type maybe_analyse_regions
|
|
---> analyse_regions
|
|
; do_not_analyse_regions.
|
|
:- type maybe_use_smart_indexing
|
|
---> use_smart_indexing
|
|
; do_not_use_smart_indexing.
|
|
:- type maybe_use_smart_indexing_atomic
|
|
---> use_smart_indexing_atomic
|
|
; do_not_use_smart_indexing_atomic.
|
|
:- type maybe_use_smart_indexing_string
|
|
---> use_smart_indexing_string
|
|
; do_not_use_smart_indexing_string.
|
|
:- type maybe_use_smart_indexing_tag
|
|
---> use_smart_indexing_tag
|
|
; do_not_use_smart_indexing_tag.
|
|
:- type maybe_use_smart_indexing_float
|
|
---> use_smart_indexing_float
|
|
; do_not_use_smart_indexing_float.
|
|
:- type maybe_put_base_first_single_rec
|
|
---> put_base_first_single_rec
|
|
; do_not_put_base_first_single_rec.
|
|
:- type maybe_put_base_first_multi_rec
|
|
---> put_base_first_multi_rec
|
|
; do_not_put_base_first_multi_rec.
|
|
:- type maybe_use_static_ground_cells
|
|
---> use_static_ground_cells
|
|
; do_not_use_static_ground_cells.
|
|
:- type maybe_use_static_ground_floats
|
|
---> use_static_ground_floats
|
|
; do_not_use_static_ground_floats.
|
|
:- type maybe_use_static_ground_int64s
|
|
---> use_static_ground_int64s
|
|
; do_not_use_static_ground_int64s.
|
|
:- type maybe_use_static_code_addresses
|
|
---> use_static_code_addresses
|
|
; do_not_use_static_code_addresses.
|
|
:- type maybe_use_atomic_cells
|
|
---> use_atomic_cells
|
|
; do_not_use_atomic_cells.
|
|
:- type maybe_opt_middle_rec_llds
|
|
---> opt_middle_rec_llds
|
|
; do_not_opt_middle_rec_llds.
|
|
:- type maybe_opt_simple_neg_llds
|
|
---> opt_simple_neg_llds
|
|
; do_not_opt_simple_neg_llds.
|
|
:- type maybe_allow_hijacks
|
|
---> allow_hijacks
|
|
; do_not_allow_hijacks.
|
|
:- type maybe_opt_mlds_tailcalls
|
|
---> opt_mlds_tailcalls
|
|
; do_not_opt_mlds_tailcalls.
|
|
:- type maybe_opt_mlds_inits
|
|
---> opt_mlds_inits
|
|
; do_not_opt_mlds_inits.
|
|
:- type maybe_elim_unused_mlds_assigns
|
|
---> elim_unused_mlds_assigns
|
|
; do_not_elim_unused_mlds_assigns.
|
|
:- type maybe_elim_local_vars_mlds
|
|
---> elim_local_vars_mlds
|
|
; do_not_elim_local_vars_mlds.
|
|
:- type maybe_gen_trail_ops_inline_mlds
|
|
---> gen_trail_ops_inline_mlds
|
|
; do_not_gen_trail_ops_inline_mlds.
|
|
:- type maybe_use_llds_common_data
|
|
---> use_llds_common_data
|
|
; do_not_use_llds_common_data.
|
|
:- type maybe_use_llds_common_layout_data
|
|
---> use_llds_common_layout_data
|
|
; do_not_use_llds_common_layout_data.
|
|
:- type maybe_optimize_llds
|
|
---> optimize_llds
|
|
; do_not_optimize_llds.
|
|
:- type maybe_optimize_mlds
|
|
---> optimize_mlds
|
|
; do_not_optimize_mlds.
|
|
:- type maybe_peep_llds
|
|
---> peep_llds
|
|
; do_not_peep_llds.
|
|
:- type maybe_peep_llds_mkword
|
|
---> peep_llds_mkword
|
|
; do_not_peep_llds_mkword.
|
|
:- type maybe_peep_mlds
|
|
---> peep_mlds
|
|
; do_not_peep_mlds.
|
|
:- type maybe_opt_jumps
|
|
---> opt_jumps
|
|
; do_not_opt_jumps.
|
|
:- type maybe_opt_fulljumps
|
|
---> opt_fulljumps
|
|
; do_not_opt_fulljumps.
|
|
:- type maybe_pessimize_llds_tailcalls
|
|
---> pessimize_llds_tailcalls
|
|
; do_not_pessimize_llds_tailcalls.
|
|
:- type maybe_opt_checked_nondet_tailcalls
|
|
---> opt_checked_nondet_tailcalls
|
|
; do_not_opt_checked_nondet_tailcalls.
|
|
:- type maybe_use_local_vars_llds
|
|
---> use_local_vars_llds
|
|
; do_not_use_local_vars_llds.
|
|
:- type maybe_standardize_labels
|
|
---> standardize_labels
|
|
; do_not_standardize_labels.
|
|
:- type maybe_opt_labels
|
|
---> opt_labels
|
|
; do_not_opt_labels.
|
|
:- type maybe_opt_dup_instrs_llds
|
|
---> opt_dup_instrs_llds
|
|
; do_not_opt_dup_instrs_llds.
|
|
:- type maybe_opt_dup_procs_llds
|
|
---> opt_dup_procs_llds
|
|
; do_not_opt_dup_procs_llds.
|
|
:- type maybe_opt_frames
|
|
---> opt_frames
|
|
; do_not_opt_frames.
|
|
:- type maybe_opt_delay_slot
|
|
---> opt_delay_slot
|
|
; do_not_opt_delay_slot.
|
|
:- type maybe_opt_llds_reassign
|
|
---> opt_llds_reassign
|
|
; do_not_opt_llds_reassign.
|
|
:- type maybe_use_macro_for_redo_fail
|
|
---> use_macro_for_redo_fail
|
|
; do_not_use_macro_for_redo_fail.
|
|
:- type maybe_emit_c_loops
|
|
---> emit_c_loops
|
|
; do_not_emit_c_loops.
|
|
:- type maybe_use_just_one_c_func
|
|
---> use_just_one_c_func
|
|
; do_not_use_just_one_c_func.
|
|
:- type maybe_use_local_thread_engine_base
|
|
---> use_local_thread_engine_base
|
|
; do_not_use_local_thread_engine_base.
|
|
:- type maybe_inline_alloc
|
|
---> inline_alloc
|
|
; do_not_inline_alloc.
|
|
:- type maybe_opt_c
|
|
---> opt_c
|
|
; do_not_opt_c.
|
|
|
|
%---------------------%
|
|
|
|
:- type optimization_option
|
|
---> oo_allow_inlining(bool)
|
|
; oo_inline_simple(bool)
|
|
; oo_inline_builtins(bool)
|
|
; oo_inline_single_use(bool)
|
|
; oo_enable_const_struct_poly(bool)
|
|
; oo_enable_const_struct_user(bool)
|
|
; oo_opt_common_structs(bool)
|
|
; oo_prop_constraints(bool)
|
|
; oo_prop_local_constraints(bool)
|
|
; oo_opt_dup_calls(bool)
|
|
; oo_prop_constants(bool)
|
|
; oo_elim_excess_assigns(bool)
|
|
; oo_merge_code_after_switch(bool)
|
|
; oo_opt_format_calls(bool)
|
|
; oo_split_switch_arms(bool)
|
|
; oo_opt_loop_invariants(bool)
|
|
; oo_opt_saved_vars_const(bool)
|
|
; oo_opt_svcell(bool)
|
|
; oo_opt_svcell_loop(bool)
|
|
; oo_opt_svcell_full_path(bool)
|
|
; oo_opt_svcell_on_stack(bool)
|
|
; oo_opt_svcell_candidate_headvars(bool)
|
|
; oo_opt_svcell_all_candidates(bool)
|
|
; oo_delay_constructs(bool)
|
|
; oo_opt_follow_code(bool)
|
|
; oo_opt_unused_args(bool)
|
|
; oo_opt_unused_args_intermod(bool)
|
|
; oo_opt_higher_order(bool)
|
|
; oo_opt_unneeded_code(bool)
|
|
; oo_spec_types(bool)
|
|
; oo_spec_types_user_guided(bool)
|
|
; oo_introduce_accumulators(bool)
|
|
; oo_opt_lcmc_accumulator(bool)
|
|
; oo_opt_lcmc_null(bool)
|
|
; oo_opt_lcmc(bool)
|
|
; oo_opt_dead_procs(bool)
|
|
; oo_deforest(bool)
|
|
; oo_untuple(bool)
|
|
; oo_tuple(bool)
|
|
; oo_inline_par_builtins(bool)
|
|
; oo_spec_in_all_dep_par_conjs(bool)
|
|
; oo_allow_some_paths_only_waits(bool)
|
|
; oo_analyse_regions(bool)
|
|
; oo_use_smart_indexing(bool)
|
|
; oo_use_smart_indexing_atomic(bool)
|
|
; oo_use_smart_indexing_string(bool)
|
|
; oo_use_smart_indexing_tag(bool)
|
|
; oo_use_smart_indexing_float(bool)
|
|
; oo_put_base_first_single_rec(bool)
|
|
; oo_put_base_first_multi_rec(bool)
|
|
; oo_use_static_ground_cells(bool)
|
|
; oo_use_static_ground_floats(bool)
|
|
; oo_use_static_ground_int64s(bool)
|
|
; oo_use_static_code_addresses(bool)
|
|
; oo_use_atomic_cells(bool)
|
|
; oo_opt_middle_rec_llds(bool)
|
|
; oo_opt_simple_neg_llds(bool)
|
|
; oo_allow_hijacks(bool)
|
|
; oo_opt_mlds_tailcalls(bool)
|
|
; oo_opt_mlds_inits(bool)
|
|
; oo_elim_unused_mlds_assigns(bool)
|
|
; oo_elim_local_vars_mlds(bool)
|
|
; oo_gen_trail_ops_inline_mlds(bool)
|
|
; oo_use_llds_common_data(bool)
|
|
; oo_use_llds_common_layout_data(bool)
|
|
; oo_optimize_llds(bool)
|
|
; oo_optimize_mlds(bool)
|
|
; oo_peep_llds(bool)
|
|
; oo_peep_llds_mkword(bool)
|
|
; oo_peep_mlds(bool)
|
|
; oo_opt_jumps(bool)
|
|
; oo_opt_fulljumps(bool)
|
|
; oo_pessimize_llds_tailcalls(bool)
|
|
; oo_opt_checked_nondet_tailcalls(bool)
|
|
; oo_use_local_vars_llds(bool)
|
|
; oo_standardize_labels(bool)
|
|
; oo_opt_labels(bool)
|
|
; oo_opt_dup_instrs_llds(bool)
|
|
; oo_opt_dup_procs_llds(bool)
|
|
; oo_opt_frames(bool)
|
|
; oo_opt_delay_slot(bool)
|
|
; oo_opt_llds_reassign(bool)
|
|
; oo_use_macro_for_redo_fail(bool)
|
|
; oo_emit_c_loops(bool)
|
|
; oo_use_just_one_c_func(bool)
|
|
; oo_use_local_thread_engine_base(bool)
|
|
; oo_inline_alloc(bool)
|
|
; oo_opt_c(bool)
|
|
; oo_inline_call_cost(int)
|
|
; oo_inline_compound_threshold(int)
|
|
; oo_inline_simple_threshold(int)
|
|
; oo_inline_vars_threshold(int)
|
|
; oo_intermod_inline_simple_threshold(int)
|
|
; oo_from_ground_term_threshold(int)
|
|
; oo_opt_svcell_cv_store_cost(int)
|
|
; oo_opt_svcell_cv_load_cost(int)
|
|
; oo_opt_svcell_fv_store_cost(int)
|
|
; oo_opt_svcell_fv_load_cost(int)
|
|
; oo_opt_svcell_op_ratio(int)
|
|
; oo_opt_svcell_node_ratio(int)
|
|
; oo_opt_svcell_all_path_node_ratio(int)
|
|
; oo_higher_order_size_limit(int)
|
|
; oo_higher_order_arg_limit(int)
|
|
; oo_opt_unneeded_code_copy_limit(int)
|
|
; oo_deforestation_depth_limit(int)
|
|
; oo_deforestation_cost_factor(int)
|
|
; oo_deforestation_vars_threshold(int)
|
|
; oo_deforestation_size_threshold(int)
|
|
; oo_tuple_costs_ratio(int)
|
|
; oo_tuple_min_args(int)
|
|
; oo_dense_switch_req_density(int)
|
|
; oo_lookup_switch_req_density(int)
|
|
; oo_dense_switch_size(int)
|
|
; oo_lookup_switch_size(int)
|
|
; oo_string_trie_switch_size(int)
|
|
; oo_string_hash_switch_size(int)
|
|
; oo_string_binary_switch_size(int)
|
|
; oo_tag_switch_size(int)
|
|
; oo_try_switch_size(int)
|
|
; oo_binary_switch_size(int)
|
|
; oo_llds_local_var_access_threshold(int)
|
|
; oo_opt_repeat(int)
|
|
; oo_llds_layout_compression_limit(int)
|
|
; oo_procs_per_c_function(int)
|
|
; oo_tuple_trace_counts_file(string)
|
|
; oo_opt_level(int)
|
|
; oo_opt_for_space.
|
|
|
|
%---------------------%
|
|
|
|
:- type opt_tuple
|
|
---> opt_tuple(
|
|
ot_allow_inlining :: maybe_allow_inlining,
|
|
ot_inline_simple :: maybe_inline_simple,
|
|
ot_inline_builtins :: maybe_inline_builtins,
|
|
ot_inline_single_use :: maybe_inline_single_use,
|
|
ot_enable_const_struct_poly :: maybe_enable_const_struct_poly,
|
|
ot_enable_const_struct_user :: maybe_enable_const_struct_user,
|
|
ot_opt_common_structs :: maybe_opt_common_structs,
|
|
ot_prop_constraints :: maybe_prop_constraints,
|
|
ot_prop_local_constraints :: maybe_prop_local_constraints,
|
|
ot_opt_dup_calls :: maybe_opt_dup_calls,
|
|
ot_prop_constants :: maybe_prop_constants,
|
|
ot_elim_excess_assigns :: maybe_elim_excess_assigns,
|
|
ot_merge_code_after_switch :: maybe_merge_code_after_switch,
|
|
ot_opt_format_calls :: maybe_opt_format_calls,
|
|
ot_split_switch_arms :: maybe_split_switch_arms,
|
|
ot_opt_loop_invariants :: maybe_opt_loop_invariants,
|
|
ot_opt_saved_vars_const :: maybe_opt_saved_vars_const,
|
|
ot_opt_svcell :: maybe_opt_svcell,
|
|
ot_opt_svcell_loop :: maybe_opt_svcell_loop,
|
|
ot_opt_svcell_full_path :: maybe_opt_svcell_full_path,
|
|
ot_opt_svcell_on_stack :: maybe_opt_svcell_on_stack,
|
|
ot_opt_svcell_candidate_headvars :: maybe_opt_svcell_candidate_headvars,
|
|
ot_opt_svcell_all_candidates :: maybe_opt_svcell_all_candidates,
|
|
ot_delay_constructs :: maybe_delay_constructs,
|
|
ot_opt_follow_code :: maybe_opt_follow_code,
|
|
ot_opt_unused_args :: maybe_opt_unused_args,
|
|
ot_opt_unused_args_intermod :: maybe_opt_unused_args_intermod,
|
|
ot_opt_higher_order :: maybe_opt_higher_order,
|
|
ot_opt_unneeded_code :: maybe_opt_unneeded_code,
|
|
ot_spec_types :: maybe_spec_types,
|
|
ot_spec_types_user_guided :: maybe_spec_types_user_guided,
|
|
ot_introduce_accumulators :: maybe_introduce_accumulators,
|
|
ot_opt_lcmc_accumulator :: maybe_opt_lcmc_accumulator,
|
|
ot_opt_lcmc_null :: maybe_opt_lcmc_null,
|
|
ot_opt_lcmc :: maybe_opt_lcmc,
|
|
ot_opt_dead_procs :: maybe_opt_dead_procs,
|
|
ot_deforest :: maybe_deforest,
|
|
ot_untuple :: maybe_untuple,
|
|
ot_tuple :: maybe_tuple,
|
|
ot_inline_par_builtins :: maybe_inline_par_builtins,
|
|
ot_spec_in_all_dep_par_conjs :: maybe_spec_in_all_dep_par_conjs,
|
|
ot_allow_some_paths_only_waits :: maybe_allow_some_paths_only_waits,
|
|
ot_analyse_regions :: maybe_analyse_regions,
|
|
ot_use_smart_indexing :: maybe_use_smart_indexing,
|
|
ot_use_smart_indexing_atomic :: maybe_use_smart_indexing_atomic,
|
|
ot_use_smart_indexing_string :: maybe_use_smart_indexing_string,
|
|
ot_use_smart_indexing_tag :: maybe_use_smart_indexing_tag,
|
|
ot_use_smart_indexing_float :: maybe_use_smart_indexing_float,
|
|
ot_put_base_first_single_rec :: maybe_put_base_first_single_rec,
|
|
ot_put_base_first_multi_rec :: maybe_put_base_first_multi_rec,
|
|
ot_use_static_ground_cells :: maybe_use_static_ground_cells,
|
|
ot_use_static_ground_floats :: maybe_use_static_ground_floats,
|
|
ot_use_static_ground_int64s :: maybe_use_static_ground_int64s,
|
|
ot_use_static_code_addresses :: maybe_use_static_code_addresses,
|
|
ot_use_atomic_cells :: maybe_use_atomic_cells,
|
|
ot_opt_middle_rec_llds :: maybe_opt_middle_rec_llds,
|
|
ot_opt_simple_neg_llds :: maybe_opt_simple_neg_llds,
|
|
ot_allow_hijacks :: maybe_allow_hijacks,
|
|
ot_opt_mlds_tailcalls :: maybe_opt_mlds_tailcalls,
|
|
ot_opt_mlds_inits :: maybe_opt_mlds_inits,
|
|
ot_elim_unused_mlds_assigns :: maybe_elim_unused_mlds_assigns,
|
|
ot_elim_local_vars_mlds :: maybe_elim_local_vars_mlds,
|
|
ot_gen_trail_ops_inline_mlds :: maybe_gen_trail_ops_inline_mlds,
|
|
ot_use_llds_common_data :: maybe_use_llds_common_data,
|
|
ot_use_llds_common_layout_data :: maybe_use_llds_common_layout_data,
|
|
ot_optimize_llds :: maybe_optimize_llds,
|
|
ot_optimize_mlds :: maybe_optimize_mlds,
|
|
ot_peep_llds :: maybe_peep_llds,
|
|
ot_peep_llds_mkword :: maybe_peep_llds_mkword,
|
|
ot_peep_mlds :: maybe_peep_mlds,
|
|
ot_opt_jumps :: maybe_opt_jumps,
|
|
ot_opt_fulljumps :: maybe_opt_fulljumps,
|
|
ot_pessimize_llds_tailcalls :: maybe_pessimize_llds_tailcalls,
|
|
ot_opt_checked_nondet_tailcalls :: maybe_opt_checked_nondet_tailcalls,
|
|
ot_use_local_vars_llds :: maybe_use_local_vars_llds,
|
|
ot_standardize_labels :: maybe_standardize_labels,
|
|
ot_opt_labels :: maybe_opt_labels,
|
|
ot_opt_dup_instrs_llds :: maybe_opt_dup_instrs_llds,
|
|
ot_opt_dup_procs_llds :: maybe_opt_dup_procs_llds,
|
|
ot_opt_frames :: maybe_opt_frames,
|
|
ot_opt_delay_slot :: maybe_opt_delay_slot,
|
|
ot_opt_llds_reassign :: maybe_opt_llds_reassign,
|
|
ot_use_macro_for_redo_fail :: maybe_use_macro_for_redo_fail,
|
|
ot_emit_c_loops :: maybe_emit_c_loops,
|
|
ot_use_just_one_c_func :: maybe_use_just_one_c_func,
|
|
ot_use_local_thread_engine_base :: maybe_use_local_thread_engine_base,
|
|
ot_inline_alloc :: maybe_inline_alloc,
|
|
ot_opt_c :: maybe_opt_c,
|
|
ot_inline_call_cost :: int,
|
|
ot_inline_compound_threshold :: int,
|
|
ot_inline_simple_threshold :: int,
|
|
ot_inline_vars_threshold :: int,
|
|
ot_intermod_inline_simple_threshold :: int,
|
|
ot_from_ground_term_threshold :: int,
|
|
ot_opt_svcell_cv_store_cost :: int,
|
|
ot_opt_svcell_cv_load_cost :: int,
|
|
ot_opt_svcell_fv_store_cost :: int,
|
|
ot_opt_svcell_fv_load_cost :: int,
|
|
ot_opt_svcell_op_ratio :: int,
|
|
ot_opt_svcell_node_ratio :: int,
|
|
ot_opt_svcell_all_path_node_ratio :: int,
|
|
ot_higher_order_size_limit :: int,
|
|
ot_higher_order_arg_limit :: int,
|
|
ot_opt_unneeded_code_copy_limit :: int,
|
|
ot_deforestation_depth_limit :: int,
|
|
ot_deforestation_cost_factor :: int,
|
|
ot_deforestation_vars_threshold :: int,
|
|
ot_deforestation_size_threshold :: int,
|
|
ot_tuple_costs_ratio :: int,
|
|
ot_tuple_min_args :: int,
|
|
ot_dense_switch_req_density :: int,
|
|
ot_lookup_switch_req_density :: int,
|
|
ot_dense_switch_size :: int,
|
|
ot_lookup_switch_size :: int,
|
|
ot_string_trie_switch_size :: int,
|
|
ot_string_hash_switch_size :: int,
|
|
ot_string_binary_switch_size :: int,
|
|
ot_tag_switch_size :: int,
|
|
ot_try_switch_size :: int,
|
|
ot_binary_switch_size :: int,
|
|
ot_llds_local_var_access_threshold :: int,
|
|
ot_opt_repeat :: int,
|
|
ot_llds_layout_compression_limit :: int,
|
|
ot_procs_per_c_function :: int,
|
|
ot_tuple_trace_counts_file :: string
|
|
).
|
|
|
|
:- pred bool_option_initial_n_y(list(option)::out, list(option)::out) is det.
|
|
|
|
:- pred process_optimization_options(option_table::in,
|
|
list(optimization_option)::in, opt_tuple::out) is det.
|
|
|
|
:- type documented_optimization_option
|
|
---> doc_oo(
|
|
optimization_option,
|
|
option,
|
|
option_data_bool_int
|
|
).
|
|
|
|
:- type option_data_bool_int =< option_data
|
|
---> bool(bool)
|
|
; int(int).
|
|
|
|
:- pred opts_enabled_at_level(int::in, list(string)::out,
|
|
list(documented_optimization_option)::out) is semidet.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- implementation.
|
|
|
|
:- import_module int.
|
|
:- import_module map.
|
|
:- import_module string.
|
|
|
|
%---------------------%
|
|
|
|
bool_option_initial_n_y(No, Yes) :-
|
|
No = [
|
|
optopt_inline_simple,
|
|
optopt_inline_single_use,
|
|
optopt_opt_common_structs,
|
|
optopt_prop_constraints,
|
|
optopt_prop_local_constraints,
|
|
optopt_opt_dup_calls,
|
|
optopt_prop_constants,
|
|
optopt_elim_excess_assigns,
|
|
optopt_merge_code_after_switch,
|
|
optopt_opt_loop_invariants,
|
|
optopt_opt_saved_vars_const,
|
|
optopt_opt_svcell,
|
|
optopt_opt_svcell_all_candidates,
|
|
optopt_delay_constructs,
|
|
optopt_opt_follow_code,
|
|
optopt_opt_unused_args,
|
|
optopt_opt_unused_args_intermod,
|
|
optopt_opt_higher_order,
|
|
optopt_opt_unneeded_code,
|
|
optopt_spec_types,
|
|
optopt_spec_types_user_guided,
|
|
optopt_introduce_accumulators,
|
|
optopt_opt_lcmc_accumulator,
|
|
optopt_opt_lcmc_null,
|
|
optopt_opt_lcmc,
|
|
optopt_opt_dead_procs,
|
|
optopt_deforest,
|
|
optopt_untuple,
|
|
optopt_tuple,
|
|
optopt_inline_par_builtins,
|
|
optopt_spec_in_all_dep_par_conjs,
|
|
optopt_analyse_regions,
|
|
optopt_use_smart_indexing,
|
|
optopt_use_smart_indexing_atomic,
|
|
optopt_use_smart_indexing_string,
|
|
optopt_use_smart_indexing_tag,
|
|
optopt_use_smart_indexing_float,
|
|
optopt_put_base_first_single_rec,
|
|
optopt_use_static_ground_cells,
|
|
optopt_use_static_ground_floats,
|
|
optopt_use_static_ground_int64s,
|
|
optopt_use_static_code_addresses,
|
|
optopt_use_atomic_cells,
|
|
optopt_opt_middle_rec_llds,
|
|
optopt_opt_simple_neg_llds,
|
|
optopt_opt_mlds_tailcalls,
|
|
optopt_opt_mlds_inits,
|
|
optopt_elim_local_vars_mlds,
|
|
optopt_use_llds_common_data,
|
|
optopt_optimize_llds,
|
|
optopt_optimize_mlds,
|
|
optopt_peep_llds,
|
|
optopt_peep_llds_mkword,
|
|
optopt_peep_mlds,
|
|
optopt_opt_jumps,
|
|
optopt_opt_fulljumps,
|
|
optopt_pessimize_llds_tailcalls,
|
|
optopt_opt_checked_nondet_tailcalls,
|
|
optopt_use_local_vars_llds,
|
|
optopt_standardize_labels,
|
|
optopt_opt_labels,
|
|
optopt_opt_dup_instrs_llds,
|
|
optopt_opt_dup_procs_llds,
|
|
optopt_opt_frames,
|
|
optopt_opt_delay_slot,
|
|
optopt_opt_llds_reassign,
|
|
optopt_use_macro_for_redo_fail,
|
|
optopt_emit_c_loops,
|
|
optopt_use_just_one_c_func,
|
|
optopt_inline_alloc,
|
|
optopt_c_optimize
|
|
],
|
|
Yes = [
|
|
optopt_allow_inlining,
|
|
optopt_inline_builtins,
|
|
optopt_enable_const_struct_poly,
|
|
optopt_enable_const_struct_user,
|
|
optopt_opt_format_calls,
|
|
optopt_split_switch_arms,
|
|
optopt_opt_svcell_loop,
|
|
optopt_opt_svcell_full_path,
|
|
optopt_opt_svcell_on_stack,
|
|
optopt_opt_svcell_candidate_headvars,
|
|
optopt_allow_some_paths_only_waits,
|
|
optopt_put_base_first_multi_rec,
|
|
optopt_allow_hijacks,
|
|
optopt_elim_unused_mlds_assigns,
|
|
optopt_gen_trail_ops_inline_mlds,
|
|
optopt_use_llds_common_layout_data,
|
|
optopt_use_local_thread_engine_base
|
|
].
|
|
|
|
%---------------------%
|
|
|
|
process_optimization_options(OptionTable, OptOptions, !:OptTuple) :-
|
|
!:OptTuple = init_opt_tuple,
|
|
list.foldl2(
|
|
update_opt_tuple(not_from_opt_level, OptionTable),
|
|
OptOptions, !OptTuple, not_seen_opt_level, MaybeSeenOptLevel),
|
|
(
|
|
MaybeSeenOptLevel = not_seen_opt_level,
|
|
get_default_opt_level(OptionTable, DefaultOptLevel),
|
|
set_opts_upto_level(OptionTable, 0, DefaultOptLevel,
|
|
!OptTuple, MaybeSeenOptLevel, _)
|
|
;
|
|
MaybeSeenOptLevel = seen_opt_level
|
|
).
|
|
|
|
%---------------------%
|
|
|
|
:- func init_opt_tuple = opt_tuple.
|
|
|
|
init_opt_tuple =
|
|
opt_tuple(
|
|
allow_inlining,
|
|
do_not_inline_simple,
|
|
inline_builtins,
|
|
do_not_inline_single_use,
|
|
enable_const_struct_poly,
|
|
enable_const_struct_user,
|
|
do_not_opt_common_structs,
|
|
do_not_prop_constraints,
|
|
do_not_prop_local_constraints,
|
|
do_not_opt_dup_calls,
|
|
do_not_prop_constants,
|
|
do_not_elim_excess_assigns,
|
|
do_not_merge_code_after_switch,
|
|
opt_format_calls,
|
|
split_switch_arms,
|
|
do_not_opt_loop_invariants,
|
|
do_not_opt_saved_vars_const,
|
|
do_not_opt_svcell,
|
|
opt_svcell_loop,
|
|
opt_svcell_full_path,
|
|
opt_svcell_on_stack,
|
|
opt_svcell_candidate_headvars,
|
|
do_not_opt_svcell_all_candidates,
|
|
do_not_delay_constructs,
|
|
do_not_opt_follow_code,
|
|
do_not_opt_unused_args,
|
|
do_not_opt_unused_args_intermod,
|
|
do_not_opt_higher_order,
|
|
do_not_opt_unneeded_code,
|
|
do_not_spec_types,
|
|
do_not_spec_types_user_guided,
|
|
do_not_introduce_accumulators,
|
|
do_not_opt_lcmc_accumulator,
|
|
do_not_opt_lcmc_null,
|
|
do_not_opt_lcmc,
|
|
do_not_opt_dead_procs,
|
|
do_not_deforest,
|
|
do_not_untuple,
|
|
do_not_tuple,
|
|
do_not_inline_par_builtins,
|
|
do_not_spec_in_all_dep_par_conjs,
|
|
allow_some_paths_only_waits,
|
|
do_not_analyse_regions,
|
|
do_not_use_smart_indexing,
|
|
do_not_use_smart_indexing_atomic,
|
|
do_not_use_smart_indexing_string,
|
|
do_not_use_smart_indexing_tag,
|
|
do_not_use_smart_indexing_float,
|
|
do_not_put_base_first_single_rec,
|
|
put_base_first_multi_rec,
|
|
do_not_use_static_ground_cells,
|
|
do_not_use_static_ground_floats,
|
|
do_not_use_static_ground_int64s,
|
|
do_not_use_static_code_addresses,
|
|
do_not_use_atomic_cells,
|
|
do_not_opt_middle_rec_llds,
|
|
do_not_opt_simple_neg_llds,
|
|
allow_hijacks,
|
|
do_not_opt_mlds_tailcalls,
|
|
do_not_opt_mlds_inits,
|
|
elim_unused_mlds_assigns,
|
|
do_not_elim_local_vars_mlds,
|
|
gen_trail_ops_inline_mlds,
|
|
do_not_use_llds_common_data,
|
|
use_llds_common_layout_data,
|
|
do_not_optimize_llds,
|
|
do_not_optimize_mlds,
|
|
do_not_peep_llds,
|
|
do_not_peep_llds_mkword,
|
|
do_not_peep_mlds,
|
|
do_not_opt_jumps,
|
|
do_not_opt_fulljumps,
|
|
do_not_pessimize_llds_tailcalls,
|
|
do_not_opt_checked_nondet_tailcalls,
|
|
do_not_use_local_vars_llds,
|
|
do_not_standardize_labels,
|
|
do_not_opt_labels,
|
|
do_not_opt_dup_instrs_llds,
|
|
do_not_opt_dup_procs_llds,
|
|
do_not_opt_frames,
|
|
do_not_opt_delay_slot,
|
|
do_not_opt_llds_reassign,
|
|
do_not_use_macro_for_redo_fail,
|
|
do_not_emit_c_loops,
|
|
do_not_use_just_one_c_func,
|
|
use_local_thread_engine_base,
|
|
do_not_inline_alloc,
|
|
do_not_opt_c,
|
|
0,
|
|
0,
|
|
5,
|
|
100,
|
|
5,
|
|
5,
|
|
3,
|
|
1,
|
|
1,
|
|
1,
|
|
100,
|
|
100,
|
|
100,
|
|
20,
|
|
10,
|
|
10,
|
|
4,
|
|
1000,
|
|
200,
|
|
15,
|
|
100,
|
|
4,
|
|
25,
|
|
25,
|
|
4,
|
|
4,
|
|
16,
|
|
8,
|
|
4,
|
|
3,
|
|
3,
|
|
4,
|
|
2,
|
|
0,
|
|
4000,
|
|
1,
|
|
""
|
|
).
|
|
|
|
%---------------------%
|
|
|
|
:- type maybe_seen_opt_level
|
|
---> not_seen_opt_level
|
|
; seen_opt_level.
|
|
|
|
:- type maybe_from_opt_level
|
|
---> not_from_opt_level
|
|
; from_opt_level.
|
|
|
|
:- pred update_opt_tuple(maybe_from_opt_level::in, option_table::in,
|
|
optimization_option::in, opt_tuple::in, opt_tuple::out,
|
|
maybe_seen_opt_level::in, maybe_seen_opt_level::out) is det.
|
|
|
|
update_opt_tuple(FromOptLevel, OptionTable, OptOption, !OptTuple,
|
|
!MaybeSeenOptLevel) :-
|
|
require_complete_switch [OptOption]
|
|
(
|
|
OptOption = oo_allow_inlining(Bool),
|
|
update_opt_tuple_bool_allow_inlining(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_inline_simple(Bool),
|
|
update_opt_tuple_bool_inline_simple(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_inline_builtins(Bool),
|
|
update_opt_tuple_bool_inline_builtins(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_inline_single_use(Bool),
|
|
update_opt_tuple_bool_inline_single_use(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_enable_const_struct_poly(Bool),
|
|
update_opt_tuple_bool_enable_const_struct_poly(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_enable_const_struct_user(Bool),
|
|
update_opt_tuple_bool_enable_const_struct_user(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_common_structs(Bool),
|
|
update_opt_tuple_bool_opt_common_structs(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_prop_constraints(Bool),
|
|
update_opt_tuple_bool_prop_constraints(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_prop_local_constraints(Bool),
|
|
update_opt_tuple_bool_prop_local_constraints(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_dup_calls(Bool),
|
|
update_opt_tuple_bool_opt_dup_calls(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_prop_constants(Bool),
|
|
update_opt_tuple_bool_prop_constants(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_elim_excess_assigns(Bool),
|
|
update_opt_tuple_bool_elim_excess_assigns(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_merge_code_after_switch(Bool),
|
|
update_opt_tuple_bool_merge_code_after_switch(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_format_calls(Bool),
|
|
update_opt_tuple_bool_opt_format_calls(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_split_switch_arms(Bool),
|
|
update_opt_tuple_bool_split_switch_arms(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_loop_invariants(Bool),
|
|
update_opt_tuple_bool_opt_loop_invariants(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_saved_vars_const(Bool),
|
|
update_opt_tuple_bool_opt_saved_vars_const(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_svcell(Bool),
|
|
update_opt_tuple_bool_opt_svcell(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_svcell_loop(Bool),
|
|
update_opt_tuple_bool_opt_svcell_loop(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_svcell_full_path(Bool),
|
|
update_opt_tuple_bool_opt_svcell_full_path(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_svcell_on_stack(Bool),
|
|
update_opt_tuple_bool_opt_svcell_on_stack(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_svcell_candidate_headvars(Bool),
|
|
update_opt_tuple_bool_opt_svcell_candidate_headvars(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_svcell_all_candidates(Bool),
|
|
update_opt_tuple_bool_opt_svcell_all_candidates(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_delay_constructs(Bool),
|
|
update_opt_tuple_bool_delay_constructs(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_follow_code(Bool),
|
|
update_opt_tuple_bool_opt_follow_code(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_unused_args(Bool),
|
|
update_opt_tuple_bool_opt_unused_args(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_unused_args_intermod(Bool),
|
|
update_opt_tuple_bool_opt_unused_args_intermod(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_higher_order(Bool),
|
|
update_opt_tuple_bool_opt_higher_order(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_unneeded_code(Bool),
|
|
update_opt_tuple_bool_opt_unneeded_code(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_spec_types(Bool),
|
|
update_opt_tuple_bool_spec_types(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_spec_types_user_guided(Bool),
|
|
update_opt_tuple_bool_spec_types_user_guided(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_introduce_accumulators(Bool),
|
|
update_opt_tuple_bool_introduce_accumulators(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_lcmc_accumulator(Bool),
|
|
update_opt_tuple_bool_opt_lcmc_accumulator(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_lcmc_null(Bool),
|
|
update_opt_tuple_bool_opt_lcmc_null(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_lcmc(Bool),
|
|
update_opt_tuple_bool_opt_lcmc(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_dead_procs(Bool),
|
|
update_opt_tuple_bool_opt_dead_procs(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_deforest(Bool),
|
|
update_opt_tuple_bool_deforest(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_untuple(Bool),
|
|
update_opt_tuple_bool_untuple(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_tuple(Bool),
|
|
update_opt_tuple_bool_tuple(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_inline_par_builtins(Bool),
|
|
update_opt_tuple_bool_inline_par_builtins(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_spec_in_all_dep_par_conjs(Bool),
|
|
update_opt_tuple_bool_spec_in_all_dep_par_conjs(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_allow_some_paths_only_waits(Bool),
|
|
update_opt_tuple_bool_allow_some_paths_only_waits(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_analyse_regions(Bool),
|
|
update_opt_tuple_bool_analyse_regions(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_smart_indexing(Bool),
|
|
update_opt_tuple_bool_use_smart_indexing(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_smart_indexing_atomic(Bool),
|
|
update_opt_tuple_bool_use_smart_indexing_atomic(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_smart_indexing_string(Bool),
|
|
update_opt_tuple_bool_use_smart_indexing_string(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_smart_indexing_tag(Bool),
|
|
update_opt_tuple_bool_use_smart_indexing_tag(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_smart_indexing_float(Bool),
|
|
update_opt_tuple_bool_use_smart_indexing_float(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_put_base_first_single_rec(Bool),
|
|
update_opt_tuple_bool_put_base_first_single_rec(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_put_base_first_multi_rec(Bool),
|
|
update_opt_tuple_bool_put_base_first_multi_rec(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_static_ground_cells(Bool),
|
|
update_opt_tuple_bool_use_static_ground_cells(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_static_ground_floats(Bool),
|
|
update_opt_tuple_bool_use_static_ground_floats(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_static_ground_int64s(Bool),
|
|
update_opt_tuple_bool_use_static_ground_int64s(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_static_code_addresses(Bool),
|
|
update_opt_tuple_bool_use_static_code_addresses(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_atomic_cells(Bool),
|
|
update_opt_tuple_bool_use_atomic_cells(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_middle_rec_llds(Bool),
|
|
update_opt_tuple_bool_opt_middle_rec_llds(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_simple_neg_llds(Bool),
|
|
update_opt_tuple_bool_opt_simple_neg_llds(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_allow_hijacks(Bool),
|
|
update_opt_tuple_bool_allow_hijacks(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_mlds_tailcalls(Bool),
|
|
update_opt_tuple_bool_opt_mlds_tailcalls(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_mlds_inits(Bool),
|
|
update_opt_tuple_bool_opt_mlds_inits(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_elim_unused_mlds_assigns(Bool),
|
|
update_opt_tuple_bool_elim_unused_mlds_assigns(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_elim_local_vars_mlds(Bool),
|
|
update_opt_tuple_bool_elim_local_vars_mlds(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_gen_trail_ops_inline_mlds(Bool),
|
|
update_opt_tuple_bool_gen_trail_ops_inline_mlds(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_llds_common_data(Bool),
|
|
update_opt_tuple_bool_use_llds_common_data(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_llds_common_layout_data(Bool),
|
|
update_opt_tuple_bool_use_llds_common_layout_data(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_optimize_llds(Bool),
|
|
update_opt_tuple_bool_optimize_llds(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_optimize_mlds(Bool),
|
|
update_opt_tuple_bool_optimize_mlds(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_peep_llds(Bool),
|
|
update_opt_tuple_bool_peep_llds(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_peep_llds_mkword(Bool),
|
|
update_opt_tuple_bool_peep_llds_mkword(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_peep_mlds(Bool),
|
|
update_opt_tuple_bool_peep_mlds(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_jumps(Bool),
|
|
update_opt_tuple_bool_opt_jumps(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_fulljumps(Bool),
|
|
update_opt_tuple_bool_opt_fulljumps(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_pessimize_llds_tailcalls(Bool),
|
|
update_opt_tuple_bool_pessimize_llds_tailcalls(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_checked_nondet_tailcalls(Bool),
|
|
update_opt_tuple_bool_opt_checked_nondet_tailcalls(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_local_vars_llds(Bool),
|
|
update_opt_tuple_bool_use_local_vars_llds(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_standardize_labels(Bool),
|
|
update_opt_tuple_bool_standardize_labels(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_labels(Bool),
|
|
update_opt_tuple_bool_opt_labels(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_dup_instrs_llds(Bool),
|
|
update_opt_tuple_bool_opt_dup_instrs_llds(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_dup_procs_llds(Bool),
|
|
update_opt_tuple_bool_opt_dup_procs_llds(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_frames(Bool),
|
|
update_opt_tuple_bool_opt_frames(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_delay_slot(Bool),
|
|
update_opt_tuple_bool_opt_delay_slot(OptionTable, Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_llds_reassign(Bool),
|
|
update_opt_tuple_bool_opt_llds_reassign(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_macro_for_redo_fail(Bool),
|
|
update_opt_tuple_bool_use_macro_for_redo_fail(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_emit_c_loops(Bool),
|
|
update_opt_tuple_bool_emit_c_loops(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_just_one_c_func(Bool),
|
|
update_opt_tuple_bool_use_just_one_c_func(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_local_thread_engine_base(Bool),
|
|
update_opt_tuple_bool_use_local_thread_engine_base(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_inline_alloc(Bool),
|
|
update_opt_tuple_bool_inline_alloc(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_c(Bool),
|
|
update_opt_tuple_bool_opt_c(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_inline_call_cost(N),
|
|
update_opt_tuple_int_inline_call_cost(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_inline_compound_threshold(N),
|
|
update_opt_tuple_int_inline_compound_threshold(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_inline_simple_threshold(N),
|
|
update_opt_tuple_int_inline_simple_threshold(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_inline_vars_threshold(N),
|
|
update_opt_tuple_int_inline_vars_threshold(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_intermod_inline_simple_threshold(N),
|
|
update_opt_tuple_int_intermod_inline_simple_threshold(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_from_ground_term_threshold(N),
|
|
update_opt_tuple_int_from_ground_term_threshold(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_svcell_cv_store_cost(N),
|
|
update_opt_tuple_int_opt_svcell_cv_store_cost(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_svcell_cv_load_cost(N),
|
|
update_opt_tuple_int_opt_svcell_cv_load_cost(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_svcell_fv_store_cost(N),
|
|
update_opt_tuple_int_opt_svcell_fv_store_cost(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_svcell_fv_load_cost(N),
|
|
update_opt_tuple_int_opt_svcell_fv_load_cost(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_svcell_op_ratio(N),
|
|
update_opt_tuple_int_opt_svcell_op_ratio(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_svcell_node_ratio(N),
|
|
update_opt_tuple_int_opt_svcell_node_ratio(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_svcell_all_path_node_ratio(N),
|
|
update_opt_tuple_int_opt_svcell_all_path_node_ratio(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_higher_order_size_limit(N),
|
|
update_opt_tuple_int_higher_order_size_limit(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_higher_order_arg_limit(N),
|
|
update_opt_tuple_int_higher_order_arg_limit(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_unneeded_code_copy_limit(N),
|
|
update_opt_tuple_int_opt_unneeded_code_copy_limit(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_deforestation_depth_limit(N),
|
|
update_opt_tuple_int_deforestation_depth_limit(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_deforestation_cost_factor(N),
|
|
update_opt_tuple_int_deforestation_cost_factor(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_deforestation_vars_threshold(N),
|
|
update_opt_tuple_int_deforestation_vars_threshold(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_deforestation_size_threshold(N),
|
|
update_opt_tuple_int_deforestation_size_threshold(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_tuple_costs_ratio(N),
|
|
update_opt_tuple_int_tuple_costs_ratio(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_tuple_min_args(N),
|
|
update_opt_tuple_int_tuple_min_args(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_dense_switch_req_density(N),
|
|
update_opt_tuple_int_dense_switch_req_density(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_lookup_switch_req_density(N),
|
|
update_opt_tuple_int_lookup_switch_req_density(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_dense_switch_size(N),
|
|
update_opt_tuple_int_dense_switch_size(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_lookup_switch_size(N),
|
|
update_opt_tuple_int_lookup_switch_size(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_string_trie_switch_size(N),
|
|
update_opt_tuple_int_string_trie_switch_size(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_string_hash_switch_size(N),
|
|
update_opt_tuple_int_string_hash_switch_size(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_string_binary_switch_size(N),
|
|
update_opt_tuple_int_string_binary_switch_size(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_tag_switch_size(N),
|
|
update_opt_tuple_int_tag_switch_size(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_try_switch_size(N),
|
|
update_opt_tuple_int_try_switch_size(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_binary_switch_size(N),
|
|
update_opt_tuple_int_binary_switch_size(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_llds_local_var_access_threshold(N),
|
|
update_opt_tuple_int_llds_local_var_access_threshold(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_repeat(N),
|
|
update_opt_tuple_int_opt_repeat(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_llds_layout_compression_limit(N),
|
|
update_opt_tuple_int_llds_layout_compression_limit(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_procs_per_c_function(N),
|
|
update_opt_tuple_int_procs_per_c_function(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_tuple_trace_counts_file(Str),
|
|
!OptTuple ^ ot_tuple_trace_counts_file := Str
|
|
;
|
|
OptOption = oo_opt_level(OptLevel),
|
|
set_opts_upto_level(OptionTable, 0, OptLevel, !OptTuple, !.MaybeSeenOptLevel, _),
|
|
!:MaybeSeenOptLevel = seen_opt_level
|
|
;
|
|
OptOption = oo_opt_for_space,
|
|
set_opts_for_space(!OptTuple)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_allow_inlining(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_allow_inlining(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_allow_inlining,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_allow_inlining,
|
|
!OptTuple ^ ot_allow_inlining := allow_inlining
|
|
;
|
|
OldValue = allow_inlining
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_allow_inlining
|
|
;
|
|
OldValue = allow_inlining,
|
|
!OptTuple ^ ot_allow_inlining := do_not_allow_inlining
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_inline_simple(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_inline_simple(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_inline_simple,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_inline_simple,
|
|
!OptTuple ^ ot_inline_simple := inline_simple
|
|
;
|
|
OldValue = inline_simple
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_inline_simple
|
|
;
|
|
OldValue = inline_simple,
|
|
!OptTuple ^ ot_inline_simple := do_not_inline_simple
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_inline_builtins(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_inline_builtins(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_inline_builtins,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_inline_builtins,
|
|
!OptTuple ^ ot_inline_builtins := inline_builtins
|
|
;
|
|
OldValue = inline_builtins
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_inline_builtins
|
|
;
|
|
OldValue = inline_builtins,
|
|
!OptTuple ^ ot_inline_builtins := do_not_inline_builtins
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_inline_single_use(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_inline_single_use(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_inline_single_use,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_inline_single_use,
|
|
!OptTuple ^ ot_inline_single_use := inline_single_use
|
|
;
|
|
OldValue = inline_single_use
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_inline_single_use
|
|
;
|
|
OldValue = inline_single_use,
|
|
!OptTuple ^ ot_inline_single_use := do_not_inline_single_use
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_enable_const_struct_poly(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_enable_const_struct_poly(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_enable_const_struct_poly,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_enable_const_struct_poly,
|
|
!OptTuple ^ ot_enable_const_struct_poly := enable_const_struct_poly
|
|
;
|
|
OldValue = enable_const_struct_poly
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_enable_const_struct_poly
|
|
;
|
|
OldValue = enable_const_struct_poly,
|
|
!OptTuple ^ ot_enable_const_struct_poly := do_not_enable_const_struct_poly
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_enable_const_struct_user(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_enable_const_struct_user(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_enable_const_struct_user,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_enable_const_struct_user,
|
|
!OptTuple ^ ot_enable_const_struct_user := enable_const_struct_user
|
|
;
|
|
OldValue = enable_const_struct_user
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_enable_const_struct_user
|
|
;
|
|
OldValue = enable_const_struct_user,
|
|
!OptTuple ^ ot_enable_const_struct_user := do_not_enable_const_struct_user
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_common_structs(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_common_structs(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_common_structs,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_common_structs,
|
|
!OptTuple ^ ot_opt_common_structs := opt_common_structs
|
|
;
|
|
OldValue = opt_common_structs
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_common_structs
|
|
;
|
|
OldValue = opt_common_structs,
|
|
!OptTuple ^ ot_opt_common_structs := do_not_opt_common_structs
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_prop_constraints(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_prop_constraints(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_prop_constraints,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_prop_constraints,
|
|
!OptTuple ^ ot_prop_constraints := prop_constraints
|
|
;
|
|
OldValue = prop_constraints
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_prop_constraints
|
|
;
|
|
OldValue = prop_constraints,
|
|
!OptTuple ^ ot_prop_constraints := do_not_prop_constraints
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_prop_local_constraints(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_prop_local_constraints(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_prop_local_constraints,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_prop_local_constraints,
|
|
!OptTuple ^ ot_prop_local_constraints := prop_local_constraints
|
|
;
|
|
OldValue = prop_local_constraints
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_prop_local_constraints
|
|
;
|
|
OldValue = prop_local_constraints,
|
|
!OptTuple ^ ot_prop_local_constraints := do_not_prop_local_constraints
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_dup_calls(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_dup_calls(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_dup_calls,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_dup_calls,
|
|
!OptTuple ^ ot_opt_dup_calls := opt_dup_calls
|
|
;
|
|
OldValue = opt_dup_calls
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_dup_calls
|
|
;
|
|
OldValue = opt_dup_calls,
|
|
!OptTuple ^ ot_opt_dup_calls := do_not_opt_dup_calls
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_prop_constants(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_prop_constants(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_prop_constants,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_prop_constants,
|
|
!OptTuple ^ ot_prop_constants := prop_constants
|
|
;
|
|
OldValue = prop_constants
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_prop_constants
|
|
;
|
|
OldValue = prop_constants,
|
|
!OptTuple ^ ot_prop_constants := do_not_prop_constants
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_elim_excess_assigns(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_elim_excess_assigns(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_elim_excess_assigns,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_elim_excess_assigns,
|
|
!OptTuple ^ ot_elim_excess_assigns := elim_excess_assigns
|
|
;
|
|
OldValue = elim_excess_assigns
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_elim_excess_assigns
|
|
;
|
|
OldValue = elim_excess_assigns,
|
|
!OptTuple ^ ot_elim_excess_assigns := do_not_elim_excess_assigns
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_merge_code_after_switch(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_merge_code_after_switch(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_merge_code_after_switch,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_merge_code_after_switch,
|
|
!OptTuple ^ ot_merge_code_after_switch := merge_code_after_switch
|
|
;
|
|
OldValue = merge_code_after_switch
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_merge_code_after_switch
|
|
;
|
|
OldValue = merge_code_after_switch,
|
|
!OptTuple ^ ot_merge_code_after_switch := do_not_merge_code_after_switch
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_format_calls(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_format_calls(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_format_calls,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_format_calls,
|
|
!OptTuple ^ ot_opt_format_calls := opt_format_calls
|
|
;
|
|
OldValue = opt_format_calls
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_format_calls
|
|
;
|
|
OldValue = opt_format_calls,
|
|
!OptTuple ^ ot_opt_format_calls := do_not_opt_format_calls
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_split_switch_arms(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_split_switch_arms(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_split_switch_arms,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_split_switch_arms,
|
|
!OptTuple ^ ot_split_switch_arms := split_switch_arms
|
|
;
|
|
OldValue = split_switch_arms
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_split_switch_arms
|
|
;
|
|
OldValue = split_switch_arms,
|
|
!OptTuple ^ ot_split_switch_arms := do_not_split_switch_arms
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_loop_invariants(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_loop_invariants(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_loop_invariants,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_loop_invariants,
|
|
!OptTuple ^ ot_opt_loop_invariants := opt_loop_invariants
|
|
;
|
|
OldValue = opt_loop_invariants
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_loop_invariants
|
|
;
|
|
OldValue = opt_loop_invariants,
|
|
!OptTuple ^ ot_opt_loop_invariants := do_not_opt_loop_invariants
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_saved_vars_const(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_saved_vars_const(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_saved_vars_const,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_saved_vars_const,
|
|
!OptTuple ^ ot_opt_saved_vars_const := opt_saved_vars_const
|
|
;
|
|
OldValue = opt_saved_vars_const
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_saved_vars_const
|
|
;
|
|
OldValue = opt_saved_vars_const,
|
|
!OptTuple ^ ot_opt_saved_vars_const := do_not_opt_saved_vars_const
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_svcell(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_svcell(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_svcell,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_svcell,
|
|
!OptTuple ^ ot_opt_svcell := opt_svcell
|
|
;
|
|
OldValue = opt_svcell
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_svcell
|
|
;
|
|
OldValue = opt_svcell,
|
|
!OptTuple ^ ot_opt_svcell := do_not_opt_svcell
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_svcell_loop(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_svcell_loop(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_svcell_loop,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_svcell_loop,
|
|
!OptTuple ^ ot_opt_svcell_loop := opt_svcell_loop
|
|
;
|
|
OldValue = opt_svcell_loop
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_svcell_loop
|
|
;
|
|
OldValue = opt_svcell_loop,
|
|
!OptTuple ^ ot_opt_svcell_loop := do_not_opt_svcell_loop
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_svcell_full_path(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_svcell_full_path(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_svcell_full_path,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_svcell_full_path,
|
|
!OptTuple ^ ot_opt_svcell_full_path := opt_svcell_full_path
|
|
;
|
|
OldValue = opt_svcell_full_path
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_svcell_full_path
|
|
;
|
|
OldValue = opt_svcell_full_path,
|
|
!OptTuple ^ ot_opt_svcell_full_path := do_not_opt_svcell_full_path
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_svcell_on_stack(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_svcell_on_stack(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_svcell_on_stack,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_svcell_on_stack,
|
|
!OptTuple ^ ot_opt_svcell_on_stack := opt_svcell_on_stack
|
|
;
|
|
OldValue = opt_svcell_on_stack
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_svcell_on_stack
|
|
;
|
|
OldValue = opt_svcell_on_stack,
|
|
!OptTuple ^ ot_opt_svcell_on_stack := do_not_opt_svcell_on_stack
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_svcell_candidate_headvars(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_svcell_candidate_headvars(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_svcell_candidate_headvars,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_svcell_candidate_headvars,
|
|
!OptTuple ^ ot_opt_svcell_candidate_headvars := opt_svcell_candidate_headvars
|
|
;
|
|
OldValue = opt_svcell_candidate_headvars
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_svcell_candidate_headvars
|
|
;
|
|
OldValue = opt_svcell_candidate_headvars,
|
|
!OptTuple ^ ot_opt_svcell_candidate_headvars := do_not_opt_svcell_candidate_headvars
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_svcell_all_candidates(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_svcell_all_candidates(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_svcell_all_candidates,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_svcell_all_candidates,
|
|
!OptTuple ^ ot_opt_svcell_all_candidates := opt_svcell_all_candidates
|
|
;
|
|
OldValue = opt_svcell_all_candidates
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_svcell_all_candidates
|
|
;
|
|
OldValue = opt_svcell_all_candidates,
|
|
!OptTuple ^ ot_opt_svcell_all_candidates := do_not_opt_svcell_all_candidates
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_delay_constructs(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_delay_constructs(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_delay_constructs,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_delay_constructs,
|
|
!OptTuple ^ ot_delay_constructs := delay_constructs
|
|
;
|
|
OldValue = delay_constructs
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_delay_constructs
|
|
;
|
|
OldValue = delay_constructs,
|
|
!OptTuple ^ ot_delay_constructs := do_not_delay_constructs
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_follow_code(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_follow_code(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_follow_code,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_follow_code,
|
|
!OptTuple ^ ot_opt_follow_code := opt_follow_code
|
|
;
|
|
OldValue = opt_follow_code
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_follow_code
|
|
;
|
|
OldValue = opt_follow_code,
|
|
!OptTuple ^ ot_opt_follow_code := do_not_opt_follow_code
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_unused_args(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_unused_args(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_unused_args,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_unused_args,
|
|
!OptTuple ^ ot_opt_unused_args := opt_unused_args
|
|
;
|
|
OldValue = opt_unused_args
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_unused_args
|
|
;
|
|
OldValue = opt_unused_args,
|
|
!OptTuple ^ ot_opt_unused_args := do_not_opt_unused_args
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_unused_args_intermod(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_unused_args_intermod(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_unused_args_intermod,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_unused_args_intermod,
|
|
!OptTuple ^ ot_opt_unused_args_intermod := opt_unused_args_intermod
|
|
;
|
|
OldValue = opt_unused_args_intermod
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_unused_args_intermod
|
|
;
|
|
OldValue = opt_unused_args_intermod,
|
|
!OptTuple ^ ot_opt_unused_args_intermod := do_not_opt_unused_args_intermod
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_higher_order(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_higher_order(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_higher_order,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_higher_order,
|
|
!OptTuple ^ ot_opt_higher_order := opt_higher_order
|
|
;
|
|
OldValue = opt_higher_order
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_higher_order
|
|
;
|
|
OldValue = opt_higher_order,
|
|
!OptTuple ^ ot_opt_higher_order := do_not_opt_higher_order
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_unneeded_code(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_unneeded_code(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_unneeded_code,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_unneeded_code,
|
|
!OptTuple ^ ot_opt_unneeded_code := opt_unneeded_code
|
|
;
|
|
OldValue = opt_unneeded_code
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_unneeded_code
|
|
;
|
|
OldValue = opt_unneeded_code,
|
|
!OptTuple ^ ot_opt_unneeded_code := do_not_opt_unneeded_code
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_spec_types(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_spec_types(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_spec_types,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_spec_types,
|
|
!OptTuple ^ ot_spec_types := spec_types
|
|
;
|
|
OldValue = spec_types
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_spec_types
|
|
;
|
|
OldValue = spec_types,
|
|
!OptTuple ^ ot_spec_types := do_not_spec_types
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_spec_types_user_guided(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_spec_types_user_guided(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_spec_types_user_guided,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_spec_types_user_guided,
|
|
!OptTuple ^ ot_spec_types_user_guided := spec_types_user_guided
|
|
;
|
|
OldValue = spec_types_user_guided
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_spec_types_user_guided
|
|
;
|
|
OldValue = spec_types_user_guided,
|
|
!OptTuple ^ ot_spec_types_user_guided := do_not_spec_types_user_guided
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_introduce_accumulators(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_introduce_accumulators(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_introduce_accumulators,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_introduce_accumulators,
|
|
!OptTuple ^ ot_introduce_accumulators := introduce_accumulators
|
|
;
|
|
OldValue = introduce_accumulators
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_introduce_accumulators
|
|
;
|
|
OldValue = introduce_accumulators,
|
|
!OptTuple ^ ot_introduce_accumulators := do_not_introduce_accumulators
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_lcmc_accumulator(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_lcmc_accumulator(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_lcmc_accumulator,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_lcmc_accumulator,
|
|
!OptTuple ^ ot_opt_lcmc_accumulator := opt_lcmc_accumulator
|
|
;
|
|
OldValue = opt_lcmc_accumulator
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_lcmc_accumulator
|
|
;
|
|
OldValue = opt_lcmc_accumulator,
|
|
!OptTuple ^ ot_opt_lcmc_accumulator := do_not_opt_lcmc_accumulator
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_lcmc_null(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_lcmc_null(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_lcmc_null,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_lcmc_null,
|
|
!OptTuple ^ ot_opt_lcmc_null := opt_lcmc_null
|
|
;
|
|
OldValue = opt_lcmc_null
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_lcmc_null
|
|
;
|
|
OldValue = opt_lcmc_null,
|
|
!OptTuple ^ ot_opt_lcmc_null := do_not_opt_lcmc_null
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_lcmc(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_lcmc(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_lcmc,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_lcmc,
|
|
!OptTuple ^ ot_opt_lcmc := opt_lcmc
|
|
;
|
|
OldValue = opt_lcmc
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_lcmc
|
|
;
|
|
OldValue = opt_lcmc,
|
|
!OptTuple ^ ot_opt_lcmc := do_not_opt_lcmc
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_dead_procs(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_dead_procs(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_dead_procs,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_dead_procs,
|
|
!OptTuple ^ ot_opt_dead_procs := opt_dead_procs
|
|
;
|
|
OldValue = opt_dead_procs
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_dead_procs
|
|
;
|
|
OldValue = opt_dead_procs,
|
|
!OptTuple ^ ot_opt_dead_procs := do_not_opt_dead_procs
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_deforest(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_deforest(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_deforest,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_deforest,
|
|
!OptTuple ^ ot_deforest := deforest
|
|
;
|
|
OldValue = deforest
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_deforest
|
|
;
|
|
OldValue = deforest,
|
|
!OptTuple ^ ot_deforest := do_not_deforest
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_untuple(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_untuple(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_untuple,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_untuple,
|
|
!OptTuple ^ ot_untuple := untuple
|
|
;
|
|
OldValue = untuple
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_untuple
|
|
;
|
|
OldValue = untuple,
|
|
!OptTuple ^ ot_untuple := do_not_untuple
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_tuple(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_tuple(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_tuple,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_tuple,
|
|
!OptTuple ^ ot_tuple := tuple
|
|
;
|
|
OldValue = tuple
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_tuple
|
|
;
|
|
OldValue = tuple,
|
|
!OptTuple ^ ot_tuple := do_not_tuple
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_inline_par_builtins(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_inline_par_builtins(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_inline_par_builtins,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_inline_par_builtins,
|
|
!OptTuple ^ ot_inline_par_builtins := inline_par_builtins
|
|
;
|
|
OldValue = inline_par_builtins
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_inline_par_builtins
|
|
;
|
|
OldValue = inline_par_builtins,
|
|
!OptTuple ^ ot_inline_par_builtins := do_not_inline_par_builtins
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_spec_in_all_dep_par_conjs(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_spec_in_all_dep_par_conjs(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_spec_in_all_dep_par_conjs,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_spec_in_all_dep_par_conjs,
|
|
!OptTuple ^ ot_spec_in_all_dep_par_conjs := spec_in_all_dep_par_conjs
|
|
;
|
|
OldValue = spec_in_all_dep_par_conjs
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_spec_in_all_dep_par_conjs
|
|
;
|
|
OldValue = spec_in_all_dep_par_conjs,
|
|
!OptTuple ^ ot_spec_in_all_dep_par_conjs := do_not_spec_in_all_dep_par_conjs
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_allow_some_paths_only_waits(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_allow_some_paths_only_waits(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_allow_some_paths_only_waits,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_allow_some_paths_only_waits,
|
|
!OptTuple ^ ot_allow_some_paths_only_waits := allow_some_paths_only_waits
|
|
;
|
|
OldValue = allow_some_paths_only_waits
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_allow_some_paths_only_waits
|
|
;
|
|
OldValue = allow_some_paths_only_waits,
|
|
!OptTuple ^ ot_allow_some_paths_only_waits := do_not_allow_some_paths_only_waits
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_analyse_regions(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_analyse_regions(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_analyse_regions,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_analyse_regions,
|
|
!OptTuple ^ ot_analyse_regions := analyse_regions
|
|
;
|
|
OldValue = analyse_regions
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_analyse_regions
|
|
;
|
|
OldValue = analyse_regions,
|
|
!OptTuple ^ ot_analyse_regions := do_not_analyse_regions
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_smart_indexing(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_smart_indexing(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_smart_indexing,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_smart_indexing,
|
|
!OptTuple ^ ot_use_smart_indexing := use_smart_indexing
|
|
;
|
|
OldValue = use_smart_indexing
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_smart_indexing
|
|
;
|
|
OldValue = use_smart_indexing,
|
|
!OptTuple ^ ot_use_smart_indexing := do_not_use_smart_indexing
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_smart_indexing_atomic(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_smart_indexing_atomic(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_smart_indexing_atomic,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_smart_indexing_atomic,
|
|
!OptTuple ^ ot_use_smart_indexing_atomic := use_smart_indexing_atomic
|
|
;
|
|
OldValue = use_smart_indexing_atomic
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_smart_indexing_atomic
|
|
;
|
|
OldValue = use_smart_indexing_atomic,
|
|
!OptTuple ^ ot_use_smart_indexing_atomic := do_not_use_smart_indexing_atomic
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_smart_indexing_string(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_smart_indexing_string(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_smart_indexing_string,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_smart_indexing_string,
|
|
!OptTuple ^ ot_use_smart_indexing_string := use_smart_indexing_string
|
|
;
|
|
OldValue = use_smart_indexing_string
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_smart_indexing_string
|
|
;
|
|
OldValue = use_smart_indexing_string,
|
|
!OptTuple ^ ot_use_smart_indexing_string := do_not_use_smart_indexing_string
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_smart_indexing_tag(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_smart_indexing_tag(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_smart_indexing_tag,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_smart_indexing_tag,
|
|
!OptTuple ^ ot_use_smart_indexing_tag := use_smart_indexing_tag
|
|
;
|
|
OldValue = use_smart_indexing_tag
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_smart_indexing_tag
|
|
;
|
|
OldValue = use_smart_indexing_tag,
|
|
!OptTuple ^ ot_use_smart_indexing_tag := do_not_use_smart_indexing_tag
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_smart_indexing_float(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_smart_indexing_float(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_smart_indexing_float,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_smart_indexing_float,
|
|
!OptTuple ^ ot_use_smart_indexing_float := use_smart_indexing_float
|
|
;
|
|
OldValue = use_smart_indexing_float
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_smart_indexing_float
|
|
;
|
|
OldValue = use_smart_indexing_float,
|
|
!OptTuple ^ ot_use_smart_indexing_float := do_not_use_smart_indexing_float
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_put_base_first_single_rec(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_put_base_first_single_rec(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_put_base_first_single_rec,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_put_base_first_single_rec,
|
|
!OptTuple ^ ot_put_base_first_single_rec := put_base_first_single_rec
|
|
;
|
|
OldValue = put_base_first_single_rec
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_put_base_first_single_rec
|
|
;
|
|
OldValue = put_base_first_single_rec,
|
|
!OptTuple ^ ot_put_base_first_single_rec := do_not_put_base_first_single_rec
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_put_base_first_multi_rec(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_put_base_first_multi_rec(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_put_base_first_multi_rec,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_put_base_first_multi_rec,
|
|
!OptTuple ^ ot_put_base_first_multi_rec := put_base_first_multi_rec
|
|
;
|
|
OldValue = put_base_first_multi_rec
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_put_base_first_multi_rec
|
|
;
|
|
OldValue = put_base_first_multi_rec,
|
|
!OptTuple ^ ot_put_base_first_multi_rec := do_not_put_base_first_multi_rec
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_static_ground_cells(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_static_ground_cells(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_static_ground_cells,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_static_ground_cells,
|
|
!OptTuple ^ ot_use_static_ground_cells := use_static_ground_cells
|
|
;
|
|
OldValue = use_static_ground_cells
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_static_ground_cells
|
|
;
|
|
OldValue = use_static_ground_cells,
|
|
!OptTuple ^ ot_use_static_ground_cells := do_not_use_static_ground_cells
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_static_ground_floats(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_static_ground_floats(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_static_ground_floats,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_static_ground_floats,
|
|
!OptTuple ^ ot_use_static_ground_floats := use_static_ground_floats
|
|
;
|
|
OldValue = use_static_ground_floats
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_static_ground_floats
|
|
;
|
|
OldValue = use_static_ground_floats,
|
|
!OptTuple ^ ot_use_static_ground_floats := do_not_use_static_ground_floats
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_static_ground_int64s(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_static_ground_int64s(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_static_ground_int64s,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_static_ground_int64s,
|
|
!OptTuple ^ ot_use_static_ground_int64s := use_static_ground_int64s
|
|
;
|
|
OldValue = use_static_ground_int64s
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_static_ground_int64s
|
|
;
|
|
OldValue = use_static_ground_int64s,
|
|
!OptTuple ^ ot_use_static_ground_int64s := do_not_use_static_ground_int64s
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_static_code_addresses(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_static_code_addresses(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_static_code_addresses,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_static_code_addresses,
|
|
!OptTuple ^ ot_use_static_code_addresses := use_static_code_addresses
|
|
;
|
|
OldValue = use_static_code_addresses
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_static_code_addresses
|
|
;
|
|
OldValue = use_static_code_addresses,
|
|
!OptTuple ^ ot_use_static_code_addresses := do_not_use_static_code_addresses
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_atomic_cells(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_atomic_cells(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_atomic_cells,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_atomic_cells,
|
|
!OptTuple ^ ot_use_atomic_cells := use_atomic_cells
|
|
;
|
|
OldValue = use_atomic_cells
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_atomic_cells
|
|
;
|
|
OldValue = use_atomic_cells,
|
|
!OptTuple ^ ot_use_atomic_cells := do_not_use_atomic_cells
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_middle_rec_llds(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_middle_rec_llds(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_middle_rec_llds,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_middle_rec_llds,
|
|
!OptTuple ^ ot_opt_middle_rec_llds := opt_middle_rec_llds
|
|
;
|
|
OldValue = opt_middle_rec_llds
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_middle_rec_llds
|
|
;
|
|
OldValue = opt_middle_rec_llds,
|
|
!OptTuple ^ ot_opt_middle_rec_llds := do_not_opt_middle_rec_llds
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_simple_neg_llds(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_simple_neg_llds(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_simple_neg_llds,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_simple_neg_llds,
|
|
!OptTuple ^ ot_opt_simple_neg_llds := opt_simple_neg_llds
|
|
;
|
|
OldValue = opt_simple_neg_llds
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_simple_neg_llds
|
|
;
|
|
OldValue = opt_simple_neg_llds,
|
|
!OptTuple ^ ot_opt_simple_neg_llds := do_not_opt_simple_neg_llds
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_allow_hijacks(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_allow_hijacks(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_allow_hijacks,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_allow_hijacks,
|
|
!OptTuple ^ ot_allow_hijacks := allow_hijacks
|
|
;
|
|
OldValue = allow_hijacks
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_allow_hijacks
|
|
;
|
|
OldValue = allow_hijacks,
|
|
!OptTuple ^ ot_allow_hijacks := do_not_allow_hijacks
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_mlds_tailcalls(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_mlds_tailcalls(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_mlds_tailcalls,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_mlds_tailcalls,
|
|
!OptTuple ^ ot_opt_mlds_tailcalls := opt_mlds_tailcalls
|
|
;
|
|
OldValue = opt_mlds_tailcalls
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_mlds_tailcalls
|
|
;
|
|
OldValue = opt_mlds_tailcalls,
|
|
!OptTuple ^ ot_opt_mlds_tailcalls := do_not_opt_mlds_tailcalls
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_mlds_inits(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_mlds_inits(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_mlds_inits,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_mlds_inits,
|
|
!OptTuple ^ ot_opt_mlds_inits := opt_mlds_inits
|
|
;
|
|
OldValue = opt_mlds_inits
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_mlds_inits
|
|
;
|
|
OldValue = opt_mlds_inits,
|
|
!OptTuple ^ ot_opt_mlds_inits := do_not_opt_mlds_inits
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_elim_unused_mlds_assigns(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_elim_unused_mlds_assigns(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_elim_unused_mlds_assigns,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_elim_unused_mlds_assigns,
|
|
!OptTuple ^ ot_elim_unused_mlds_assigns := elim_unused_mlds_assigns
|
|
;
|
|
OldValue = elim_unused_mlds_assigns
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_elim_unused_mlds_assigns
|
|
;
|
|
OldValue = elim_unused_mlds_assigns,
|
|
!OptTuple ^ ot_elim_unused_mlds_assigns := do_not_elim_unused_mlds_assigns
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_elim_local_vars_mlds(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_elim_local_vars_mlds(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_elim_local_vars_mlds,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_elim_local_vars_mlds,
|
|
!OptTuple ^ ot_elim_local_vars_mlds := elim_local_vars_mlds
|
|
;
|
|
OldValue = elim_local_vars_mlds
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_elim_local_vars_mlds
|
|
;
|
|
OldValue = elim_local_vars_mlds,
|
|
!OptTuple ^ ot_elim_local_vars_mlds := do_not_elim_local_vars_mlds
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_gen_trail_ops_inline_mlds(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_gen_trail_ops_inline_mlds(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_gen_trail_ops_inline_mlds,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_gen_trail_ops_inline_mlds,
|
|
!OptTuple ^ ot_gen_trail_ops_inline_mlds := gen_trail_ops_inline_mlds
|
|
;
|
|
OldValue = gen_trail_ops_inline_mlds
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_gen_trail_ops_inline_mlds
|
|
;
|
|
OldValue = gen_trail_ops_inline_mlds,
|
|
!OptTuple ^ ot_gen_trail_ops_inline_mlds := do_not_gen_trail_ops_inline_mlds
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_llds_common_data(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_llds_common_data(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_llds_common_data,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_llds_common_data,
|
|
!OptTuple ^ ot_use_llds_common_data := use_llds_common_data
|
|
;
|
|
OldValue = use_llds_common_data
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_llds_common_data
|
|
;
|
|
OldValue = use_llds_common_data,
|
|
!OptTuple ^ ot_use_llds_common_data := do_not_use_llds_common_data
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_llds_common_layout_data(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_llds_common_layout_data(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_llds_common_layout_data,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_llds_common_layout_data,
|
|
!OptTuple ^ ot_use_llds_common_layout_data := use_llds_common_layout_data
|
|
;
|
|
OldValue = use_llds_common_layout_data
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_llds_common_layout_data
|
|
;
|
|
OldValue = use_llds_common_layout_data,
|
|
!OptTuple ^ ot_use_llds_common_layout_data := do_not_use_llds_common_layout_data
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_optimize_llds(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_optimize_llds(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_optimize_llds,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_optimize_llds,
|
|
!OptTuple ^ ot_optimize_llds := optimize_llds
|
|
;
|
|
OldValue = optimize_llds
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_optimize_llds
|
|
;
|
|
OldValue = optimize_llds,
|
|
!OptTuple ^ ot_optimize_llds := do_not_optimize_llds
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_optimize_mlds(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_optimize_mlds(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_optimize_mlds,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_optimize_mlds,
|
|
!OptTuple ^ ot_optimize_mlds := optimize_mlds
|
|
;
|
|
OldValue = optimize_mlds
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_optimize_mlds
|
|
;
|
|
OldValue = optimize_mlds,
|
|
!OptTuple ^ ot_optimize_mlds := do_not_optimize_mlds
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_peep_llds(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_peep_llds(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_peep_llds,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_peep_llds,
|
|
!OptTuple ^ ot_peep_llds := peep_llds
|
|
;
|
|
OldValue = peep_llds
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_peep_llds
|
|
;
|
|
OldValue = peep_llds,
|
|
!OptTuple ^ ot_peep_llds := do_not_peep_llds
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_peep_llds_mkword(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_peep_llds_mkword(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_peep_llds_mkword,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_peep_llds_mkword,
|
|
!OptTuple ^ ot_peep_llds_mkword := peep_llds_mkword
|
|
;
|
|
OldValue = peep_llds_mkword
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_peep_llds_mkword
|
|
;
|
|
OldValue = peep_llds_mkword,
|
|
!OptTuple ^ ot_peep_llds_mkword := do_not_peep_llds_mkword
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_peep_mlds(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_peep_mlds(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_peep_mlds,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_peep_mlds,
|
|
!OptTuple ^ ot_peep_mlds := peep_mlds
|
|
;
|
|
OldValue = peep_mlds
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_peep_mlds
|
|
;
|
|
OldValue = peep_mlds,
|
|
!OptTuple ^ ot_peep_mlds := do_not_peep_mlds
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_jumps(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_jumps(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_jumps,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_jumps,
|
|
!OptTuple ^ ot_opt_jumps := opt_jumps
|
|
;
|
|
OldValue = opt_jumps
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_jumps
|
|
;
|
|
OldValue = opt_jumps,
|
|
!OptTuple ^ ot_opt_jumps := do_not_opt_jumps
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_fulljumps(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_fulljumps(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_fulljumps,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_fulljumps,
|
|
!OptTuple ^ ot_opt_fulljumps := opt_fulljumps
|
|
;
|
|
OldValue = opt_fulljumps
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_fulljumps
|
|
;
|
|
OldValue = opt_fulljumps,
|
|
!OptTuple ^ ot_opt_fulljumps := do_not_opt_fulljumps
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_pessimize_llds_tailcalls(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_pessimize_llds_tailcalls(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_pessimize_llds_tailcalls,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_pessimize_llds_tailcalls,
|
|
!OptTuple ^ ot_pessimize_llds_tailcalls := pessimize_llds_tailcalls
|
|
;
|
|
OldValue = pessimize_llds_tailcalls
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_pessimize_llds_tailcalls
|
|
;
|
|
OldValue = pessimize_llds_tailcalls,
|
|
!OptTuple ^ ot_pessimize_llds_tailcalls := do_not_pessimize_llds_tailcalls
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_checked_nondet_tailcalls(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_checked_nondet_tailcalls(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_checked_nondet_tailcalls,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_checked_nondet_tailcalls,
|
|
!OptTuple ^ ot_opt_checked_nondet_tailcalls := opt_checked_nondet_tailcalls
|
|
;
|
|
OldValue = opt_checked_nondet_tailcalls
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_checked_nondet_tailcalls
|
|
;
|
|
OldValue = opt_checked_nondet_tailcalls,
|
|
!OptTuple ^ ot_opt_checked_nondet_tailcalls := do_not_opt_checked_nondet_tailcalls
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_local_vars_llds(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_local_vars_llds(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_local_vars_llds,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_local_vars_llds,
|
|
!OptTuple ^ ot_use_local_vars_llds := use_local_vars_llds
|
|
;
|
|
OldValue = use_local_vars_llds
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_local_vars_llds
|
|
;
|
|
OldValue = use_local_vars_llds,
|
|
!OptTuple ^ ot_use_local_vars_llds := do_not_use_local_vars_llds
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_standardize_labels(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_standardize_labels(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_standardize_labels,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_standardize_labels,
|
|
!OptTuple ^ ot_standardize_labels := standardize_labels
|
|
;
|
|
OldValue = standardize_labels
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_standardize_labels
|
|
;
|
|
OldValue = standardize_labels,
|
|
!OptTuple ^ ot_standardize_labels := do_not_standardize_labels
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_labels(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_labels(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_labels,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_labels,
|
|
!OptTuple ^ ot_opt_labels := opt_labels
|
|
;
|
|
OldValue = opt_labels
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_labels
|
|
;
|
|
OldValue = opt_labels,
|
|
!OptTuple ^ ot_opt_labels := do_not_opt_labels
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_dup_instrs_llds(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_dup_instrs_llds(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_dup_instrs_llds,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_dup_instrs_llds,
|
|
!OptTuple ^ ot_opt_dup_instrs_llds := opt_dup_instrs_llds
|
|
;
|
|
OldValue = opt_dup_instrs_llds
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_dup_instrs_llds
|
|
;
|
|
OldValue = opt_dup_instrs_llds,
|
|
!OptTuple ^ ot_opt_dup_instrs_llds := do_not_opt_dup_instrs_llds
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_dup_procs_llds(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_dup_procs_llds(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_dup_procs_llds,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_dup_procs_llds,
|
|
!OptTuple ^ ot_opt_dup_procs_llds := opt_dup_procs_llds
|
|
;
|
|
OldValue = opt_dup_procs_llds
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_dup_procs_llds
|
|
;
|
|
OldValue = opt_dup_procs_llds,
|
|
!OptTuple ^ ot_opt_dup_procs_llds := do_not_opt_dup_procs_llds
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_frames(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_frames(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_frames,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_frames,
|
|
!OptTuple ^ ot_opt_frames := opt_frames
|
|
;
|
|
OldValue = opt_frames
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_frames
|
|
;
|
|
OldValue = opt_frames,
|
|
!OptTuple ^ ot_opt_frames := do_not_opt_frames
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_delay_slot(option_table::in, bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_delay_slot(OptionTable, Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_delay_slot,
|
|
( if
|
|
getopt.lookup_bool_option(OptionTable, have_delay_slot, yes),
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_delay_slot,
|
|
!OptTuple ^ ot_opt_delay_slot := opt_delay_slot
|
|
;
|
|
OldValue = opt_delay_slot
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_delay_slot
|
|
;
|
|
OldValue = opt_delay_slot,
|
|
!OptTuple ^ ot_opt_delay_slot := do_not_opt_delay_slot
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_llds_reassign(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_llds_reassign(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_llds_reassign,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_llds_reassign,
|
|
!OptTuple ^ ot_opt_llds_reassign := opt_llds_reassign
|
|
;
|
|
OldValue = opt_llds_reassign
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_llds_reassign
|
|
;
|
|
OldValue = opt_llds_reassign,
|
|
!OptTuple ^ ot_opt_llds_reassign := do_not_opt_llds_reassign
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_macro_for_redo_fail(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_macro_for_redo_fail(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_macro_for_redo_fail,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_macro_for_redo_fail,
|
|
!OptTuple ^ ot_use_macro_for_redo_fail := use_macro_for_redo_fail
|
|
;
|
|
OldValue = use_macro_for_redo_fail
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_macro_for_redo_fail
|
|
;
|
|
OldValue = use_macro_for_redo_fail,
|
|
!OptTuple ^ ot_use_macro_for_redo_fail := do_not_use_macro_for_redo_fail
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_emit_c_loops(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_emit_c_loops(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_emit_c_loops,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_emit_c_loops,
|
|
!OptTuple ^ ot_emit_c_loops := emit_c_loops
|
|
;
|
|
OldValue = emit_c_loops
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_emit_c_loops
|
|
;
|
|
OldValue = emit_c_loops,
|
|
!OptTuple ^ ot_emit_c_loops := do_not_emit_c_loops
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_just_one_c_func(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_just_one_c_func(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_just_one_c_func,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_just_one_c_func,
|
|
!OptTuple ^ ot_use_just_one_c_func := use_just_one_c_func
|
|
;
|
|
OldValue = use_just_one_c_func
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_just_one_c_func
|
|
;
|
|
OldValue = use_just_one_c_func,
|
|
!OptTuple ^ ot_use_just_one_c_func := do_not_use_just_one_c_func
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_local_thread_engine_base(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_local_thread_engine_base(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_local_thread_engine_base,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_local_thread_engine_base,
|
|
!OptTuple ^ ot_use_local_thread_engine_base := use_local_thread_engine_base
|
|
;
|
|
OldValue = use_local_thread_engine_base
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_local_thread_engine_base
|
|
;
|
|
OldValue = use_local_thread_engine_base,
|
|
!OptTuple ^ ot_use_local_thread_engine_base := do_not_use_local_thread_engine_base
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_inline_alloc(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_inline_alloc(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_inline_alloc,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_inline_alloc,
|
|
!OptTuple ^ ot_inline_alloc := inline_alloc
|
|
;
|
|
OldValue = inline_alloc
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_inline_alloc
|
|
;
|
|
OldValue = inline_alloc,
|
|
!OptTuple ^ ot_inline_alloc := do_not_inline_alloc
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_c(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_c(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_c,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_c,
|
|
!OptTuple ^ ot_opt_c := opt_c
|
|
;
|
|
OldValue = opt_c
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_c
|
|
;
|
|
OldValue = opt_c,
|
|
!OptTuple ^ ot_opt_c := do_not_opt_c
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_inline_call_cost(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_inline_call_cost(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_inline_call_cost := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_inline_call_cost,
|
|
!OptTuple ^ ot_inline_call_cost := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_inline_compound_threshold(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_inline_compound_threshold(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_inline_compound_threshold := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_inline_compound_threshold,
|
|
!OptTuple ^ ot_inline_compound_threshold := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_inline_simple_threshold(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_inline_simple_threshold(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_inline_simple_threshold := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_inline_simple_threshold,
|
|
!OptTuple ^ ot_inline_simple_threshold := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_inline_vars_threshold(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_inline_vars_threshold(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_inline_vars_threshold := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_inline_vars_threshold,
|
|
!OptTuple ^ ot_inline_vars_threshold := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_intermod_inline_simple_threshold(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_intermod_inline_simple_threshold(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_intermod_inline_simple_threshold := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_intermod_inline_simple_threshold,
|
|
!OptTuple ^ ot_intermod_inline_simple_threshold := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_from_ground_term_threshold(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_from_ground_term_threshold(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_from_ground_term_threshold := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_from_ground_term_threshold,
|
|
!OptTuple ^ ot_from_ground_term_threshold := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_opt_svcell_cv_store_cost(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_opt_svcell_cv_store_cost(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_opt_svcell_cv_store_cost := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_opt_svcell_cv_store_cost,
|
|
!OptTuple ^ ot_opt_svcell_cv_store_cost := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_opt_svcell_cv_load_cost(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_opt_svcell_cv_load_cost(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_opt_svcell_cv_load_cost := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_opt_svcell_cv_load_cost,
|
|
!OptTuple ^ ot_opt_svcell_cv_load_cost := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_opt_svcell_fv_store_cost(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_opt_svcell_fv_store_cost(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_opt_svcell_fv_store_cost := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_opt_svcell_fv_store_cost,
|
|
!OptTuple ^ ot_opt_svcell_fv_store_cost := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_opt_svcell_fv_load_cost(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_opt_svcell_fv_load_cost(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_opt_svcell_fv_load_cost := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_opt_svcell_fv_load_cost,
|
|
!OptTuple ^ ot_opt_svcell_fv_load_cost := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_opt_svcell_op_ratio(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_opt_svcell_op_ratio(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_opt_svcell_op_ratio := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_opt_svcell_op_ratio,
|
|
!OptTuple ^ ot_opt_svcell_op_ratio := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_opt_svcell_node_ratio(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_opt_svcell_node_ratio(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_opt_svcell_node_ratio := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_opt_svcell_node_ratio,
|
|
!OptTuple ^ ot_opt_svcell_node_ratio := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_opt_svcell_all_path_node_ratio(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_opt_svcell_all_path_node_ratio(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_opt_svcell_all_path_node_ratio := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_opt_svcell_all_path_node_ratio,
|
|
!OptTuple ^ ot_opt_svcell_all_path_node_ratio := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_higher_order_size_limit(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_higher_order_size_limit(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_higher_order_size_limit := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_higher_order_size_limit,
|
|
!OptTuple ^ ot_higher_order_size_limit := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_higher_order_arg_limit(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_higher_order_arg_limit(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_higher_order_arg_limit := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_higher_order_arg_limit,
|
|
!OptTuple ^ ot_higher_order_arg_limit := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_opt_unneeded_code_copy_limit(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_opt_unneeded_code_copy_limit(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_opt_unneeded_code_copy_limit := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_opt_unneeded_code_copy_limit,
|
|
!OptTuple ^ ot_opt_unneeded_code_copy_limit := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_deforestation_depth_limit(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_deforestation_depth_limit(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_deforestation_depth_limit := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_deforestation_depth_limit,
|
|
!OptTuple ^ ot_deforestation_depth_limit := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_deforestation_cost_factor(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_deforestation_cost_factor(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_deforestation_cost_factor := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_deforestation_cost_factor,
|
|
!OptTuple ^ ot_deforestation_cost_factor := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_deforestation_vars_threshold(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_deforestation_vars_threshold(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_deforestation_vars_threshold := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_deforestation_vars_threshold,
|
|
!OptTuple ^ ot_deforestation_vars_threshold := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_deforestation_size_threshold(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_deforestation_size_threshold(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_deforestation_size_threshold := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_deforestation_size_threshold,
|
|
!OptTuple ^ ot_deforestation_size_threshold := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_tuple_costs_ratio(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_tuple_costs_ratio(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_tuple_costs_ratio := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_tuple_costs_ratio,
|
|
!OptTuple ^ ot_tuple_costs_ratio := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_tuple_min_args(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_tuple_min_args(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_tuple_min_args := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_tuple_min_args,
|
|
!OptTuple ^ ot_tuple_min_args := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_dense_switch_req_density(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_dense_switch_req_density(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_dense_switch_req_density := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_dense_switch_req_density,
|
|
!OptTuple ^ ot_dense_switch_req_density := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_lookup_switch_req_density(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_lookup_switch_req_density(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_lookup_switch_req_density := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_lookup_switch_req_density,
|
|
!OptTuple ^ ot_lookup_switch_req_density := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_dense_switch_size(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_dense_switch_size(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_dense_switch_size := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_dense_switch_size,
|
|
!OptTuple ^ ot_dense_switch_size := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_lookup_switch_size(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_lookup_switch_size(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_lookup_switch_size := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_lookup_switch_size,
|
|
!OptTuple ^ ot_lookup_switch_size := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_string_trie_switch_size(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_string_trie_switch_size(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_string_trie_switch_size := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_string_trie_switch_size,
|
|
!OptTuple ^ ot_string_trie_switch_size := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_string_hash_switch_size(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_string_hash_switch_size(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_string_hash_switch_size := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_string_hash_switch_size,
|
|
!OptTuple ^ ot_string_hash_switch_size := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_string_binary_switch_size(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_string_binary_switch_size(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_string_binary_switch_size := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_string_binary_switch_size,
|
|
!OptTuple ^ ot_string_binary_switch_size := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_tag_switch_size(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_tag_switch_size(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_tag_switch_size := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_tag_switch_size,
|
|
!OptTuple ^ ot_tag_switch_size := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_try_switch_size(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_try_switch_size(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_try_switch_size := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_try_switch_size,
|
|
!OptTuple ^ ot_try_switch_size := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_binary_switch_size(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_binary_switch_size(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_binary_switch_size := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_binary_switch_size,
|
|
!OptTuple ^ ot_binary_switch_size := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_llds_local_var_access_threshold(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_llds_local_var_access_threshold(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_llds_local_var_access_threshold := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_llds_local_var_access_threshold,
|
|
!OptTuple ^ ot_llds_local_var_access_threshold := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_opt_repeat(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_opt_repeat(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_opt_repeat := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_opt_repeat,
|
|
!OptTuple ^ ot_opt_repeat := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_llds_layout_compression_limit(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_llds_layout_compression_limit(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_llds_layout_compression_limit := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_llds_layout_compression_limit,
|
|
!OptTuple ^ ot_llds_layout_compression_limit := int.max(OldN, N)
|
|
).
|
|
|
|
:- pred update_opt_tuple_int_procs_per_c_function(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_procs_per_c_function(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_procs_per_c_function := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_procs_per_c_function,
|
|
!OptTuple ^ ot_procs_per_c_function := int.max(OldN, N)
|
|
).
|
|
|
|
%---------------------------------------------------------------------------%
|
|
% vim: ft=mercury ts=4 sw=4 et
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- pred get_default_opt_level(option_table::in, int::out) is det.
|
|
|
|
get_default_opt_level(OptionTable, DefaultOptLevel) :-
|
|
% default_opt_level takes a "-O<n>" string for compatibility.
|
|
lookup_string_option(OptionTable, default_opt_level, Str0),
|
|
Str = string.strip(Str0),
|
|
( if
|
|
string.remove_prefix("-O", Str, Suffix),
|
|
string.to_int(string.lstrip(Suffix), Int)
|
|
then
|
|
DefaultOptLevel = Int
|
|
else
|
|
DefaultOptLevel = 2
|
|
).
|
|
|
|
:- pred set_opts_upto_level(option_table::in, int::in, int::in,
|
|
opt_tuple::in, opt_tuple::out,
|
|
maybe_seen_opt_level::in, maybe_seen_opt_level::out) is det.
|
|
|
|
set_opts_upto_level(OptionTable, Cur, Max,
|
|
!OptTuple, !MaybeSeenOptLevel) :-
|
|
( if
|
|
Cur =< Max,
|
|
opts_enabled_at_level(Cur, _Desc, LevelOptExpOptions)
|
|
then
|
|
UndocFunc = (func(doc_oo(O, _, _)) = O),
|
|
LevelOptOptions = list.map(UndocFunc, LevelOptExpOptions),
|
|
list.foldl2(update_opt_tuple(from_opt_level, OptionTable),
|
|
LevelOptOptions, !OptTuple, !MaybeSeenOptLevel),
|
|
set_opts_upto_level(OptionTable, Cur + 1, Max,
|
|
!OptTuple, !MaybeSeenOptLevel)
|
|
else
|
|
true
|
|
).
|
|
|
|
:- pred set_opts_for_space(opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
set_opts_for_space(!OptTuple) :-
|
|
UnneededCopyLimit = !.OptTuple ^ ot_opt_unneeded_code_copy_limit,
|
|
!OptTuple ^ ot_opt_unneeded_code_copy_limit :=
|
|
int.min(UnneededCopyLimit, 1),
|
|
!OptTuple ^ ot_opt_dead_procs := opt_dead_procs,
|
|
!OptTuple ^ ot_opt_labels := opt_labels,
|
|
!OptTuple ^ ot_opt_dup_instrs_llds := opt_dup_instrs_llds,
|
|
!OptTuple ^ ot_opt_dup_procs_llds := opt_dup_procs_llds,
|
|
!OptTuple ^ ot_opt_fulljumps := opt_fulljumps,
|
|
!OptTuple ^ ot_opt_llds_reassign := opt_llds_reassign,
|
|
!OptTuple ^ ot_inline_alloc := inline_alloc,
|
|
!OptTuple ^ ot_use_macro_for_redo_fail := use_macro_for_redo_fail,
|
|
!OptTuple ^ ot_opt_loop_invariants := do_not_opt_loop_invariants.
|
|
|
|
opts_enabled_at_level(0, [
|
|
"Aim to minimize overall compilation time."
|
|
], [
|
|
doc_oo(oo_use_llds_common_data(yes),
|
|
optopt_use_llds_common_data, bool(yes)),
|
|
doc_oo(oo_optimize_llds(yes), optopt_optimize_llds, bool(yes)),
|
|
doc_oo(oo_optimize_mlds(yes), optopt_optimize_mlds, bool(yes)),
|
|
doc_oo(oo_opt_repeat(1), optopt_repeat_opts, int(1)),
|
|
doc_oo(oo_peep_llds(yes), optopt_peep_llds, bool(yes)),
|
|
doc_oo(oo_peep_llds_mkword(yes), optopt_peep_llds_mkword, bool(yes)),
|
|
doc_oo(oo_peep_mlds(yes), optopt_peep_mlds, bool(yes)),
|
|
doc_oo(oo_use_static_ground_cells(yes),
|
|
optopt_use_static_ground_cells, bool(yes)),
|
|
doc_oo(oo_use_smart_indexing(yes), optopt_use_smart_indexing, bool(yes)),
|
|
doc_oo(oo_use_smart_indexing_atomic(yes),
|
|
optopt_use_smart_indexing_atomic, bool(yes)),
|
|
doc_oo(oo_use_smart_indexing_string(yes),
|
|
optopt_use_smart_indexing_string, bool(yes)),
|
|
doc_oo(oo_use_smart_indexing_tag(yes),
|
|
optopt_use_smart_indexing_tag, bool(yes)),
|
|
doc_oo(oo_use_smart_indexing_float(yes),
|
|
optopt_use_smart_indexing_float, bool(yes)),
|
|
doc_oo(oo_opt_jumps(yes), optopt_opt_jumps, bool(yes)),
|
|
doc_oo(oo_opt_labels(yes), optopt_opt_labels, bool(yes)),
|
|
doc_oo(oo_opt_dead_procs(yes), optopt_opt_dead_procs, bool(yes)),
|
|
doc_oo(oo_elim_excess_assigns(yes), optopt_elim_excess_assigns, bool(yes))
|
|
]).
|
|
opts_enabled_at_level(1, [
|
|
"Apply optimizations which are cheap and have a good payoff",
|
|
"while still keeping compilation time small."
|
|
], [
|
|
doc_oo(oo_use_local_vars_llds(yes), optopt_use_local_vars_llds, bool(yes)),
|
|
% XXX We want `gcc -O1'
|
|
doc_oo(oo_opt_c(yes), optopt_c_optimize, bool(yes)),
|
|
doc_oo(oo_opt_frames(yes), optopt_opt_frames, bool(yes)),
|
|
% We ignore oo_opt_delay_slot if have_delay_slot = no.
|
|
doc_oo(oo_opt_delay_slot(yes), optopt_opt_delay_slot, bool(yes)),
|
|
doc_oo(oo_opt_middle_rec_llds(yes), optopt_opt_middle_rec_llds, bool(yes)),
|
|
doc_oo(oo_emit_c_loops(yes), optopt_emit_c_loops, bool(yes)),
|
|
doc_oo(oo_opt_mlds_tailcalls(yes), optopt_opt_mlds_tailcalls, bool(yes))
|
|
]).
|
|
opts_enabled_at_level(2, [
|
|
"Apply optimizations which have a good payoff relative to their cost;",
|
|
"but include optimizations which are more costly than with -O1."
|
|
], [
|
|
doc_oo(oo_opt_fulljumps(yes), optopt_opt_fulljumps, bool(yes)),
|
|
doc_oo(oo_opt_repeat(3), optopt_repeat_opts, int(3)),
|
|
doc_oo(oo_opt_dup_instrs_llds(yes), optopt_opt_dup_instrs_llds, bool(yes)),
|
|
doc_oo(oo_opt_follow_code(yes), optopt_opt_follow_code, bool(yes)),
|
|
doc_oo(oo_prop_constants(yes), optopt_prop_constants, bool(yes)),
|
|
doc_oo(oo_inline_simple(yes), optopt_inline_simple, bool(yes)),
|
|
doc_oo(oo_inline_single_use(yes), optopt_inline_single_use, bool(yes)),
|
|
doc_oo(oo_inline_compound_threshold(10),
|
|
optopt_inline_compound_threshold, int(10)),
|
|
doc_oo(oo_opt_common_structs(yes), optopt_opt_common_structs, bool(yes)),
|
|
doc_oo(oo_spec_types_user_guided(yes),
|
|
optopt_spec_types_user_guided, bool(yes)),
|
|
doc_oo(oo_opt_simple_neg_llds(yes), optopt_opt_simple_neg_llds, bool(yes)),
|
|
doc_oo(oo_merge_code_after_switch(yes),
|
|
optopt_merge_code_after_switch, bool(yes)),
|
|
doc_oo(oo_opt_mlds_inits(yes), optopt_opt_mlds_inits, bool(yes)),
|
|
doc_oo(oo_split_switch_arms(yes), optopt_split_switch_arms, bool(yes))
|
|
]).
|
|
opts_enabled_at_level(3, [
|
|
"Apply optimizations which usually have a good payoff even if they",
|
|
"increase compilation time quite a bit."
|
|
], [
|
|
doc_oo(oo_opt_saved_vars_const(yes),
|
|
optopt_opt_saved_vars_const, bool(yes)),
|
|
doc_oo(oo_opt_unused_args(yes), optopt_opt_unused_args, bool(yes)),
|
|
doc_oo(oo_opt_higher_order(yes), optopt_opt_higher_order, bool(yes)),
|
|
doc_oo(oo_deforest(yes), optopt_deforest, bool(yes)),
|
|
doc_oo(oo_prop_constraints(yes), optopt_prop_constraints, bool(yes)),
|
|
doc_oo(oo_prop_local_constraints(yes),
|
|
optopt_prop_local_constraints, bool(yes)),
|
|
doc_oo(oo_opt_llds_reassign(yes), optopt_opt_llds_reassign, bool(yes)),
|
|
doc_oo(oo_opt_repeat(4), optopt_repeat_opts, int(4))
|
|
]).
|
|
opts_enabled_at_level(4, [
|
|
"Apply optimizations which may have some payoff even if they",
|
|
"increase compilation time quite a bit.",
|
|
"",
|
|
"Currently this enables the use of local variables",
|
|
"and increases the inlining thresholds."
|
|
], [
|
|
doc_oo(oo_inline_simple_threshold(8),
|
|
optopt_inline_simple_threshold, int(8)),
|
|
doc_oo(oo_inline_compound_threshold(20),
|
|
optopt_inline_compound_threshold, int(20)),
|
|
doc_oo(oo_higher_order_size_limit(30),
|
|
optopt_higher_order_size_limit, int(30))
|
|
]).
|
|
opts_enabled_at_level(5, [
|
|
"Apply optimizations which may have some payoff even if they",
|
|
"increase compilation time a lot.",
|
|
"",
|
|
"Currently this enables the search for construction unifications that",
|
|
"can be delayed past failing computations, allows more passes of the",
|
|
"low-level optimizations, and increases the inlining thresholds",
|
|
"still further. We also enable eliminate_local_vars only at",
|
|
"this level, because that pass is implemented pretty inefficiently."
|
|
], [
|
|
doc_oo(oo_opt_repeat(5), optopt_repeat_opts, int(5)),
|
|
doc_oo(oo_delay_constructs(yes), optopt_delay_constructs, bool(yes)),
|
|
doc_oo(oo_inline_compound_threshold(100),
|
|
optopt_inline_compound_threshold, int(100)),
|
|
doc_oo(oo_higher_order_size_limit(40),
|
|
optopt_higher_order_size_limit, int(40)),
|
|
doc_oo(oo_elim_local_vars_mlds(yes),
|
|
optopt_elim_local_vars_mlds, bool(yes)),
|
|
doc_oo(oo_opt_loop_invariants(yes), optopt_opt_loop_invariants, bool(yes))
|
|
]).
|
|
opts_enabled_at_level(6, [
|
|
"Apply optimizations which may have any payoff even if they",
|
|
"increase compilation time to completely unreasonable levels.",
|
|
"",
|
|
"Currently this just enables inlining of GC_malloc(), redo(), and fail()."
|
|
], [
|
|
doc_oo(oo_inline_alloc(yes), optopt_inline_alloc, bool(yes)),
|
|
doc_oo(oo_use_macro_for_redo_fail(yes),
|
|
optopt_use_macro_for_redo_fail, bool(yes))
|
|
]).
|
|
|
|
% Many optimization options are not enabled at any level.
|
|
% We stopped keeping track of them a long time ago.
|
|
% While we did keep track, we listed the reasons for not automatically
|
|
% enabling the following optimizations.
|
|
%
|
|
% checked_nondet_tailcalls:
|
|
% This is deliberate, because the transformation might make
|
|
% code run slower.
|
|
%
|
|
% unneeded_code:
|
|
% Because it can cause slowdowns at high optimization levels;
|
|
% cause unknown.
|
|
%
|
|
% introduce_accumulators:
|
|
% Disabled until a bug in extras/trailed_update/var.m is resolved.
|
|
%
|
|
% optimize_constructor_last_call:
|
|
% Not a speedup in general.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
:- end_module libs.optimization_options.
|
|
%---------------------------------------------------------------------------%
|