1 IR builder. Kill greenland. Remove JTypeSpace.
Change-Id: I7d08cfd8c1fec46df4ce5f51706dff2e246695b5
diff --git a/src/compiler_llvm/ir_builder.h b/src/compiler_llvm/ir_builder.h
index 60a0f2a..85506e4 100644
--- a/src/compiler_llvm/ir_builder.h
+++ b/src/compiler_llvm/ir_builder.h
@@ -18,6 +18,7 @@
#define ART_SRC_COMPILER_LLVM_IR_BUILDER_H_
#include "backend_types.h"
+#include "intrinsic_helper.h"
#include "md_builder.h"
#include "runtime_support_builder.h"
#include "runtime_support_func.h"
@@ -26,6 +27,7 @@
#include <llvm/DerivedTypes.h>
#include <llvm/LLVMContext.h>
#include <llvm/Support/IRBuilder.h>
+#include <llvm/Support/NoFolder.h>
#include <llvm/Type.h>
#include <stdint.h>
@@ -34,8 +36,26 @@
namespace art {
namespace compiler_llvm {
+class InserterWithDexOffset
+ : public llvm::IRBuilderDefaultInserter<true> {
+ public:
+ InserterWithDexOffset() : node_(NULL) {}
+ void InsertHelper(llvm::Instruction *I, const llvm::Twine &Name,
+ llvm::BasicBlock *BB,
+ llvm::BasicBlock::iterator InsertPt) const {
+ llvm::IRBuilderDefaultInserter<true>::InsertHelper(I, Name, BB, InsertPt);
+ if (node_ != NULL) {
+ I->setMetadata("DexOff", node_);
+ }
+ }
+ void SetDexOffset(llvm::MDNode* node) {
+ node_ = node;
+ }
+ private:
+ llvm::MDNode* node_;
+};
-typedef llvm::IRBuilder<> LLVMIRBuilder;
+typedef llvm::IRBuilder<true, llvm::ConstantFolder, InserterWithDexOffset> LLVMIRBuilder;
// NOTE: Here we define our own LLVMIRBuilder type alias, so that we can
// switch "preserveNames" template parameter easily.
@@ -46,7 +66,7 @@
// General
//--------------------------------------------------------------------------
- IRBuilder(llvm::LLVMContext& context, llvm::Module& module);
+ IRBuilder(llvm::LLVMContext& context, llvm::Module& module, IntrinsicHelper& intrinsic_helper);
//--------------------------------------------------------------------------
@@ -273,33 +293,18 @@
// Type Helper Function
//--------------------------------------------------------------------------
- llvm::Type* getJType(char shorty_jty, JTypeSpace space) {
- return getJType(GetJTypeFromShorty(shorty_jty), space);
+ llvm::Type* getJType(char shorty_jty) {
+ return getJType(GetJTypeFromShorty(shorty_jty));
}
- llvm::Type* getJType(JType jty, JTypeSpace space) {
- switch (space) {
- case kAccurate:
- return getJTypeInAccurateSpace(jty);
-
- case kReg:
- case kField: // Currently field space is equivalent to register space.
- return getJTypeInRegSpace(jty);
-
- case kArray:
- return getJTypeInArraySpace(jty);
- }
-
- LOG(FATAL) << "Unknown type space: " << space;
- return NULL;
- }
+ llvm::Type* getJType(JType jty);
llvm::Type* getJVoidTy() {
return getVoidTy();
}
llvm::IntegerType* getJBooleanTy() {
- return getInt1Ty();
+ return getInt8Ty();
}
llvm::IntegerType* getJByteTy() {
@@ -331,7 +336,15 @@
}
llvm::PointerType* getJObjectTy() {
- return jobject_type_;
+ return java_object_type_;
+ }
+
+ llvm::PointerType* getJMethodTy() {
+ return java_method_type_;
+ }
+
+ llvm::PointerType* getJThreadTy() {
+ return java_thread_type_;
}
llvm::Type* getArtFrameTy() {
@@ -438,27 +451,21 @@
private:
- //--------------------------------------------------------------------------
- // Type Helper Function (Private)
- //--------------------------------------------------------------------------
-
- llvm::Type* getJTypeInAccurateSpace(JType jty);
- llvm::Type* getJTypeInRegSpace(JType jty);
- llvm::Type* getJTypeInArraySpace(JType jty);
-
-
- private:
llvm::Module* module_;
- llvm::PointerType* jobject_type_;
+ MDBuilder mdb_;
+
+ llvm::PointerType* java_object_type_;
+ llvm::PointerType* java_method_type_;
+ llvm::PointerType* java_thread_type_;
llvm::PointerType* jenv_type_;
llvm::StructType* art_frame_type_;
- MDBuilder mdb_;
-
RuntimeSupportBuilder* runtime_support_;
+
+ IntrinsicHelper& intrinsic_helper_;
};