Quick compiler: reuse llvm context & ir builder

With this CL, we avoid setting up an llvm context, module and intrinsic
definitions for each method, and considerably speed up compilation time.
This does not represent a final form - we'll be reworking the compiler driver
to support Quick & Portable via the command line, and this code will likely
change at that time.

Change-Id: I19e298a011141c3bc35c4f28175b2b20653fd5e4
diff --git a/src/compiler/codegen/MethodBitcode.cc b/src/compiler/codegen/MethodBitcode.cc
index c84d6d3..cfe6e6a 100644
--- a/src/compiler/codegen/MethodBitcode.cc
+++ b/src/compiler/codegen/MethodBitcode.cc
@@ -166,27 +166,14 @@
   }
   cUnit->locMap.Put(val, loc);
 }
-
 void initIR(CompilationUnit* cUnit)
 {
-  cUnit->context = new llvm::LLVMContext();
-  cUnit->module = new llvm::Module("art", *cUnit->context);
-  llvm::StructType::create(*cUnit->context, "JavaObject");
-  llvm::StructType::create(*cUnit->context, "Method");
-  llvm::StructType::create(*cUnit->context, "Thread");
-  cUnit->intrinsic_helper =
-      new greenland::IntrinsicHelper(*cUnit->context, *cUnit->module);
-  cUnit->irb =
-      new greenland::IRBuilder(*cUnit->context, *cUnit->module,
-                               *cUnit->intrinsic_helper);
-}
-
-void freeIR(CompilationUnit* cUnit)
-{
-  delete cUnit->irb;
-  delete cUnit->intrinsic_helper;
-  delete cUnit->module;
-  delete cUnit->context;
+  QuickCompiler* quick =
+      reinterpret_cast<QuickCompiler*>(cUnit->compiler->GetCompilerContext());
+  cUnit->context = quick->GetLLVMContext();
+  cUnit->module = quick->GetLLVMModule();
+  cUnit->intrinsic_helper = quick->GetIntrinsicHelper();
+  cUnit->irb = quick->GetIRBuilder();
 }
 
 const char* llvmSSAName(CompilationUnit* cUnit, int ssaReg) {
@@ -840,7 +827,6 @@
   RegLocation rlSrc[3];
   RegLocation rlDest = badLoc;
   Instruction::Code opcode = mir->dalvikInsn.opcode;
-  uint32_t vA = mir->dalvikInsn.vA;
   uint32_t vB = mir->dalvikInsn.vB;
   uint32_t vC = mir->dalvikInsn.vC;
   int optFlags = mir->optimizationFlags;
@@ -3480,7 +3466,8 @@
 
   handleIntrinsicLaunchpads(cUnit);
 
-  freeIR(cUnit);
+  cUnit->func->eraseFromParent();
+  cUnit->func = NULL;
 }