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
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc
index bf9afa2..1a2d40b 100644
--- a/compiler/optimizing/optimizing_compiler.cc
+++ b/compiler/optimizing/optimizing_compiler.cc
@@ -307,7 +307,6 @@
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 @@
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 @@
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 @@
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 @@
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 @@
codegen,
dex_compilation_unit,
pass_observer,
- handles,
x86_optimizations);
}
#endif
@@ -477,7 +469,6 @@
UNUSED(codegen);
UNUSED(dex_compilation_unit);
UNUSED(pass_observer);
- UNUSED(handles);
return false;
}
}
@@ -485,8 +476,7 @@
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 @@
codegen,
dex_compilation_unit,
pass_observer,
- handles,
arm_optimizations);
}
#endif
@@ -517,7 +506,6 @@
codegen,
dex_compilation_unit,
pass_observer,
- handles,
arm64_optimizations);
}
#endif
@@ -534,7 +522,6 @@
codegen,
dex_compilation_unit,
pass_observer,
- handles,
x86_optimizations);
}
#endif
@@ -550,7 +537,6 @@
codegen,
dex_compilation_unit,
pass_observer,
- handles,
x86_64_optimizations);
}
#endif
@@ -595,8 +581,7 @@
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 @@
codegen,
dex_compilation_unit,
pass_observer,
- handles,
optimizations.data(),
length);
return;
@@ -682,10 +666,9 @@
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 @@
HGraph* graph = new (allocator) HGraph(
allocator,
arena_stack,
+ handles,
dex_file,
method_idx,
compiler_options.GetInstructionSet(),
@@ -837,8 +821,7 @@
&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 @@
}
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 @@
HGraph* graph = new (allocator) HGraph(
allocator,
arena_stack,
+ handles,
dex_file,
method_idx,
compiler_options.GetInstructionSet(),
@@ -962,8 +946,7 @@
&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 @@
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(),