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_field_info.h b/compiler/dex/mir_field_info.h
index 1842a16..c628182 100644
--- a/compiler/dex/mir_field_info.h
+++ b/compiler/dex/mir_field_info.h
@@ -173,8 +173,12 @@
return (flags_ & kFlagIsReferrersClass) != 0u;
}
- bool IsInitialized() const {
- return (flags_ & kFlagIsInitialized) != 0u;
+ bool IsClassInitialized() const {
+ return (flags_ & kFlagClassIsInitialized) != 0u;
+ }
+
+ bool IsClassInDexCache() const {
+ return (flags_ & kFlagClassIsInDexCache) != 0u;
}
MemberOffset FieldOffset() const {
@@ -190,14 +194,16 @@
kBitFastGet = kFieldInfoBitEnd,
kBitFastPut,
kBitIsReferrersClass,
- kBitIsInitialized,
+ kBitClassIsInitialized,
+ kBitClassIsInDexCache,
kSFieldLoweringInfoBitEnd
};
COMPILE_ASSERT(kSFieldLoweringInfoBitEnd <= 16, too_many_flags);
static constexpr uint16_t kFlagFastGet = 1u << kBitFastGet;
static constexpr uint16_t kFlagFastPut = 1u << kBitFastPut;
static constexpr uint16_t kFlagIsReferrersClass = 1u << kBitIsReferrersClass;
- static constexpr uint16_t kFlagIsInitialized = 1u << kBitIsInitialized;
+ static constexpr uint16_t kFlagClassIsInitialized = 1u << kBitClassIsInitialized;
+ static constexpr uint16_t kFlagClassIsInDexCache = 1u << kBitClassIsInDexCache;
// The member offset of the field, 0u if unresolved.
MemberOffset field_offset_;