summaryrefslogtreecommitdiff
path: root/compiler/optimizing/optimizing_compiler.cc
diff options
context:
space:
mode:
authorVladimir Marko <vmarko@google.com>2020-05-12 13:58:51 +0100
committerVladimir Marko <vmarko@google.com>2020-05-13 08:00:22 +0000
commit02ca05a5a6e3f5028c6c2987a81be481d07bc617 (patch)
treea364c4a46c573fdfddf607b0e78e5fd3f455c17f /compiler/optimizing/optimizing_compiler.cc
parent5868adaefe72cc8bcdcd8325c40f712375a506d1 (diff)
Move HandleCache to HGraph.
This avoids passing the `VariableSizedHandleScope*` argument around and eliminates HGraph::inexact_object_rti_ and its initialization. The latter shall allow running Optimizing gtests that do not require type information without creating a Runtime in future. (To be implemented in a separate CL.) Test: m test-art-host-gtest Test: testrunner.py --host --optmizing Test: aosp_taimen-userdebug boots. Change-Id: I36fe9bc556c6d610d644c8c14cc74c9985a14d64
Diffstat (limited to 'compiler/optimizing/optimizing_compiler.cc')
-rw-r--r--compiler/optimizing/optimizing_compiler.cc50
1 files changed, 16 insertions, 34 deletions
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc
index bf9afa27eb..1a2d40bcfd 100644
--- a/compiler/optimizing/optimizing_compiler.cc
+++ b/compiler/optimizing/optimizing_compiler.cc
@@ -307,7 +307,6 @@ class OptimizingCompiler final : public Compiler {
CodeGenerator* codegen,
const DexCompilationUnit& dex_compilation_unit,
PassObserver* pass_observer,
- VariableSizedHandleScope* handles,
const OptimizationDef definitions[],
size_t length) const {
// Convert definitions to optimization passes.
@@ -318,8 +317,7 @@ class OptimizingCompiler final : public Compiler {
graph,
compilation_stats_.get(),
codegen,
- dex_compilation_unit,
- handles);
+ dex_compilation_unit);
DCHECK_EQ(length, optimizations.size());
// Run the optimization passes one by one. Any "depends_on" pass refers back to
// the most recent occurrence of that pass, skipped or executed.
@@ -350,17 +348,15 @@ class OptimizingCompiler final : public Compiler {
CodeGenerator* codegen,
const DexCompilationUnit& dex_compilation_unit,
PassObserver* pass_observer,
- VariableSizedHandleScope* handles,
const OptimizationDef (&definitions)[length]) const {
return RunOptimizations(
- graph, codegen, dex_compilation_unit, pass_observer, handles, definitions, length);
+ graph, codegen, dex_compilation_unit, pass_observer, definitions, length);
}
void RunOptimizations(HGraph* graph,
CodeGenerator* codegen,
const DexCompilationUnit& dex_compilation_unit,
- PassObserver* pass_observer,
- VariableSizedHandleScope* handles) const;
+ PassObserver* pass_observer) const;
private:
// Create a 'CompiledMethod' for an optimized graph.
@@ -396,14 +392,12 @@ class OptimizingCompiler final : public Compiler {
bool RunArchOptimizations(HGraph* graph,
CodeGenerator* codegen,
const DexCompilationUnit& dex_compilation_unit,
- PassObserver* pass_observer,
- VariableSizedHandleScope* handles) const;
+ PassObserver* pass_observer) const;
bool RunBaselineOptimizations(HGraph* graph,
CodeGenerator* codegen,
const DexCompilationUnit& dex_compilation_unit,
- PassObserver* pass_observer,
- VariableSizedHandleScope* handles) const;
+ PassObserver* pass_observer) const;
std::vector<uint8_t> GenerateJitDebugInfo(const debug::MethodDebugInfo& method_debug_info);
@@ -456,8 +450,7 @@ static bool IsInstructionSetSupported(InstructionSet instruction_set) {
bool OptimizingCompiler::RunBaselineOptimizations(HGraph* graph,
CodeGenerator* codegen,
const DexCompilationUnit& dex_compilation_unit,
- PassObserver* pass_observer,
- VariableSizedHandleScope* handles) const {
+ PassObserver* pass_observer) const {
switch (codegen->GetCompilerOptions().GetInstructionSet()) {
#ifdef ART_ENABLE_CODEGEN_x86
case InstructionSet::kX86: {
@@ -468,7 +461,6 @@ bool OptimizingCompiler::RunBaselineOptimizations(HGraph* graph,
codegen,
dex_compilation_unit,
pass_observer,
- handles,
x86_optimizations);
}
#endif
@@ -477,7 +469,6 @@ bool OptimizingCompiler::RunBaselineOptimizations(HGraph* graph,
UNUSED(codegen);
UNUSED(dex_compilation_unit);
UNUSED(pass_observer);
- UNUSED(handles);
return false;
}
}
@@ -485,8 +476,7 @@ bool OptimizingCompiler::RunBaselineOptimizations(HGraph* graph,
bool OptimizingCompiler::RunArchOptimizations(HGraph* graph,
CodeGenerator* codegen,
const DexCompilationUnit& dex_compilation_unit,
- PassObserver* pass_observer,
- VariableSizedHandleScope* handles) const {
+ PassObserver* pass_observer) const {
switch (codegen->GetCompilerOptions().GetInstructionSet()) {
#if defined(ART_ENABLE_CODEGEN_arm)
case InstructionSet::kThumb2:
@@ -501,7 +491,6 @@ bool OptimizingCompiler::RunArchOptimizations(HGraph* graph,
codegen,
dex_compilation_unit,
pass_observer,
- handles,
arm_optimizations);
}
#endif
@@ -517,7 +506,6 @@ bool OptimizingCompiler::RunArchOptimizations(HGraph* graph,
codegen,
dex_compilation_unit,
pass_observer,
- handles,
arm64_optimizations);
}
#endif
@@ -534,7 +522,6 @@ bool OptimizingCompiler::RunArchOptimizations(HGraph* graph,
codegen,
dex_compilation_unit,
pass_observer,
- handles,
x86_optimizations);
}
#endif
@@ -550,7 +537,6 @@ bool OptimizingCompiler::RunArchOptimizations(HGraph* graph,
codegen,
dex_compilation_unit,
pass_observer,
- handles,
x86_64_optimizations);
}
#endif
@@ -595,8 +581,7 @@ static std::string ConvertPassNameToOptimizationName(const std::string& pass_nam
void OptimizingCompiler::RunOptimizations(HGraph* graph,
CodeGenerator* codegen,
const DexCompilationUnit& dex_compilation_unit,
- PassObserver* pass_observer,
- VariableSizedHandleScope* handles) const {
+ PassObserver* pass_observer) const {
const std::vector<std::string>* pass_names = GetCompilerOptions().GetPassesToRun();
if (pass_names != nullptr) {
// If passes were defined on command-line, build the optimization
@@ -612,7 +597,6 @@ void OptimizingCompiler::RunOptimizations(HGraph* graph,
codegen,
dex_compilation_unit,
pass_observer,
- handles,
optimizations.data(),
length);
return;
@@ -682,10 +666,9 @@ void OptimizingCompiler::RunOptimizations(HGraph* graph,
codegen,
dex_compilation_unit,
pass_observer,
- handles,
optimizations);
- RunArchOptimizations(graph, codegen, dex_compilation_unit, pass_observer, handles);
+ RunArchOptimizations(graph, codegen, dex_compilation_unit, pass_observer);
}
static ArenaVector<linker::LinkerPatch> EmitAndSortLinkerPatches(CodeGenerator* codegen) {
@@ -798,6 +781,7 @@ CodeGenerator* OptimizingCompiler::TryCompile(ArenaAllocator* allocator,
HGraph* graph = new (allocator) HGraph(
allocator,
arena_stack,
+ handles,
dex_file,
method_idx,
compiler_options.GetInstructionSet(),
@@ -837,8 +821,7 @@ CodeGenerator* OptimizingCompiler::TryCompile(ArenaAllocator* allocator,
&dex_compilation_unit,
codegen.get(),
compilation_stats_.get(),
- interpreter_metadata,
- handles);
+ interpreter_metadata);
GraphAnalysisResult result = builder.BuildGraph();
if (result != kAnalysisSuccess) {
switch (result) {
@@ -881,9 +864,9 @@ CodeGenerator* OptimizingCompiler::TryCompile(ArenaAllocator* allocator,
}
if (baseline) {
- RunBaselineOptimizations(graph, codegen.get(), dex_compilation_unit, &pass_observer, handles);
+ RunBaselineOptimizations(graph, codegen.get(), dex_compilation_unit, &pass_observer);
} else {
- RunOptimizations(graph, codegen.get(), dex_compilation_unit, &pass_observer, handles);
+ RunOptimizations(graph, codegen.get(), dex_compilation_unit, &pass_observer);
}
RegisterAllocator::Strategy regalloc_strategy =
@@ -926,6 +909,7 @@ CodeGenerator* OptimizingCompiler::TryCompileIntrinsic(
HGraph* graph = new (allocator) HGraph(
allocator,
arena_stack,
+ handles,
dex_file,
method_idx,
compiler_options.GetInstructionSet(),
@@ -962,8 +946,7 @@ CodeGenerator* OptimizingCompiler::TryCompileIntrinsic(
&dex_compilation_unit,
codegen.get(),
compilation_stats_.get(),
- /* interpreter_metadata= */ ArrayRef<const uint8_t>(),
- handles);
+ /* interpreter_metadata= */ ArrayRef<const uint8_t>());
builder.BuildIntrinsicGraph(method);
}
@@ -976,10 +959,9 @@ CodeGenerator* OptimizingCompiler::TryCompileIntrinsic(
codegen.get(),
dex_compilation_unit,
&pass_observer,
- handles,
optimizations);
- RunArchOptimizations(graph, codegen.get(), dex_compilation_unit, &pass_observer, handles);
+ RunArchOptimizations(graph, codegen.get(), dex_compilation_unit, &pass_observer);
AllocateRegisters(graph,
codegen.get(),