Introduce a SideEffectsAnalysis class.

LICM also needs the side effects information of loops, so move
the GVN::ComputeSideEffects method into its own analysis class.

Change-Id: I810c8230a0eb6b9b536e8f808e17a3a4ad72f7db
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc
index 5bca730..7f99edb 100644
--- a/compiler/optimizing/optimizing_compiler.cc
+++ b/compiler/optimizing/optimizing_compiler.cc
@@ -214,7 +214,8 @@
   HInliner inliner(graph, dex_compilation_unit, driver, stats);
 
   HConstantFolding fold2(graph);
-  GVNOptimization gvn(graph);
+  SideEffectsAnalysis side_effects(graph);
+  GVNOptimization gvn(graph, side_effects);
   BoundsCheckElimination bce(graph);
   InstructionSimplifier simplify2(graph);
 
@@ -229,6 +230,7 @@
     &simplify1,
     &inliner,
     &fold2,
+    &side_effects,
     &gvn,
     &bce,
     &simplify2