Chromium Code Reviews

Side by Side Diff: src/interpreter/bytecode-array-builder.cc

Issue 2122183002: [Interpreter] Collect type feedback for calls in the bytecode handler (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fixed few comments. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/interpreter/bytecode-array-builder.h" 5 #include "src/interpreter/bytecode-array-builder.h"
6 6
7 #include "src/compiler.h" 7 #include "src/compiler.h"
8 #include "src/globals.h" 8 #include "src/globals.h"
9 #include "src/interpreter/bytecode-array-writer.h" 9 #include "src/interpreter/bytecode-array-writer.h"
10 #include "src/interpreter/bytecode-dead-code-optimizer.h" 10 #include "src/interpreter/bytecode-dead-code-optimizer.h"
(...skipping 537 matching lines...)
548 } 548 }
549 549
550 void BytecodeArrayBuilder::EnsureReturn() { 550 void BytecodeArrayBuilder::EnsureReturn() {
551 if (!return_seen_in_block_) { 551 if (!return_seen_in_block_) {
552 LoadUndefined(); 552 LoadUndefined();
553 Return(); 553 Return();
554 } 554 }
555 DCHECK(return_seen_in_block_); 555 DCHECK(return_seen_in_block_);
556 } 556 }
557 557
558 BytecodeArrayBuilder& BytecodeArrayBuilder::CallWithFeedback(
559 Register callable, Register receiver_args, size_t receiver_args_count,
560 int feedback_slot, TailCallMode tail_call_mode) {
561 Bytecode bytecode = BytecodeForCallWithFeedback(tail_call_mode);
562 Output(bytecode, RegisterOperand(callable), RegisterOperand(receiver_args),
563 UnsignedOperand(receiver_args_count), UnsignedOperand(feedback_slot));
564 return *this;
565 }
566
558 BytecodeArrayBuilder& BytecodeArrayBuilder::Call(Register callable, 567 BytecodeArrayBuilder& BytecodeArrayBuilder::Call(Register callable,
559 Register receiver_args, 568 Register receiver_args,
560 size_t receiver_args_count, 569 size_t receiver_args_count,
561 int feedback_slot,
562 TailCallMode tail_call_mode) { 570 TailCallMode tail_call_mode) {
563 Bytecode bytecode = BytecodeForCall(tail_call_mode); 571 Bytecode bytecode = BytecodeForCall(tail_call_mode);
564 Output(bytecode, RegisterOperand(callable), RegisterOperand(receiver_args), 572 Output(bytecode, RegisterOperand(callable), RegisterOperand(receiver_args),
565 UnsignedOperand(receiver_args_count), UnsignedOperand(feedback_slot)); 573 UnsignedOperand(receiver_args_count));
566 return *this; 574 return *this;
567 } 575 }
568 576
569 BytecodeArrayBuilder& BytecodeArrayBuilder::New(Register constructor, 577 BytecodeArrayBuilder& BytecodeArrayBuilder::New(Register constructor,
570 Register first_arg, 578 Register first_arg,
571 size_t arg_count) { 579 size_t arg_count) {
572 if (!first_arg.is_valid()) { 580 if (!first_arg.is_valid()) {
573 DCHECK_EQ(0u, arg_count); 581 DCHECK_EQ(0u, arg_count);
574 first_arg = Register(0); 582 first_arg = Register(0);
575 } 583 }
(...skipping 352 matching lines...)
928 case TailCallMode::kDisallow: 936 case TailCallMode::kDisallow:
929 return Bytecode::kCall; 937 return Bytecode::kCall;
930 case TailCallMode::kAllow: 938 case TailCallMode::kAllow:
931 return Bytecode::kTailCall; 939 return Bytecode::kTailCall;
932 default: 940 default:
933 UNREACHABLE(); 941 UNREACHABLE();
934 } 942 }
935 return Bytecode::kIllegal; 943 return Bytecode::kIllegal;
936 } 944 }
937 945
946 // static
947 Bytecode BytecodeArrayBuilder::BytecodeForCallWithFeedback(
948 TailCallMode tail_call_mode) {
949 switch (tail_call_mode) {
950 case TailCallMode::kDisallow:
951 return Bytecode::kCallWithFeedback;
952 case TailCallMode::kAllow:
953 return Bytecode::kTailCallWithFeedback;
954 default:
955 UNREACHABLE();
956 }
957 return Bytecode::kIllegal;
958 }
959
938 } // namespace interpreter 960 } // namespace interpreter
939 } // namespace internal 961 } // namespace internal
940 } // namespace v8 962 } // namespace v8
OLDNEW

Powered by Google App Engine