diff options
-rw-r--r-- | compiler/optimizing/graph_checker.cc | 13 | ||||
-rw-r--r-- | compiler/optimizing/graph_checker.h | 1 | ||||
-rw-r--r-- | compiler/optimizing/nodes.cc | 3 |
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); } |