Fix null check elimination
The existing null check elimination mechanism suffered from the same
limitation as the SSA renaming: it took shortcuts that were valid in
a trace compilation world, but not in a method compilation world.
This CL replaces the old mechanism, and additionally takes advantage
of some the fact that "this" is always non-null, as are objects returned
from OP_NEW_* (thanks Ian!).
Two test cases added. The one for ensuring that unnecessary null checks
are elminated requires manual inspection. The other - that we don't
eliminate a necessary null check - is disabled until exceptions are working.
Change-Id: I2a9b72741f56617bf609e4d7c20244796c988f28
diff --git a/src/compiler/CompilerIR.h b/src/compiler/CompilerIR.h
index e2418b8..e25acd9 100644
--- a/src/compiler/CompilerIR.h
+++ b/src/compiler/CompilerIR.h
@@ -111,7 +111,7 @@
struct MIR* prev;
struct MIR* next;
struct SSARepresentation* ssaRep;
- int OptimizationFlags;
+ int optimizationFlags;
int seqNum;
union {
// Used by the inlined insn from the callee to find the mother method
@@ -135,6 +135,7 @@
int id;
bool visited;
bool hidden;
+ bool catchEntry;
unsigned int startOffset;
const Method* containingMethod; // For blocks from the callee
BBType blockType;