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/utils/arena_bit_vector.cc b/compiler/utils/arena_bit_vector.cc
index eff9778..39f7d18 100644
--- a/compiler/utils/arena_bit_vector.cc
+++ b/compiler/utils/arena_bit_vector.cc
@@ -19,9 +19,10 @@
 
 namespace art {
 
+template <typename ArenaAlloc>
 class ArenaBitVectorAllocator : public Allocator {
  public:
-  explicit ArenaBitVectorAllocator(ArenaAllocator* arena) : arena_(arena) {}
+  explicit ArenaBitVectorAllocator(ArenaAlloc* arena) : arena_(arena) {}
   ~ArenaBitVectorAllocator() {}
 
   virtual void* Alloc(size_t size) {
@@ -30,19 +31,27 @@
 
   virtual void Free(void*) {}  // Nop.
 
-  static void* operator new(size_t size, ArenaAllocator* arena) {
+  static void* operator new(size_t size, ArenaAlloc* arena) {
     return arena->Alloc(sizeof(ArenaBitVectorAllocator), kArenaAllocGrowableBitMap);
   }
   static void operator delete(void* p) {}  // Nop.
 
  private:
-  ArenaAllocator* arena_;
+  ArenaAlloc* arena_;
   DISALLOW_COPY_AND_ASSIGN(ArenaBitVectorAllocator);
 };
 
 ArenaBitVector::ArenaBitVector(ArenaAllocator* arena, unsigned int start_bits,
                                bool expandable, OatBitMapKind kind)
-  :  BitVector(start_bits, expandable, new (arena) ArenaBitVectorAllocator(arena)), kind_(kind) {
+  :  BitVector(start_bits, expandable,
+               new (arena) ArenaBitVectorAllocator<ArenaAllocator>(arena)), kind_(kind) {
+  UNUSED(kind_);
+}
+
+ArenaBitVector::ArenaBitVector(ScopedArenaAllocator* arena, unsigned int start_bits,
+                               bool expandable, OatBitMapKind kind)
+  :  BitVector(start_bits, expandable,
+               new (arena) ArenaBitVectorAllocator<ScopedArenaAllocator>(arena)), kind_(kind) {
   UNUSED(kind_);
 }
 
diff --git a/compiler/utils/arena_bit_vector.h b/compiler/utils/arena_bit_vector.h
index 1a3d6a3..485ed76 100644
--- a/compiler/utils/arena_bit_vector.h
+++ b/compiler/utils/arena_bit_vector.h
@@ -19,6 +19,7 @@
 
 #include "base/bit_vector.h"
 #include "utils/arena_allocator.h"
+#include "utils/scoped_arena_allocator.h"
 
 namespace art {
 
@@ -38,6 +39,7 @@
   kBitMapRegisterV,
   kBitMapTempSSARegisterV,
   kBitMapNullCheck,
+  kBitMapClInitCheck,
   kBitMapTmpBlockV,
   kBitMapPredecessors,
   kNumBitMapKinds
@@ -52,11 +54,16 @@
   public:
     ArenaBitVector(ArenaAllocator* arena, uint32_t start_bits, bool expandable,
                    OatBitMapKind kind = kBitMapMisc);
+    ArenaBitVector(ScopedArenaAllocator* arena, uint32_t start_bits, bool expandable,
+                   OatBitMapKind kind = kBitMapMisc);
     ~ArenaBitVector() {}
 
   static void* operator new(size_t size, ArenaAllocator* arena) {
      return arena->Alloc(sizeof(ArenaBitVector), kArenaAllocGrowableBitMap);
   }
+  static void* operator new(size_t size, ScopedArenaAllocator* arena) {
+     return arena->Alloc(sizeof(ArenaBitVector), kArenaAllocGrowableBitMap);
+  }
   static void operator delete(void* p) {}  // Nop.
 
   private: