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

Side by Side Diff: src/compiler/js-operator.cc

Issue 1466643002: [turbofan] Initial support for Array constructor specialization. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed Michi's comments. Created 5 years, 1 month 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 | « src/compiler/js-operator.h ('k') | src/compiler/js-typed-lowering.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/js-operator.h" 5 #include "src/compiler/js-operator.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "src/base/lazy-instance.h" 9 #include "src/base/lazy-instance.h"
10 #include "src/compiler/opcodes.h" 10 #include "src/compiler/opcodes.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 case TailCallMode::kAllow: 56 case TailCallMode::kAllow:
57 return os << "ALLOW_TAIL_CALLS"; 57 return os << "ALLOW_TAIL_CALLS";
58 case TailCallMode::kDisallow: 58 case TailCallMode::kDisallow:
59 return os << "DISALLOW_TAIL_CALLS"; 59 return os << "DISALLOW_TAIL_CALLS";
60 } 60 }
61 UNREACHABLE(); 61 UNREACHABLE();
62 return os; 62 return os;
63 } 63 }
64 64
65 65
66 bool operator==(CallConstructParameters const& lhs,
67 CallConstructParameters const& rhs) {
68 return lhs.arity() == rhs.arity() && lhs.feedback() == rhs.feedback();
69 }
70
71
72 bool operator!=(CallConstructParameters const& lhs,
73 CallConstructParameters const& rhs) {
74 return !(lhs == rhs);
75 }
76
77
78 size_t hash_value(CallConstructParameters const& p) {
79 return base::hash_combine(p.arity(), p.feedback());
80 }
81
82
83 std::ostream& operator<<(std::ostream& os, CallConstructParameters const& p) {
84 return os << p.arity();
85 }
86
87
88 CallConstructParameters const& CallConstructParametersOf(Operator const* op) {
89 DCHECK_EQ(IrOpcode::kJSCallConstruct, op->opcode());
90 return OpParameter<CallConstructParameters>(op);
91 }
92
93
66 std::ostream& operator<<(std::ostream& os, CallFunctionParameters const& p) { 94 std::ostream& operator<<(std::ostream& os, CallFunctionParameters const& p) {
67 os << p.arity() << ", " << p.language_mode() << ", " << p.convert_mode() 95 os << p.arity() << ", " << p.language_mode() << ", " << p.convert_mode()
68 << ", " << p.tail_call_mode(); 96 << ", " << p.tail_call_mode();
69 return os; 97 return os;
70 } 98 }
71 99
72 100
73 const CallFunctionParameters& CallFunctionParametersOf(const Operator* op) { 101 const CallFunctionParameters& CallFunctionParametersOf(const Operator* op) {
74 DCHECK_EQ(IrOpcode::kJSCallFunction, op->opcode()); 102 DCHECK_EQ(IrOpcode::kJSCallFunction, op->opcode());
75 return OpParameter<CallFunctionParameters>(op); 103 return OpParameter<CallFunctionParameters>(op);
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 } 343 }
316 344
317 345
318 const CreateArgumentsParameters& CreateArgumentsParametersOf( 346 const CreateArgumentsParameters& CreateArgumentsParametersOf(
319 const Operator* op) { 347 const Operator* op) {
320 DCHECK_EQ(IrOpcode::kJSCreateArguments, op->opcode()); 348 DCHECK_EQ(IrOpcode::kJSCreateArguments, op->opcode());
321 return OpParameter<CreateArgumentsParameters>(op); 349 return OpParameter<CreateArgumentsParameters>(op);
322 } 350 }
323 351
324 352
353 bool operator==(CreateArrayParameters const& lhs,
354 CreateArrayParameters const& rhs) {
355 return lhs.arity() == rhs.arity() &&
356 lhs.site().location() == rhs.site().location();
357 }
358
359
360 bool operator!=(CreateArrayParameters const& lhs,
361 CreateArrayParameters const& rhs) {
362 return !(lhs == rhs);
363 }
364
365
366 size_t hash_value(CreateArrayParameters const& p) {
367 return base::hash_combine(p.arity(), p.site().location());
368 }
369
370
371 std::ostream& operator<<(std::ostream& os, CreateArrayParameters const& p) {
372 os << p.arity();
373 if (!p.site().is_null()) os << ", " << Brief(*p.site());
374 return os;
375 }
376
377
378 const CreateArrayParameters& CreateArrayParametersOf(const Operator* op) {
379 DCHECK_EQ(IrOpcode::kJSCreateArray, op->opcode());
380 return OpParameter<CreateArrayParameters>(op);
381 }
382
383
325 bool operator==(CreateClosureParameters const& lhs, 384 bool operator==(CreateClosureParameters const& lhs,
326 CreateClosureParameters const& rhs) { 385 CreateClosureParameters const& rhs) {
327 return lhs.pretenure() == rhs.pretenure() && 386 return lhs.pretenure() == rhs.pretenure() &&
328 lhs.shared_info().location() == rhs.shared_info().location(); 387 lhs.shared_info().location() == rhs.shared_info().location();
329 } 388 }
330 389
331 390
332 bool operator!=(CreateClosureParameters const& lhs, 391 bool operator!=(CreateClosureParameters const& lhs,
333 CreateClosureParameters const& rhs) { 392 CreateClosureParameters const& rhs) {
334 return !(lhs == rhs); 393 return !(lhs == rhs);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 V(HasProperty, Operator::kNoProperties, 2, 1) \ 426 V(HasProperty, Operator::kNoProperties, 2, 1) \
368 V(TypeOf, Operator::kEliminatable, 1, 1) \ 427 V(TypeOf, Operator::kEliminatable, 1, 1) \
369 V(InstanceOf, Operator::kNoProperties, 2, 1) \ 428 V(InstanceOf, Operator::kNoProperties, 2, 1) \
370 V(ForInDone, Operator::kPure, 2, 1) \ 429 V(ForInDone, Operator::kPure, 2, 1) \
371 V(ForInNext, Operator::kNoProperties, 4, 1) \ 430 V(ForInNext, Operator::kNoProperties, 4, 1) \
372 V(ForInPrepare, Operator::kNoProperties, 1, 3) \ 431 V(ForInPrepare, Operator::kNoProperties, 1, 3) \
373 V(ForInStep, Operator::kPure, 1, 1) \ 432 V(ForInStep, Operator::kPure, 1, 1) \
374 V(LoadMessage, Operator::kNoThrow, 0, 1) \ 433 V(LoadMessage, Operator::kNoThrow, 0, 1) \
375 V(StoreMessage, Operator::kNoThrow, 1, 0) \ 434 V(StoreMessage, Operator::kNoThrow, 1, 0) \
376 V(StackCheck, Operator::kNoProperties, 0, 0) \ 435 V(StackCheck, Operator::kNoProperties, 0, 0) \
436 V(LoadNativeContext, Operator::kEliminatable, 1, 1) \
377 V(CreateWithContext, Operator::kNoProperties, 2, 1) \ 437 V(CreateWithContext, Operator::kNoProperties, 2, 1) \
378 V(CreateModuleContext, Operator::kNoProperties, 2, 1) 438 V(CreateModuleContext, Operator::kNoProperties, 2, 1)
379 439
380 440
381 #define CACHED_OP_LIST_WITH_LANGUAGE_MODE(V) \ 441 #define CACHED_OP_LIST_WITH_LANGUAGE_MODE(V) \
382 V(LessThan, Operator::kNoProperties, 2, 1) \ 442 V(LessThan, Operator::kNoProperties, 2, 1) \
383 V(GreaterThan, Operator::kNoProperties, 2, 1) \ 443 V(GreaterThan, Operator::kNoProperties, 2, 1) \
384 V(LessThanOrEqual, Operator::kNoProperties, 2, 1) \ 444 V(LessThanOrEqual, Operator::kNoProperties, 2, 1) \
385 V(GreaterThanOrEqual, Operator::kNoProperties, 2, 1) \ 445 V(GreaterThanOrEqual, Operator::kNoProperties, 2, 1) \
386 V(BitwiseOr, Operator::kNoProperties, 2, 1) \ 446 V(BitwiseOr, Operator::kNoProperties, 2, 1) \
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 const Runtime::Function* f = Runtime::FunctionForId(parameters.id()); 546 const Runtime::Function* f = Runtime::FunctionForId(parameters.id());
487 DCHECK(f->nargs == -1 || f->nargs == static_cast<int>(parameters.arity())); 547 DCHECK(f->nargs == -1 || f->nargs == static_cast<int>(parameters.arity()));
488 return new (zone()) Operator1<CallRuntimeParameters>( // -- 548 return new (zone()) Operator1<CallRuntimeParameters>( // --
489 IrOpcode::kJSCallRuntime, Operator::kNoProperties, // opcode 549 IrOpcode::kJSCallRuntime, Operator::kNoProperties, // opcode
490 "JSCallRuntime", // name 550 "JSCallRuntime", // name
491 parameters.arity(), 1, 1, f->result_size, 1, 2, // inputs/outputs 551 parameters.arity(), 1, 1, f->result_size, 1, 2, // inputs/outputs
492 parameters); // parameter 552 parameters); // parameter
493 } 553 }
494 554
495 555
496 const Operator* JSOperatorBuilder::CallConstruct(int arguments) { 556 const Operator* JSOperatorBuilder::CallConstruct(
497 return new (zone()) Operator1<int>( // -- 557 size_t arity, VectorSlotPair const& feedback) {
558 CallConstructParameters parameters(arity, feedback);
559 return new (zone()) Operator1<CallConstructParameters>( // --
498 IrOpcode::kJSCallConstruct, Operator::kNoProperties, // opcode 560 IrOpcode::kJSCallConstruct, Operator::kNoProperties, // opcode
499 "JSCallConstruct", // name 561 "JSCallConstruct", // name
500 arguments, 1, 1, 1, 1, 2, // counts 562 parameters.arity(), 1, 1, 1, 1, 2, // counts
501 arguments); // parameter 563 parameters); // parameter
502 } 564 }
503 565
504 566
505 const Operator* JSOperatorBuilder::ConvertReceiver( 567 const Operator* JSOperatorBuilder::ConvertReceiver(
506 ConvertReceiverMode convert_mode) { 568 ConvertReceiverMode convert_mode) {
507 return new (zone()) Operator1<ConvertReceiverMode>( // -- 569 return new (zone()) Operator1<ConvertReceiverMode>( // --
508 IrOpcode::kJSConvertReceiver, Operator::kNoThrow, // opcode 570 IrOpcode::kJSConvertReceiver, Operator::kNoThrow, // opcode
509 "JSConvertReceiver", // name 571 "JSConvertReceiver", // name
510 1, 1, 1, 1, 1, 0, // counts 572 1, 1, 1, 1, 1, 0, // counts
511 convert_mode); // parameter 573 convert_mode); // parameter
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 DCHECK_IMPLIES(start_index, type == CreateArgumentsParameters::kRestArray); 692 DCHECK_IMPLIES(start_index, type == CreateArgumentsParameters::kRestArray);
631 CreateArgumentsParameters parameters(type, start_index); 693 CreateArgumentsParameters parameters(type, start_index);
632 return new (zone()) Operator1<CreateArgumentsParameters>( // -- 694 return new (zone()) Operator1<CreateArgumentsParameters>( // --
633 IrOpcode::kJSCreateArguments, Operator::kNoThrow, // opcode 695 IrOpcode::kJSCreateArguments, Operator::kNoThrow, // opcode
634 "JSCreateArguments", // name 696 "JSCreateArguments", // name
635 1, 1, 1, 1, 1, 0, // counts 697 1, 1, 1, 1, 1, 0, // counts
636 parameters); // parameter 698 parameters); // parameter
637 } 699 }
638 700
639 701
702 const Operator* JSOperatorBuilder::CreateArray(size_t arity,
703 Handle<AllocationSite> site) {
704 // constructor, new_target, arg1, ..., argN
705 int const value_input_count = static_cast<int>(arity) + 2;
706 CreateArrayParameters parameters(arity, site);
707 return new (zone()) Operator1<CreateArrayParameters>( // --
708 IrOpcode::kJSCreateArray, Operator::kNoProperties, // opcode
709 "JSCreateArray", // name
710 value_input_count, 1, 1, 1, 1, 2, // counts
711 parameters); // parameter
712 }
713
714
640 const Operator* JSOperatorBuilder::CreateClosure( 715 const Operator* JSOperatorBuilder::CreateClosure(
641 Handle<SharedFunctionInfo> shared_info, PretenureFlag pretenure) { 716 Handle<SharedFunctionInfo> shared_info, PretenureFlag pretenure) {
642 CreateClosureParameters parameters(shared_info, pretenure); 717 CreateClosureParameters parameters(shared_info, pretenure);
643 return new (zone()) Operator1<CreateClosureParameters>( // -- 718 return new (zone()) Operator1<CreateClosureParameters>( // --
644 IrOpcode::kJSCreateClosure, Operator::kNoThrow, // opcode 719 IrOpcode::kJSCreateClosure, Operator::kNoThrow, // opcode
645 "JSCreateClosure", // name 720 "JSCreateClosure", // name
646 0, 1, 1, 1, 1, 0, // counts 721 0, 1, 1, 1, 1, 0, // counts
647 parameters); // parameter 722 parameters); // parameter
648 } 723 }
649 724
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 return new (zone()) Operator1<Handle<ScopeInfo>>( // -- 775 return new (zone()) Operator1<Handle<ScopeInfo>>( // --
701 IrOpcode::kJSCreateScriptContext, Operator::kNoProperties, // opcode 776 IrOpcode::kJSCreateScriptContext, Operator::kNoProperties, // opcode
702 "JSCreateScriptContext", // name 777 "JSCreateScriptContext", // name
703 1, 1, 1, 1, 1, 2, // counts 778 1, 1, 1, 1, 1, 2, // counts
704 scpope_info); // parameter 779 scpope_info); // parameter
705 } 780 }
706 781
707 } // namespace compiler 782 } // namespace compiler
708 } // namespace internal 783 } // namespace internal
709 } // namespace v8 784 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-operator.h ('k') | src/compiler/js-typed-lowering.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698