[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