Index: runtime/vm/flow_graph_compiler_arm64.cc |
diff --git a/runtime/vm/flow_graph_compiler_arm64.cc b/runtime/vm/flow_graph_compiler_arm64.cc |
index 0880b34641974613bc0e5025b74e1b4493a9cf95..d1e5a717ec73ad3760f32ff4ac2acf49a4360243 100644 |
--- a/runtime/vm/flow_graph_compiler_arm64.cc |
+++ b/runtime/vm/flow_graph_compiler_arm64.cc |
@@ -13,6 +13,7 @@ |
#include "vm/dart_entry.h" |
#include "vm/deopt_instructions.h" |
#include "vm/il_printer.h" |
+#include "vm/instructions.h" |
#include "vm/locations.h" |
#include "vm/object_store.h" |
#include "vm/parser.h" |
@@ -1110,6 +1111,13 @@ void FlowGraphCompiler::CompileGraph() { |
GenerateDeferredCode(); |
if (is_optimizing()) { |
+ // Leave enough space for patching in case of lazy deoptimization from |
+ // deferred code. |
+ for (intptr_t i = 0; |
+ i < CallPattern::kDeoptCallLengthInInstructions; |
+ ++i) { |
+ __ orr(R0, ZR, Operand(R0)); // nop |
+ } |
lazy_deopt_pc_offset_ = assembler()->CodeSize(); |
__ BranchPatchable(*StubCode::DeoptimizeLazy_entry()); |
} |