1 IR builder. Kill greenland. Remove JTypeSpace.
Change-Id: I7d08cfd8c1fec46df4ce5f51706dff2e246695b5
diff --git a/src/compiler_llvm/ir_builder.cc b/src/compiler_llvm/ir_builder.cc
index 51a8170..88af166 100644
--- a/src/compiler_llvm/ir_builder.cc
+++ b/src/compiler_llvm/ir_builder.cc
@@ -28,13 +28,30 @@
// General
//----------------------------------------------------------------------------
-IRBuilder::IRBuilder(llvm::LLVMContext& context, llvm::Module& module)
-: LLVMIRBuilder(context), module_(&module), mdb_(context) {
-
+IRBuilder::IRBuilder(llvm::LLVMContext& context, llvm::Module& module,
+ IntrinsicHelper& intrinsic_helper)
+ : LLVMIRBuilder(context), module_(&module), mdb_(context), java_object_type_(NULL),
+ java_method_type_(NULL), java_thread_type_(NULL), intrinsic_helper_(intrinsic_helper) {
// Get java object type from module
llvm::Type* jobject_struct_type = module.getTypeByName("JavaObject");
CHECK(jobject_struct_type != NULL);
- jobject_type_ = jobject_struct_type->getPointerTo();
+ java_object_type_ = jobject_struct_type->getPointerTo();
+
+ // If type of Method is not explicitly defined in the module, use JavaObject*
+ llvm::Type* type = module.getTypeByName("Method");
+ if (type != NULL) {
+ java_method_type_ = type->getPointerTo();
+ } else {
+ java_method_type_ = java_object_type_;
+ }
+
+ // If type of Thread is not explicitly defined in the module, use JavaObject*
+ type = module.getTypeByName("Thread");
+ if (type != NULL) {
+ java_thread_type_ = type->getPointerTo();
+ } else {
+ java_thread_type_ = java_object_type_;
+ }
// Create JEnv* type
llvm::Type* jenv_struct_type = llvm::StructType::create(context, "JEnv");
@@ -52,7 +69,7 @@
// Type Helper Function
//----------------------------------------------------------------------------
-llvm::Type* IRBuilder::getJTypeInAccurateSpace(JType jty) {
+llvm::Type* IRBuilder::getJType(JType jty) {
switch (jty) {
case kVoid:
return getJVoidTy();
@@ -90,68 +107,6 @@
}
}
-
-llvm::Type* IRBuilder::getJTypeInRegSpace(JType jty) {
- RegCategory regcat = GetRegCategoryFromJType(jty);
-
- switch (regcat) {
- case kRegUnknown:
- case kRegZero:
- LOG(FATAL) << "Register category \"Unknown\" or \"Zero\" does not have "
- << "the LLVM type";
- return NULL;
-
- case kRegCat1nr:
- return getInt32Ty();
-
- case kRegCat2:
- return getInt64Ty();
-
- case kRegObject:
- return getJObjectTy();
- }
-
- LOG(FATAL) << "Unknown register category: " << regcat;
- return NULL;
-}
-
-
-llvm::Type* IRBuilder::getJTypeInArraySpace(JType jty) {
- switch (jty) {
- case kVoid:
- LOG(FATAL) << "void type should not be used in array type space";
- 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();
-
- default:
- LOG(FATAL) << "Unknown java type: " << jty;
- return NULL;
- }
-}
-
-
llvm::StructType* IRBuilder::getShadowFrameTy(uint32_t vreg_size) {
std::string name(StringPrintf("ShadowFrame%u", vreg_size));