Add art runtime support declaration.
Change-Id: I909ac29ef4ffbcbe93c7809e2d396ed4672f5892
diff --git a/src/compiler_llvm/ir_builder.cc b/src/compiler_llvm/ir_builder.cc
index 24fac1a..b2c795b 100644
--- a/src/compiler_llvm/ir_builder.cc
+++ b/src/compiler_llvm/ir_builder.cc
@@ -15,6 +15,7 @@
*/
#include "ir_builder.h"
+#include "runtime_support_func.h"
#include <llvm/Module.h>
@@ -30,9 +31,45 @@
: LLVMIRBuilder(context) {
// Get java object type from module
- llvm::Type* jobject_struct_type =
- llvm::StructType::create(context, "JavaObject");
+ llvm::Type* jobject_struct_type = module.getTypeByName("JavaObject");
+ CHECK_NE(jobject_struct_type, static_cast<llvm::Type*>(NULL));
jobject_type_ = jobject_struct_type->getPointerTo();
+
+ // Load the runtime support function declaration from module
+ InitRuntimeSupportFuncDecl(module);
+}
+
+
+//----------------------------------------------------------------------------
+// Runtime Helper Function
+//----------------------------------------------------------------------------
+
+void IRBuilder::InitRuntimeSupportFuncDecl(llvm::Module& module) {
+ using namespace runtime_support;
+
+#define GET_RUNTIME_SUPPORT_FUNC_DECL(ID, NAME) \
+ do { \
+ llvm::Function* fn = module.getFunction(NAME); \
+ DCHECK_NE(fn, (void*)NULL) << "Function not found: " << NAME; \
+ runtime_support_func_decls_[ID] = fn; \
+ } while (0);
+
+#include "runtime_support_func_list.h"
+ RUNTIME_SUPPORT_FUNC_LIST(GET_RUNTIME_SUPPORT_FUNC_DECL)
+#undef RUNTIME_SUPPORT_FUNC_LIST
+#undef GET_RUNTIME_SUPPORT_FUNC_DECL
+}
+
+
+llvm::Function* IRBuilder::GetRuntime(runtime_support::RuntimeId rt) const {
+ using namespace runtime_support;
+
+ if (rt >= 0 && rt < MAX_ID){
+ return runtime_support_func_decls_[rt];
+ } else {
+ LOG(ERROR) << "Unknown runtime function id: " << rt;
+ return NULL;
+ }
}