diff options
| author | 2012-02-13 09:51:10 -0800 | |
|---|---|---|
| committer | 2012-02-14 23:46:16 -0800 | |
| commit | d1fec81868a3567560a3868350e0a945248e925b (patch) | |
| tree | 749615f244e92d7f18b1713950d8110322b7645f /src/compiler_llvm/ir_builder.cc | |
| parent | 0401b68ec5ddf2aface872d756558aafcada3655 (diff) | |
Beginning of LLVM backend for ART.
Change-Id: I03466aed94670ac72d489ebc6e34d7ee1c9c857e
Diffstat (limited to 'src/compiler_llvm/ir_builder.cc')
| -rw-r--r-- | src/compiler_llvm/ir_builder.cc | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/compiler_llvm/ir_builder.cc b/src/compiler_llvm/ir_builder.cc new file mode 100644 index 0000000000..ea773bd5fd --- /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; +} |