Rewrite class initialization check elimination.
Split the notion of type being in dex cache away from the
class being initialized. Include static invokes in the class
initialization elimination pass.
Change-Id: Ie3760d8fd55b987f9507f32ef51456a57d79e3fb
diff --git a/compiler/dex/mir_dataflow.cc b/compiler/dex/mir_dataflow.cc
index 0a6924c..e6a8cea 100644
--- a/compiler/dex/mir_dataflow.cc
+++ b/compiler/dex/mir_dataflow.cc
@@ -319,46 +319,46 @@
DF_UA | DF_UB | DF_NULL_CHK_B | DF_REF_B | DF_IFIELD | DF_LVN,
// 60 SGET vAA, field@BBBB
- DF_DA | DF_SFIELD | DF_UMS,
+ DF_DA | DF_SFIELD | DF_CLINIT | DF_UMS,
// 61 SGET_WIDE vAA, field@BBBB
- DF_DA | DF_A_WIDE | DF_SFIELD | DF_UMS,
+ DF_DA | DF_A_WIDE | DF_SFIELD | DF_CLINIT | DF_UMS,
// 62 SGET_OBJECT vAA, field@BBBB
- DF_DA | DF_REF_A | DF_SFIELD | DF_UMS,
+ DF_DA | DF_REF_A | DF_SFIELD | DF_CLINIT | DF_UMS,
// 63 SGET_BOOLEAN vAA, field@BBBB
- DF_DA | DF_SFIELD | DF_UMS,
+ DF_DA | DF_SFIELD | DF_CLINIT | DF_UMS,
// 64 SGET_BYTE vAA, field@BBBB
- DF_DA | DF_SFIELD | DF_UMS,
+ DF_DA | DF_SFIELD | DF_CLINIT | DF_UMS,
// 65 SGET_CHAR vAA, field@BBBB
- DF_DA | DF_SFIELD | DF_UMS,
+ DF_DA | DF_SFIELD | DF_CLINIT | DF_UMS,
// 66 SGET_SHORT vAA, field@BBBB
- DF_DA | DF_SFIELD | DF_UMS,
+ DF_DA | DF_SFIELD | DF_CLINIT | DF_UMS,
// 67 SPUT vAA, field@BBBB
- DF_UA | DF_SFIELD | DF_UMS,
+ DF_UA | DF_SFIELD | DF_CLINIT | DF_UMS,
// 68 SPUT_WIDE vAA, field@BBBB
- DF_UA | DF_A_WIDE | DF_SFIELD | DF_UMS,
+ DF_UA | DF_A_WIDE | DF_SFIELD | DF_CLINIT | DF_UMS,
// 69 SPUT_OBJECT vAA, field@BBBB
- DF_UA | DF_REF_A | DF_SFIELD | DF_UMS,
+ DF_UA | DF_REF_A | DF_SFIELD | DF_CLINIT | DF_UMS,
// 6A SPUT_BOOLEAN vAA, field@BBBB
- DF_UA | DF_SFIELD | DF_UMS,
+ DF_UA | DF_SFIELD | DF_CLINIT | DF_UMS,
// 6B SPUT_BYTE vAA, field@BBBB
- DF_UA | DF_SFIELD | DF_UMS,
+ DF_UA | DF_SFIELD | DF_CLINIT | DF_UMS,
// 6C SPUT_CHAR vAA, field@BBBB
- DF_UA | DF_SFIELD | DF_UMS,
+ DF_UA | DF_SFIELD | DF_CLINIT | DF_UMS,
// 6D SPUT_SHORT vAA, field@BBBB
- DF_UA | DF_SFIELD | DF_UMS,
+ DF_UA | DF_SFIELD | DF_CLINIT | DF_UMS,
// 6E INVOKE_VIRTUAL {vD, vE, vF, vG, vA}
DF_FORMAT_35C | DF_NULL_CHK_OUT0 | DF_UMS,
@@ -370,7 +370,7 @@
DF_FORMAT_35C | DF_NULL_CHK_OUT0 | DF_UMS,
// 71 INVOKE_STATIC {vD, vE, vF, vG, vA}
- DF_FORMAT_35C | DF_UMS,
+ DF_FORMAT_35C | DF_CLINIT | DF_UMS,
// 72 INVOKE_INTERFACE {vD, vE, vF, vG, vA}
DF_FORMAT_35C | DF_NULL_CHK_OUT0 | DF_UMS,
@@ -388,7 +388,7 @@
DF_FORMAT_3RC | DF_NULL_CHK_OUT0 | DF_UMS,
// 77 INVOKE_STATIC_RANGE {vCCCC .. vNNNN}
- DF_FORMAT_3RC | DF_UMS,
+ DF_FORMAT_3RC | DF_CLINIT | DF_UMS,
// 78 INVOKE_INTERFACE_RANGE {vCCCC .. vNNNN}
DF_FORMAT_3RC | DF_NULL_CHK_OUT0 | DF_UMS,
@@ -718,10 +718,10 @@
DF_UA | DF_UB | DF_NULL_CHK_B | DF_REF_B | DF_IFIELD | DF_LVN,
// E5 SGET_VOLATILE
- DF_DA | DF_SFIELD | DF_UMS,
+ DF_DA | DF_SFIELD | DF_CLINIT | DF_UMS,
// E6 SPUT_VOLATILE
- DF_UA | DF_SFIELD | DF_UMS,
+ DF_UA | DF_SFIELD | DF_CLINIT | DF_UMS,
// E7 IGET_OBJECT_VOLATILE
DF_DA | DF_UB | DF_NULL_CHK_B | DF_REF_A | DF_REF_B | DF_IFIELD | DF_LVN,
@@ -733,10 +733,10 @@
DF_UA | DF_A_WIDE | DF_UB | DF_NULL_CHK_B | DF_REF_B | DF_IFIELD | DF_LVN,
// EA SGET_WIDE_VOLATILE
- DF_DA | DF_A_WIDE | DF_SFIELD | DF_UMS,
+ DF_DA | DF_A_WIDE | DF_SFIELD | DF_CLINIT | DF_UMS,
// EB SPUT_WIDE_VOLATILE
- DF_UA | DF_A_WIDE | DF_SFIELD | DF_UMS,
+ DF_UA | DF_A_WIDE | DF_SFIELD | DF_CLINIT | DF_UMS,
// EC BREAKPOINT
DF_NOP,
@@ -790,10 +790,10 @@
DF_UA | DF_UB | DF_NULL_CHK_B | DF_REF_A | DF_REF_B | DF_IFIELD | DF_LVN,
// FD SGET_OBJECT_VOLATILE
- DF_DA | DF_REF_A | DF_SFIELD | DF_UMS,
+ DF_DA | DF_REF_A | DF_SFIELD | DF_CLINIT | DF_UMS,
// FE SPUT_OBJECT_VOLATILE
- DF_UA | DF_REF_A | DF_SFIELD | DF_UMS,
+ DF_UA | DF_REF_A | DF_SFIELD | DF_CLINIT | DF_UMS,
// FF UNUSED_FF
DF_NOP,