summaryrefslogtreecommitdiff
path: root/src/compiler_llvm/jni_compiler.cc
diff options
context:
space:
mode:
author TDYa127 <tdy@google.com> 2012-04-01 15:24:56 -0700
committer Shih-wei Liao <sliao@google.com> 2012-04-07 10:33:12 -0700
commit8532191c4fc8e005f7d432fec40fd9f2936275c6 (patch)
tree2173082a31163332c22b262331fe98470583cd12 /src/compiler_llvm/jni_compiler.cc
parentb12c3017e619747ab26ba56d935401a7e45b59cd (diff)
Late method resolution.
Change-Id: Ic35348022391c3c11a1d4984b9add7b6ef53aa4c
Diffstat (limited to 'src/compiler_llvm/jni_compiler.cc')
-rw-r--r--src/compiler_llvm/jni_compiler.cc13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/compiler_llvm/jni_compiler.cc b/src/compiler_llvm/jni_compiler.cc
index 285caaba26..071c0bd4e7 100644
--- a/src/compiler_llvm/jni_compiler.cc
+++ b/src/compiler_llvm/jni_compiler.cc
@@ -145,11 +145,20 @@ CompiledMethod* JniCompiler::Compile() {
irb_.getInt32(Thread::kNative));
// Get callee code_addr
- llvm::Value* code_addr =
+ llvm::Value* code_addr_ =
LoadFromObjectOffset(method_object_addr,
Method::NativeMethodOffset().Int32Value(),
GetFunctionType(method_idx_, is_static, true)->getPointerTo());
-
+ llvm::Value* code_addr;
+ llvm::FunctionType* method_type = GetFunctionType(method_idx_, is_static, true);
+
+ // TODO: Inline check
+ llvm::Value* runtime_func = irb_.GetRuntime(runtime_support::EnsureInitialized);
+ llvm::Value* result = irb_.CreateCall2(runtime_func,
+ method_object_addr,
+ irb_.CreatePointerCast(code_addr_,
+ irb_.getJObjectTy()));
+ code_addr = irb_.CreatePointerCast(result, method_type->getPointerTo());
// Load actual parameters
std::vector<llvm::Value*> args;