Class initialization check elimination.
Also, move null check elimination temporaries to the
ScopedArenaAllocator and reuse the same variables in the
class initialization check elimination.
Change-Id: Ic746f95427065506fa6016d4931e4cb8b34937af
diff --git a/compiler/dex/bb_optimizations.h b/compiler/dex/bb_optimizations.h
index 1ad4958..fb482bf 100644
--- a/compiler/dex/bb_optimizations.h
+++ b/compiler/dex/bb_optimizations.h
@@ -137,20 +137,6 @@
};
/**
- * @class NullCheckEliminationAndTypeInferenceInit
- * @brief Null check elimination and type inference initialization step.
- */
-class NullCheckEliminationAndTypeInferenceInit : public Pass {
- public:
- NullCheckEliminationAndTypeInferenceInit() : Pass("NCE_TypeInferenceInit") {
- }
-
- bool WalkBasicBlocks(CompilationUnit* cUnit, BasicBlock* bb) const;
-
- bool Gate(const CompilationUnit* cUnit) const;
-};
-
-/**
* @class NullCheckEliminationAndTypeInference
* @brief Null check elimination and type inference.
*/
@@ -160,9 +146,35 @@
: Pass("NCE_TypeInference", kRepeatingPreOrderDFSTraversal, "4_post_nce_cfg") {
}
+ void Start(CompilationUnit* cUnit) const {
+ cUnit->mir_graph->EliminateNullChecksAndInferTypesStart();
+ }
+
bool WalkBasicBlocks(CompilationUnit* cUnit, BasicBlock* bb) const {
return cUnit->mir_graph->EliminateNullChecksAndInferTypes(bb);
}
+
+ void End(CompilationUnit* cUnit) const {
+ cUnit->mir_graph->EliminateNullChecksAndInferTypesEnd();
+ }
+};
+
+class ClassInitCheckElimination : public Pass {
+ public:
+ ClassInitCheckElimination() : Pass("ClInitCheckElimination", kRepeatingPreOrderDFSTraversal) {
+ }
+
+ bool Gate(const CompilationUnit* cUnit) const {
+ return cUnit->mir_graph->EliminateClassInitChecksGate();
+ }
+
+ bool WalkBasicBlocks(CompilationUnit* cUnit, BasicBlock* bb) const {
+ return cUnit->mir_graph->EliminateClassInitChecks(bb);
+ }
+
+ void End(CompilationUnit* cUnit) const {
+ cUnit->mir_graph->EliminateClassInitChecksEnd();
+ }
};
/**