Cleanup LLVM code generation code.

Materialize the bitcode in the end of CompileClass,
so that the code generation time won't be calculated
in method compilation time.

Change-Id: I1e2bd0b23bcb5c55bd966a31b1df0b8b34922f94
diff --git a/src/compiler_llvm/compiler_llvm.h b/src/compiler_llvm/compiler_llvm.h
index 208edfc..3c653a3 100644
--- a/src/compiler_llvm/compiler_llvm.h
+++ b/src/compiler_llvm/compiler_llvm.h
@@ -56,7 +56,9 @@
 
   ~CompilerLLVM();
 
-  void MaterializeEveryCompilationUnit();
+  void MaterializeIfThresholdReached();
+
+  void MaterializeRemainder();
 
   Compiler* GetCompiler() const {
     return compiler_;
@@ -81,21 +83,25 @@
   CompiledInvokeStub* CreateInvokeStub(bool is_static, char const *shorty);
 
  private:
-  void EnsureCompilationUnit();
+  void EnsureCompilationUnit(MutexLock& GUARD);
 
-  void MaterializeCompilationUnit();
+  void Materialize(MutexLock& GUARD);
 
-  void MaterializeCompilationUnitSafePoint();
+  bool IsBitcodeFileNameAvailable() const {
+    return !bitcode_filename_.empty();
+  }
 
   Compiler* compiler_;
 
+ public:
   Mutex compiler_lock_;
 
+ private:
   InstructionSet insn_set_;
 
-  UniquePtr<CompilationUnit> cunit_;
+  CompilationUnit* curr_cunit_;
 
-  unsigned cunit_counter_;
+  std::vector<CompilationUnit*> cunits_;
 
   std::string elf_filename_;