[m-rev.] for post-commit review: optimizing goal features
Zoltan Somogyi
zs at csse.unimelb.edu.au
Mon Jan 12 13:00:27 AEDT 2009
Optimize the handling of features both in general and specifically for
from_ground_term scopes, leading to a speedup of over 5% on compilation time
for training_cars_full.m, and a speedup of over 3% on tools/speedtest.
compiler/goal_util.m:
Add an option to the predicates that attach features to all subgoals
of a goal to say whether this should include goals inside
from_ground_term scopes.
compiler/add_clause.m:
Tell goal_util.m not to attach the from_head feature to goals inside
from_ground_term scopes, since switch detection (the only thing that
looks for from_head features) doesn't care about the code inside such
scopes.
compiler/modes.m:
compiler/polymorphism.m:
When a compiler pass changes a from_ground_term scope from the
from_ground_term_construct kind (the kind initially assigned to all
from_ground_term scopes) to some other kind, this may be because it
has turned some goal inside the scope from a unification (on which
the presence or absence of a from_head features doesn't matter)
to another goal on which it does matter. Therefore these passes
need to copy any from_head feature present on the changed scope goal
to their subgoals.
compiler/hlds_goal.m:
Optimize the code for removing features.
Document the newly imposed requirement on the handling of
from_ground_term scopes.
compiler/purity.m:
compiler/quantification.m:
Update some comments.
Zoltan.
cvs diff: Diffing .
cvs diff: Diffing analysis
cvs diff: Diffing bindist
cvs diff: Diffing boehm_gc
cvs diff: Diffing boehm_gc/Mac_files
cvs diff: Diffing boehm_gc/cord
cvs diff: Diffing boehm_gc/cord/private
cvs diff: Diffing boehm_gc/doc
cvs diff: Diffing boehm_gc/include
cvs diff: Diffing boehm_gc/include/private
cvs diff: Diffing boehm_gc/libatomic_ops-1.2
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/doc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/tests
cvs diff: Diffing boehm_gc/tests
cvs diff: Diffing boehm_gc/windows-untested
cvs diff: Diffing boehm_gc/windows-untested/vc60
cvs diff: Diffing boehm_gc/windows-untested/vc70
cvs diff: Diffing boehm_gc/windows-untested/vc71
cvs diff: Diffing browser
cvs diff: Diffing bytecode
cvs diff: Diffing compiler
Index: compiler/add_clause.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/add_clause.m,v
retrieving revision 1.50
diff -u -b -r1.50 add_clause.m
--- compiler/add_clause.m 16 Jul 2008 03:30:26 -0000 1.50
+++ compiler/add_clause.m 1 Jan 2009 03:22:44 -0000
@@ -565,8 +565,20 @@
insert_arg_unifications(HeadVarList, Args, Context, ArgContext,
HeadGoal0, HeadGoal1, _, !VarSet, !ModuleInfo, !QualInfo,
!SInfo, !Specs),
+ % The only pass that pays attention to the from_head feature,
+ % switch_detection, only does so on kinds of hlds_goal_exprs
+ % that do not occur in from_ground_term scopes, which we have
+ % just marked as from_ground_term_construct. However, later
+ % passes may convert some of the unifications inside these scopes
+ % to calls, and switch detection *does* care about from_head
+ % on calls, and it looks inside all scopes except those of the
+ % from_ground_term_construct kind. Therefore any code that can be
+ % executed between now and switch detection that converts a
+ % from_ground_term_construct scope to another kind of scope
+ % should attach any from_head feature present on the scope
+ % to all its subgoals.
attach_features_to_all_goals([feature_from_head],
- HeadGoal1, HeadGoal)
+ do_not_attach_in_from_ground_term, HeadGoal1, HeadGoal)
),
svar_prepare_for_body(FinalSVarMap, !VarSet, !SInfo),
transform_goal(ParseBody, Renaming, BodyGoal, _, !VarSet, !ModuleInfo,
Index: compiler/goal_util.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/goal_util.m,v
retrieving revision 1.161
diff -u -b -r1.161 goal_util.m
--- compiler/goal_util.m 23 Dec 2008 01:37:32 -0000 1.161
+++ compiler/goal_util.m 30 Dec 2008 22:48:14 -0000
@@ -105,10 +105,20 @@
%
:- pred generic_call_vars(generic_call::in, list(prog_var)::out) is det.
- % Attach the given goal features to the given goal and all its subgoals.
- %
-:- pred attach_features_to_all_goals(list(goal_feature)::in,
- hlds_goal::in, hlds_goal::out) is det.
+:- type attach_in_from_ground_term
+ ---> attach_in_from_ground_term
+ ; do_not_attach_in_from_ground_term.
+
+ % Attach the given goal features to the given goal and all its subgoals,
+ % except possibly in from_ground_term scopes.
+ %
+:- pred attach_features_to_all_goals(list(goal_feature),
+ attach_in_from_ground_term, hlds_goal, hlds_goal) is det.
+:- mode attach_features_to_all_goals(in,
+ in(bound(attach_in_from_ground_term)),
+ in, out) is det.
+:- mode attach_features_to_all_goals(in,
+ in(bound(do_not_attach_in_from_ground_term)), in, out) is det.
% extra_nonlocal_typeinfos(TypeInfoMap, TypeClassInfoMap,
% VarTypes, ExistQVars, NonLocals, NonLocalTypeInfos):
@@ -628,24 +638,50 @@
%-----------------------------------------------------------------------------%
-attach_features_to_all_goals(Features, Goal0, Goal) :-
+attach_features_to_all_goals(Features, InFromGroundTerm, Goal0, Goal) :-
Goal0 = hlds_goal(GoalExpr0, GoalInfo0),
- attach_features_goal_expr(Features, GoalExpr0, GoalExpr),
+ attach_features_to_goal_expr(Features, InFromGroundTerm,
+ GoalExpr0, GoalExpr),
list.foldl(goal_info_add_feature, Features, GoalInfo0, GoalInfo),
Goal = hlds_goal(GoalExpr, GoalInfo).
-:- pred attach_features_to_case(list(goal_feature)::in,
- case::in, case::out) is det.
-
-attach_features_to_case(Features, Case0, Case) :-
+:- pred attach_features_to_goals(list(goal_feature),
+ attach_in_from_ground_term, list(hlds_goal), list(hlds_goal)) is det.
+:- mode attach_features_to_goals(in,
+ in(bound(attach_in_from_ground_term)), in, out) is det.
+:- mode attach_features_to_goals(in,
+ in(bound(do_not_attach_in_from_ground_term)), in, out) is det.
+
+attach_features_to_goals(_Features, _InFromGroundTerm, [], []).
+attach_features_to_goals(Features, InFromGroundTerm,
+ [Goal0 | Goals0], [Goal | Goals]) :-
+ attach_features_to_all_goals(Features, InFromGroundTerm, Goal0, Goal),
+ attach_features_to_goals(Features, InFromGroundTerm, Goals0, Goals).
+
+:- pred attach_features_to_cases(list(goal_feature),
+ attach_in_from_ground_term, list(case), list(case)) is det.
+:- mode attach_features_to_cases(in,
+ in(bound(attach_in_from_ground_term)), in, out) is det.
+:- mode attach_features_to_cases(in,
+ in(bound(do_not_attach_in_from_ground_term)), in, out) is det.
+
+attach_features_to_cases(_Features, _InFromGroundTerm, [], []).
+attach_features_to_cases(Features, InFromGroundTerm,
+ [Case0 | Cases0], [Case | Cases]) :-
Case0 = case(MainConsId, OtherConsIds, Goal0),
- attach_features_to_all_goals(Features, Goal0, Goal),
- Case = case(MainConsId, OtherConsIds, Goal).
+ attach_features_to_all_goals(Features, InFromGroundTerm, Goal0, Goal),
+ Case = case(MainConsId, OtherConsIds, Goal),
+ attach_features_to_cases(Features, InFromGroundTerm, Cases0, Cases).
+
+:- pred attach_features_to_goal_expr(list(goal_feature),
+ attach_in_from_ground_term, hlds_goal_expr, hlds_goal_expr) is det.
+:- mode attach_features_to_goal_expr(in,
+ in(bound(attach_in_from_ground_term)), in, out) is det.
+:- mode attach_features_to_goal_expr(in,
+ in(bound(do_not_attach_in_from_ground_term)), in, out) is det.
-:- pred attach_features_goal_expr(list(goal_feature)::in,
- hlds_goal_expr::in, hlds_goal_expr::out) is det.
-
-attach_features_goal_expr(Features, GoalExpr0, GoalExpr) :-
+attach_features_to_goal_expr(Features, InFromGroundTerm,
+ GoalExpr0, GoalExpr) :-
(
( GoalExpr0 = plain_call(_, _, _, _, _, _)
; GoalExpr0 = generic_call(_, _, _, _)
@@ -655,47 +691,60 @@
GoalExpr = GoalExpr0
;
GoalExpr0 = conj(ConjType, Goals0),
- list.map(attach_features_to_all_goals(Features), Goals0, Goals),
+ attach_features_to_goals(Features, InFromGroundTerm, Goals0, Goals),
GoalExpr = conj(ConjType, Goals)
;
GoalExpr0 = disj(Goals0),
- list.map(attach_features_to_all_goals(Features), Goals0, Goals),
+ attach_features_to_goals(Features, InFromGroundTerm, Goals0, Goals),
GoalExpr = disj(Goals)
;
GoalExpr0 = switch(Var, CanFail, Cases0),
- list.map(attach_features_to_case(Features), Cases0, Cases),
+ attach_features_to_cases(Features, InFromGroundTerm, Cases0, Cases),
GoalExpr = switch(Var, CanFail, Cases)
;
GoalExpr0 = if_then_else(Vars, Cond0, Then0, Else0),
- attach_features_to_all_goals(Features, Cond0, Cond),
- attach_features_to_all_goals(Features, Then0, Then),
- attach_features_to_all_goals(Features, Else0, Else),
+ attach_features_to_all_goals(Features, InFromGroundTerm, Cond0, Cond),
+ attach_features_to_all_goals(Features, InFromGroundTerm, Then0, Then),
+ attach_features_to_all_goals(Features, InFromGroundTerm, Else0, Else),
GoalExpr = if_then_else(Vars, Cond, Then, Else)
;
- GoalExpr0 = negation(Goal0),
- attach_features_to_all_goals(Features, Goal0, Goal),
- GoalExpr = negation(Goal)
- ;
- GoalExpr0 = scope(Reason, Goal0),
- % For most features there would be no point in attaching them
- % to the goals inside from_ground_term_construct scopes, but there
- % may be one or two for which this may be meaningful.
- attach_features_to_all_goals(Features, Goal0, Goal),
- GoalExpr = scope(Reason, Goal)
+ GoalExpr0 = negation(SubGoal0),
+ attach_features_to_all_goals(Features, InFromGroundTerm,
+ SubGoal0, SubGoal),
+ GoalExpr = negation(SubGoal)
+ ;
+ GoalExpr0 = scope(Reason, SubGoal0),
+ ( Reason = from_ground_term(_, _) ->
+ (
+ InFromGroundTerm = do_not_attach_in_from_ground_term,
+ SubGoal = SubGoal0
+ ;
+ InFromGroundTerm = attach_in_from_ground_term,
+ attach_features_to_all_goals(Features, InFromGroundTerm,
+ SubGoal0, SubGoal)
+ )
+ ;
+ attach_features_to_all_goals(Features, InFromGroundTerm,
+ SubGoal0, SubGoal)
+ ),
+ GoalExpr = scope(Reason, SubGoal)
;
GoalExpr0 = shorthand(ShortHand0),
(
ShortHand0 = atomic_goal(GoalType, Outer, Inner, MaybeOutputVars,
MainGoal0, OrElseGoals0),
- attach_features_to_all_goals(Features, MainGoal0, MainGoal),
- list.map(attach_features_to_all_goals(Features),
+ attach_features_to_all_goals(Features, InFromGroundTerm,
+ MainGoal0, MainGoal),
+ attach_features_to_goals(Features, InFromGroundTerm,
OrElseGoals0, OrElseGoals),
ShortHand = atomic_goal(GoalType, Outer, Inner, MaybeOutputVars,
MainGoal, OrElseGoals)
;
ShortHand0 = bi_implication(GoalA0, GoalB0),
- attach_features_to_all_goals(Features, GoalA0, GoalA),
- attach_features_to_all_goals(Features, GoalB0, GoalB),
+ attach_features_to_all_goals(Features, InFromGroundTerm,
+ GoalA0, GoalA),
+ attach_features_to_all_goals(Features, InFromGroundTerm,
+ GoalB0, GoalB),
ShortHand = bi_implication(GoalA, GoalB)
),
GoalExpr = shorthand(ShortHand)
Index: compiler/hlds_goal.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/hlds_goal.m,v
retrieving revision 1.202
diff -u -b -r1.202 hlds_goal.m
--- compiler/hlds_goal.m 2 Jan 2009 03:12:06 -0000 1.202
+++ compiler/hlds_goal.m 2 Jan 2009 03:12:21 -0000
@@ -327,7 +327,12 @@
%
% If any compiler pass modifies a from_ground_term_construct scope in a way
% that invalidates these invariants, it must set the kind field of the
- % scope to from_ground_term_other.
+ % scope to from_ground_term_other (or from_ground_term_deconstruct).
+ % If the original scope had the from_head feature, the code that does this
+ % must also attach that feature to all the subgoals of the modified scope,
+ % unless we can be sure that it is executed *after* switch detection,
+ % which is the only pass that looks for from_head features, and which looks
+ % in all scopes *except* from_ground_term_construct scopes.
%
% For now, we don't optimize from_ground_term_deconstruct and
% from_ground_term_other scopes, so there are no invariants required
@@ -2250,8 +2255,13 @@
goal_info_remove_feature(Feature, !GoalInfo) :-
Features0 = goal_info_get_features(!.GoalInfo),
- set.delete(Features0, Feature, Features),
- goal_info_set_features(Features, !GoalInfo).
+ ( set.remove(Features0, Feature, Features) ->
+ goal_info_set_features(Features, !GoalInfo)
+ ;
+ % !.GoalInfo did not have Feature, so there is no need to allocate
+ % memory for a new !:GoalInfo.
+ true
+ ).
goal_info_has_feature(GoalInfo, Feature) :-
Features = goal_info_get_features(GoalInfo),
Index: compiler/modes.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/modes.m,v
retrieving revision 1.372
diff -u -b -r1.372 modes.m
--- compiler/modes.m 23 Dec 2008 01:37:37 -0000 1.372
+++ compiler/modes.m 1 Jan 2009 03:18:27 -0000
@@ -369,6 +369,7 @@
:- import_module check_hlds.type_util.
:- import_module check_hlds.unify_proc.
:- import_module check_hlds.unique_modes.
+:- import_module hlds.goal_util.
:- import_module hlds.hlds_clauses.
:- import_module hlds.hlds_data.
:- import_module hlds.passes_aux.
@@ -1657,8 +1658,14 @@
),
Kind = from_ground_term_other
),
+ ( goal_info_has_feature(GoalInfo0, feature_from_head) ->
+ attach_features_to_all_goals([feature_from_head],
+ attach_in_from_ground_term, SubGoal1, SubGoal2)
+ ;
+ SubGoal2 = SubGoal1
+ ),
mode_checkpoint(enter, "scope", !ModeInfo, !IO),
- modecheck_goal(SubGoal1, SubGoal, !ModeInfo, !IO),
+ modecheck_goal(SubGoal2, SubGoal, !ModeInfo, !IO),
mode_checkpoint(exit, "scope", !ModeInfo, !IO),
UpdatedReason = from_ground_term(TermVar, Kind),
GoalExpr = scope(UpdatedReason, SubGoal)
Index: compiler/polymorphism.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/polymorphism.m,v
retrieving revision 1.336
diff -u -b -r1.336 polymorphism.m
--- compiler/polymorphism.m 23 Dec 2008 01:37:39 -0000 1.336
+++ compiler/polymorphism.m 1 Jan 2009 03:15:22 -0000
@@ -1112,7 +1112,7 @@
->
poly_info_get_varset(!.Info, VarSetBefore),
MaxVarBefore = varset.max_var(VarSetBefore),
- polymorphism_process_goal(SubGoal0, SubGoal, !Info),
+ polymorphism_process_goal(SubGoal0, SubGoal1, !Info),
poly_info_get_varset(!.Info, VarSetAfter),
MaxVarAfter = varset.max_var(VarSetAfter),
@@ -1120,7 +1120,13 @@
% We did introduced some variables into the scope,
% so we cannot guarantee that the scope still satisfies
% the invariants of from_ground_term_construct scopes.
- Reason = from_ground_term(TermVar, from_ground_term_other)
+ Reason = from_ground_term(TermVar, from_ground_term_other),
+ ( goal_info_has_feature(GoalInfo0, feature_from_head) ->
+ attach_features_to_all_goals([feature_from_head],
+ attach_in_from_ground_term, SubGoal1, SubGoal)
+ ;
+ SubGoal = SubGoal1
+ )
;
poly_info_get_var_types(!.Info, VarTypes),
map.lookup(VarTypes, TermVar, TermVarType),
@@ -1131,7 +1137,15 @@
% the scope by adding a reference to typeinfo variables
% representing TermVarTypeVars.
Reason = from_ground_term(TermVar,
- from_ground_term_other)
+ from_ground_term_other),
+ (
+ goal_info_has_feature(GoalInfo0, feature_from_head)
+ ->
+ attach_features_to_all_goals([feature_from_head],
+ attach_in_from_ground_term, SubGoal1, SubGoal)
+ ;
+ SubGoal = SubGoal1
+ )
;
TermVarTypeVars = [],
% TermVarTypeVars = [] says that there is no
@@ -1146,7 +1160,8 @@
% this pass modifies a goal, at least in ways that
% would invalidate the from_ground_term_construct
% invariant.
- Reason = Reason0
+ Reason = Reason0,
+ SubGoal = SubGoal1
)
)
;
Index: compiler/purity.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/purity.m,v
retrieving revision 1.124
diff -u -b -r1.124 purity.m
--- compiler/purity.m 23 Dec 2008 01:37:39 -0000 1.124
+++ compiler/purity.m 29 Dec 2008 15:59:47 -0000
@@ -998,7 +998,7 @@
%
% ActualPurity: The inferred purity of the pred
% DeclaredPurity: The declared purity of the pred
- % InPragmaCCode: Is this a pragma c code?
+ % InPragmaCCode: Is this foreign language code?
% Promised: Did we promise this pred as pure?
%
:- pred perform_pred_purity_checks(pred_info::in, purity::in, purity::in,
@@ -1050,9 +1050,9 @@
% or instance methods --- it just means that the predicate provided
% as an implementation was more pure than necessary.
%
- % We don't warn about exaggerated impurity decls in c_code -- this is
- % just because we assume they are pure, but you can declare them
- % to be impure.
+ % We don't warn about exaggerated impurity decls in foreign language
+ % code -- this is just because we assume they are pure (XXX we do not
+ % do so anymore), but you can declare them to be impure.
%
% We don't warn about exaggerated impurity declarations for "stub"
% procedures, i.e. procedures which originally had no clauses.
Index: compiler/quantification.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/quantification.m,v
retrieving revision 1.129
diff -u -b -r1.129 quantification.m
--- compiler/quantification.m 23 Dec 2008 01:37:39 -0000 1.129
+++ compiler/quantification.m 1 Jan 2009 03:10:26 -0000
@@ -633,8 +633,8 @@
% because superhomogeneous.m sets up the nonlocal sets of the
% unifications, their conjunction, and the scope goal itself,
% and every later compiler pass than can invalidate those nonlocal sets
- % will either set the kind to from_ground_term_other or remove the
- % scope altogether.
+ % will either set the kind to from_ground_term_other (or to
+ % from_ground_term_deconstruct) or remove the scope altogether.
SubGoal = SubGoal0,
NonLocals = make_singleton_set(TermVar),
set_nonlocals(NonLocals, !Info),
cvs diff: Diffing compiler/notes
cvs diff: Diffing debian
cvs diff: Diffing debian/patches
cvs diff: Diffing deep_profiler
cvs diff: Diffing deep_profiler/notes
cvs diff: Diffing doc
cvs diff: Diffing extras
cvs diff: Diffing extras/base64
cvs diff: Diffing extras/cgi
cvs diff: Diffing extras/complex_numbers
cvs diff: Diffing extras/complex_numbers/samples
cvs diff: Diffing extras/complex_numbers/tests
cvs diff: Diffing extras/concurrency
cvs diff: Diffing extras/curs
cvs diff: Diffing extras/curs/samples
cvs diff: Diffing extras/curses
cvs diff: Diffing extras/curses/sample
cvs diff: Diffing extras/dynamic_linking
cvs diff: Diffing extras/error
cvs diff: Diffing extras/fixed
cvs diff: Diffing extras/gator
cvs diff: Diffing extras/gator/generations
cvs diff: Diffing extras/gator/generations/1
cvs diff: Diffing extras/graphics
cvs diff: Diffing extras/graphics/easyx
cvs diff: Diffing extras/graphics/easyx/samples
cvs diff: Diffing extras/graphics/mercury_allegro
cvs diff: Diffing extras/graphics/mercury_allegro/examples
cvs diff: Diffing extras/graphics/mercury_allegro/samples
cvs diff: Diffing extras/graphics/mercury_allegro/samples/demo
cvs diff: Diffing extras/graphics/mercury_allegro/samples/mandel
cvs diff: Diffing extras/graphics/mercury_allegro/samples/pendulum2
cvs diff: Diffing extras/graphics/mercury_allegro/samples/speed
cvs diff: Diffing extras/graphics/mercury_glut
cvs diff: Diffing extras/graphics/mercury_opengl
cvs diff: Diffing extras/graphics/mercury_tcltk
cvs diff: Diffing extras/graphics/samples
cvs diff: Diffing extras/graphics/samples/calc
cvs diff: Diffing extras/graphics/samples/gears
cvs diff: Diffing extras/graphics/samples/maze
cvs diff: Diffing extras/graphics/samples/pent
cvs diff: Diffing extras/lazy_evaluation
cvs diff: Diffing extras/lex
cvs diff: Diffing extras/lex/samples
cvs diff: Diffing extras/lex/tests
cvs diff: Diffing extras/log4m
cvs diff: Diffing extras/logged_output
cvs diff: Diffing extras/moose
cvs diff: Diffing extras/moose/samples
cvs diff: Diffing extras/moose/tests
cvs diff: Diffing extras/mopenssl
cvs diff: Diffing extras/morphine
cvs diff: Diffing extras/morphine/non-regression-tests
cvs diff: Diffing extras/morphine/scripts
cvs diff: Diffing extras/morphine/source
cvs diff: Diffing extras/net
cvs diff: Diffing extras/odbc
cvs diff: Diffing extras/posix
cvs diff: Diffing extras/posix/samples
cvs diff: Diffing extras/quickcheck
cvs diff: Diffing extras/quickcheck/tutes
cvs diff: Diffing extras/references
cvs diff: Diffing extras/references/samples
cvs diff: Diffing extras/references/tests
cvs diff: Diffing extras/solver_types
cvs diff: Diffing extras/solver_types/library
cvs diff: Diffing extras/trailed_update
cvs diff: Diffing extras/trailed_update/samples
cvs diff: Diffing extras/trailed_update/tests
cvs diff: Diffing extras/windows_installer_generator
cvs diff: Diffing extras/windows_installer_generator/sample
cvs diff: Diffing extras/windows_installer_generator/sample/images
cvs diff: Diffing extras/xml
cvs diff: Diffing extras/xml/samples
cvs diff: Diffing extras/xml_stylesheets
cvs diff: Diffing java
cvs diff: Diffing java/runtime
cvs diff: Diffing library
cvs diff: Diffing mdbcomp
cvs diff: Diffing profiler
cvs diff: Diffing robdd
cvs diff: Diffing runtime
cvs diff: Diffing runtime/GETOPT
cvs diff: Diffing runtime/machdeps
cvs diff: Diffing samples
cvs diff: Diffing samples/c_interface
cvs diff: Diffing samples/c_interface/c_calls_mercury
cvs diff: Diffing samples/c_interface/cplusplus_calls_mercury
cvs diff: Diffing samples/c_interface/mercury_calls_c
cvs diff: Diffing samples/c_interface/mercury_calls_cplusplus
cvs diff: Diffing samples/c_interface/mercury_calls_fortran
cvs diff: Diffing samples/c_interface/simpler_c_calls_mercury
cvs diff: Diffing samples/c_interface/simpler_cplusplus_calls_mercury
cvs diff: Diffing samples/c_interface/standalone_c
cvs diff: Diffing samples/diff
cvs diff: Diffing samples/muz
cvs diff: Diffing samples/rot13
cvs diff: Diffing samples/solutions
cvs diff: Diffing samples/solver_types
cvs diff: Diffing samples/tests
cvs diff: Diffing samples/tests/c_interface
cvs diff: Diffing samples/tests/c_interface/c_calls_mercury
cvs diff: Diffing samples/tests/c_interface/cplusplus_calls_mercury
cvs diff: Diffing samples/tests/c_interface/mercury_calls_c
cvs diff: Diffing samples/tests/c_interface/mercury_calls_cplusplus
cvs diff: Diffing samples/tests/c_interface/mercury_calls_fortran
cvs diff: Diffing samples/tests/c_interface/simpler_c_calls_mercury
cvs diff: Diffing samples/tests/c_interface/simpler_cplusplus_calls_mercury
cvs diff: Diffing samples/tests/diff
cvs diff: Diffing samples/tests/muz
cvs diff: Diffing samples/tests/rot13
cvs diff: Diffing samples/tests/solutions
cvs diff: Diffing samples/tests/toplevel
cvs diff: Diffing scripts
cvs diff: Diffing slice
cvs diff: Diffing ssdb
cvs diff: Diffing tests
cvs diff: Diffing tests/analysis
cvs diff: Diffing tests/analysis/ctgc
cvs diff: Diffing tests/analysis/excp
cvs diff: Diffing tests/analysis/ext
cvs diff: Diffing tests/analysis/sharing
cvs diff: Diffing tests/analysis/table
cvs diff: Diffing tests/analysis/trail
cvs diff: Diffing tests/analysis/unused_args
cvs diff: Diffing tests/benchmarks
cvs diff: Diffing tests/debugger
cvs diff: Diffing tests/debugger/declarative
cvs diff: Diffing tests/dppd
cvs diff: Diffing tests/general
cvs diff: Diffing tests/general/accumulator
cvs diff: Diffing tests/general/string_format
cvs diff: Diffing tests/general/structure_reuse
cvs diff: Diffing tests/grade_subdirs
cvs diff: Diffing tests/hard_coded
cvs diff: Diffing tests/hard_coded/exceptions
cvs diff: Diffing tests/hard_coded/purity
cvs diff: Diffing tests/hard_coded/sub-modules
cvs diff: Diffing tests/hard_coded/typeclasses
cvs diff: Diffing tests/invalid
cvs diff: Diffing tests/invalid/purity
cvs diff: Diffing tests/misc_tests
cvs diff: Diffing tests/mmc_make
cvs diff: Diffing tests/mmc_make/lib
cvs diff: Diffing tests/par_conj
cvs diff: Diffing tests/recompilation
cvs diff: Diffing tests/stm
cvs diff: Diffing tests/stm/orig
cvs diff: Diffing tests/stm/orig/stm-compiler
cvs diff: Diffing tests/stm/orig/stm-compiler/test1
cvs diff: Diffing tests/stm/orig/stm-compiler/test10
cvs diff: Diffing tests/stm/orig/stm-compiler/test2
cvs diff: Diffing tests/stm/orig/stm-compiler/test3
cvs diff: Diffing tests/stm/orig/stm-compiler/test4
cvs diff: Diffing tests/stm/orig/stm-compiler/test5
cvs diff: Diffing tests/stm/orig/stm-compiler/test6
cvs diff: Diffing tests/stm/orig/stm-compiler/test7
cvs diff: Diffing tests/stm/orig/stm-compiler/test8
cvs diff: Diffing tests/stm/orig/stm-compiler/test9
cvs diff: Diffing tests/stm/orig/stm-compiler-par
cvs diff: Diffing tests/stm/orig/stm-compiler-par/bm1
cvs diff: Diffing tests/stm/orig/stm-compiler-par/bm2
cvs diff: Diffing tests/stm/orig/stm-compiler-par/stmqueue
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test1
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test10
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test11
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test2
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test3
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test4
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test5
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test6
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test7
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test8
cvs diff: Diffing tests/stm/orig/stm-compiler-par/test9
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test1
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test2
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test3
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test4
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test5
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test6
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test7
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test8
cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test9
cvs diff: Diffing tests/tabling
cvs diff: Diffing tests/term
cvs diff: Diffing tests/trailing
cvs diff: Diffing tests/valid
cvs diff: Diffing tests/warnings
cvs diff: Diffing tools
cvs diff: Diffing trace
cvs diff: Diffing util
cvs diff: Diffing vim
cvs diff: Diffing vim/after
cvs diff: Diffing vim/ftplugin
cvs diff: Diffing vim/syntax
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list