[m-rev.] diff: dumping inst tables

Zoltan Somogyi zs at unimelb.edu.au
Thu Apr 5 15:56:47 AEST 2012


compiler/hlds_out_module.m:
	Implement the dumping of inst tables.

	Do not dump the pred table unless asked.

compiler/hlds_out_mode.m:
	Fix an abort: convert all cons_ids in insts to terms, not just some.

	Make the argument order consistent between different functions.

	Export a predicate.

compiler/prog_data.m:
	Fix indentation.

compiler/options.m:
doc/usr_guide.texi:
	Add an option, --dump-hlds-inst-limit, that controls how many insts
	we can dump. (The inst tables can get pretty big, because each entry
	may contain a big inst.)

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/hlds_data.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/hlds_data.m,v
retrieving revision 1.141
diff -u -b -r1.141 hlds_data.m
--- compiler/hlds_data.m	2 Sep 2011 02:41:57 -0000	1.141
+++ compiler/hlds_data.m	5 Apr 2012 03:43:09 -0000
@@ -1007,8 +1007,12 @@
 
 :- type user_inst_table.
 :- type user_inst_defns ==  map(inst_id, hlds_inst_defn).
-
 :- type unify_inst_table == map(inst_name, maybe_inst_det).
+:- type merge_inst_table ==         map(pair(mer_inst), maybe_inst).
+:- type ground_inst_table ==        map(inst_name, maybe_inst_det).
+:- type any_inst_table ==           map(inst_name, maybe_inst_det).
+:- type shared_inst_table ==        map(inst_name, maybe_inst).
+:- type mostly_uniq_inst_table ==   map(inst_name, maybe_inst).
 
 :- type unify_inst_pair
     --->    unify_inst_pair(
@@ -1018,16 +1022,6 @@
                 unify_is_real
             ).
 
-:- type merge_inst_table == map(pair(mer_inst), maybe_inst).
-
-:- type ground_inst_table ==    map(inst_name, maybe_inst_det).
-
-:- type any_inst_table ==   map(inst_name, maybe_inst_det).
-
-:- type shared_inst_table ==    map(inst_name, maybe_inst).
-
-:- type mostly_uniq_inst_table == map(inst_name, maybe_inst).
-
 :- type maybe_inst
     --->    inst_unknown
     ;       inst_known(mer_inst).
@@ -1166,8 +1160,8 @@
 user_inst_table_insert(InstId, InstDefn, !UserInstDefns) :-
     map.insert(InstId, InstDefn, !UserInstDefns).
 
-user_inst_table_optimize(UserInstDefns0, UserInstDefns) :-
-    map.optimize(UserInstDefns0, UserInstDefns).
+user_inst_table_optimize(!UserInstDefns) :-
+    map.optimize(!UserInstDefns).
 
 %-----------------------------------------------------------------------------%
 %-----------------------------------------------------------------------------%
Index: compiler/hlds_out_mode.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/hlds_out_mode.m,v
retrieving revision 1.6
diff -u -b -r1.6 hlds_out_mode.m
--- compiler/hlds_out_mode.m	27 Mar 2012 23:21:27 -0000	1.6
+++ compiler/hlds_out_mode.m	5 Apr 2012 05:22:33 -0000
@@ -40,6 +40,7 @@
 :- func mode_to_term(mer_mode) = prog_term.
 :- func mode_to_term_with_context(term.context, mer_mode) = prog_term.
 :- func inst_to_term(mer_inst) = prog_term.
+:- func inst_name_to_term(inst_name) = prog_term.
 
 %-----------------------------------------------------------------------------%
 
@@ -117,6 +118,7 @@
 :- import_module set.
 :- import_module string.
 :- import_module term.
+:- import_module term_io.
 :- import_module varset.
 
 %-----------------------------------------------------------------------------%
@@ -228,10 +230,10 @@
             Vars, inst_to_term_with_context(SubInst, Context))
     ;
         Inst = abstract_inst(Name, Args),
-        Term = inst_name_to_term(user_inst(Name, Args), Context)
+        Term = inst_name_to_term_with_context(Context, user_inst(Name, Args))
     ;
         Inst = defined_inst(InstName),
-        Term = inst_name_to_term(InstName, Context)
+        Term = inst_name_to_term_with_context(Context, InstName)
     ;
         Inst = not_reached,
         Term = make_atom("not_reached", Context)
@@ -285,9 +287,12 @@
     construct_qualified_term(unqualified("is"),
         [ModesTerm, det_to_term(Det, Context)], Context, Term).
 
-:- func inst_name_to_term(inst_name, prog_context) = prog_term.
+inst_name_to_term(InstName) =
+    inst_name_to_term_with_context(term.context_init, InstName).
 
-inst_name_to_term(InstName, Context) = Term :-
+:- func inst_name_to_term_with_context(prog_context, inst_name) = prog_term.
+
+inst_name_to_term_with_context(Context, InstName) = Term :-
     (
         InstName = user_inst(Name, Args),
         construct_qualified_term(Name,
@@ -301,12 +306,12 @@
     ;
         InstName = shared_inst(SubInstName),
         construct_qualified_term(unqualified("$shared_inst"),
-            [inst_name_to_term(SubInstName, Context)],
+            [inst_name_to_term_with_context(Context, SubInstName)],
             Context, Term)
     ;
         InstName = mostly_uniq_inst(SubInstName),
         construct_qualified_term(unqualified("$mostly_uniq_inst"),
-            [inst_name_to_term(SubInstName, Context)],
+            [inst_name_to_term_with_context(Context, SubInstName)],
             Context, Term)
     ;
         InstName = unify_inst(Liveness, InstA, InstB, Real),
@@ -318,7 +323,7 @@
     ;
         InstName = ground_inst(SubInstName, IsLive, Uniq, Real),
         construct_qualified_term(unqualified("$ground"),
-            [inst_name_to_term(SubInstName, Context),
+            [inst_name_to_term_with_context(Context, SubInstName),
             make_atom(is_live_to_str(IsLive), Context),
             make_atom(inst_uniqueness(Uniq, "shared"), Context),
             make_atom(unify_is_real_to_str(Real), Context)],
@@ -326,7 +331,7 @@
     ;
         InstName = any_inst(SubInstName, IsLive, Uniq, Real),
         construct_qualified_term(unqualified("$any"),
-            [inst_name_to_term(SubInstName, Context),
+            [inst_name_to_term_with_context(Context, SubInstName),
             make_atom(is_live_to_str(IsLive), Context),
             make_atom(inst_uniqueness(Uniq, "shared"), Context),
             make_atom(unify_is_real_to_str(Real), Context)],
@@ -343,7 +348,7 @@
         unparse_type(Type, Term0),
         construct_qualified_term(unqualified("$typed_inst"),
             [term.coerce(Term0),
-            inst_name_to_term(SubInstName, Context)],
+            inst_name_to_term_with_context(Context, SubInstName)],
             Context, Term)
     ).
 
@@ -380,7 +385,7 @@
 bound_insts_to_term([BoundInst | BoundInsts], Context) = Term :-
     BoundInst = bound_functor(ConsId, Args),
     ArgTerms = list.map(map_inst_to_term(Context), Args),
-    ( cons_id_and_args_to_term(ConsId, ArgTerms, FirstTerm) ->
+    cons_id_and_args_to_term_full(ConsId, ArgTerms, FirstTerm),
         (
             BoundInsts = [],
             Term = FirstTerm
@@ -389,9 +394,84 @@
             construct_qualified_term(unqualified(";"),
                 [FirstTerm, bound_insts_to_term(BoundInsts, Context)],
                 Context, Term)
-        )
+    ).
+
+:- pred cons_id_and_args_to_term_full(cons_id::in, list(prog_term)::in,
+    prog_term::out) is det.
+
+cons_id_and_args_to_term_full(ConsId, ArgTerms, Term) :-
+    (
+        ConsId = cons(SymName, _Arity, _TypeCtor),
+        construct_qualified_term(SymName, ArgTerms, Term)
     ;
-        unexpected($module, $pred, "cons_id_and_args_to_term failed")
+        ConsId = tuple_cons(_Arity),
+        SymName = unqualified("{}"),
+        construct_qualified_term(SymName, ArgTerms, Term)
+    ;
+        ConsId = closure_cons(_, _),
+        term.context_init(Context),
+        FunctorName = "closure_cons",
+        Term = term.functor(term.string(FunctorName), [], Context)
+    ;
+        ConsId = int_const(Int),
+        term.context_init(Context),
+        Term = term.functor(term.integer(Int), [], Context)
+    ;
+        ConsId = float_const(Float),
+        term.context_init(Context),
+        Term = term.functor(term.float(Float), [], Context)
+    ;
+        ConsId = string_const(String),
+        term.context_init(Context),
+        Term = term.functor(term.string(String), [], Context)
+    ;
+        ConsId = char_const(Char),
+        SymName = unqualified(term_io.escaped_char(Char)),
+        construct_qualified_term(SymName, [], Term)
+    ;
+        ConsId = impl_defined_const(String),
+        term.context_init(Context),
+        FunctorName = "ImplDefinedConst: " ++ String,
+        Term = term.functor(term.string(FunctorName), [], Context)
+    ;
+        ConsId = type_ctor_info_const(ModuleName, TypeCtorName, Arity),
+        term.context_init(Context),
+        string.format("TypeCtorInfo for %s.%s/%d",
+            [s(sym_name_to_string(ModuleName)), s(TypeCtorName), i(Arity)],
+            FunctorName),
+        Term = term.functor(term.string(FunctorName), [], Context)
+    ;
+        ConsId = base_typeclass_info_const(_, _, _, _),
+        term.context_init(Context),
+        FunctorName = "base_typeclass_info_const",
+        Term = term.functor(term.string(FunctorName), [], Context)
+    ;
+        ConsId = type_info_cell_constructor(TypeCtor),
+        TypeCtor = type_ctor(TypeCtorName, Arity),
+        term.context_init(Context),
+        string.format("type_info_cell_constructor for %s/%d",
+            [s(sym_name_to_string(TypeCtorName)), i(Arity)], FunctorName),
+        Term = term.functor(term.string(FunctorName), [], Context)
+    ;
+        ConsId = typeclass_info_cell_constructor,
+        term.context_init(Context),
+        FunctorName = "typeclass_info_cell_constructor",
+        Term = term.functor(term.string(FunctorName), [], Context)
+    ;
+        ConsId = tabling_info_const(_),
+        term.context_init(Context),
+        FunctorName = "tabling_info_const",
+        Term = term.functor(term.string(FunctorName), [], Context)
+    ;
+        ConsId = table_io_decl(_),
+        term.context_init(Context),
+        FunctorName = "table_io_decl",
+        Term = term.functor(term.string(FunctorName), [], Context)
+    ;
+        ConsId = deep_profiling_proc_layout(_),
+        term.context_init(Context),
+        FunctorName = "deep_profiling_proc_layout",
+        Term = term.functor(term.string(FunctorName), [], Context)
     ).
 
 :- func det_to_term(determinism, prog_context) = prog_term.
Index: compiler/hlds_out_module.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/hlds_out_module.m,v
retrieving revision 1.9
diff -u -b -r1.9 hlds_out_module.m
--- compiler/hlds_out_module.m	27 Mar 2012 23:21:27 -0000	1.9
+++ compiler/hlds_out_module.m	5 Apr 2012 05:44:08 -0000
@@ -43,6 +43,7 @@
 
 :- import_module hlds.hlds_data.
 :- import_module hlds.hlds_out.hlds_out_goal.
+:- import_module hlds.hlds_out.hlds_out_mode.
 :- import_module hlds.hlds_out.hlds_out_pred.
 :- import_module hlds.pred_table.
 :- import_module libs.globals.
@@ -83,6 +84,7 @@
         DumpPredNames),
     write_header(Indent, ModuleInfo, !IO),
     Info = init_hlds_out_info(Globals),
+    DumpOptions = Info ^ hoi_dump_hlds_options,
     (
         % If the user specifically requested one or more predicates and/or
         % functions to be dumped, they won't be interested in the types,
@@ -93,7 +95,6 @@
     ->
         true
     ;
-        DumpOptions = Info ^ hoi_dump_hlds_options,
         ( string.contains_char(DumpOptions, 'I') ->
             write_imports(Indent, Imports, !IO)
         ;
@@ -110,7 +111,9 @@
             true
         ),
         ( string.contains_char(DumpOptions, 'M') ->
-            write_inst_table(Indent, InstTable, !IO),
+            globals.lookup_int_option(Globals, dump_hlds_inst_limit,
+                InstLimit),
+            write_inst_table(Indent, InstLimit, InstTable, !IO),
             io.write_string("\n", !IO),
             write_mode_table(Indent, ModeTable, !IO),
             io.write_string("\n", !IO)
@@ -124,7 +127,11 @@
             true
         )
     ),
-    write_preds(Info, Indent, ModuleInfo, PredTable, !IO),
+    ( string.contains_char(DumpOptions, 'x') ->
+        write_preds(Info, Indent, ModuleInfo, PredTable, !IO)
+    ;
+        true
+    ),
     write_footer(Indent, ModuleInfo, !IO).
 
 %-----------------------------------------------------------------------------%
@@ -597,27 +604,60 @@
 % Write out the inst table.
 %
 
-:- pred write_inst_table(int::in, inst_table::in, io::di, io::uo) is det.
+:- pred write_inst_table(int::in, int::in, inst_table::in, io::di, io::uo)
+    is det.
 
-write_inst_table(Indent, InstTable, !IO) :-
+write_inst_table(Indent, Limit, InstTable, !IO) :-
     write_indent(Indent, !IO),
     io.write_string("%-------- Insts --------\n", !IO),
 
     write_indent(Indent, !IO),
     io.write_string("%-------- User defined insts --------\n", !IO),
     inst_table_get_user_insts(InstTable, UserInstTable),
-    user_inst_table_get_inst_defns(UserInstTable, UserInstDefns),
-    map.to_assoc_list(UserInstDefns, UserInstPairs),
-    list.foldl(write_user_inst(Indent), UserInstPairs, !IO),
+    user_inst_table_get_inst_defns(UserInstTable, UserInstMap),
+    map.foldl(write_user_inst(Indent), UserInstMap, !IO),
 
-    io.write_string("%-------- Other insts --------\n", !IO),
-    % XXX fix this up.
-    io.write_string("%%% Not yet implemented, sorry.\n", !IO).
+    io.write_string("%-------- Unify insts --------\n", !IO),
+    inst_table_get_unify_insts(InstTable, UnifyInstMap),
+    map.foldl2(write_inst_name_maybe_inst_det(Limit), UnifyInstMap,
+        0, NumUnifyInsts, !IO),
+    io.format("Total number of unify insts: %d\n", [i(NumUnifyInsts)], !IO),
+
+    io.write_string("%-------- Merge insts --------\n", !IO),
+    inst_table_get_merge_insts(InstTable, MergeInstMap),
+    map.foldl2(write_inst_pair_maybe_inst(Limit), MergeInstMap,
+        0, NumMergeInsts, !IO),
+    io.format("Total number of merge insts: %d\n", [i(NumMergeInsts)], !IO),
+
+    io.write_string("%-------- Ground insts --------\n", !IO),
+    inst_table_get_unify_insts(InstTable, GroundInstMap),
+    map.foldl2(write_inst_name_maybe_inst_det(Limit), GroundInstMap,
+        0, NumGroundInsts, !IO),
+    io.format("Total number of ground insts: %d\n", [i(NumGroundInsts)], !IO),
+
+    io.write_string("%-------- Any insts --------\n", !IO),
+    inst_table_get_any_insts(InstTable, AnyInstMap),
+    map.foldl2(write_inst_name_maybe_inst_det(Limit), AnyInstMap,
+        0, NumAnyInsts, !IO),
+    io.format("Total number of any insts: %d\n", [i(NumAnyInsts)], !IO),
+
+    io.write_string("%-------- Shared insts --------\n", !IO),
+    inst_table_get_shared_insts(InstTable, SharedInstMap),
+    map.foldl2(write_inst_name_maybe_inst(Limit), SharedInstMap,
+        0, NumSharedInsts, !IO),
+    io.format("Total number of shared insts: %d\n", [i(NumSharedInsts)], !IO),
+
+    io.write_string("%-------- MostlyUniq insts --------\n", !IO),
+    inst_table_get_mostly_uniq_insts(InstTable, MostlyUniqInstMap),
+    map.foldl2(write_inst_name_maybe_inst(Limit), MostlyUniqInstMap,
+        0, NumMostlyUniqInsts, !IO),
+    io.format("Total number of mostly uniq insts: %d\n",
+        [i(NumMostlyUniqInsts)], !IO).
 
-:- pred write_user_inst(int::in, pair(inst_id, hlds_inst_defn)::in,
+:- pred write_user_inst(int::in, inst_id::in, hlds_inst_defn::in,
     io::di, io::uo) is det.
 
-write_user_inst(Indent, InstId - InstDefn, !IO) :-
+write_user_inst(Indent, InstId, InstDefn, !IO) :-
     InstId = inst_id(InstName, _InstArity),
     write_indent(Indent, !IO),
     io.format("\n:- inst %s", [s(sym_name_to_string(InstName))], !IO),
@@ -656,6 +696,95 @@
         write_inst_params(HeadInstVar, TailInstVars, InstVarSet, !IO)
     ).
 
+:- pred write_inst_name_maybe_inst(int::in,
+    inst_name::in, maybe_inst::in, int::in, int::out, io::di, io::uo) is det.
+
+write_inst_name_maybe_inst(Limit, InstName, MaybeInst, !N, !IO) :-
+    !:N = !.N + 1,
+    ( !.N =< Limit ->
+        io.nl(!IO),
+        io.format("Entry %d key\n", [i(!.N)], !IO),
+        write_inst_name(InstName, !IO),
+        io.nl(!IO),
+        (
+            MaybeInst = inst_unknown,
+            io.format("Entry %d value UNKNOWN\n", [i(!.N)], !IO)
+        ;
+            MaybeInst = inst_known(Inst),
+            io.format("Entry %d value:\n", [i(!.N)], !IO),
+            write_inst(Inst, !IO),
+            io.nl(!IO)
+        )
+    ;
+        true
+    ).
+
+:- pred write_inst_name_maybe_inst_det(int::in,
+    inst_name::in, maybe_inst_det::in, int::in, int::out,
+    io::di, io::uo) is det.
+
+write_inst_name_maybe_inst_det(Limit, InstName, MaybeInstDet, !N, !IO) :-
+    !:N = !.N + 1,
+    ( !.N =< Limit ->
+        io.nl(!IO),
+        io.format("Entry %d key\n", [i(!.N)], !IO),
+        write_inst_name(InstName, !IO),
+        io.nl(!IO),
+        (
+            MaybeInstDet = inst_det_unknown,
+            io.format("Entry %d value UNKNOWN\n", [i(!.N)], !IO)
+        ;
+            MaybeInstDet = inst_det_known(Inst, Detism),
+            DetismStr = determinism_to_string(Detism),
+            io.format("Entry %d value (%s):\n", [i(!.N), s(DetismStr)], !IO),
+            write_inst(Inst, !IO),
+            io.nl(!IO)
+        )
+    ;
+        true
+    ).
+
+:- pred write_inst_pair_maybe_inst(int::in,
+    pair(mer_inst)::in, maybe_inst::in, int::in, int::out,
+    io::di, io::uo) is det.
+
+write_inst_pair_maybe_inst(Limit, InstA - InstB, MaybeInst, !N, !IO) :-
+    !:N = !.N + 1,
+    ( !.N =< Limit ->
+        io.nl(!IO),
+        io.format("Entry %d left key\n", [i(!.N)], !IO),
+        write_inst(InstA, !IO),
+        io.nl(!IO),
+        io.format("Entry %d right key\n", [i(!.N)], !IO),
+        write_inst(InstB, !IO),
+        io.nl(!IO),
+        (
+            MaybeInst = inst_unknown,
+            io.format("Entry %d value UNKNOWN\n", [i(!.N)], !IO)
+        ;
+            MaybeInst = inst_known(Inst),
+            io.format("Entry %d value:\n", [i(!.N)], !IO),
+            write_inst(Inst, !IO),
+            io.nl(!IO)
+        )
+    ;
+        true
+    ).
+
+:- pred write_inst_name(inst_name::in, io::di, io::uo) is det.
+
+write_inst_name(InstName, !IO) :-
+    InstNameTerm = inst_name_to_term(InstName),
+    varset.init(VarSet),
+    mercury_output_term(VarSet, no, InstNameTerm, !IO).
+
+:- pred write_inst(mer_inst::in, io::di, io::uo) is det.
+
+write_inst(Inst, !IO) :-
+    InstTerm = inst_to_term(Inst),
+    varset.init(VarSet),
+    mercury_output_term(VarSet, no, InstTerm, !IO).
+
 %-----------------------------------------------------------------------------%
 %
 % Write out the mode table.
Index: compiler/options.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/options.m,v
retrieving revision 1.714
diff -u -b -r1.714 options.m
--- compiler/options.m	13 Feb 2012 00:11:43 -0000	1.714
+++ compiler/options.m	5 Apr 2012 04:19:03 -0000
@@ -269,6 +269,7 @@
     ;       dump_hlds_pred_name
     ;       dump_hlds_alias
     ;       dump_hlds_options
+    ;       dump_hlds_inst_limit
     ;       dump_hlds_file_suffix
     ;       dump_same_hlds
     ;       dump_mlds
@@ -1237,6 +1238,7 @@
     dump_hlds_pred_name                 -   accumulating([]),
     dump_hlds_alias                     -   string(""),
     dump_hlds_options                   -   string(""),
+    dump_hlds_inst_limit                -   int(100),
     dump_hlds_file_suffix               -   string(""),
     dump_same_hlds                      -   bool(no),
     dump_mlds                           -   accumulating([]),
@@ -2131,6 +2133,7 @@
 long_option("dump-hlds-pred-name",      dump_hlds_pred_name).
 long_option("dump-hlds-alias",          dump_hlds_alias).
 long_option("dump-hlds-options",        dump_hlds_options).
+long_option("dump-hlds-inst-limit",     dump_hlds_inst_limit).
 long_option("dump-hlds-file-suffix",    dump_hlds_file_suffix).
 long_option("dump-same-hlds",           dump_same_hlds).
 long_option("dump-mlds",                dump_mlds).
@@ -3983,6 +3986,8 @@
         "\tEach type of detail is included in the dump if its",
         "\tcorresponding letter occurs in the option argument",
         "\t(see the Mercury User's Guide for details).",
+        "--dump-hlds-inst-limit <N>",
+        "\tDump at most N insts in each inst table.",
         "--dump-hlds-file-suffix <suffix>",
         "\tAppend the given suffix to the names of the files created by",
         "\tthe `--dump-hlds' option.",
cvs diff: Diffing compiler/notes
cvs diff: Diffing deep_profiler
cvs diff: Diffing deep_profiler/notes
cvs diff: Diffing doc
Index: doc/user_guide.texi
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/doc/user_guide.texi,v
retrieving revision 1.649
diff -u -b -r1.649 user_guide.texi
--- doc/user_guide.texi	27 Mar 2012 23:21:33 -0000	1.649
+++ doc/user_guide.texi	5 Apr 2012 04:18:59 -0000
@@ -7231,6 +7231,11 @@
 May be given more than once.
 
 @sp 1
+ at item --dump-hlds-inst-limit @var{N}
+ at findex --dump-hlds-inst-limit
+Dump at most @var{N} insts in each inst table.
+
+ at sp 1
 @item --dump-hlds-file-suffix
 @findex --dump-hlds-file-suffix
 Append the given suffix to the names of the files created by the
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