global: create a new module global to gather (and nest) global analysis
authorJean Privat <jean@pryen.org>
Thu, 23 Feb 2012 15:26:08 +0000 (10:26 -0500)
committerJean Privat <jean@pryen.org>
Thu, 23 Feb 2012 15:26:08 +0000 (10:26 -0500)
analysis now only contains local required analysis.

Signed-off-by: Jean Privat <jean@pryen.org>

14 files changed:
src/analysis/analysis.nit
src/global/cha_analysis.nit [moved from src/analysis/cha_analysis.nit with 100% similarity]
src/global/dead_method_removal.nit [moved from src/analysis/dead_method_removal.nit with 100% similarity]
src/global/global.nit [new file with mode: 0644]
src/global/inline_get_and_set.nit [moved from src/analysis/inline_get_and_set.nit with 100% similarity]
src/global/instantiated_type_analysis.nit [moved from src/analysis/instantiated_type_analysis.nit with 100% similarity]
src/global/reachable_as_init.nit [moved from src/analysis/reachable_as_init.nit with 100% similarity]
src/global/reachable_as_init_impl.nit [moved from src/analysis/reachable_as_init_impl.nit with 100% similarity]
src/global/reachable_from_init_method_analysis.nit [moved from src/analysis/reachable_from_init_method_analysis.nit with 100% similarity]
src/global/reachable_from_init_method_analysis_impl.nit [moved from src/analysis/reachable_from_init_method_analysis_impl.nit with 100% similarity]
src/global/reachable_method_analysis.nit [moved from src/analysis/reachable_method_analysis.nit with 100% similarity]
src/global/remove_out_of_init_get_test.nit [moved from src/analysis/remove_out_of_init_get_test.nit with 100% similarity]
src/global/rta_analysis.nit [moved from src/analysis/rta_analysis.nit with 100% similarity]
src/nitc.nit

index 4ae48f6..40abcff 100644 (file)
@@ -15,7 +15,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Intermediate code analysis and optimizations
+# Intermediate code local analysis and optimizations
 package analysis
 
 # Global imports
@@ -27,99 +27,8 @@ import program
 private import allocate_iregister_slots
 private import inline_methods
 
-# Global Analysis types
-private import instantiated_type_analysis
-private import reachable_method_analysis
-private import reachable_as_init
-private import reachable_from_init_method_analysis
-
-# Global Analysis implementation
-private import cha_analysis
-private import rta_analysis
-private import reachable_as_init_impl
-private import reachable_from_init_method_analysis_impl
-
-# Global Optimizations
-private import dead_method_removal
-private import inline_get_and_set
-private import remove_out_of_init_get_test
-
-redef class ToolContext
-       readable writable var _global_callgraph: String = "rta"
-       readable writable var _no_dead_method_removal: Bool = false
-       readable writable var _no_inline_get_set: Bool = false
-       readable writable var _no_callgraph_from_init: Bool = false
-       readable writable var _no_out_of_init_get_test_removal: Bool = false
-end
-
-redef class Program
-       # This method will analyse the program and store results (in global compilation only)
-       fun do_global_analysis do
-               assert tc.global
-
-               if tc.global_callgraph == "cha" then
-                       var cha = new ChaBuilder(self)
-                       cha.work
-                       rma = cha.context
-               else if tc.global_callgraph == "rta" then
-                       var rta = new RtaBuilder(self)
-                       rta.work
-                       rma = rta.context
-                       ita = rta.context
-               end
-
-               # Ensure we have all analysis created
-               if rma == null then rma = new DefaultReachableMethodAnalysis
-               if ita == null then ita = new DefaultInstantiatedTypeAnalysis
-
-               var rai_builder = new ReachableAsInitBuilder(self)
-               rai_builder.work
-               rai = rai_builder.context
-
-               if not tc.no_callgraph_from_init then
-                       var b = new RFIMABuilder(self)
-                       b.work
-                       rfima = b.context
-               end
-
-               if rfima == null then rfima = new DefaultReachableFromInitMethodAnalysis
-       end
-
-       # This method will optimize the program (in global compilation only)
-       # Those are done before analysis
-       fun do_global_pre_analysis_optimizations do
-               assert tc.global
-               if not tc.no_inline_get_set then inline_get_set
-       end
-
-       # This method will optimize the program (in global compilation only)
-       # Those are done after analysis
-       fun do_global_post_analysis_optimizations do
-               assert tc.global
-               if not tc.no_dead_method_removal then optimize_dead_methods
-               if not tc.no_out_of_init_get_test_removal then optimize_out_of_init_getters
-       end
-
-       fun dump_global_optimizations_information(directory_name: String) do
-               dump_out_of_init_information(directory_name)
-               dump_dead_method_optimization(directory_name)
-               dump_inline_get_set(directory_name)
-       end
-
-       # This method will create log files storing analysis information
-       fun dump_global_analysis_information(directory_name: String) do
-               dump_reachable_methods(directory_name, tc.global_callgraph)
-               dump_unreachable_methods(directory_name, tc.global_callgraph)
-               dump_instantiated_types(directory_name)
-               dump_not_instantiated_types(directory_name)
-               dump_reachable_as_init_methods(directory_name)
-               dump_reachable_methods_from_init(directory_name)
-               dump_unreachable_methods_from_init(directory_name)
-       end
-end
-
 redef class IRoutine
-       # Perfom all optimizations
+       # Perfom all local optimizations
        fun optimize(m: MMModule)
        do
                inline_methods(m)
diff --git a/src/global/global.nit b/src/global/global.nit
new file mode 100644 (file)
index 0000000..b3d5b2f
--- /dev/null
@@ -0,0 +1,114 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2009 Jean Privat <jean@pryen.org>
+# Copyright 2009 Jean-Sebastien Gelinas <calestar@gmail.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Intermediate code global analysis and optimizations
+package global
+
+# Global imports
+import icode
+import program
+
+# Global Analysis types
+private import instantiated_type_analysis
+private import reachable_method_analysis
+private import reachable_as_init
+private import reachable_from_init_method_analysis
+
+# Global Analysis implementation
+private import cha_analysis
+private import rta_analysis
+private import reachable_as_init_impl
+private import reachable_from_init_method_analysis_impl
+
+# Global Optimizations
+private import dead_method_removal
+private import inline_get_and_set
+private import remove_out_of_init_get_test
+
+redef class ToolContext
+       readable writable var _global_callgraph: String = "rta"
+       readable writable var _no_dead_method_removal: Bool = false
+       readable writable var _no_inline_get_set: Bool = false
+       readable writable var _no_callgraph_from_init: Bool = false
+       readable writable var _no_out_of_init_get_test_removal: Bool = false
+end
+
+redef class Program
+       # This method will analyse the program and store results (in global compilation only)
+       fun do_global_analysis do
+               assert tc.global
+
+               if tc.global_callgraph == "cha" then
+                       var cha = new ChaBuilder(self)
+                       cha.work
+                       rma = cha.context
+               else if tc.global_callgraph == "rta" then
+                       var rta = new RtaBuilder(self)
+                       rta.work
+                       rma = rta.context
+                       ita = rta.context
+               end
+
+               # Ensure we have all analysis created
+               if rma == null then rma = new DefaultReachableMethodAnalysis
+               if ita == null then ita = new DefaultInstantiatedTypeAnalysis
+
+               var rai_builder = new ReachableAsInitBuilder(self)
+               rai_builder.work
+               rai = rai_builder.context
+
+               if not tc.no_callgraph_from_init then
+                       var b = new RFIMABuilder(self)
+                       b.work
+                       rfima = b.context
+               end
+
+               if rfima == null then rfima = new DefaultReachableFromInitMethodAnalysis
+       end
+
+       # This method will optimize the program (in global compilation only)
+       # Those are done before analysis
+       fun do_global_pre_analysis_optimizations do
+               assert tc.global
+               if not tc.no_inline_get_set then inline_get_set
+       end
+
+       # This method will optimize the program (in global compilation only)
+       # Those are done after analysis
+       fun do_global_post_analysis_optimizations do
+               assert tc.global
+               if not tc.no_dead_method_removal then optimize_dead_methods
+               if not tc.no_out_of_init_get_test_removal then optimize_out_of_init_getters
+       end
+
+       fun dump_global_optimizations_information(directory_name: String) do
+               dump_out_of_init_information(directory_name)
+               dump_dead_method_optimization(directory_name)
+               dump_inline_get_set(directory_name)
+       end
+
+       # This method will create log files storing analysis information
+       fun dump_global_analysis_information(directory_name: String) do
+               dump_reachable_methods(directory_name, tc.global_callgraph)
+               dump_unreachable_methods(directory_name, tc.global_callgraph)
+               dump_instantiated_types(directory_name)
+               dump_not_instantiated_types(directory_name)
+               dump_reachable_as_init_methods(directory_name)
+               dump_reachable_methods_from_init(directory_name)
+               dump_unreachable_methods_from_init(directory_name)
+       end
+end
index 2b581d0..f164c34 100644 (file)
@@ -19,6 +19,7 @@ package nitc
 
 import abstracttool
 import analysis
+import global
 import program
 import compiling
 import syntax