Beginning of LLVM backend for ART.

Change-Id: I03466aed94670ac72d489ebc6e34d7ee1c9c857e
diff --git a/src/compiler_llvm/ir_builder.cc b/src/compiler_llvm/ir_builder.cc
new file mode 100644
index 0000000..ea773bd
--- /dev/null
+++ b/src/compiler_llvm/ir_builder.cc
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ir_builder.h"
+
+#include <llvm/Module.h>
+
+using namespace art::compiler_llvm;
+
+
+//----------------------------------------------------------------------------
+// General
+//----------------------------------------------------------------------------
+
+IRBuilder::IRBuilder(llvm::LLVMContext& context, llvm::Module& module)
+: LLVMIRBuilder(context) {
+
+  // Get java object type from module
+  llvm::Type* jobject_struct_type =
+    llvm::StructType::create(context, "JavaObject");
+  jobject_type_ = jobject_struct_type->getPointerTo();
+}
+
+
+//----------------------------------------------------------------------------
+// Type Helper Function
+//----------------------------------------------------------------------------
+
+llvm::Type* IRBuilder::getJTypeInAccurateSpace(JType jty) {
+  switch (jty) {
+  case kVoid:
+    return getJVoidTy();
+
+  case kBoolean:
+    return getJBooleanTy();
+
+  case kByte:
+    return getJByteTy();
+
+  case kChar:
+    return getJCharTy();
+
+  case kShort:
+    return getJShortTy();
+
+  case kInt:
+    return getJIntTy();
+
+  case kLong:
+    return getJLongTy();
+
+  case kFloat:
+    return getJFloatTy();
+
+  case kDouble:
+    return getJDoubleTy();
+
+  case kObject:
+    return getJObjectTy();
+  }
+
+  LOG(FATAL) << "Unknown java type: " << jty;
+  return NULL;
+}
+
+
+llvm::Type* IRBuilder::getJTypeInRegSpace(JType jty) {
+  switch (GetRegCategoryFromJType(jty)) {
+  case kRegUnknown:
+  case kRegZero:
+    return NULL;
+
+  case kRegCat1nr:
+    return getInt32Ty();
+
+  case kRegCat2:
+    return getInt64Ty();
+
+  case kRegObject:
+    return getJObjectTy();
+  }
+
+  return NULL;
+}
+
+
+llvm::Type* IRBuilder::getJTypeInArraySpace(JType jty) {
+  switch (jty) {
+  case kVoid:
+    return NULL;
+
+  case kBoolean:
+  case kByte:
+    return getInt8Ty();
+
+  case kChar:
+  case kShort:
+    return getInt16Ty();
+
+  case kInt:
+    return getInt32Ty();
+
+  case kLong:
+    return getInt64Ty();
+
+  case kFloat:
+    return getFloatTy();
+
+  case kDouble:
+    return getDoubleTy();
+
+  case kObject:
+    return getJObjectTy();
+  }
+
+  return NULL;
+}