[m-rev.] diff: eliminate unused const structs
Zoltan Somogyi
zs at unimelb.edu.au
Sat Jun 9 14:13:27 AEST 2012
compiler/dead_proc_elim.m:
Eliminate const structs that are not referenced in the rest of the
HLDS.
compiler/const_struct.m:
Provide the facilities that make that possible.
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/extra
cvs diff: Diffing boehm_gc/include
cvs diff: Diffing boehm_gc/include/extra
cvs diff: Diffing boehm_gc/include/private
cvs diff: Diffing boehm_gc/libatomic_ops
cvs diff: Diffing boehm_gc/libatomic_ops/doc
cvs diff: Diffing boehm_gc/libatomic_ops/src
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/armcc
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/gcc
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/hpc
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/ibmc
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/icc
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/msftc
cvs diff: Diffing boehm_gc/libatomic_ops/src/atomic_ops/sysdeps/sunc
cvs diff: Diffing boehm_gc/libatomic_ops/tests
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/tests
cvs diff: Diffing boehm_gc/m4
cvs diff: Diffing boehm_gc/tests
cvs diff: Diffing browser
cvs diff: Diffing bytecode
cvs diff: Diffing compiler
Index: compiler/const_struct.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/const_struct.m,v
retrieving revision 1.1
diff -u -b -r1.1 const_struct.m
--- compiler/const_struct.m 8 Jun 2012 15:36:54 -0000 1.1
+++ compiler/const_struct.m 9 Jun 2012 04:00:45 -0000
@@ -26,11 +26,25 @@
:- import_module map.
:- type const_struct
- ---> const_struct(cons_id, list(const_struct_arg), mer_type, mer_inst).
+ ---> const_struct(
+ % The constant structured term: the data constructor,
+ % and its arguments.
+ cs_cons_id :: cons_id,
+ cs_args :: list(const_struct_arg),
+
+ % The type and inst of the term.
+ cs_term_type :: mer_type,
+ cs_term_int :: mer_inst
+ ).
:- type const_struct_arg
---> csa_const_struct(int)
+ % The argument is a reference to another constant structure.
+ % The argument gives the id of that structure.
+
; csa_constant(cons_id, mer_type).
+ % The argument is an arity-zero cons_id. The second argument
+ % gives its type.
:- type const_struct_db.
@@ -83,6 +97,11 @@
:- pred insert_constant_instance(const_instance_id::in, int::in,
const_struct_db::in, const_struct_db::out) is det.
+ % Mark the constant structure with the given number as logically deleted.
+ %
+:- pred delete_const_struct(int::in,
+ const_struct_db::in, const_struct_db::out) is det.
+
% Get the list of constant structures to generate.
% If the assoc list contains N elements, the keys are guaranteed to be
% the integers 0 .. N-1 in ascending order.
@@ -132,7 +151,7 @@
),
Enabled = no
),
- Db = const_struct_db(Enabled, 0, map.init, map.init, [], map.init).
+ Db = const_struct_db(Enabled, 0, map.init, map.init, map.init).
lookup_insert_const_struct(ConstStruct, ConstNum, !Db) :-
const_struct_db_get_struct_map(!.Db, StructMap0),
@@ -157,11 +176,7 @@
const_struct_db_get_num_map(!.Db, NumMap0),
map.det_insert(ConstNum, ConstStruct, NumMap0, NumMap),
- const_struct_db_set_num_map(NumMap, !Db),
-
- const_struct_db_get_rev_structs(!.Db, RevStructs0),
- RevStructs = [ConstNum - ConstStruct | RevStructs0],
- const_struct_db_set_rev_structs(RevStructs, !Db)
+ const_struct_db_set_num_map(NumMap, !Db)
)
).
@@ -169,10 +184,6 @@
const_struct_db_get_num_map(Db, NumMap),
map.lookup(NumMap, ConstNum, ConstStruct).
-const_struct_db_get_structs(Db, Structs) :-
- const_struct_db_get_rev_structs(Db, RevStructs),
- list.reverse(RevStructs, Structs).
-
search_for_constant_instance(Db, InstanceId, ConstNum) :-
const_struct_db_get_instance_map(Db, InstanceMap),
map.search(InstanceMap, InstanceId, ConstNum).
@@ -182,6 +193,19 @@
map.det_insert(InstanceId, ConstNum, InstanceMap0, InstanceMap),
const_struct_db_set_instance_map(InstanceMap, !Db).
+delete_const_struct(ConstNum, !Db) :-
+ const_struct_db_get_num_map(!.Db, NumMap0),
+ map.det_remove(ConstNum, ConstStruct, NumMap0, NumMap),
+ const_struct_db_set_num_map(NumMap, !Db),
+
+ const_struct_db_get_struct_map(!.Db, StructMap0),
+ map.det_remove(ConstStruct, _ConstNum, StructMap0, StructMap),
+ const_struct_db_set_struct_map(StructMap, !Db).
+
+const_struct_db_get_structs(Db, Structs) :-
+ const_struct_db_get_num_map(Db, NumMap),
+ map.to_assoc_list(NumMap, Structs).
+
%-----------------------------------------------------------------------------%
:- type const_struct_db
@@ -190,7 +214,6 @@
csdb_next_num :: int,
csdb_struct_map :: map(const_struct, int),
csdb_num_map :: map(int, const_struct),
- csdb_rev_structs :: assoc_list(int, const_struct),
csdb_instance_map :: const_instance_map
).
@@ -199,8 +222,6 @@
map(const_struct, int)::out) is det.
:- pred const_struct_db_get_num_map(const_struct_db::in,
map(int, const_struct)::out) is det.
-:- pred const_struct_db_get_rev_structs(const_struct_db::in,
- assoc_list(int, const_struct)::out) is det.
:- pred const_struct_db_get_instance_map(const_struct_db::in,
const_instance_map::out) is det.
@@ -208,7 +229,6 @@
const_struct_db_get_next_num(Db, Db ^ csdb_next_num).
const_struct_db_get_struct_map(Db, Db ^ csdb_struct_map).
const_struct_db_get_num_map(Db, Db ^ csdb_num_map).
-const_struct_db_get_rev_structs(Db, Db ^ csdb_rev_structs).
const_struct_db_get_instance_map(Db, Db ^ csdb_instance_map).
:- pred const_struct_db_set_next_num(int::in,
@@ -217,8 +237,6 @@
const_struct_db::in, const_struct_db::out) is det.
:- pred const_struct_db_set_num_map(map(int, const_struct)::in,
const_struct_db::in, const_struct_db::out) is det.
-:- pred const_struct_db_set_rev_structs(assoc_list(int, const_struct)::in,
- const_struct_db::in, const_struct_db::out) is det.
:- pred const_struct_db_set_instance_map(const_instance_map::in,
const_struct_db::in, const_struct_db::out) is det.
@@ -228,8 +246,6 @@
!Db ^ csdb_struct_map := StructMap.
const_struct_db_set_num_map(NumMap, !Db) :-
!Db ^ csdb_num_map := NumMap.
-const_struct_db_set_rev_structs(RevStructs, !Db) :-
- !Db ^ csdb_rev_structs := RevStructs.
const_struct_db_set_instance_map(InstanceMap, !Db) :-
!Db ^ csdb_instance_map := InstanceMap.
Index: compiler/dead_proc_elim.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/dead_proc_elim.m,v
retrieving revision 1.145
diff -u -b -r1.145 dead_proc_elim.m
--- compiler/dead_proc_elim.m 8 Jun 2012 15:36:54 -0000 1.145
+++ compiler/dead_proc_elim.m 9 Jun 2012 04:00:45 -0000
@@ -36,8 +36,9 @@
---> elim_opt_imported
; do_not_elim_opt_imported.
- % Eliminate dead procedures. If the first argument is `elim_opt_imported',
- % also eliminate any opt_imported procedures.
+ % Eliminate dead procedures and/or constant structures.
+ % If the first argument is `elim_opt_imported', also eliminate
+ % any opt_imported procedures.
%
% The last argument will be a list of warnings about any user-defined
% procedures that are dead, but the caller is free to ignore this list.
@@ -50,7 +51,8 @@
:- type entity
---> entity_proc(pred_id, proc_id)
; entity_table_struct(pred_id, proc_id)
- ; entity_type_ctor(module_name, string, int).
+ ; entity_type_ctor(module_name, string, int)
+ ; entity_const_struct(int).
:- type maybe_needed
---> not_eliminable
@@ -104,7 +106,8 @@
%-----------------------------------------------------------------------------%
-% We deal with two kinds of entities, procedures and type_ctor_info structures.
+% We deal with three kinds of entities, procedures, type_ctor_info structures
+% and constant structures.
%
% The algorithm has three main data structures:
%
@@ -123,8 +126,9 @@
% definition to find all mention of other entities. Their ids are then
% put into both the needed map and the queue.
%
-% The final pass of the algorithm deletes from the HLDS any procedure
-% or type_ctor_info structure whose id is not in the needed map.
+% The final pass of the algorithm deletes from the HLDS any procedure,
+% type_ctor_info structure or constant structure whose id is not in the
+% needed map.
:- type entity_queue == queue(entity).
:- type examined_set == set_tree234(entity).
@@ -168,11 +172,7 @@
module_info_get_class_table(!.ModuleInfo, Classes),
module_info_get_instance_table(!.ModuleInfo, Instances),
- dead_proc_initialize_class_methods(Classes, Instances, !Queue, !Needed),
-
- module_info_get_const_struct_db(!.ModuleInfo, ConstStructDb),
- const_struct_db_get_structs(ConstStructDb, ConstStructs),
- dead_proc_initialize_const_structs(ConstStructs, !Queue, !Needed).
+ dead_proc_initialize_class_methods(Classes, Instances, !Queue, !Needed).
% Add all normally exported procedures within the listed predicates
% to the queue and map.
@@ -313,46 +313,6 @@
queue.put(Entity, !Queue),
map.set(Entity, not_eliminable, !Needed).
-:- pred dead_proc_initialize_const_structs(assoc_list(int, const_struct)::in,
- entity_queue::in, entity_queue::out, needed_map::in, needed_map::out)
- is det.
-
-dead_proc_initialize_const_structs([], !Queue, !Needed).
-dead_proc_initialize_const_structs([_ - ConstStruct | ConstStructs],
- !Queue, !Needed) :-
- ConstStruct = const_struct(ConsId, Args, _, _),
- ( ConsId = type_ctor_info_const(Module, TypeName, Arity) ->
- Entity = entity_type_ctor(Module, TypeName, Arity),
- queue.put(Entity, !Queue),
- map.set(Entity, not_eliminable, !Needed)
- ;
- true
- ),
- dead_proc_initialize_const_struct_args(Args, !Queue, !Needed),
- dead_proc_initialize_const_structs(ConstStructs, !Queue, !Needed).
-
-:- pred dead_proc_initialize_const_struct_args(list(const_struct_arg)::in,
- entity_queue::in, entity_queue::out, needed_map::in, needed_map::out)
- is det.
-
-dead_proc_initialize_const_struct_args([], !Queue, !Needed).
-dead_proc_initialize_const_struct_args([Arg | Args], !Queue, !Needed) :-
- (
- Arg = csa_const_struct(_)
- % Do nothing. Any processing takes place when
- % dead_proc_initialize_const_structs looks at the referenced structure.
- ;
- Arg = csa_constant(ConsId, _),
- ( ConsId = type_ctor_info_const(Module, TypeName, Arity) ->
- Entity = entity_type_ctor(Module, TypeName, Arity),
- queue.put(Entity, !Queue),
- map.set(Entity, not_eliminable, !Needed)
- ;
- true
- )
- ),
- dead_proc_initialize_const_struct_args(Args, !Queue, !Needed).
-
%-----------------------------------------------------------------------------%
:- pred dead_proc_examine(entity_queue::in, examined_set::in,
@@ -377,6 +337,10 @@
Entity = entity_type_ctor(Module, Type, Arity),
dead_proc_examine_type_ctor_info(Module, Type, Arity,
ModuleInfo, !Queue, !Needed)
+ ;
+ Entity = entity_const_struct(ConstNum),
+ dead_proc_examine_const_struct(ModuleInfo, ConstNum,
+ !Queue, !Needed)
),
dead_proc_examine(!.Queue, !.Examined, ModuleInfo, !Needed)
)
@@ -418,12 +382,6 @@
Refs)
).
-:- pred maybe_add_ref(maybe(pred_proc_id)::in,
- list(pred_proc_id)::in, list(pred_proc_id)::out) is det.
-
-maybe_add_ref(no, Refs, Refs).
-maybe_add_ref(yes(Ref), Refs, [Ref | Refs]).
-
:- pred dead_proc_examine_refs(list(pred_proc_id)::in,
entity_queue::in, entity_queue::out, needed_map::in, needed_map::out)
is det.
@@ -438,12 +396,53 @@
%-----------------------------------------------------------------------------%
+:- pred dead_proc_examine_const_struct(module_info::in, int::in,
+ entity_queue::in, entity_queue::out, needed_map::in, needed_map::out)
+ is det.
+
+dead_proc_examine_const_struct(ModuleInfo, ConstNum, !Queue, !Needed) :-
+ module_info_get_const_struct_db(ModuleInfo, ConstStructDb),
+ lookup_const_struct_num(ConstStructDb, ConstNum, ConstStruct),
+ ConstStruct = const_struct(ConsId, Args, _, _),
+ ( ConsId = type_ctor_info_const(Module, TypeName, Arity) ->
+ Entity = entity_type_ctor(Module, TypeName, Arity),
+ queue.put(Entity, !Queue),
+ map.set(Entity, not_eliminable, !Needed)
+ ;
+ true
+ ),
+ dead_proc_examine_const_struct_args(Args, !Queue, !Needed).
+
+:- pred dead_proc_examine_const_struct_args(list(const_struct_arg)::in,
+ entity_queue::in, entity_queue::out, needed_map::in, needed_map::out)
+ is det.
+
+dead_proc_examine_const_struct_args([], !Queue, !Needed).
+dead_proc_examine_const_struct_args([Arg | Args], !Queue, !Needed) :-
+ (
+ Arg = csa_const_struct(ConstNum),
+ Entity = entity_const_struct(ConstNum),
+ queue.put(Entity, !Queue),
+ map.set(Entity, not_eliminable, !Needed)
+ ;
+ Arg = csa_constant(ConsId, _),
+ ( ConsId = type_ctor_info_const(Module, TypeName, Arity) ->
+ Entity = entity_type_ctor(Module, TypeName, Arity),
+ queue.put(Entity, !Queue),
+ map.set(Entity, not_eliminable, !Needed)
+ ;
+ true
+ )
+ ),
+ dead_proc_examine_const_struct_args(Args, !Queue, !Needed).
+
+%-----------------------------------------------------------------------------%
+
:- pred dead_proc_examine_proc(pred_proc_id::in, module_info::in,
entity_queue::in, entity_queue::out, needed_map::in, needed_map::out)
is det.
-dead_proc_examine_proc(proc(PredId, ProcId), ModuleInfo,
- !Queue, !Needed) :-
+dead_proc_examine_proc(proc(PredId, ProcId), ModuleInfo, !Queue, !Needed) :-
(
module_info_get_preds(ModuleInfo, PredTable),
map.lookup(PredTable, PredId, PredInfo),
@@ -557,7 +556,7 @@
io.write_int(proc_id_to_int(ProcId), !IO),
io.nl(!IO)
),
- % If it's reachable and recursive, then we can't eliminate it
+ % If it is reachable and recursive, then we cannot eliminate it
% or inline it.
NewNotation = not_eliminable,
map.set(Entity, NewNotation, !Needed)
@@ -593,7 +592,7 @@
io.nl(!IO)
),
NewNotation = maybe_eliminable(1),
- map.set(Entity, NewNotation, !Needed)
+ map.det_insert(Entity, NewNotation, !Needed)
)
;
GoalExpr = call_foreign_proc(_, PredId, ProcId, _, _, _, _),
@@ -643,6 +642,13 @@
queue.put(Entity, !Queue),
map.set(Entity, not_eliminable, !Needed)
;
+ ( ConsId = type_info_const(ConstNum)
+ ; ConsId = typeclass_info_const(ConstNum)
+ ),
+ Entity = entity_const_struct(ConstNum),
+ queue.put(Entity, !Queue),
+ map.set(Entity, not_eliminable, !Needed)
+ ;
( ConsId = cons(_, _, _)
; ConsId = tuple_cons(_)
; ConsId = int_const(_)
@@ -653,8 +659,6 @@
; ConsId = base_typeclass_info_const(_, _, _, _)
; ConsId = type_info_cell_constructor(_)
; ConsId = typeclass_info_cell_constructor
- ; ConsId = type_info_const(_)
- ; ConsId = typeclass_info_const(_)
; ConsId = deep_profiling_proc_layout(_)
; ConsId = table_io_decl(_)
)
@@ -665,7 +669,8 @@
; Unification = assign(_, _)
; Unification = simple_test(_, _)
)
- % Do nothing.
+ % Do nothing. These kinds of unifications cannot include
+ % the kinds of cons_ids that we are looking for.
;
Unification = complicated_unify(_, _, _),
% These should have been replaced with calls by now.
@@ -692,7 +697,7 @@
% in this table may be eliminated.
proc_elim_pred_table :: pred_table,
- % Has anything changed.
+ % Has anything changed that could affect dependency_info.
proc_elim_changed :: bool,
% A list of warning messages.
@@ -708,7 +713,6 @@
dead_proc_eliminate(ElimOptImported, !.Needed, !ModuleInfo, Specs) :-
module_info_get_valid_predids(PredIds, !ModuleInfo),
module_info_get_preds(!.ModuleInfo, PredTable0),
-
Changed0 = no,
ProcElimInfo0 = proc_elim_info(!.Needed, !.ModuleInfo, PredTable0,
Changed0, []),
@@ -716,8 +720,8 @@
ProcElimInfo0, ProcElimInfo),
ProcElimInfo = proc_elim_info(!:Needed, !:ModuleInfo, PredTable,
Changed, Specs),
-
module_info_set_preds(PredTable, !ModuleInfo),
+
module_info_get_type_ctor_gen_infos(!.ModuleInfo, TypeCtorGenInfos0),
dead_proc_eliminate_type_ctor_infos(TypeCtorGenInfos0, !.Needed,
TypeCtorGenInfos),
@@ -728,6 +732,12 @@
% only in C code embedded in compiler-generated foreign_procs, and
% therefore we might accidentally create dangling references.
+ module_info_get_const_struct_db(!.ModuleInfo, ConstStructDb0),
+ const_struct_db_get_structs(ConstStructDb0, ConstNumStructs0),
+ dead_proc_eliminate_const_structs(ConstNumStructs0, !.Needed,
+ ConstStructDb0, ConstStructDb),
+ module_info_set_const_struct_db(ConstStructDb, !ModuleInfo),
+
(
Changed = yes,
% The dependency graph will still contain references to the eliminated
@@ -919,6 +929,21 @@
TypeCtorGenInfos = TypeCtorGenInfos1
).
+:- pred dead_proc_eliminate_const_structs(assoc_list(int, const_struct)::in,
+ needed_map::in, const_struct_db::in, const_struct_db::out) is det.
+
+dead_proc_eliminate_const_structs([], _Needed, !ConstStructDb).
+dead_proc_eliminate_const_structs([ConstNum - _ | ConstNumStructs], Needed,
+ !ConstStructDb) :-
+ Entity = entity_const_struct(ConstNum),
+ ( map.search(Needed, Entity, _) ->
+ true
+ ;
+ delete_const_struct(ConstNum, !ConstStructDb)
+ ),
+ dead_proc_eliminate_const_structs(ConstNumStructs, Needed,
+ !ConstStructDb).
+
%-----------------------------------------------------------------------------%
%-----------------------------------------------------------------------------%
@@ -1004,11 +1029,12 @@
queue(pred_id)::out, set_tree234(pred_id)::in, set_tree234(pred_id)::out)
is det.
-dead_pred_elim_add_entity(entity_type_ctor(_, _, _), !Queue, !Preds).
-dead_pred_elim_add_entity(entity_table_struct(_, _), !Queue, !Preds).
dead_pred_elim_add_entity(entity_proc(PredId, _), !Queue, !Preds) :-
queue.put(PredId, !Queue),
set_tree234.insert(PredId, !Preds).
+dead_pred_elim_add_entity(entity_table_struct(_, _), !Queue, !Preds).
+dead_pred_elim_add_entity(entity_type_ctor(_, _, _), !Queue, !Preds).
+dead_pred_elim_add_entity(entity_const_struct(_), !Queue, !Preds).
:- pred dead_pred_elim_initialize(pred_id::in,
pred_elim_info::in, pred_elim_info::out) is det.
cvs diff: Diffing compiler/notes
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/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_cairo
cvs diff: Diffing extras/graphics/mercury_cairo/samples
cvs diff: Diffing extras/graphics/mercury_cairo/samples/data
cvs diff: Diffing extras/graphics/mercury_cairo/tutorial
cvs diff: Diffing extras/graphics/mercury_glfw
cvs diff: Diffing extras/graphics/mercury_glfw/samples
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/monte
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 m4
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/appengine
cvs diff: Diffing samples/appengine/war
cvs diff: Diffing samples/appengine/war/WEB-INF
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/concurrency
cvs diff: Diffing samples/concurrency/dining_philosophers
cvs diff: Diffing samples/concurrency/midimon
cvs diff: Diffing samples/diff
cvs diff: Diffing samples/java_interface
cvs diff: Diffing samples/java_interface/java_calls_mercury
cvs diff: Diffing samples/java_interface/mercury_calls_java
cvs diff: Diffing samples/lazy_list
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/feedback
cvs diff: Diffing tests/feedback/mandelbrot
cvs diff: Diffing tests/feedback/mmc
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