Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(404)

Side by Side Diff: runtime/vm/regexp_assembler_ir.cc

Issue 2947143002: Revert "VM(RegExp): Allow OSR optimization of RegExp :matcher functions." (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/regexp_assembler_ir.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/regexp_assembler_ir.h" 5 #include "vm/regexp_assembler_ir.h"
6 6
7 #include "vm/bit_vector.h" 7 #include "vm/bit_vector.h"
8 #include "vm/compiler.h" 8 #include "vm/compiler.h"
9 #include "vm/dart_entry.h" 9 #include "vm/dart_entry.h"
10 #include "vm/flow_graph_builder.h" 10 #include "vm/flow_graph_builder.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 * indices of -1 denote non-matched groups. Note that we store these indices 71 * indices of -1 denote non-matched groups. Note that we store these indices
72 * as a negative offset from the end of the string in registers_array_ 72 * as a negative offset from the end of the string in registers_array_
73 * during processing, and convert them to standard indexes when copying them 73 * during processing, and convert them to standard indexes when copying them
74 * to matches_param_ on successful match. 74 * to matches_param_ on successful match.
75 */ 75 */
76 IRRegExpMacroAssembler::IRRegExpMacroAssembler( 76 IRRegExpMacroAssembler::IRRegExpMacroAssembler(
77 intptr_t specialization_cid, 77 intptr_t specialization_cid,
78 intptr_t capture_count, 78 intptr_t capture_count,
79 const ParsedFunction* parsed_function, 79 const ParsedFunction* parsed_function,
80 const ZoneGrowableArray<const ICData*>& ic_data_array, 80 const ZoneGrowableArray<const ICData*>& ic_data_array,
81 intptr_t osr_id,
82 Zone* zone) 81 Zone* zone)
83 : RegExpMacroAssembler(zone), 82 : RegExpMacroAssembler(zone),
84 thread_(Thread::Current()), 83 thread_(Thread::Current()),
85 specialization_cid_(specialization_cid), 84 specialization_cid_(specialization_cid),
86 parsed_function_(parsed_function), 85 parsed_function_(parsed_function),
87 ic_data_array_(ic_data_array), 86 ic_data_array_(ic_data_array),
88 current_instruction_(NULL), 87 current_instruction_(NULL),
89 stack_(NULL), 88 stack_(NULL),
90 stack_pointer_(NULL), 89 stack_pointer_(NULL),
91 current_character_(NULL), 90 current_character_(NULL),
(...skipping 27 matching lines...) Expand all
119 stack_array_cell_.SetAt( 118 stack_array_cell_.SetAt(
120 0, 119 0,
121 TypedData::Handle(zone, TypedData::New(kTypedDataInt32ArrayCid, 120 TypedData::Handle(zone, TypedData::New(kTypedDataInt32ArrayCid,
122 kMinStackSize / 4, Heap::kOld))); 121 kMinStackSize / 4, Heap::kOld)));
123 122
124 // Create and generate all preset blocks. 123 // Create and generate all preset blocks.
125 entry_block_ = new (zone) GraphEntryInstr( 124 entry_block_ = new (zone) GraphEntryInstr(
126 *parsed_function_, 125 *parsed_function_,
127 new (zone) TargetEntryInstr(block_id_.Alloc(), kInvalidTryIndex, 126 new (zone) TargetEntryInstr(block_id_.Alloc(), kInvalidTryIndex,
128 GetNextDeoptId()), 127 GetNextDeoptId()),
129 osr_id); 128 Compiler::kNoOSRDeoptId);
130 start_block_ = new (zone) 129 start_block_ = new (zone)
131 JoinEntryInstr(block_id_.Alloc(), kInvalidTryIndex, GetNextDeoptId()); 130 JoinEntryInstr(block_id_.Alloc(), kInvalidTryIndex, GetNextDeoptId());
132 success_block_ = new (zone) 131 success_block_ = new (zone)
133 JoinEntryInstr(block_id_.Alloc(), kInvalidTryIndex, GetNextDeoptId()); 132 JoinEntryInstr(block_id_.Alloc(), kInvalidTryIndex, GetNextDeoptId());
134 backtrack_block_ = new (zone) 133 backtrack_block_ = new (zone)
135 JoinEntryInstr(block_id_.Alloc(), kInvalidTryIndex, GetNextDeoptId()); 134 JoinEntryInstr(block_id_.Alloc(), kInvalidTryIndex, GetNextDeoptId());
136 exit_block_ = new (zone) 135 exit_block_ = new (zone)
137 JoinEntryInstr(block_id_.Alloc(), kInvalidTryIndex, GetNextDeoptId()); 136 JoinEntryInstr(block_id_.Alloc(), kInvalidTryIndex, GetNextDeoptId());
138 137
139 GenerateEntryBlock(); 138 GenerateEntryBlock();
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 StoreLocal(stack_pointer_, Bind(Int64Constant(-1))); 216 StoreLocal(stack_pointer_, Bind(Int64Constant(-1)));
218 217
219 // Jump to the start block. 218 // Jump to the start block.
220 current_instruction_->Goto(start_block_); 219 current_instruction_->Goto(start_block_);
221 } 220 }
222 221
223 222
224 void IRRegExpMacroAssembler::GenerateBacktrackBlock() { 223 void IRRegExpMacroAssembler::GenerateBacktrackBlock() {
225 set_current_instruction(backtrack_block_); 224 set_current_instruction(backtrack_block_);
226 TAG(); 225 TAG();
227 CheckPreemption(/*is_backtrack=*/true); 226 CheckPreemption();
228 227
229 const intptr_t entries_count = entry_block_->indirect_entries().length(); 228 const intptr_t entries_count = entry_block_->indirect_entries().length();
230 229
231 TypedData& offsets = TypedData::ZoneHandle( 230 TypedData& offsets = TypedData::ZoneHandle(
232 Z, TypedData::New(kTypedDataInt32ArrayCid, entries_count, Heap::kOld)); 231 Z, TypedData::New(kTypedDataInt32ArrayCid, entries_count, Heap::kOld));
233 232
234 PushArgumentInstr* block_offsets_push = 233 PushArgumentInstr* block_offsets_push =
235 PushArgument(Bind(new (Z) ConstantInstr(offsets))); 234 PushArgument(Bind(new (Z) ConstantInstr(offsets)));
236 PushArgumentInstr* block_id_push = PushArgument(Bind(PopStack())); 235 PushArgumentInstr* block_id_push = PushArgument(Bind(PopStack()));
237 236
(...skipping 1523 matching lines...) Expand 10 before | Expand all | Expand 10 after
1761 new (Z) IndirectEntryInstr(block_id_.Alloc(), indirect_id_.Alloc(), 1760 new (Z) IndirectEntryInstr(block_id_.Alloc(), indirect_id_.Alloc(),
1762 kInvalidTryIndex, GetNextDeoptId()); 1761 kInvalidTryIndex, GetNextDeoptId());
1763 blocks_.Add(target); 1762 blocks_.Add(target);
1764 1763
1765 target->AppendInstruction(new (Z) GotoInstr(dst, GetNextDeoptId())); 1764 target->AppendInstruction(new (Z) GotoInstr(dst, GetNextDeoptId()));
1766 1765
1767 return target; 1766 return target;
1768 } 1767 }
1769 1768
1770 1769
1771 void IRRegExpMacroAssembler::CheckPreemption(bool is_backtrack) { 1770 void IRRegExpMacroAssembler::CheckPreemption() {
1772 TAG(); 1771 TAG();
1773 1772 AppendInstruction(new (Z) CheckStackOverflowInstr(TokenPosition::kNoSource, 0,
1774 // We don't have the loop_depth available when compiling regexps, but 1773 GetNextDeoptId()));
1775 // we set loop_depth to a non-zero value because this instruction does
1776 // not act as an OSR entry outside loops.
1777 AppendInstruction(new (Z) CheckStackOverflowInstr(
1778 TokenPosition::kNoSource,
1779 /*loop_depth=*/1, GetNextDeoptId(),
1780 is_backtrack ? CheckStackOverflowInstr::kOsrAndPreemption
1781 : CheckStackOverflowInstr::kOsrOnly));
1782 } 1774 }
1783 1775
1784 1776
1785 Definition* IRRegExpMacroAssembler::Add(PushArgumentInstr* lhs, 1777 Definition* IRRegExpMacroAssembler::Add(PushArgumentInstr* lhs,
1786 PushArgumentInstr* rhs) { 1778 PushArgumentInstr* rhs) {
1787 return InstanceCall(InstanceCallDescriptor::FromToken(Token::kADD), lhs, rhs); 1779 return InstanceCall(InstanceCallDescriptor::FromToken(Token::kADD), lhs, rhs);
1788 } 1780 }
1789 1781
1790 1782
1791 Definition* IRRegExpMacroAssembler::Sub(PushArgumentInstr* lhs, 1783 Definition* IRRegExpMacroAssembler::Sub(PushArgumentInstr* lhs,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1860 1852
1861 return Bind(new (Z) LoadCodeUnitsInstr(pattern_val, index_val, characters, 1853 return Bind(new (Z) LoadCodeUnitsInstr(pattern_val, index_val, characters,
1862 specialization_cid_, 1854 specialization_cid_,
1863 TokenPosition::kNoSource)); 1855 TokenPosition::kNoSource));
1864 } 1856 }
1865 1857
1866 1858
1867 #undef __ 1859 #undef __
1868 1860
1869 } // namespace dart 1861 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/regexp_assembler_ir.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698