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

Side by Side Diff: src/compiler/frame-states.cc

Issue 2890363002: Fix deoptmization of inlined TF InstanceOf to call ToBoolean (Closed)
Patch Set: Review feedback 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 | « src/builtins/builtins-definitions.h ('k') | src/compiler/js-native-context-specialization.cc » ('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 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/compiler/frame-states.h" 5 #include "src/compiler/frame-states.h"
6 6
7 #include "src/base/functional.h" 7 #include "src/base/functional.h"
8 #include "src/callable.h" 8 #include "src/callable.h"
9 #include "src/compiler/graph.h" 9 #include "src/compiler/graph.h"
10 #include "src/compiler/js-graph.h" 10 #include "src/compiler/js-graph.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 BailoutId bailout_id = Builtins::GetContinuationBailoutId(name); 106 BailoutId bailout_id = Builtins::GetContinuationBailoutId(name);
107 Callable callable = Builtins::CallableFor(isolate, name); 107 Callable callable = Builtins::CallableFor(isolate, name);
108 108
109 const Operator* op_param = 109 const Operator* op_param =
110 common->StateValues(parameter_count, SparseInputMask::Dense()); 110 common->StateValues(parameter_count, SparseInputMask::Dense());
111 Node* params_node = graph->NewNode(op_param, parameter_count, parameters); 111 Node* params_node = graph->NewNode(op_param, parameter_count, parameters);
112 112
113 FrameStateType frame_type = 113 FrameStateType frame_type =
114 function.is_null() ? FrameStateType::kBuiltinContinuation 114 function.is_null() ? FrameStateType::kBuiltinContinuation
115 : FrameStateType::kJavaScriptBuiltinContinuation; 115 : FrameStateType::kJavaScriptBuiltinContinuation;
116 Handle<SharedFunctionInfo> shared(
117 Handle<SharedFunctionInfo>(function->shared()));
118 const FrameStateFunctionInfo* state_info = 116 const FrameStateFunctionInfo* state_info =
119 common->CreateFrameStateFunctionInfo(frame_type, parameter_count, 0, 117 common->CreateFrameStateFunctionInfo(
120 shared); 118 frame_type, parameter_count, 0,
119 function.is_null() ? Handle<SharedFunctionInfo>()
120 : Handle<SharedFunctionInfo>(function->shared()));
121 const Operator* op = common->FrameState( 121 const Operator* op = common->FrameState(
122 bailout_id, OutputFrameStateCombine::Ignore(), state_info); 122 bailout_id, OutputFrameStateCombine::Ignore(), state_info);
123 123
124 Node* function_node = function.is_null() ? js_graph->UndefinedConstant() 124 Node* function_node = function.is_null() ? js_graph->UndefinedConstant()
125 : js_graph->HeapConstant(function); 125 : js_graph->HeapConstant(function);
126 126
127 Node* frame_state = graph->NewNode( 127 Node* frame_state = graph->NewNode(
128 op, params_node, js_graph->EmptyStateValues(), 128 op, params_node, js_graph->EmptyStateValues(),
129 js_graph->EmptyStateValues(), context, function_node, outer_frame_state); 129 js_graph->EmptyStateValues(), context, function_node, outer_frame_state);
130 130
131 return frame_state; 131 return frame_state;
132 } 132 }
133 } // namespace 133 } // namespace
134 134
135 Node* CreateStubBuiltinContinuationFrameState(JSGraph* js_graph, 135 Node* CreateStubBuiltinContinuationFrameState(JSGraph* js_graph,
136 Builtins::Name name, 136 Builtins::Name name,
137 Node* context, Node** parameters, 137 Node* context, Node** parameters,
138 int parameter_count, 138 int parameter_count,
139 Node* outer_frame_state, 139 Node* outer_frame_state,
140 ContinuationFrameStateMode mode) { 140 ContinuationFrameStateMode mode) {
141 Isolate* isolate = js_graph->isolate(); 141 Isolate* isolate = js_graph->isolate();
142 Callable callable = Builtins::CallableFor(isolate, name); 142 Callable callable = Builtins::CallableFor(isolate, name);
143 CallInterfaceDescriptor descriptor = callable.descriptor(); 143 CallInterfaceDescriptor descriptor = callable.descriptor();
144 144
145 std::vector<Node*> actual_parameters; 145 std::vector<Node*> actual_parameters;
146 // Stack parameters first 146 // Stack parameters first. If the deoptimization is LAZY, the final parameter
147 for (int i = 0; i < descriptor.GetStackParameterCount(); ++i) { 147 // is added by the deoptimizer and isn't explicitly passed in the frame state.
148 int stack_parameter_count =
149 descriptor.GetRegisterParameterCount() -
150 (mode == ContinuationFrameStateMode::LAZY ? 1 : 0);
151 for (int i = 0; i < stack_parameter_count; ++i) {
148 actual_parameters.push_back( 152 actual_parameters.push_back(
149 parameters[descriptor.GetRegisterParameterCount() + i]); 153 parameters[descriptor.GetRegisterParameterCount() + i]);
150 } 154 }
151 // Register parameters follow, context will be added by instruction selector 155 // Register parameters follow, context will be added by instruction selector
152 // during FrameState translation. 156 // during FrameState translation.
153 for (int i = 0; i < descriptor.GetRegisterParameterCount(); ++i) { 157 for (int i = 0; i < descriptor.GetRegisterParameterCount(); ++i) {
154 actual_parameters.push_back(parameters[i]); 158 actual_parameters.push_back(parameters[i]);
155 } 159 }
156 160
157 return CreateBuiltinContinuationFrameStateCommon( 161 return CreateBuiltinContinuationFrameStateCommon(
158 js_graph, name, context, &actual_parameters[0], 162 js_graph, name, context, actual_parameters.data(),
159 static_cast<int>(actual_parameters.size()), outer_frame_state, 163 static_cast<int>(actual_parameters.size()), outer_frame_state,
160 Handle<JSFunction>()); 164 Handle<JSFunction>());
161 } 165 }
162 166
163 Node* CreateJavaScriptBuiltinContinuationFrameState( 167 Node* CreateJavaScriptBuiltinContinuationFrameState(
164 JSGraph* js_graph, Handle<JSFunction> function, Builtins::Name name, 168 JSGraph* js_graph, Handle<JSFunction> function, Builtins::Name name,
165 Node* target, Node* context, Node** stack_parameters, 169 Node* target, Node* context, Node** stack_parameters,
166 int stack_parameter_count, Node* outer_frame_state, 170 int stack_parameter_count, Node* outer_frame_state,
167 ContinuationFrameStateMode mode) { 171 ContinuationFrameStateMode mode) {
168 Isolate* isolate = js_graph->isolate(); 172 Isolate* isolate = js_graph->isolate();
(...skipping 28 matching lines...) Expand all
197 actual_parameters.push_back(argc); 201 actual_parameters.push_back(argc);
198 202
199 return CreateBuiltinContinuationFrameStateCommon( 203 return CreateBuiltinContinuationFrameStateCommon(
200 js_graph, name, context, &actual_parameters[0], 204 js_graph, name, context, &actual_parameters[0],
201 static_cast<int>(actual_parameters.size()), outer_frame_state, function); 205 static_cast<int>(actual_parameters.size()), outer_frame_state, function);
202 } 206 }
203 207
204 } // namespace compiler 208 } // namespace compiler
205 } // namespace internal 209 } // namespace internal
206 } // namespace v8 210 } // namespace v8
OLDNEW
« no previous file with comments | « src/builtins/builtins-definitions.h ('k') | src/compiler/js-native-context-specialization.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698