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

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

Issue 2960413002: Omit JIT compiler from precompiled runtime on ARM, ARM64 and IA32. (Closed)
Patch Set: Created 3 years, 5 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
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.h" 5 #include "vm/regexp.h"
6 6
7 #include "vm/dart_entry.h" 7 #include "vm/dart_entry.h"
8 #include "vm/regexp_assembler.h" 8 #include "vm/regexp_assembler.h"
9 #include "vm/regexp_assembler_bytecode.h" 9 #include "vm/regexp_assembler_bytecode.h"
10 #include "vm/regexp_assembler_ir.h" 10 #include "vm/regexp_assembler_ir.h"
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 intptr_t total_samples_; 291 intptr_t total_samples_;
292 }; 292 };
293 293
294 294
295 class RegExpCompiler : public ValueObject { 295 class RegExpCompiler : public ValueObject {
296 public: 296 public:
297 RegExpCompiler(intptr_t capture_count, bool ignore_case, bool is_one_byte); 297 RegExpCompiler(intptr_t capture_count, bool ignore_case, bool is_one_byte);
298 298
299 intptr_t AllocateRegister() { return next_register_++; } 299 intptr_t AllocateRegister() { return next_register_++; }
300 300
301 #if !defined(DART_PRECOMPILED_RUNTIME)
301 RegExpEngine::CompilationResult Assemble(IRRegExpMacroAssembler* assembler, 302 RegExpEngine::CompilationResult Assemble(IRRegExpMacroAssembler* assembler,
302 RegExpNode* start, 303 RegExpNode* start,
303 intptr_t capture_count, 304 intptr_t capture_count,
304 const String& pattern); 305 const String& pattern);
306 #endif
305 307
306 RegExpEngine::CompilationResult Assemble( 308 RegExpEngine::CompilationResult Assemble(
307 BytecodeRegExpMacroAssembler* assembler, 309 BytecodeRegExpMacroAssembler* assembler,
308 RegExpNode* start, 310 RegExpNode* start,
309 intptr_t capture_count, 311 intptr_t capture_count,
310 const String& pattern); 312 const String& pattern);
311 313
312 inline void AddWork(RegExpNode* node) { work_list_->Add(node); } 314 inline void AddWork(RegExpNode* node) { work_list_->Add(node); }
313 315
314 static const intptr_t kImplementationOffset = 0; 316 static const intptr_t kImplementationOffset = 0;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 recursion_depth_(0), 382 recursion_depth_(0),
381 ignore_case_(ignore_case), 383 ignore_case_(ignore_case),
382 is_one_byte_(is_one_byte), 384 is_one_byte_(is_one_byte),
383 reg_exp_too_big_(false), 385 reg_exp_too_big_(false),
384 current_expansion_factor_(1), 386 current_expansion_factor_(1),
385 zone_(Thread::Current()->zone()) { 387 zone_(Thread::Current()->zone()) {
386 accept_ = new (Z) EndNode(EndNode::ACCEPT, Z); 388 accept_ = new (Z) EndNode(EndNode::ACCEPT, Z);
387 } 389 }
388 390
389 391
392 #if !defined(DART_PRECOMPILED_RUNTIME)
390 RegExpEngine::CompilationResult RegExpCompiler::Assemble( 393 RegExpEngine::CompilationResult RegExpCompiler::Assemble(
391 IRRegExpMacroAssembler* macro_assembler, 394 IRRegExpMacroAssembler* macro_assembler,
392 RegExpNode* start, 395 RegExpNode* start,
393 intptr_t capture_count, 396 intptr_t capture_count,
394 const String& pattern) { 397 const String& pattern) {
395 macro_assembler->set_slow_safe(false /* use_slow_safe_regexp_compiler */); 398 macro_assembler->set_slow_safe(false /* use_slow_safe_regexp_compiler */);
396 macro_assembler_ = macro_assembler; 399 macro_assembler_ = macro_assembler;
397 400
398 ZoneGrowableArray<RegExpNode*> work_list(0); 401 ZoneGrowableArray<RegExpNode*> work_list(0);
399 work_list_ = &work_list; 402 work_list_ = &work_list;
400 BlockLabel fail; 403 BlockLabel fail;
401 macro_assembler_->PushBacktrack(&fail); 404 macro_assembler_->PushBacktrack(&fail);
402 Trace new_trace; 405 Trace new_trace;
403 start->Emit(this, &new_trace); 406 start->Emit(this, &new_trace);
404 macro_assembler_->BindBlock(&fail); 407 macro_assembler_->BindBlock(&fail);
405 macro_assembler_->Fail(); 408 macro_assembler_->Fail();
406 while (!work_list.is_empty()) { 409 while (!work_list.is_empty()) {
407 work_list.RemoveLast()->Emit(this, &new_trace); 410 work_list.RemoveLast()->Emit(this, &new_trace);
408 } 411 }
409 if (reg_exp_too_big_) return IrregexpRegExpTooBig(); 412 if (reg_exp_too_big_) return IrregexpRegExpTooBig();
410 413
411 macro_assembler->GenerateBacktrackBlock(); 414 macro_assembler->GenerateBacktrackBlock();
412 macro_assembler->FinalizeRegistersArray(); 415 macro_assembler->FinalizeRegistersArray();
413 416
414 return RegExpEngine::CompilationResult( 417 return RegExpEngine::CompilationResult(
415 macro_assembler->backtrack_goto(), macro_assembler->graph_entry(), 418 macro_assembler->backtrack_goto(), macro_assembler->graph_entry(),
416 macro_assembler->num_blocks(), macro_assembler->num_stack_locals(), 419 macro_assembler->num_blocks(), macro_assembler->num_stack_locals(),
417 next_register_); 420 next_register_);
418 } 421 }
422 #endif
419 423
420 424
421 RegExpEngine::CompilationResult RegExpCompiler::Assemble( 425 RegExpEngine::CompilationResult RegExpCompiler::Assemble(
422 BytecodeRegExpMacroAssembler* macro_assembler, 426 BytecodeRegExpMacroAssembler* macro_assembler,
423 RegExpNode* start, 427 RegExpNode* start,
424 intptr_t capture_count, 428 intptr_t capture_count,
425 const String& pattern) { 429 const String& pattern) {
426 macro_assembler->set_slow_safe(false /* use_slow_safe_regexp_compiler */); 430 macro_assembler->set_slow_safe(false /* use_slow_safe_regexp_compiler */);
427 macro_assembler_ = macro_assembler; 431 macro_assembler_ = macro_assembler;
428 432
(...skipping 4381 matching lines...) Expand 10 before | Expand all | Expand 10 after
4810 if (offset >= bm->length()) { 4814 if (offset >= bm->length()) {
4811 if (initial_offset == 0) set_bm_info(not_at_start, bm); 4815 if (initial_offset == 0) set_bm_info(not_at_start, bm);
4812 return; 4816 return;
4813 } 4817 }
4814 on_success()->FillInBMInfo(offset, budget - 1, bm, 4818 on_success()->FillInBMInfo(offset, budget - 1, bm,
4815 true); // Not at start after a text node. 4819 true); // Not at start after a text node.
4816 if (initial_offset == 0) set_bm_info(not_at_start, bm); 4820 if (initial_offset == 0) set_bm_info(not_at_start, bm);
4817 } 4821 }
4818 4822
4819 4823
4824 #if !defined(DART_PRECOMPILED_RUNTIME)
4820 RegExpEngine::CompilationResult RegExpEngine::CompileIR( 4825 RegExpEngine::CompilationResult RegExpEngine::CompileIR(
4821 RegExpCompileData* data, 4826 RegExpCompileData* data,
4822 const ParsedFunction* parsed_function, 4827 const ParsedFunction* parsed_function,
4823 const ZoneGrowableArray<const ICData*>& ic_data_array, 4828 const ZoneGrowableArray<const ICData*>& ic_data_array,
4824 intptr_t osr_id) { 4829 intptr_t osr_id) {
4825 ASSERT(!FLAG_interpret_irregexp); 4830 ASSERT(!FLAG_interpret_irregexp);
4826 Zone* zone = Thread::Current()->zone(); 4831 Zone* zone = Thread::Current()->zone();
4827 4832
4828 const Function& function = parsed_function->function(); 4833 const Function& function = parsed_function->function();
4829 const intptr_t specialization_cid = function.string_specialization_cid(); 4834 const intptr_t specialization_cid = function.string_specialization_cid();
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
4918 4923
4919 RegExpEngine::CompilationResult result = 4924 RegExpEngine::CompilationResult result =
4920 compiler.Assemble(macro_assembler, node, data->capture_count, pattern); 4925 compiler.Assemble(macro_assembler, node, data->capture_count, pattern);
4921 4926
4922 if (FLAG_trace_irregexp) { 4927 if (FLAG_trace_irregexp) {
4923 macro_assembler->PrintBlocks(); 4928 macro_assembler->PrintBlocks();
4924 } 4929 }
4925 4930
4926 return result; 4931 return result;
4927 } 4932 }
4933 #endif // !defined(DART_PRECOMPILED_RUNTIME)
4928 4934
4929 4935
4930 RegExpEngine::CompilationResult RegExpEngine::CompileBytecode( 4936 RegExpEngine::CompilationResult RegExpEngine::CompileBytecode(
4931 RegExpCompileData* data, 4937 RegExpCompileData* data,
4932 const RegExp& regexp, 4938 const RegExp& regexp,
4933 bool is_one_byte, 4939 bool is_one_byte,
4934 bool is_sticky, 4940 bool is_sticky,
4935 Zone* zone) { 4941 Zone* zone) {
4936 ASSERT(FLAG_interpret_irregexp); 4942 ASSERT(FLAG_interpret_irregexp);
4937 const String& pattern = String::Handle(zone, regexp.pattern()); 4943 const String& pattern = String::Handle(zone, regexp.pattern());
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
5111 CreateSpecializedFunction(thread, zone, regexp, cid, /*sticky=*/true, 5117 CreateSpecializedFunction(thread, zone, regexp, cid, /*sticky=*/true,
5112 owner); 5118 owner);
5113 } 5119 }
5114 } 5120 }
5115 5121
5116 return regexp.raw(); 5122 return regexp.raw();
5117 } 5123 }
5118 5124
5119 5125
5120 } // namespace dart 5126 } // namespace dart
OLDNEW
« runtime/vm/regexp.h ('K') | « runtime/vm/regexp.h ('k') | runtime/vm/regexp_assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698