mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 17:33:38 +00:00
3813 lines
122 KiB
Mathematica
3813 lines
122 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ft=mercury ts=4 sw=4 et
|
|
%---------------------------------------------------------------------------%
|
|
% Copyright (C) 2020 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 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_inline_linear_tail_rec_sccs
|
|
---> inline_linear_tail_rec_sccs
|
|
; do_not_inline_linear_tail_rec_sccs.
|
|
:- 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
|
|
---> opt_middle_rec
|
|
; do_not_opt_middle_rec.
|
|
:- type maybe_opt_simple_neg
|
|
---> opt_simple_neg
|
|
; do_not_opt_simple_neg.
|
|
:- 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_initializations
|
|
---> opt_initializations
|
|
; do_not_opt_initializations.
|
|
:- type maybe_elim_unused_mlds_assigns
|
|
---> elim_unused_mlds_assigns
|
|
; do_not_elim_unused_mlds_assigns.
|
|
:- type maybe_elim_local_vars
|
|
---> elim_local_vars
|
|
; do_not_elim_local_vars.
|
|
:- type maybe_gen_trail_ops_inline
|
|
---> gen_trail_ops_inline
|
|
; do_not_gen_trail_ops_inline.
|
|
:- type maybe_use_common_data
|
|
---> use_common_data
|
|
; do_not_use_common_data.
|
|
:- type maybe_use_common_layout_data
|
|
---> use_common_layout_data
|
|
; do_not_use_common_layout_data.
|
|
:- type maybe_optimize
|
|
---> optimize
|
|
; do_not_optimize.
|
|
:- type maybe_opt_peep
|
|
---> opt_peep
|
|
; do_not_opt_peep.
|
|
:- type maybe_opt_peep_mkword
|
|
---> opt_peep_mkword
|
|
; do_not_opt_peep_mkword.
|
|
:- type maybe_opt_jumps
|
|
---> opt_jumps
|
|
; do_not_opt_jumps.
|
|
:- type maybe_opt_fulljumps
|
|
---> opt_fulljumps
|
|
; do_not_opt_fulljumps.
|
|
:- type maybe_pessimize_tailcalls
|
|
---> pessimize_tailcalls
|
|
; do_not_pessimize_tailcalls.
|
|
:- type maybe_opt_checked_nondet_tailcalls
|
|
---> opt_checked_nondet_tailcalls
|
|
; do_not_opt_checked_nondet_tailcalls.
|
|
:- type maybe_use_local_vars
|
|
---> use_local_vars
|
|
; do_not_use_local_vars.
|
|
:- type maybe_standardize_labels
|
|
---> standardize_labels
|
|
; do_not_standardize_labels.
|
|
:- type maybe_opt_labels
|
|
---> opt_labels
|
|
; do_not_opt_labels.
|
|
:- type maybe_opt_dups
|
|
---> opt_dups
|
|
; do_not_opt_dups.
|
|
:- type maybe_opt_proc_dups
|
|
---> opt_proc_dups
|
|
; do_not_opt_proc_dups.
|
|
:- 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_reassign
|
|
---> opt_reassign
|
|
; do_not_opt_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_inline_linear_tail_rec_sccs(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(bool)
|
|
; oo_opt_simple_neg(bool)
|
|
; oo_allow_hijacks(bool)
|
|
; oo_opt_mlds_tailcalls(bool)
|
|
; oo_opt_initializations(bool)
|
|
; oo_elim_unused_mlds_assigns(bool)
|
|
; oo_elim_local_vars(bool)
|
|
; oo_gen_trail_ops_inline(bool)
|
|
; oo_use_common_data(bool)
|
|
; oo_use_common_layout_data(bool)
|
|
; oo_optimize(bool)
|
|
; oo_opt_peep(bool)
|
|
; oo_opt_peep_mkword(bool)
|
|
; oo_opt_jumps(bool)
|
|
; oo_opt_fulljumps(bool)
|
|
; oo_pessimize_tailcalls(bool)
|
|
; oo_opt_checked_nondet_tailcalls(bool)
|
|
; oo_use_local_vars(bool)
|
|
; oo_standardize_labels(bool)
|
|
; oo_opt_labels(bool)
|
|
; oo_opt_dups(bool)
|
|
; oo_opt_proc_dups(bool)
|
|
; oo_opt_frames(bool)
|
|
; oo_opt_delay_slot(bool)
|
|
; oo_opt_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_inline_linear_tail_rec_sccs_max_extra(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_local_var_access_threshold(int)
|
|
; oo_opt_repeat(int)
|
|
; oo_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_inline_linear_tail_rec_sccs :: maybe_inline_linear_tail_rec_sccs,
|
|
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 :: maybe_opt_middle_rec,
|
|
ot_opt_simple_neg :: maybe_opt_simple_neg,
|
|
ot_allow_hijacks :: maybe_allow_hijacks,
|
|
ot_opt_mlds_tailcalls :: maybe_opt_mlds_tailcalls,
|
|
ot_opt_initializations :: maybe_opt_initializations,
|
|
ot_elim_unused_mlds_assigns :: maybe_elim_unused_mlds_assigns,
|
|
ot_elim_local_vars :: maybe_elim_local_vars,
|
|
ot_gen_trail_ops_inline :: maybe_gen_trail_ops_inline,
|
|
ot_use_common_data :: maybe_use_common_data,
|
|
ot_use_common_layout_data :: maybe_use_common_layout_data,
|
|
ot_optimize :: maybe_optimize,
|
|
ot_opt_peep :: maybe_opt_peep,
|
|
ot_opt_peep_mkword :: maybe_opt_peep_mkword,
|
|
ot_opt_jumps :: maybe_opt_jumps,
|
|
ot_opt_fulljumps :: maybe_opt_fulljumps,
|
|
ot_pessimize_tailcalls :: maybe_pessimize_tailcalls,
|
|
ot_opt_checked_nondet_tailcalls :: maybe_opt_checked_nondet_tailcalls,
|
|
ot_use_local_vars :: maybe_use_local_vars,
|
|
ot_standardize_labels :: maybe_standardize_labels,
|
|
ot_opt_labels :: maybe_opt_labels,
|
|
ot_opt_dups :: maybe_opt_dups,
|
|
ot_opt_proc_dups :: maybe_opt_proc_dups,
|
|
ot_opt_frames :: maybe_opt_frames,
|
|
ot_opt_delay_slot :: maybe_opt_delay_slot,
|
|
ot_opt_reassign :: maybe_opt_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_inline_linear_tail_rec_sccs_max_extra :: 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_local_var_access_threshold :: int,
|
|
ot_opt_repeat :: int,
|
|
ot_layout_compression_limit :: int,
|
|
ot_procs_per_c_function :: int,
|
|
ot_tuple_trace_counts_file :: string
|
|
).
|
|
|
|
:- pred process_optimization_options(option_table::in,
|
|
list(optimization_option)::in, opt_tuple::out) is det.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- implementation.
|
|
|
|
:- import_module getopt.
|
|
:- import_module int.
|
|
:- import_module map.
|
|
:- import_module string.
|
|
|
|
%---------------------%
|
|
|
|
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,
|
|
do_not_inline_linear_tail_rec_sccs,
|
|
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,
|
|
use_smart_indexing_atomic,
|
|
use_smart_indexing_string,
|
|
use_smart_indexing_tag,
|
|
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,
|
|
do_not_opt_simple_neg,
|
|
allow_hijacks,
|
|
do_not_opt_mlds_tailcalls,
|
|
do_not_opt_initializations,
|
|
elim_unused_mlds_assigns,
|
|
do_not_elim_local_vars,
|
|
gen_trail_ops_inline,
|
|
do_not_use_common_data,
|
|
use_common_layout_data,
|
|
do_not_optimize,
|
|
do_not_opt_peep,
|
|
do_not_opt_peep_mkword,
|
|
do_not_opt_jumps,
|
|
do_not_opt_fulljumps,
|
|
do_not_pessimize_tailcalls,
|
|
do_not_opt_checked_nondet_tailcalls,
|
|
do_not_use_local_vars,
|
|
do_not_standardize_labels,
|
|
do_not_opt_labels,
|
|
do_not_opt_dups,
|
|
do_not_opt_proc_dups,
|
|
do_not_opt_frames,
|
|
do_not_opt_delay_slot,
|
|
do_not_opt_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,
|
|
0,
|
|
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_inline_linear_tail_rec_sccs(Bool),
|
|
update_opt_tuple_bool_inline_linear_tail_rec_sccs(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(Bool),
|
|
update_opt_tuple_bool_opt_middle_rec(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_simple_neg(Bool),
|
|
update_opt_tuple_bool_opt_simple_neg(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_initializations(Bool),
|
|
update_opt_tuple_bool_opt_initializations(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_elim_unused_mlds_assigns(Bool),
|
|
update_opt_tuple_bool_elim_unused_mlds_assigns(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_elim_local_vars(Bool),
|
|
update_opt_tuple_bool_elim_local_vars(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_gen_trail_ops_inline(Bool),
|
|
update_opt_tuple_bool_gen_trail_ops_inline(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_common_data(Bool),
|
|
update_opt_tuple_bool_use_common_data(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_use_common_layout_data(Bool),
|
|
update_opt_tuple_bool_use_common_layout_data(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_optimize(Bool),
|
|
update_opt_tuple_bool_optimize(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_peep(Bool),
|
|
update_opt_tuple_bool_opt_peep(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_peep_mkword(Bool),
|
|
update_opt_tuple_bool_opt_peep_mkword(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_tailcalls(Bool),
|
|
update_opt_tuple_bool_pessimize_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(Bool),
|
|
update_opt_tuple_bool_use_local_vars(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_dups(Bool),
|
|
update_opt_tuple_bool_opt_dups(Bool, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_proc_dups(Bool),
|
|
update_opt_tuple_bool_opt_proc_dups(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_reassign(Bool),
|
|
update_opt_tuple_bool_opt_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_inline_linear_tail_rec_sccs_max_extra(N),
|
|
update_opt_tuple_int_inline_linear_tail_rec_sccs_max_extra(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_local_var_access_threshold(N),
|
|
update_opt_tuple_int_local_var_access_threshold(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_opt_repeat(N),
|
|
update_opt_tuple_int_opt_repeat(FromOptLevel, N, !OptTuple)
|
|
;
|
|
OptOption = oo_layout_compression_limit(N),
|
|
update_opt_tuple_int_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_inline_linear_tail_rec_sccs(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_inline_linear_tail_rec_sccs(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_inline_linear_tail_rec_sccs,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_inline_linear_tail_rec_sccs,
|
|
!OptTuple ^ ot_inline_linear_tail_rec_sccs := inline_linear_tail_rec_sccs
|
|
;
|
|
OldValue = inline_linear_tail_rec_sccs
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_inline_linear_tail_rec_sccs
|
|
;
|
|
OldValue = inline_linear_tail_rec_sccs,
|
|
!OptTuple ^ ot_inline_linear_tail_rec_sccs := do_not_inline_linear_tail_rec_sccs
|
|
)
|
|
).
|
|
|
|
:- 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(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_middle_rec(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_middle_rec,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_middle_rec,
|
|
!OptTuple ^ ot_opt_middle_rec := opt_middle_rec
|
|
;
|
|
OldValue = opt_middle_rec
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_middle_rec
|
|
;
|
|
OldValue = opt_middle_rec,
|
|
!OptTuple ^ ot_opt_middle_rec := do_not_opt_middle_rec
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_simple_neg(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_simple_neg(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_simple_neg,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_simple_neg,
|
|
!OptTuple ^ ot_opt_simple_neg := opt_simple_neg
|
|
;
|
|
OldValue = opt_simple_neg
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_simple_neg
|
|
;
|
|
OldValue = opt_simple_neg,
|
|
!OptTuple ^ ot_opt_simple_neg := do_not_opt_simple_neg
|
|
)
|
|
).
|
|
|
|
:- 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_initializations(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_initializations(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_initializations,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_initializations,
|
|
!OptTuple ^ ot_opt_initializations := opt_initializations
|
|
;
|
|
OldValue = opt_initializations
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_initializations
|
|
;
|
|
OldValue = opt_initializations,
|
|
!OptTuple ^ ot_opt_initializations := do_not_opt_initializations
|
|
)
|
|
).
|
|
|
|
:- 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(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_elim_local_vars(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_elim_local_vars,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_elim_local_vars,
|
|
!OptTuple ^ ot_elim_local_vars := elim_local_vars
|
|
;
|
|
OldValue = elim_local_vars
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_elim_local_vars
|
|
;
|
|
OldValue = elim_local_vars,
|
|
!OptTuple ^ ot_elim_local_vars := do_not_elim_local_vars
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_gen_trail_ops_inline(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_gen_trail_ops_inline(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_gen_trail_ops_inline,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_gen_trail_ops_inline,
|
|
!OptTuple ^ ot_gen_trail_ops_inline := gen_trail_ops_inline
|
|
;
|
|
OldValue = gen_trail_ops_inline
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_gen_trail_ops_inline
|
|
;
|
|
OldValue = gen_trail_ops_inline,
|
|
!OptTuple ^ ot_gen_trail_ops_inline := do_not_gen_trail_ops_inline
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_common_data(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_common_data(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_common_data,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_common_data,
|
|
!OptTuple ^ ot_use_common_data := use_common_data
|
|
;
|
|
OldValue = use_common_data
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_common_data
|
|
;
|
|
OldValue = use_common_data,
|
|
!OptTuple ^ ot_use_common_data := do_not_use_common_data
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_use_common_layout_data(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_common_layout_data(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_common_layout_data,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_common_layout_data,
|
|
!OptTuple ^ ot_use_common_layout_data := use_common_layout_data
|
|
;
|
|
OldValue = use_common_layout_data
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_common_layout_data
|
|
;
|
|
OldValue = use_common_layout_data,
|
|
!OptTuple ^ ot_use_common_layout_data := do_not_use_common_layout_data
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_optimize(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_optimize(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_optimize,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_optimize,
|
|
!OptTuple ^ ot_optimize := optimize
|
|
;
|
|
OldValue = optimize
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_optimize
|
|
;
|
|
OldValue = optimize,
|
|
!OptTuple ^ ot_optimize := do_not_optimize
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_peep(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_peep(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_peep,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_peep,
|
|
!OptTuple ^ ot_opt_peep := opt_peep
|
|
;
|
|
OldValue = opt_peep
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_peep
|
|
;
|
|
OldValue = opt_peep,
|
|
!OptTuple ^ ot_opt_peep := do_not_opt_peep
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_peep_mkword(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_peep_mkword(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_peep_mkword,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_peep_mkword,
|
|
!OptTuple ^ ot_opt_peep_mkword := opt_peep_mkword
|
|
;
|
|
OldValue = opt_peep_mkword
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_peep_mkword
|
|
;
|
|
OldValue = opt_peep_mkword,
|
|
!OptTuple ^ ot_opt_peep_mkword := do_not_opt_peep_mkword
|
|
)
|
|
).
|
|
|
|
:- 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_tailcalls(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_pessimize_tailcalls(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_pessimize_tailcalls,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_pessimize_tailcalls,
|
|
!OptTuple ^ ot_pessimize_tailcalls := pessimize_tailcalls
|
|
;
|
|
OldValue = pessimize_tailcalls
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_pessimize_tailcalls
|
|
;
|
|
OldValue = pessimize_tailcalls,
|
|
!OptTuple ^ ot_pessimize_tailcalls := do_not_pessimize_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(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_use_local_vars(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_use_local_vars,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_use_local_vars,
|
|
!OptTuple ^ ot_use_local_vars := use_local_vars
|
|
;
|
|
OldValue = use_local_vars
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_use_local_vars
|
|
;
|
|
OldValue = use_local_vars,
|
|
!OptTuple ^ ot_use_local_vars := do_not_use_local_vars
|
|
)
|
|
).
|
|
|
|
:- 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_dups(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_dups(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_dups,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_dups,
|
|
!OptTuple ^ ot_opt_dups := opt_dups
|
|
;
|
|
OldValue = opt_dups
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_dups
|
|
;
|
|
OldValue = opt_dups,
|
|
!OptTuple ^ ot_opt_dups := do_not_opt_dups
|
|
)
|
|
).
|
|
|
|
:- pred update_opt_tuple_bool_opt_proc_dups(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_proc_dups(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_proc_dups,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_proc_dups,
|
|
!OptTuple ^ ot_opt_proc_dups := opt_proc_dups
|
|
;
|
|
OldValue = opt_proc_dups
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_proc_dups
|
|
;
|
|
OldValue = opt_proc_dups,
|
|
!OptTuple ^ ot_opt_proc_dups := do_not_opt_proc_dups
|
|
)
|
|
).
|
|
|
|
:- 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_reassign(bool::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_bool_opt_reassign(Bool, !OptTuple) :-
|
|
OldValue = !.OptTuple ^ ot_opt_reassign,
|
|
( if
|
|
Bool = yes
|
|
then
|
|
(
|
|
OldValue = do_not_opt_reassign,
|
|
!OptTuple ^ ot_opt_reassign := opt_reassign
|
|
;
|
|
OldValue = opt_reassign
|
|
)
|
|
else
|
|
(
|
|
OldValue = do_not_opt_reassign
|
|
;
|
|
OldValue = opt_reassign,
|
|
!OptTuple ^ ot_opt_reassign := do_not_opt_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_inline_linear_tail_rec_sccs_max_extra(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_inline_linear_tail_rec_sccs_max_extra(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_inline_linear_tail_rec_sccs_max_extra := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_inline_linear_tail_rec_sccs_max_extra,
|
|
!OptTuple ^ ot_inline_linear_tail_rec_sccs_max_extra := 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_local_var_access_threshold(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_local_var_access_threshold(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_local_var_access_threshold := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_local_var_access_threshold,
|
|
!OptTuple ^ ot_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_layout_compression_limit(
|
|
maybe_from_opt_level::in, int::in,
|
|
opt_tuple::in, opt_tuple::out) is det.
|
|
|
|
update_opt_tuple_int_layout_compression_limit(FromOptLevel, N, !OptTuple) :-
|
|
(
|
|
FromOptLevel = not_from_opt_level,
|
|
!OptTuple ^ ot_layout_compression_limit := N
|
|
;
|
|
FromOptLevel = from_opt_level,
|
|
OldN = !.OptTuple ^ ot_layout_compression_limit,
|
|
!OptTuple ^ ot_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, LevelOptOptions)
|
|
then
|
|
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_dups := opt_dups,
|
|
!OptTuple ^ ot_opt_proc_dups := opt_proc_dups,
|
|
!OptTuple ^ ot_opt_fulljumps := opt_fulljumps,
|
|
!OptTuple ^ ot_opt_reassign := opt_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.
|
|
|
|
:- pred opts_enabled_at_level(int::in, list(optimization_option)::out)
|
|
is semidet.
|
|
|
|
opts_enabled_at_level(0, [
|
|
% Optimization level 0: aim to minimize overall compilation time.
|
|
oo_use_common_data(yes),
|
|
oo_optimize(yes),
|
|
oo_opt_repeat(1),
|
|
oo_opt_peep(yes),
|
|
oo_opt_peep_mkword(yes),
|
|
oo_use_static_ground_cells(yes),
|
|
oo_use_smart_indexing(yes),
|
|
oo_opt_jumps(yes),
|
|
oo_opt_labels(yes),
|
|
oo_opt_dead_procs(yes),
|
|
oo_elim_excess_assigns(yes)
|
|
]).
|
|
opts_enabled_at_level(1, [
|
|
% Optimization level 1: apply optimizations which are cheap and
|
|
% have a good payoff while still keeping compilation time small.
|
|
oo_use_local_vars(yes),
|
|
oo_opt_c(yes), % XXX We want `gcc -O1'
|
|
oo_opt_frames(yes),
|
|
% We ignore oo_opt_delay_slot if have_delay_slot = no.
|
|
oo_opt_delay_slot(yes),
|
|
oo_opt_middle_rec(yes),
|
|
oo_emit_c_loops(yes),
|
|
oo_opt_mlds_tailcalls(yes)
|
|
]).
|
|
opts_enabled_at_level(2, [
|
|
% Optimization level 2: apply optimizations which have a good payoff
|
|
% relative to their cost; but include optimizations which are
|
|
% more costly than with -O1.
|
|
oo_opt_fulljumps(yes),
|
|
oo_opt_repeat(3),
|
|
oo_opt_dups(yes),
|
|
oo_opt_follow_code(yes),
|
|
oo_prop_constants(yes),
|
|
oo_inline_simple(yes),
|
|
oo_inline_single_use(yes),
|
|
oo_inline_compound_threshold(10),
|
|
oo_opt_common_structs(yes),
|
|
oo_spec_types_user_guided(yes),
|
|
oo_opt_simple_neg(yes),
|
|
oo_merge_code_after_switch(yes),
|
|
oo_opt_initializations(yes),
|
|
oo_split_switch_arms(yes)
|
|
]).
|
|
opts_enabled_at_level(3, [
|
|
% Optimization level 3: apply optimizations which usually have a good
|
|
% payoff even if they increase compilation time quite a bit.
|
|
oo_opt_saved_vars_const(yes),
|
|
oo_opt_unused_args(yes),
|
|
oo_opt_higher_order(yes),
|
|
oo_deforest(yes),
|
|
oo_prop_constraints(yes),
|
|
oo_prop_local_constraints(yes),
|
|
oo_opt_reassign(yes),
|
|
oo_opt_repeat(4)
|
|
]).
|
|
opts_enabled_at_level(4, [
|
|
% Optimization 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.
|
|
oo_inline_simple_threshold(8),
|
|
oo_inline_compound_threshold(20),
|
|
oo_higher_order_size_limit(30)
|
|
]).
|
|
opts_enabled_at_level(5, [
|
|
% Optimization 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.
|
|
oo_opt_repeat(5),
|
|
oo_delay_constructs(yes),
|
|
oo_inline_compound_threshold(100),
|
|
oo_higher_order_size_limit(40),
|
|
oo_elim_local_vars(yes),
|
|
oo_opt_loop_invariants(yes)
|
|
]).
|
|
opts_enabled_at_level(6, [
|
|
% Optimization level 6: apply optimizations which may have any payoff
|
|
% even if they increase compilation time to completely unreasonable
|
|
% levels.
|
|
%
|
|
% Currently this sets `use_just_one_c_func', which causes the compiler
|
|
% to put everything in the one C function and treat calls to predicates
|
|
% in the same module as local. We also enable inlining of GC_malloc(),
|
|
% redo(), and fail().
|
|
oo_use_just_one_c_func(yes),
|
|
oo_inline_alloc(yes),
|
|
oo_use_macro_for_redo_fail(yes)
|
|
]).
|
|
|
|
% The following optimization options are not enabled at any level:
|
|
% XXX This comment is old. Since then, we have added many optimizations
|
|
% that are not enabled automatically at any level :-(
|
|
%
|
|
% 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
|
|
%
|
|
% type_specialization:
|
|
% XXX why not?
|
|
%
|
|
% introduce_accumulators:
|
|
% XXX 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.
|
|
%---------------------------------------------------------------------------%
|