[m-rev.] for review: use trail segments by default in trailing grades
Julien Fischer
jfischer at opturion.com
Sun Feb 16 14:24:22 AEDT 2020
On Sun, 16 Feb 2020, Zoltan Somogyi wrote:
>
> 2020-02-16 14:02 GMT+11:00 Julien Fischer<jfischer at opturion.com>:
>> This change
>> removes non-developer support for fixed sized trails
>
> I can't review the rest of this change without knowing what
> this phrase is meant to say. I *thought* it meant that there
> will still be a way to specify a grade that uses the nonsegmented
> trails, but the rest of the log message seems to contradict that.
> So what "developer support" do you envisage for fixed size trails
> after this change?
Compiling the system with:
EXTRA_CFLAGS = -DMR_USE_FIXED_SIZE_TRAIL
> And could I ask you to send me the log and the diff as attached
> files? I find it much more convenient to edit them for a reply in vim
> than in a webmail editor.
Attached to this mail.
Julien.
-------------- next part --------------
Use trail segments by default in trailing grades.
We currently support two variants of trailing grades, those that use a
fixed-size trail (.tr) and those that use trail segments (.trseg). This change
removes non-developer support for fixed sized trails and renames the .trseg
grade component to .tr. The .trseg grade now acts a synonym for .tr; we will
eventually delete it.
runtime/mercury_conf_param.h:
Delete the MR_TRAIL_SEGMENTS macro; its now implied by MR_USE_TRAIL.
Add a new macro, MR_USE_FIXED_SIZE_TRAIL, that developers can use
to disable trail segments (should the need for doing that arise).
runtime/mercury_grade.h:
Bump the binary compatibility number; old .tr grades are not compatible
with the new ones.
runtime/mercury_trail.[ch]:
runtime/mercury_context.h:
Enable trail segments by default, only disabling the if
MR_USE_FIXED_SIZE_TRAIL is enabled.
runtime/mercury_wrapper.c:
trace/mercury_trace_cmd_developer.c:
Conform to the above changes.
compiler/compile_target_code.m:
Do not pass options for trail segments to the C compiler.
compiler/compute_grade.m:
Treat trseg as a synonym for tr.
compiler/options.m:
Deprecate --trail-segments.
grade_lib/grade_spec.m:
grade_lib/grade_string.m:
grade_lib/grade_structure.m:
grade_lib/grade_vars.m:
grade_lib/try_all_grade_structs.m:
grade_lib/var_value_names.m:
Remove the trseg component.
scripts/canonical_grade.sh-subr:
scripts/init_grade_options.sh-subr:
scripts/mgnuc.in:
scripts/parse_grade_options.sh-subr:
Remove support for the --trail-segments option.
doc/user_guide.texi:
Update the documentation for the --trail-segments.
Comment out the documentation of the --trail-size and --trail-size-kwords
runtime options; they are no longer useful to non-developers.
NEWS:
Announce this change.
-------------- next part --------------
diff --git a/NEWS b/NEWS
index 1a7ed40..2db5839 100644
--- a/NEWS
+++ b/NEWS
@@ -90,6 +90,26 @@ Changes to the Mercury standard library
- pred `string_hash/2`
- pred `generic_hash/2`
+Changes to the Mercury compiler
+-------------------------------
+
+### Changes to code model options
+
+* `--trail-segments`
+
+ This option is deprecated and no longer has any effect. Trail segments
+ are now always use in grades that support trailing (see below).
+
+Changes to the Mercury implementation
+-------------------------------------
+
+* In grades that support trailing, trail segments are now used by default.
+ It is no longer possible to use a fixed size trail. The `trseg` grade
+ component is deprecated and now acts as a synonym for the `tr` component.
+
+ As a consequence of this, the `--trail-size` and `--trail-size-kwords`
+ runtime options are deprecated and no longer have any effect.
+
NEWS for Mercury 20.01.1
========================
diff --git a/compiler/compile_target_code.m b/compiler/compile_target_code.m
index 4585f36..dc073bc 100644
--- a/compiler/compile_target_code.m
+++ b/compiler/compile_target_code.m
@@ -710,19 +710,10 @@ gather_grade_defines(Globals, GradeDefines) :-
globals.lookup_bool_option(Globals, use_trail, UseTrail),
(
UseTrail = yes,
- UseTrailOpt = "-DMR_USE_TRAIL ",
- globals.lookup_bool_option(Globals, trail_segments, TrailSegments),
- (
- TrailSegments = yes,
- TrailSegOpt = "-DMR_TRAIL_SEGMENTS "
- ;
- TrailSegments = no,
- TrailSegOpt = ""
- )
+ UseTrailOpt = "-DMR_USE_TRAIL "
;
UseTrail = no,
- UseTrailOpt = "",
- TrailSegOpt = ""
+ UseTrailOpt = ""
),
globals.lookup_bool_option(Globals, use_minimal_model_stack_copy,
MinimalModelStackCopy),
@@ -821,7 +812,6 @@ gather_grade_defines(Globals, GradeDefines) :-
SourceDebugOpt,
ExecTraceOpt,
UseTrailOpt,
- TrailSegOpt,
MinimalModelOpt,
PregeneratedDistOpt,
SinglePrecFloatOpt,
diff --git a/compiler/compute_grade.m b/compiler/compute_grade.m
index d63e56c..bedeec6 100644
--- a/compiler/compute_grade.m
+++ b/compiler/compute_grade.m
@@ -190,10 +190,10 @@ check_grade_component_compatibility(Globals, Target, GC_Method, !Specs) :-
; Target = target_csharp
; Target = target_erlang
),
- Trailpec =
+ TrailSpec =
[words("Trailing is incompatible with"),
words("target language"), words(TargetStr), suffix("."), nl],
- add_error(phase_options, Trailpec, !Specs)
+ add_error(phase_options, TrailSpec, !Specs)
;
Target = target_c
)
@@ -654,9 +654,11 @@ grade_component_table("tsc", comp_term_size,
% Trailing components.
grade_component_table("tr", comp_trail,
- [use_trail - bool(yes), trail_segments - bool(no)], no, yes).
-grade_component_table("trseg", comp_trail,
[use_trail - bool(yes), trail_segments - bool(yes)], no, yes).
+ % NOTE: we do no include `.trseg' in grades strings because it
+ % it is just a synonym for `.tr'.
+grade_component_table("trseg", comp_trail,
+ [use_trail - bool(yes), trail_segments - bool(yes)], no, no).
% Minimal model tabling components.
% NOTE: we do not include `.mm' and `.dmm' in grade strings
diff --git a/compiler/options.m b/compiler/options.m
index d2cb6cd..b31009f 100644
--- a/compiler/options.m
+++ b/compiler/options.m
@@ -4939,9 +4939,8 @@ options_help_compilation_model -->
"\tThis option is not yet supported for the C#, Java",
"\tor Erlang back-ends.",
"--trail-segments\t\t\t(grade modifier: `.trseg')",
- "\tAs above, but use a dynamically sized trail that is composed",
- "\tof small segments. This can help to avoid trail exhaustion",
- "\tat the cost of increased execution time.",
+ "\tThis option is deprecated as trail segments are now used by",
+ "\tdefault. The `.trseg' grade modifier is a synonym for `.tr'.",
"--parallel\t\t(grade modifier: `.par')",
"\tEnable parallel execution support for the low-level C grades.",
"\tEnable concurrency (via pthreads) for the high-level C grades.",
diff --git a/doc/user_guide.texi b/doc/user_guide.texi
index 6d2468f..55637dd 100644
--- a/doc/user_guide.texi
+++ b/doc/user_guide.texi
@@ -7973,7 +7973,8 @@ The set of aspects and their alternatives are:
(the default is no profiling).
@item Whether to enable the trail:
- at samp{tr} and @samp{trseg} (the default is no trailing).
+ at samp{tr} (the default is no trailing). @samp{trseg} is currently
+accepted as synonym for @samp{tr}.
@item Whether to use single-precision representation of floating point values:
@samp{spf} (the default is to use double-precision floats)
@@ -8470,10 +8471,8 @@ This option is only supported by the C back-ends.
@cindex Constraint solving
@cindex Backtrackable destructive update
@cindex Destructive update, backtrackable
-Enable the use of a dynamically sized trail that is composed of small segments.
-This can help to avoid trail exhaustion at the cost of increased execution
-time.
-This option is only supported by the C back-ends.
+This option is deprecated as trail segments are now used by default.
+The @samp{.trseg} grade modifier is a synonym for @samp{.tr}.
@sp 1
@item @code{--parallel}
@@ -10701,27 +10700,30 @@ Sets the size of the solutions heap to @var{size} kilobytes.
Sets the size of the solutions heap to @var{size} kilobytes
multiplied by the word size in bytes.
- at sp 1
- at item --trail-size @var{size}
- at findex --trail-size (runtime option)
- at cindex Trail size
-Sets the size of the trail to @var{size} kilobytes.
-This option is ignored in grades that use trail segments.
+ at c These two options are commented out as we only support a fixed size tail
+ at c for developers.
+ at c
+ at c @sp 1
+ at c @item --trail-size @var{size}
+ at c @findex --trail-size (runtime option)
+ at c @cindex Trail size
+ at c Sets the size of the trail to @var{size} kilobytes.
+ at c This option is ignored in grades that use trail segments.
- at sp 1
- at item --trail-size-kwords @var{size}
- at findex --trail-size-kwords (runtime option)
- at cindex Trail size
-Sets the size of the trail to @var{size} kilobytes
-multiplied by the word size in bytes.
-This option is ignored in grades that use trail segments.
+ at c @sp 1
+ at c @item --trail-size-kwords @var{size}
+ at c @findex --trail-size-kwords (runtime option)
+ at c @cindex Trail size
+ at c Sets the size of the trail to @var{size} kilobytes
+ at c multiplied by the word size in bytes.
+ at c This option is ignored in grades that use trail segments.
@sp 1
@item --trail-segment-size @var{size}
@findex --trail-segment-size (runtime option)
@cindex Trail size
Sets the size of each trail segment to be @var{size} kilobytes.
-This option is ignored in grades that do not use trail segments.
+This option is ignored in grades that do not use a trail.
@sp 1
@item --trail-segment-size-kwords @var{size}
@@ -10729,7 +10731,7 @@ This option is ignored in grades that do not use trail segments.
@cindex Trail size
Set the size of each trail segment to be @var{size} kilobytes multiplied by the
words size in bytes.
-This option is ignored in grades that do not use trail segments.
+This option is ignored in grades that do not use trail.
@sp 1
@item --genstack-size @var{size}
diff --git a/grade_lib/grade_spec.m b/grade_lib/grade_spec.m
index 99706bb..47c6c94 100644
--- a/grade_lib/grade_spec.m
+++ b/grade_lib/grade_spec.m
@@ -46,7 +46,6 @@
; svar_low_tag_bits_use
; svar_stack_len
; svar_trail
- ; svar_trail_segments
; svar_minmodel
; svar_thread_safe
; svar_gc
@@ -138,9 +137,6 @@
; svalue_trail_no
; svalue_trail_yes
- ; svalue_trail_segments_no
- ; svalue_trail_segments_yes
-
; svalue_minmodel_no
; svalue_minmodel_stack_copy
; svalue_minmodel_stack_copy_debug
@@ -363,8 +359,6 @@ init_solver_var_specs(SpecsVersion) = Specs :-
StackLenPrefOrder),
solver_var_spec(svar_trail,
[svalue_trail_no, svalue_trail_yes]),
- solver_var_spec(svar_trail_segments,
- [svalue_trail_segments_yes, svalue_trail_segments_no]),
solver_var_spec(svar_minmodel,
[svalue_minmodel_no,
@@ -731,13 +725,6 @@ init_requirement_specs = [
(svar_minmodel `is_one_of` [svalue_minmodel_no])
),
-% Requirements of values of svar_trail_segments.
- requirement_spec(
- "Trail segments require trailing.",
- (svar_trail_segments `being` svalue_trail_segments_yes) `implies_that`
- (svar_trail `is_one_of` [svalue_trail_yes])
- ),
-
% Requirements of values of svar_minmodel.
requirement_spec(
"Minimal model tabling requires the LLDS backend.",
diff --git a/grade_lib/grade_string.m b/grade_lib/grade_string.m
index 675d8bd..334fed1 100644
--- a/grade_lib/grade_string.m
+++ b/grade_lib/grade_string.m
@@ -350,8 +350,7 @@ gc_to_strs(grade_var_gc_history) = ["hgc"].
:- func c_trail_to_strs(c_trail) = list(string).
c_trail_to_strs(c_trail_no) = [].
-c_trail_to_strs(c_trail_yes(grade_var_trail_segments_no)) = ["tr"].
-c_trail_to_strs(c_trail_yes(grade_var_trail_segments_yes)) = ["trseg"].
+c_trail_to_strs(c_trail_yes) = ["tr"].
:- type thread_safe_backend
---> tsb_llds(which_grade_string)
@@ -713,13 +712,11 @@ translate_grade_component(ComponentStr, Setting, Settings) :-
Setting = svar_term_size_prof - svalue_term_size_prof_words,
Settings = []
;
- ComponentStr = "tr",
- Setting = svar_trail - svalue_trail_yes,
- Settings = [svar_trail_segments - svalue_trail_segments_no]
- ;
- ComponentStr = "trseg",
+ ( ComponentStr = "tr"
+ ; ComponentStr = "trseg"
+ ),
Setting = svar_trail - svalue_trail_yes,
- Settings = [svar_trail_segments - svalue_trail_segments_yes]
+ Settings = []
;
( ComponentStr = "mm"
; ComponentStr = "mmsc"
diff --git a/grade_lib/grade_structure.m b/grade_lib/grade_structure.m
index da1eaf4..4bf8ebb 100644
--- a/grade_lib/grade_structure.m
+++ b/grade_lib/grade_structure.m
@@ -111,9 +111,7 @@
:- type c_trail
---> c_trail_no
- ; c_trail_yes(
- grade_var_trail_segments
- ).
+ ; c_trail_yes.
:- type llds_minmodel_kind
---> lmk_stack_copy
@@ -236,12 +234,12 @@ grade_vars_to_grade_structure(GradeVars) = GradeStructure :-
% *some* arguments is vulnerable to not picking up some arguments
% in *either*.
GradeVars = grade_vars(Pregen, Backend, _, _, _, _, _, _,
- _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _),
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _),
(
Pregen = grade_var_pregen_yes,
GradeVars = grade_vars(_Pregen, _Backend, Target, DataRep,
- GccConf, LowTagBitsUse, StackLen, Trail, TrailSegments,
+ GccConf, LowTagBitsUse, StackLen, Trail,
MinimalModel, ThreadSafe, Gc,
DeepProf, MprofCall, MprofTime, MprofMemory, TScopeProf,
TermSizeProf, Debug, SSDebug, TargetDebug,
@@ -259,8 +257,6 @@ grade_vars_to_grade_structure(GradeVars) = GradeStructure :-
"pregen but StackLen != grade_var_stack_len_std"),
expect(unify(Trail, grade_var_trail_no), $pred,
"pregen but Trail != grade_var_trail_no"),
- expect(unify(TrailSegments, grade_var_trail_segments_no), $pred,
- "pregen but TrailSegments != grade_var_trail_segments_no"),
expect(unify(MinimalModel, grade_var_minmodel_no), $pred,
"pregen but MinimalModel != grade_var_minmodel_no"),
expect(unify(ThreadSafe, grade_var_thread_safe_c_no), $pred,
@@ -335,7 +331,7 @@ grade_vars_to_grade_structure(GradeVars) = GradeStructure :-
Backend = grade_var_backend_llds,
GradeVars = grade_vars(_Pregen, _Backend, Target, DataRep,
- GccConf, LowTagBitsUse, StackLen, Trail, TrailSegments,
+ GccConf, LowTagBitsUse, StackLen, Trail,
MinimalModel, ThreadSafe, Gc,
DeepProf, MprofCall, MprofTime, MprofMemory, TScopeProf,
TermSizeProf, Debug, SSDebug, TargetDebug,
@@ -355,7 +351,7 @@ grade_vars_to_grade_structure(GradeVars) = GradeStructure :-
(
MinimalModel = grade_var_minmodel_no,
encode_c_gc(Gc, CGc),
- encode_c_trail(Trail, TrailSegments, CTrail),
+ encode_c_trail(Trail, CTrail),
(
DeepProf = grade_var_deep_prof_no,
(
@@ -437,9 +433,6 @@ grade_vars_to_grade_structure(GradeVars) = GradeStructure :-
),
expect(unify(Trail, grade_var_trail_no), $pred,
"Trail != grade_var_trail_no"),
- expect(unify(TrailSegments, grade_var_trail_segments_no),
- $pred,
- "TrailSegments != grade_var_trail_segments_no"),
expect(unify(DeepProf, grade_var_deep_prof_no), $pred,
"DeepProf != grade_var_deep_prof_no"),
expect(unify(MprofCall, grade_var_mprof_call_no), $pred,
@@ -467,7 +460,7 @@ grade_vars_to_grade_structure(GradeVars) = GradeStructure :-
"MinModel != grade_var_minmodel_no"),
encode_thread_safe_c_gc(Gc, ThreadSafeCGc),
- encode_c_trail(Trail, TrailSegments, CTrail),
+ encode_c_trail(Trail, CTrail),
expect(unify(DeepProf, grade_var_deep_prof_no), $pred,
"DeepProf != grade_var_deep_prof_no"),
expect(unify(MprofCall, grade_var_mprof_call_no), $pred,
@@ -496,7 +489,7 @@ grade_vars_to_grade_structure(GradeVars) = GradeStructure :-
Backend = grade_var_backend_mlds,
GradeVars = grade_vars(_Pregen, _Backend, Target, DataRep,
- GccConf, LowTagBitsUse, StackLen, Trail, TrailSegments,
+ GccConf, LowTagBitsUse, StackLen, Trail,
MinimalModel, ThreadSafe, Gc,
DeepProf, MprofCall, MprofTime, MprofMemory, TScopeProf,
TermSizeProf, Debug, SSDebug, TargetDebug,
@@ -575,7 +568,7 @@ grade_vars_to_grade_structure(GradeVars) = GradeStructure :-
CTrail = c_trail_no
;
Trail = grade_var_trail_yes,
- CTrail = c_trail_yes(TrailSegments)
+ CTrail = c_trail_yes
),
TargetC = mlds_target_c(MLDSCDataRep, MLDSCThreadSafe,
CTrail, MercFile, LowTagBitsUse, MercFloat),
@@ -593,9 +586,6 @@ grade_vars_to_grade_structure(GradeVars) = GradeStructure :-
"Gc != grade_var_gc_target_native"),
expect(unify(Trail, grade_var_trail_no), $pred,
"Trail != grade_var_trail_no"),
- expect(unify(TrailSegments, grade_var_trail_segments_no),
- $pred,
- "TrailSegments != grade_var_trail_segments_no"),
expect(unify(MprofCall, grade_var_mprof_call_no), $pred,
"MprofCall != grade_var_mprof_call_no"),
expect(unify(MprofTime, grade_var_mprof_time_no), $pred,
@@ -635,7 +625,7 @@ grade_vars_to_grade_structure(GradeVars) = GradeStructure :-
Backend = grade_var_backend_elds,
GradeVars = grade_vars(_Pregen, _Backend, Target, DataRep,
- GccConf, _LowTagBitsUse, StackLen, Trail, TrailSegments,
+ GccConf, _LowTagBitsUse, StackLen, Trail,
MinimalModel, ThreadSafe, Gc,
DeepProf, MprofCall, MprofTime, MprofMemory, TScopeProf,
TermSizeProf, Debug, SSDebug, TargetDebug,
@@ -654,8 +644,6 @@ grade_vars_to_grade_structure(GradeVars) = GradeStructure :-
"StackLen != grade_var_stack_len_std"),
expect(unify(Trail, grade_var_trail_no), $pred,
"Trail != grade_var_trail_no"),
- expect(unify(TrailSegments, grade_var_trail_segments_no), $pred,
- "TrailSegments != grade_var_trail_segments_no"),
expect(unify(MinimalModel, grade_var_minmodel_no), $pred,
"MinimalModel != grade_var_minmodel_no"),
expect(unify(ThreadSafe, grade_var_thread_safe_target_native),
@@ -747,18 +735,15 @@ encode_thread_safe_c_gc(Gc, ThreadSafeCGc) :-
unexpected($pred, "thread safe, Gc = history")
).
-:- pred encode_c_trail(grade_var_trail::in, grade_var_trail_segments::in,
- c_trail::out) is det.
+:- pred encode_c_trail(grade_var_trail::in, c_trail::out) is det.
-encode_c_trail(Trail, TrailSegments, CTrail) :-
+encode_c_trail(Trail, CTrail) :-
(
Trail = grade_var_trail_no,
- expect(unify(TrailSegments, grade_var_trail_segments_no), $pred,
- "Trail = no, TrailSegments = yes"),
CTrail = c_trail_no
;
Trail = grade_var_trail_yes,
- CTrail = c_trail_yes(TrailSegments)
+ CTrail = c_trail_yes
).
%---------------------------------------------------------------------------%
diff --git a/grade_lib/grade_vars.m b/grade_lib/grade_vars.m
index 6020906..023d94e 100644
--- a/grade_lib/grade_vars.m
+++ b/grade_lib/grade_vars.m
@@ -54,7 +54,6 @@
gv_low_tag_bits_use :: grade_var_low_tag_bits_use,
gv_stack_len :: grade_var_stack_len,
gv_trail :: grade_var_trail,
- gv_trail_segments :: grade_var_trail_segments,
gv_minmodel :: grade_var_minmodel,
gv_thread_safe :: grade_var_thread_safe,
gv_gc :: grade_var_gc,
@@ -230,7 +229,6 @@ success_map_to_grade_vars(!.SuccMap) = GradeVars :-
map.det_remove(svar_low_tag_bits_use, LowTagBitsUse, !SuccMap),
map.det_remove(svar_stack_len, StackLen, !SuccMap),
map.det_remove(svar_trail, Trail, !SuccMap),
- map.det_remove(svar_trail_segments, TrailSegments, !SuccMap),
map.det_remove(svar_minmodel, MinimalModel, !SuccMap),
map.det_remove(svar_thread_safe, ThreadSafe, !SuccMap),
map.det_remove(svar_gc, Gc, !SuccMap),
@@ -335,14 +333,6 @@ success_map_to_grade_vars(!.SuccMap) = GradeVars :-
unexpected($pred, "unexpected value of Trail")
),
- ( if TrailSegments = svalue_trail_segments_no then
- GradeVarTrailSegments = grade_var_trail_segments_no
- else if TrailSegments = svalue_trail_segments_yes then
- GradeVarTrailSegments = grade_var_trail_segments_yes
- else
- unexpected($pred, "unexpected value of TrailSegments")
- ),
-
( if MinimalModel = svalue_minmodel_no then
GradeVarMinimalModel = grade_var_minmodel_no
else if MinimalModel = svalue_minmodel_stack_copy then
@@ -504,7 +494,7 @@ success_map_to_grade_vars(!.SuccMap) = GradeVars :-
GradeVars = grade_vars(GradeVarPregen, GradeVarBackend,
GradeVarTarget, GradeVarDataRep,
GradeVarGccConf, GradeVarLowTagBitsUse, GradeVarStackLen,
- GradeVarTrail, GradeVarTrailSegments,
+ GradeVarTrail,
GradeVarMinimalModel, GradeVarThreadSafe, GradeVarGc,
GradeVarDeepProf,
GradeVarMprofCall, GradeVarMprofTime, GradeVarMprofMemory,
diff --git a/grade_lib/try_all_grade_structs.m b/grade_lib/try_all_grade_structs.m
index 8ae5127..9141c78 100644
--- a/grade_lib/try_all_grade_structs.m
+++ b/grade_lib/try_all_grade_structs.m
@@ -106,8 +106,7 @@ generate_llds_tests(GradeStructure) :-
(
generate_c_gc(CGc),
( CTrail = c_trail_no
- ; CTrail = c_trail_yes(grade_var_trail_segments_no)
- ; CTrail = c_trail_yes(grade_var_trail_segments_yes)
+ ; CTrail = c_trail_yes
),
(
LLDSPerfProf = llds_perf_prof_none
@@ -161,8 +160,7 @@ generate_llds_tests(GradeStructure) :-
;
generate_thread_safe_c_gc(ThreadSafeCGc),
( CTrail = c_trail_no
- ; CTrail = c_trail_yes(grade_var_trail_segments_no)
- ; CTrail = c_trail_yes(grade_var_trail_segments_yes)
+ ; CTrail = c_trail_yes
),
( TScopeProf = grade_var_tscope_prof_no
; TScopeProf = grade_var_tscope_prof_yes
@@ -220,8 +218,7 @@ generate_mlds_c_target(MLDSCTarget) :-
MLDSCThreadSafe = mlds_c_thread_safe_yes(ThreadSafeCGc)
),
( CTrail = c_trail_no
- ; CTrail = c_trail_yes(grade_var_trail_segments_no)
- ; CTrail = c_trail_yes(grade_var_trail_segments_yes)
+ ; CTrail = c_trail_yes
),
MercFile = grade_var_merc_file_no,
generate_grade_var_low_tag_bits_use(LowTagBitsUse),
diff --git a/grade_lib/var_value_names.m b/grade_lib/var_value_names.m
index 64468ae..a25b5a0 100644
--- a/grade_lib/var_value_names.m
+++ b/grade_lib/var_value_names.m
@@ -50,7 +50,6 @@ solver_var_name("gcc_conf", svar_gcc_conf).
solver_var_name("low_tag_bits_use", svar_low_tag_bits_use).
solver_var_name("stack_len", svar_stack_len).
solver_var_name("trail", svar_trail).
-solver_var_name("trail_segments", svar_trail_segments).
solver_var_name("minmodel", svar_minmodel).
solver_var_name("thread_safe", svar_thread_safe).
solver_var_name("gc", svar_gc).
@@ -120,9 +119,6 @@ solver_var_value_name("exts", svalue_stack_len_extend).
solver_var_value_name("no_trail", svalue_trail_no).
solver_var_value_name("trail", svalue_trail_yes).
-solver_var_value_name("trfix", svalue_trail_segments_no).
-solver_var_value_name("trseg", svalue_trail_segments_yes).
-
solver_var_value_name("no_mm", svalue_minmodel_no).
solver_var_value_name("mm_stack_copy",
svalue_minmodel_stack_copy).
diff --git a/runtime/mercury_conf_param.h b/runtime/mercury_conf_param.h
index 64c081b..38f6618 100644
--- a/runtime/mercury_conf_param.h
+++ b/runtime/mercury_conf_param.h
@@ -150,7 +150,6 @@
// MR_USE_SINGLE_PREC_FLOAT
// MR_EXTEND_STACKS_WHEN_NEEDED
// MR_STACK_SEGMENTS
-// MR_TRAIL_SEGMENTS
// MR_INLINE_ALLOC
// MR_TAGBITS
// MR_USE_REGIONS
@@ -173,7 +172,6 @@
// --single-prec-float
// --extend-stacks-when-needed
// --stack-segments
-// --trail-segments
// --inline-alloc
// --pic-reg
// --tags
@@ -394,6 +392,10 @@
// Enables low-level debugging messages when updating the list of
// trail segments.
//
+// MR_USE_FIXED_SIZE_TRAIL
+// Disables the trail segment mechanism; this is sometimes use for
+// developers working on that mechanism.
+//
// MR_TRACE_CHECK_INTEGRITY
// Enables the -i and --integrity options on mdb's forward movement
// commands, which cause the debugger to check the integrity of the
diff --git a/runtime/mercury_context.h b/runtime/mercury_context.h
index 1764da0..9ce2e4e 100644
--- a/runtime/mercury_context.h
+++ b/runtime/mercury_context.h
@@ -329,7 +329,7 @@ struct MR_Context_Struct {
#ifdef MR_USE_TRAIL
MR_MemoryZone *MR_ctxt_trail_zone;
- #ifdef MR_TRAIL_SEGMENTS
+ #ifndef MR_USE_FIXED_SIZE_TRAIL
MR_MemoryZones *MR_ctxt_prev_trail_zones;
#endif
MR_TrailEntry *MR_ctxt_trail_ptr;
diff --git a/runtime/mercury_grade.h b/runtime/mercury_grade.h
index faeda1b..d5260d4 100644
--- a/runtime/mercury_grade.h
+++ b/runtime/mercury_grade.h
@@ -76,7 +76,7 @@
// breaks binary backwards compatibility only in debugging, deep profiling
// and low-level C parallel grades respectively.
-#define MR_GRADE_PART_0 v19_
+#define MR_GRADE_PART_0 v20_
#define MR_GRADE_EXEC_TRACE_VERSION_NO 12
#define MR_GRADE_DEEP_PROF_VERSION_NO 4
#define MR_GRADE_LLC_PAR_VERSION_NO 1
@@ -237,13 +237,8 @@
#endif
#ifdef MR_USE_TRAIL
- #ifdef MR_TRAIL_SEGMENTS
- #define MR_GRADE_PART_7 MR_PASTE2(MR_GRADE_PART_6, _trseg)
- #define MR_GRADE_OPT_PART_7 MR_GRADE_OPT_PART_6 ".trseg"
- #else
- #define MR_GRADE_PART_7 MR_PASTE2(MR_GRADE_PART_6, _tr)
- #define MR_GRADE_OPT_PART_7 MR_GRADE_OPT_PART_6 ".tr"
- #endif // ! MR_TRAIL_SEGMENTS
+ #define MR_GRADE_PART_7 MR_PASTE2(MR_GRADE_PART_6, _tr)
+ #define MR_GRADE_OPT_PART_7 MR_GRADE_OPT_PART_6 ".tr"
#else
#define MR_GRADE_PART_7 MR_GRADE_PART_6
#define MR_GRADE_OPT_PART_7 MR_GRADE_OPT_PART_6
diff --git a/runtime/mercury_trail.c b/runtime/mercury_trail.c
index 9b80c5a..28bf5eb 100644
--- a/runtime/mercury_trail.c
+++ b/runtime/mercury_trail.c
@@ -20,7 +20,7 @@
MR_MemoryZone *MR_trail_zone;
MR_TrailEntry *MR_trail_ptr_var;
- #if defined(MR_TRAIL_SEGMENTS)
+ #if !defined(MR_USE_FIXED_SIZE_TRAIL)
MR_MemoryZones *MR_prev_trail_zones;
#endif
@@ -28,7 +28,7 @@ MR_Unsigned MR_ticket_counter_var = 1;
MR_Unsigned MR_ticket_high_water_var = 1;
#endif
-#if defined(MR_TRAIL_SEGMENTS)
+#if !defined(MR_USE_FIXED_SIZE_TRAIL)
static void
MR_pop_trail_segment(void);
#endif
@@ -64,7 +64,7 @@ MR_untrail_to(MR_TrailEntry *old_trail_ptr, MR_untrail_reason reason)
// We need to walk backwards through all the previous segments
// (invoking function trail entries as we go) until we find it.
- #if defined(MR_TRAIL_SEGMENTS)
+ #if !defined(MR_USE_FIXED_SIZE_TRAIL)
if (tr_ptr == tr_base
&& tr_ptr != old_trail_ptr)
{
@@ -115,7 +115,7 @@ MR_untrail_to(MR_TrailEntry *old_trail_ptr, MR_untrail_reason reason)
*MR_get_trail_entry_address(tr_ptr) =
MR_get_trail_entry_value(tr_ptr);
}
- #if defined(MR_TRAIL_SEGMENTS)
+ #if !defined(MR_USE_FIXED_SIZE_TRAIL)
if (tr_ptr == tr_base
&& tr_ptr != old_trail_ptr)
{
@@ -143,7 +143,7 @@ MR_num_trail_entries(void)
{
MR_Unsigned n_entries = 0;
-#if defined(MR_TRAIL_SEGMENTS)
+#if !defined(MR_USE_FIXED_SIZE_TRAIL)
MR_MemoryZones *list;
MR_MemoryZone *zone;
@@ -154,7 +154,7 @@ MR_num_trail_entries(void)
- (MR_TrailEntry *) zone->MR_zone_min;
list = list->MR_zones_tail;
}
-#endif // MR_TRAIL_SEGMENTS
+#endif // ! MR_USE_FIXED_SIZE_TRAIL
n_entries += MR_trail_ptr - MR_TRAIL_BASE;
@@ -166,7 +166,7 @@ MR_num_trail_entries(void)
void
MR_reset_trail(void)
{
- #if defined(MR_TRAIL_SEGMENTS)
+ #if !defined(MR_FIX_SIZE_TRAIL)
while (MR_PREV_TRAIL_ZONES != NULL) {
MR_reset_trail_zone();
MR_pop_trail_segment();
@@ -204,7 +204,7 @@ MR_reset_trail_zone(void) {
////////////////////////////////////////////////////////////////////////////
-#if defined(MR_TRAIL_SEGMENTS)
+#if !defined(MR_USE_FIXED_SIZE_TRAIL)
void
MR_new_trail_segment(void)
{
@@ -280,7 +280,7 @@ MR_num_trail_segments(void)
return n_segments;
}
-#endif // MR_TRAIL_SEGMENTS
+#endif // ! MR_USE_FIXED_SIZE_TRAIL
#endif // MR_USE_TRAIL
diff --git a/runtime/mercury_trail.h b/runtime/mercury_trail.h
index 28bd638..b5423c5 100644
--- a/runtime/mercury_trail.h
+++ b/runtime/mercury_trail.h
@@ -320,7 +320,7 @@ struct MR_TrailEntry_Struct {
// The Mercury trail.
extern MR_MemoryZone *MR_trail_zone;
- #if defined(MR_TRAIL_SEGMENTS)
+ #if !defined(MR_USE_FIXED_SIZE_TRAIL)
// A list of any previous trail zones.
extern MR_MemoryZones *MR_prev_trail_zones;
#endif
@@ -372,7 +372,7 @@ struct MR_TrailEntry_Struct {
#define MR_TRAIL_ZONE (MR_CONTEXT(MR_ctxt_trail_zone))
- #if defined(MR_TRAIL_SEGMENTS)
+ #if !defined(MR_USE_FIXED_SIZE_TRAIL)
#define MR_PREV_TRAIL_ZONES (MR_CONTEXT(MR_ctxt_prev_trail_zones))
#endif
@@ -381,7 +381,7 @@ struct MR_TrailEntry_Struct {
#else
#define MR_TRAIL_ZONE MR_trail_zone
- #if defined(MR_TRAIL_SEGMENTS)
+ #if !defined(MR_USE_FIXED_SIZE_TRAIL)
#define MR_PREV_TRAIL_ZONES MR_prev_trail_zones
#endif
@@ -397,7 +397,7 @@ struct MR_TrailEntry_Struct {
////////////////////////////////////////////////////////////////////////////
-#if defined(MR_TRAIL_SEGMENTS)
+#if !defined(MR_USE_FIXED_SIZE_TRAIL)
#define MR_trail_extend_and_check() \
do { \
@@ -406,11 +406,11 @@ struct MR_TrailEntry_Struct {
} \
} while (0)
-#else // ! MR_TRAIL_SEGMENTS
+#else // ! MR_USE_FIXED_SIZE_TRAIL
#define MR_trail_extend_and_check() ((void) 0)
-#endif // !MR_TRAIL_SEGMENTS
+#endif // MR_USE_FIXED_SIZE_TRAIL
// void MR_trail_value(MR_Word *address, MR_Word value);
//
@@ -511,7 +511,7 @@ extern MR_Unsigned MR_num_trail_entries(void);
extern void MR_reset_trail(void);
-#if defined(MR_TRAIL_SEGMENTS)
+#if !defined(MR_USE_FIXED_SIZE_TRAIL)
// Push the current trail segment onto the list of previous segments,
// allocate a new segment and set MR_trail_ptr to point to beginning
@@ -523,6 +523,6 @@ extern void MR_new_trail_segment(void);
extern MR_Unsigned MR_num_trail_segments(void);
-#endif // MR_TRAIL_SEGMENTS
+#endif // ! MR_USE_FIXED_SIZE_TRAIL
#endif // not MERCURY_TRAIL_H
diff --git a/runtime/mercury_wrapper.c b/runtime/mercury_wrapper.c
index 5f9cb3b..53ed4b2 100644
--- a/runtime/mercury_wrapper.c
+++ b/runtime/mercury_wrapper.c
@@ -1505,7 +1505,7 @@ MR_process_options(int argc, char **argv)
MR_usage();
}
- #if !defined(MR_TRAIL_SEGMENTS)
+ #if defined(MR_USE_FIXED_SIZE_TRAIL)
MR_trail_size = size;
#endif
break;
@@ -1515,7 +1515,7 @@ MR_process_options(int argc, char **argv)
MR_usage();
}
- #if !defined(MR_TRAIL_SEGMENTS)
+ #if defined(MR_USE_FIXED_SIZE_TRAIL)
MR_trail_size = size * sizeof(MR_Word);
#endif
break;
@@ -1525,7 +1525,7 @@ MR_process_options(int argc, char **argv)
MR_usage();
}
- #if defined(MR_TRAIL_SEGMENTS)
+ #if !defined(MR_USE_FIXED_SIZE_TRAIL)
MR_trail_size = size;
#endif
break;
@@ -1535,7 +1535,7 @@ MR_process_options(int argc, char **argv)
MR_usage();
}
- #if defined(MR_TRAIL_SEGMENTS)
+ #if !defined(MR_USE_FIXED_SIZE_TRAIL)
MR_trail_size = size * sizeof(MR_Word);
#endif
break;
diff --git a/scripts/canonical_grade.sh-subr b/scripts/canonical_grade.sh-subr
index ae058c9..cb905fb 100644
--- a/scripts/canonical_grade.sh-subr
+++ b/scripts/canonical_grade.sh-subr
@@ -119,14 +119,9 @@ case $record_term_sizes_as_words,$record_term_sizes_as_cells in
;;
esac
-case $use_trail,$trail_segments in
- true,false) GRADE="$GRADE.tr" ;;
- true,true) GRADE="$GRADE.trseg" ;;
- false,false) ;;
- *) progname=`basename $0`
- echo "$progname: error: invalid combination of trailing options." 1>&2
- exit 1
- ;;
+case $use_trail in
+ true) GRADE="$GRADE.tr" ;;
+ *) ;;
esac
case $use_minimal_model_stack_copy,$use_minimal_model_own_stacks,$minimal_model_debug in
diff --git a/scripts/init_grade_options.sh-subr b/scripts/init_grade_options.sh-subr
index 0f4a478..b51613d 100644
--- a/scripts/init_grade_options.sh-subr
+++ b/scripts/init_grade_options.sh-subr
@@ -78,7 +78,6 @@ profile_deep=false
record_term_sizes_as_words=false
record_term_sizes_as_cells=false
use_trail=false
-trail_segments=false
use_minimal_model_stack_copy=false
use_minimal_model_own_stacks=false
minimal_model_debug=false
diff --git a/scripts/mgnuc.in b/scripts/mgnuc.in
index 19fa9e9..f2248d9 100755
--- a/scripts/mgnuc.in
+++ b/scripts/mgnuc.in
@@ -390,9 +390,6 @@ esac
case $use_trail in
true)
TRAIL_OPTS="-DMR_USE_TRAIL"
- case $trail_segments in
- true) TRAIL_OPTS="$TRAIL_OPTS -DMR_TRAIL_SEGMENTS" ;;
- esac
# See the comment in compile_c_file/7 in compiler/compile_target_code.m
# for an explanation of this.
case $COMPILER in
@@ -402,15 +399,7 @@ case $use_trail in
;;
false)
- TRAIL_OPTS=""
- case $trail_segments in
- true)
- progname`basename $0`
- echo "$progname: cannot use trail segments without trailing"
- exit 1;;
- esac
- FN_ALIGN_OPTS=""
- ;;
+ TRAIL_OPTS="" ;;
esac
case $use_minimal_model_stack_copy,$use_minimal_model_own_stacks in
diff --git a/scripts/parse_grade_options.sh-subr b/scripts/parse_grade_options.sh-subr
index 87d375a..e094f2c 100644
--- a/scripts/parse_grade_options.sh-subr
+++ b/scripts/parse_grade_options.sh-subr
@@ -143,11 +143,6 @@
--no-use-trail)
use_trail=false ;;
- --trail-segments)
- trail_segments=true ;;
- --no-trail-segments)
- trail_segments=false ;;
-
--use-minimal-model-stack-copy)
use_minimal_model_stack_copy=true ;;
--no-use-minimal-model-stack-copy)
@@ -243,7 +238,6 @@
record_term_sizes_as_words=false
record_term_sizes_as_cells=false
use_trail=false
- trail_segments=false
use_minimal_model_stack_copy=false
use_minimal_model_own_stacks=false
minimal_model_debug=false
@@ -423,12 +417,10 @@
tr)
use_trail=true
- trail_segments=false
;;
trseg)
use_trail=true
- trail_segments=true
;;
mm)
diff --git a/trace/mercury_trace_cmd_developer.c b/trace/mercury_trace_cmd_developer.c
index cb724f7..3db090a 100644
--- a/trace/mercury_trace_cmd_developer.c
+++ b/trace/mercury_trace_cmd_developer.c
@@ -1344,7 +1344,7 @@ MR_trace_cmd_trail_details(char **words, int word_count,
fprintf(MR_mdb_out, "number of trail entries: %lu\n",
(unsigned long) MR_num_trail_entries());
- #if defined(MR_TRAIL_SEGMENTS)
+ #if !defined(MR_USE_FIXED_SIZE_TRAIL)
fprintf(MR_mdb_out, "number of trail segments: %lu\n",
(unsigned long) MR_num_trail_segments());
#endif
More information about the reviews
mailing list