summaryrefslogtreecommitdiff
path: root/src/compiler_llvm/compiler_llvm.cc
diff options
context:
space:
mode:
author Logan Chien <loganchien@google.com> 2012-03-18 04:41:38 +0800
committer Shih-wei Liao <sliao@google.com> 2012-03-26 20:56:51 -0700
commit106b2a03be66748a25b9019e4c222cee498d559f (patch)
treec949a5948b6c4fedba020de206c334dec04b0f10 /src/compiler_llvm/compiler_llvm.cc
parentaeb53035febaaa186b3abdac55e21579a8988d84 (diff)
Create an instance of CompilerLLVM in the constructor of Compiler.
(cherry picked from commit 120539c9a333789f52dd75aa3ec2d303c7cf2119) Change-Id: I43d10f712e515cffd2f97e628a9d2aa2ff994f5b
Diffstat (limited to 'src/compiler_llvm/compiler_llvm.cc')
-rw-r--r--src/compiler_llvm/compiler_llvm.cc54
1 files changed, 38 insertions, 16 deletions
diff --git a/src/compiler_llvm/compiler_llvm.cc b/src/compiler_llvm/compiler_llvm.cc
index 48c6062410..84e66de2cf 100644
--- a/src/compiler_llvm/compiler_llvm.cc
+++ b/src/compiler_llvm/compiler_llvm.cc
@@ -209,19 +209,31 @@ CompiledInvokeStub* CompilerLLVM::CreateInvokeStub(bool is_static,
return upcall_compiler->CreateStub(is_static, shorty);
}
-CompilerLLVM* EnsureCompilerLLVM(art::Compiler& compiler) {
- if (compiler.GetCompilerContext() == NULL) {
- compiler.SetCompilerContext(new CompilerLLVM(&compiler, compiler.GetInstructionSet()));
- }
- CompilerLLVM* compiler_llvm = reinterpret_cast<CompilerLLVM*>(compiler.GetCompilerContext());
- compiler_llvm->SetElfFileName(compiler.GetElfFileName());
- compiler_llvm->SetBitcodeFileName(compiler.GetBitcodeFileName());
- return compiler_llvm;
-}
-
} // namespace compiler_llvm
} // namespace art
+inline static art::compiler_llvm::CompilerLLVM* ContextOf(art::Compiler& compiler) {
+ void *compiler_context = compiler.GetCompilerContext();
+ CHECK(compiler_context != NULL);
+ return reinterpret_cast<art::compiler_llvm::CompilerLLVM*>(compiler_context);
+}
+
+inline static const art::compiler_llvm::CompilerLLVM* ContextOf(const art::Compiler& compiler) {
+ void *compiler_context = compiler.GetCompilerContext();
+ CHECK(compiler_context != NULL);
+ return reinterpret_cast<const art::compiler_llvm::CompilerLLVM*>(compiler_context);
+}
+
+extern "C" void ArtInitCompilerContext(art::Compiler& compiler) {
+ CHECK(compiler.GetCompilerContext() == NULL);
+
+ art::compiler_llvm::CompilerLLVM* compiler_llvm =
+ new art::compiler_llvm::CompilerLLVM(&compiler,
+ compiler.GetInstructionSet());
+
+ compiler.SetCompilerContext(compiler_llvm);
+}
+
extern "C" art::CompiledMethod* ArtCompileMethod(art::Compiler& compiler,
const art::DexFile::CodeItem* code_item,
uint32_t access_flags, uint32_t method_idx,
@@ -235,7 +247,7 @@ extern "C" art::CompiledMethod* ArtCompileMethod(art::Compiler& compiler,
class_loader, class_linker, dex_file, *dex_cache, code_item,
method_idx, access_flags);
- return art::compiler_llvm::EnsureCompilerLLVM(compiler)->CompileDexMethod(&oat_compilation_unit);
+ return ContextOf(compiler)->CompileDexMethod(&oat_compilation_unit);
}
extern "C" art::CompiledMethod* ArtJniCompileMethod(art::Compiler& compiler,
@@ -249,7 +261,7 @@ extern "C" art::CompiledMethod* ArtJniCompileMethod(art::Compiler& compiler,
class_loader, class_linker, dex_file, *dex_cache, NULL,
method_idx, access_flags);
- art::compiler_llvm::CompilerLLVM* compiler_llvm = art::compiler_llvm::EnsureCompilerLLVM(compiler);
+ art::compiler_llvm::CompilerLLVM* compiler_llvm = ContextOf(compiler);
art::CompiledMethod* result = compiler_llvm->CompileNativeMethod(&oat_compilation_unit);
compiler_llvm->MaterializeIfThresholdReached();
return result;
@@ -257,18 +269,28 @@ extern "C" art::CompiledMethod* ArtJniCompileMethod(art::Compiler& compiler,
extern "C" art::CompiledInvokeStub* ArtCreateInvokeStub(art::Compiler& compiler, bool is_static,
const char* shorty, uint32_t shorty_len) {
- return art::compiler_llvm::EnsureCompilerLLVM(compiler)->CreateInvokeStub(is_static, shorty);
+ return ContextOf(compiler)->CreateInvokeStub(is_static, shorty);
+}
+
+extern "C" void compilerLLVMSetElfFileName(art::Compiler& compiler,
+ std::string const& filename) {
+ ContextOf(compiler)->SetElfFileName(filename);
+}
+
+extern "C" void compilerLLVMSetBitcodeFileName(art::Compiler& compiler,
+ std::string const& filename) {
+ ContextOf(compiler)->SetBitcodeFileName(filename);
}
extern "C" void compilerLLVMMaterializeRemainder(art::Compiler& compiler) {
- art::compiler_llvm::EnsureCompilerLLVM(compiler)->MaterializeRemainder();
+ ContextOf(compiler)->MaterializeRemainder();
}
// Note: Using this function carefully!!! This is temporary solution, we will remove it.
extern "C" art::MutexLock* compilerLLVMMutexLock(art::Compiler& compiler) {
- return new art::MutexLock(art::compiler_llvm::EnsureCompilerLLVM(compiler)->compiler_lock_);
+ return new art::MutexLock(ContextOf(compiler)->compiler_lock_);
}
extern "C" void compilerLLVMDispose(art::Compiler& compiler) {
- delete art::compiler_llvm::EnsureCompilerLLVM(compiler);
+ delete ContextOf(compiler);
}