[m-rev.] For review: add --simplify-stage-215 and extra information to the exception seen in bug90.

Paul Bone pbone at csse.unimelb.edu.au
Fri Feb 27 11:11:08 AEDT 2009


For review by anyone.

Estimated hours taken: 1.0 
Branches: main

In the case of an inconsitent rtti_type_infos error print the variable and the
rtti_type_infos that cause this error.

Add an option to allow an explicit simplification pass to occur at stage 215
even when profiling is not being used, this is helpful in detecting bugs in
generated code before the dead procedure elimination removes them.

compiler/hlds_rtti.m:
	As above.

compiler/options.m:
	Introduce the new --simplify-stage-215 option.

compiler/handle_options.m:
	The logic that ensures that --profile_deep, --record-term-sizes-as-words
	and --record-term-sizes-as-cells imply --simplify-stage-215 has been added
	here, it was orgionally in the simplify predicate of mercury_compile.m

compiler/mercury_compile.m:
	Rename simplify to maybe_simplify.
	Refactor maybe_simplify, it now uses --simplify-stage-215 to decide if
	simplification should be done before the deep profiling transformation.

Index: compiler/handle_options.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/handle_options.m,v
retrieving revision 1.330
diff -u -p -b -r1.330 handle_options.m
--- compiler/handle_options.m	28 Jan 2009 06:57:45 -0000	1.330
+++ compiler/handle_options.m	25 Feb 2009 00:13:27 -0000
@@ -1214,6 +1214,14 @@ postprocess_options_2(OptionTable0, Targ
             true
         ),
 
+        % Perform a simplification pass before the profiling passes if one of
+        % these profiling options is enabled.
+        option_implies(profile_deep, simplify_stage_215, bool(yes), !Globals),
+        option_implies(record_term_sizes_as_words, simplify_stage_215,
+            bool(yes), !Globals),
+        option_implies(record_term_sizes_as_cells, simplify_stage_215,
+            bool(yes), !Globals),
+
         globals.lookup_string_option(!.Globals, experimental_complexity,
             ExpComp),
         ( ExpComp = "" ->
Index: compiler/hlds_rtti.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/hlds_rtti.m,v
retrieving revision 1.14
diff -u -p -b -r1.14 hlds_rtti.m
--- compiler/hlds_rtti.m	26 Mar 2008 01:38:47 -0000	1.14
+++ compiler/hlds_rtti.m	24 Feb 2009 06:47:11 -0000
@@ -326,6 +326,7 @@
 :- import_module map.
 :- import_module pair.
 :- import_module solutions.
+:- import_module string.
 :- import_module svmap.
 :- import_module term.
 :- import_module varset.
@@ -639,7 +640,9 @@ apply_substs_to_type_map(TRenaming, TSub
         ( Type = ExistingType ->
             true
         ;
-            unexpected(this_file, "inconsistent type_infos")
+            unexpected(this_file, string.format("inconsistent type_infos: "
+                ++ " Type: %s ExistingType: %s Var0: %s",
+                [s(string(Type)), s(string(ExistingType)), s(string(Var0))]))
         )
     ;
         svmap.det_insert(Var, Type, !Map)
Index: compiler/mercury_compile.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/mercury_compile.m,v
retrieving revision 1.488
diff -u -p -b -r1.488 mercury_compile.m
--- compiler/mercury_compile.m	20 Feb 2009 08:19:04 -0000	1.488
+++ compiler/mercury_compile.m	26 Feb 2009 06:23:54 -0000
@@ -2614,7 +2614,8 @@ frontend_pass_by_phases(!HLDS, FoundErro
         check_stratification(Verbose, Stats, !HLDS, FoundStratError, !IO),
         maybe_dump_hlds(!.HLDS, 60, "stratification", !DumpInfo, !IO),
 
-        simplify(yes, frontend, Verbose, Stats, !HLDS, SimplifySpecs, !IO),
+        maybe_simplify(yes, frontend, Verbose, Stats, !HLDS, SimplifySpecs,
+            !IO),
         maybe_dump_hlds(!.HLDS, 65, "frontend_simplify", !DumpInfo, !IO),
 
         % Once the other passes have all been converted to return error_specs,
@@ -2780,8 +2781,8 @@ middle_pass(ModuleName, !HLDS, !DumpInfo
     % opportunities the other optimizations have provided for constant
     % propagation and we cannot do that once the term-size profiling or deep
     % profiling transformations have been applied.
-    simplify(no, pre_prof_transforms, Verbose, Stats, !HLDS, SimplifySpecs,
-        !IO),
+    maybe_simplify(no, pre_prof_transforms, Verbose, Stats, !HLDS,
+        SimplifySpecs, !IO),
     expect(unify(contains_errors(Globals, SimplifySpecs), no), this_file,
         "middle_pass: simplify has errors"),
     maybe_dump_hlds(!.HLDS, 215, "pre_prof_transform_simplify", !DumpInfo,
@@ -2875,7 +2876,7 @@ backend_pass_by_phases(!HLDS, !GlobalDat
     maybe_followcode(Verbose, Stats, !HLDS, !IO),
     maybe_dump_hlds(!.HLDS, 320, "followcode", !DumpInfo, !IO),
 
-    simplify(no, ll_backend, Verbose, Stats, !HLDS, SimplifySpecs, !IO),
+    maybe_simplify(no, ll_backend, Verbose, Stats, !HLDS, SimplifySpecs, !IO),
     expect(unify(contains_errors(Globals, SimplifySpecs), no), this_file,
         "backend_pass_by_phases: simplify has errors"),
     maybe_dump_hlds(!.HLDS, 325, "ll_backend_simplify", !DumpInfo, !IO),
@@ -3482,31 +3483,14 @@ maybe_warn_dead_procs(Verbose, Stats, !H
     ;       ll_backend.
             % The first stage of LLDS code generation.
 
-:- pred simplify(bool::in, simplify_pass::in, bool::in, bool::in,
+    % This predicate set up and maybe run the simplification pass.
+    %
+:- pred maybe_simplify(bool::in, simplify_pass::in, bool::in, bool::in,
     module_info::in, module_info::out, list(error_spec)::out,
     io::di, io::uo) is det.
 
-simplify(Warn, SimplifyPass, Verbose, Stats, !HLDS, Specs, !IO) :-
+maybe_simplify(Warn, SimplifyPass, Verbose, Stats, !HLDS, Specs, !IO) :-
     module_info_get_globals(!.HLDS, Globals),
-    globals.lookup_bool_option(Globals, constant_propagation, ConstProp),
-    globals.lookup_bool_option(Globals, profile_deep, DeepProf),
-    globals.lookup_bool_option(Globals, record_term_sizes_as_words, TSWProf),
-    globals.lookup_bool_option(Globals, record_term_sizes_as_cells, TSCProf),
-    %
-    % We run the simplify pass before the profiling transformations,
-    % only if those transformations are being applied - otherwise we
-    % just leave things to the backend simplification passes.
-    %
-    IsProfPass = bool.or_list([DeepProf, TSWProf, TSCProf]),
-    (
-        SimplifyPass = pre_prof_transforms,
-        IsProfPass = no
-    ->
-        Specs = []
-    ;
-        maybe_write_string(Verbose, "% Simplifying goals...\n", !IO),
-        maybe_flush_output(Verbose, !IO),
-
         some [!SimpList] (
             simplify.find_simplifications(Warn, Globals, Simplifications0),
             !:SimpList = simplifications_to_list(Simplifications0),
@@ -3518,8 +3502,21 @@ simplify(Warn, SimplifyPass, Verbose, St
                 list.cons(simp_do_once, !SimpList)
             ;
                 SimplifyPass = pre_prof_transforms,
+            %
+            % We run the simplify pass before the profiling transformations,
+            % only if those transformations are being applied - otherwise we
+            % just leave things to the backend simplification passes.
+            %
+            globals.lookup_bool_option(Globals, simplify_stage_215,
+                Simplify215),
+            (
+                Simplify215 = yes,
                 list.cons(simp_do_once, !SimpList)
             ;
+                Simplify215 = no,
+                !:SimpList = []
+            )
+        ;
                 SimplifyPass = ml_backend,
                 list.cons(simp_do_once, !SimpList)
             ;
@@ -3529,10 +3526,18 @@ simplify(Warn, SimplifyPass, Verbose, St
                 %
                 % NOTE: Any changes made here may also need to be made
                 % to the relevant parts of backend_pass_by_preds_4/12.
-
+            globals.lookup_bool_option(Globals, constant_propagation,
+                ConstProp),
+            globals.lookup_bool_option(Globals, profile_deep, DeepProf),
+            globals.lookup_bool_option(Globals, record_term_sizes_as_words,
+                TSWProf),
+            globals.lookup_bool_option(Globals, record_term_sizes_as_cells,
+                TSCProf),
                 (
                     ConstProp = yes,
-                    IsProfPass = no
+                DeepProf = no,
+                TSWProf = no,
+                TSCProf = no
                 ->
                     list.cons(simp_constant_prop, !SimpList)
                 ;
@@ -3542,14 +3547,22 @@ simplify(Warn, SimplifyPass, Verbose, St
                 list.cons(simp_do_once, !SimpList),
                 list.cons(simp_elim_removable_scopes, !SimpList)
             ),
-            Simplifications = list_to_simplifications(!.SimpList)
+        SimpList = !.SimpList
         ),
+    (
+        SimpList = [_ | _],
 
+        maybe_write_string(Verbose, "% Simplifying goals...\n", !IO),
+        maybe_flush_output(Verbose, !IO),
+        Simplifications = list_to_simplifications(SimpList),
         process_all_nonimported_procs_errors(
             update_pred_error(simplify_pred(Simplifications)),
             !HLDS, [], Specs, !IO),
         maybe_write_string(Verbose, "% done.\n", !IO),
         maybe_report_stats(Stats, !IO)
+    ;
+        SimpList = [],
+        Specs = []
     ).
 
 %-----------------------------------------------------------------------------%
@@ -3919,7 +3932,8 @@ maybe_untuple_arguments(Verbose, Stats, 
         maybe_flush_output(Verbose, !IO),
         untuple_arguments(!HLDS, !IO),
         maybe_write_string(Verbose, "% done.\n", !IO),
-        simplify(no, post_untuple, Verbose, Stats, !HLDS, SimplifySpecs, !IO),
+        maybe_simplify(no, post_untuple, Verbose, Stats, !HLDS, SimplifySpecs,
+            !IO),
         expect(unify(contains_errors(Globals, SimplifySpecs), no), this_file,
             "maybe_untuple_arguments: simplify has errors"),
         maybe_report_stats(Stats, !IO)
@@ -4989,7 +5003,7 @@ mlds_backend(!HLDS, !:MLDS, !DumpInfo, !
     globals.lookup_bool_option(Globals, verbose, Verbose),
     globals.lookup_bool_option(Globals, statistics, Stats),
 
-    simplify(no, ml_backend, Verbose, Stats, !HLDS, SimplifySpecs, !IO),
+    maybe_simplify(no, ml_backend, Verbose, Stats, !HLDS, SimplifySpecs, !IO),
     expect(unify(contains_errors(Globals, SimplifySpecs), no), this_file,
         "ml_backend: simplify has errors"),
     maybe_dump_hlds(!.HLDS, 405, "ml_backend_simplify", !DumpInfo, !IO),
Index: compiler/options.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/options.m,v
retrieving revision 1.643
diff -u -p -b -r1.643 options.m
--- compiler/options.m	20 Feb 2009 08:19:04 -0000	1.643
+++ compiler/options.m	26 Feb 2009 06:23:54 -0000
@@ -298,7 +298,12 @@
             % we only want to use the `yes' value, but we keep support for
             % the `no' value for benchmarks for the paper.
     
-            % Perform coverage profiling, (enables deep profiling).
+    ;       simplify_stage_215
+            % Run the simplification pass at stage 215 (before profiling) this
+            % is implided by some of the profiling settings.
+
+            % Perform coverage profiling, this affects only deep profiling
+            % grades.
     ;       coverage_profiling
     ;       coverage_profiling_via_calls
    
@@ -1179,6 +1184,7 @@ option_defaults_2(compilation_model_opti
     profile_memory                      -   bool(no),
     profile_deep                        -   bool(no),
     use_activation_counts               -   bool(no),
+    simplify_stage_215                  -   bool(no),
     coverage_profiling                  -   bool(no),
     coverage_profiling_via_calls        -   bool(no),
     profile_deep_coverage_after_goal    -   bool(yes),
@@ -2018,6 +2024,7 @@ long_option("profile-time",         prof
 long_option("profile-memory",       profile_memory).
 long_option("profile-deep",         profile_deep).
 long_option("use-activation-counts",    use_activation_counts).
+long_option("simplify-stage-215",   simplify_stage_215).
 long_option("coverage-profiling", 
                     coverage_profiling).
 long_option("coverage-profiling-via-calls", 
Index: runtime/mercury_deep_profiling.h
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_deep_profiling.h,v
retrieving revision 1.21
diff -u -p -b -r1.21 mercury_deep_profiling.h
--- runtime/mercury_deep_profiling.h	20 Sep 2008 11:38:05 -0000	1.21
+++ runtime/mercury_deep_profiling.h	19 Feb 2009 06:29:55 -0000
@@ -1,4 +1,7 @@
 /*
+** vim: ts=8 sw=8 noexpandtab
+*/
+/*
 ** Copyright (C) 2001-2004, 2006-2008 The University of Melbourne.
 ** This file may only be copied under the terms of the GNU Library General
 ** Public License - see the file COPYING.LIB in the Mercury distribution.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mercurylang.org/archives/reviews/attachments/20090227/4fc26661/attachment.sig>


More information about the reviews mailing list