summaryrefslogtreecommitdiff
path: root/compiler/optimizing
diff options
context:
space:
mode:
author Santiago Aboy Solanes <solanes@google.com> 2022-12-15 14:58:21 +0000
committer Santiago Aboy Solanes <solanes@google.com> 2022-12-16 14:43:35 +0000
commitbf778f0cc4d91b93ebd877db0a3f4187d482be4b (patch)
tree7ea2e53244331f01ae91ca6c41f8a77ca19fa26c /compiler/optimizing
parentaa41e55d3f2c0cda1a39b8528097313e94492132 (diff)
Set HasMonitorOperations in the outer graph when inlining
If the callee graph has monitor operations, the outer graph will have them too when inlining. If we don't do this, e.g. we will skip adding the needed vreg info https://cs.android.com/android/platform/superproject/+/master:art/compiler/optimizing/code_generator.cc;l=1193;drc=434d968b4af0bc8af9889170250bee3e08839bea. Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b Change-Id: I97817ea93c12727bb7d198fb5abea21c32d181c9
Diffstat (limited to 'compiler/optimizing')
-rw-r--r--compiler/optimizing/graph_checker.cc13
-rw-r--r--compiler/optimizing/graph_checker.h1
-rw-r--r--compiler/optimizing/nodes.cc3
3 files changed, 17 insertions, 0 deletions
diff --git a/compiler/optimizing/graph_checker.cc b/compiler/optimizing/graph_checker.cc
index 3d80de0e04..ec89022491 100644
--- a/compiler/optimizing/graph_checker.cc
+++ b/compiler/optimizing/graph_checker.cc
@@ -375,6 +375,19 @@ void GraphChecker::VisitLoadException(HLoadException* load) {
}
}
+void GraphChecker::VisitMonitorOperation(HMonitorOperation* monitor_op) {
+ if (!GetGraph()->HasMonitorOperations()) {
+ AddError(
+ StringPrintf("The graph doesn't have the HasMonitorOperations bit set but we saw "
+ "%s:%d in block %d.",
+ monitor_op->DebugName(),
+ monitor_op->GetId(),
+ monitor_op->GetBlock()->GetBlockId()));
+ }
+
+ VisitInstruction(monitor_op);
+}
+
void GraphChecker::VisitInstruction(HInstruction* instruction) {
if (seen_ids_.IsBitSet(instruction->GetId())) {
AddError(StringPrintf("Instruction id %d is duplicate in graph.",
diff --git a/compiler/optimizing/graph_checker.h b/compiler/optimizing/graph_checker.h
index 950868b4ba..738c0d6d3e 100644
--- a/compiler/optimizing/graph_checker.h
+++ b/compiler/optimizing/graph_checker.h
@@ -68,6 +68,7 @@ class GraphChecker : public HGraphDelegateVisitor {
void VisitInstanceOf(HInstanceOf* check) override;
void VisitInvokeStaticOrDirect(HInvokeStaticOrDirect* invoke) override;
void VisitLoadException(HLoadException* load) override;
+ void VisitMonitorOperation(HMonitorOperation* monitor_operation) override;
void VisitNeg(HNeg* instruction) override;
void VisitPackedSwitch(HPackedSwitch* instruction) override;
void VisitReturn(HReturn* ret) override;
diff --git a/compiler/optimizing/nodes.cc b/compiler/optimizing/nodes.cc
index 8491c24b23..0e85838862 100644
--- a/compiler/optimizing/nodes.cc
+++ b/compiler/optimizing/nodes.cc
@@ -2788,6 +2788,9 @@ HInstruction* HGraph::InlineInto(HGraph* outer_graph, HInvoke* invoke) {
if (HasTryCatch()) {
outer_graph->SetHasTryCatch(true);
}
+ if (HasMonitorOperations()) {
+ outer_graph->SetHasMonitorOperations(true);
+ }
if (HasSIMD()) {
outer_graph->SetHasSIMD(true);
}