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

Side by Side Diff: src/crankshaft/hydrogen.cc

Issue 1748123003: Rework CallApi*Stubs. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/crankshaft/hydrogen.h" 5 #include "src/crankshaft/hydrogen.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/allocation-site-scopes.h" 9 #include "src/allocation-site-scopes.h"
10 #include "src/ast/ast-numbering.h" 10 #include "src/ast/ast-numbering.h"
(...skipping 9170 matching lines...) Expand 10 before | Expand all | Expand 10 after
9181 bool HOptimizedGraphBuilder::TryInlineApiCall(Handle<Object> function, 9181 bool HOptimizedGraphBuilder::TryInlineApiCall(Handle<Object> function,
9182 HValue* receiver, 9182 HValue* receiver,
9183 SmallMapList* receiver_maps, 9183 SmallMapList* receiver_maps,
9184 int argc, BailoutId ast_id, 9184 int argc, BailoutId ast_id,
9185 ApiCallType call_type) { 9185 ApiCallType call_type) {
9186 if (function->IsJSFunction() && 9186 if (function->IsJSFunction() &&
9187 Handle<JSFunction>::cast(function)->context()->native_context() != 9187 Handle<JSFunction>::cast(function)->context()->native_context() !=
9188 top_info()->closure()->context()->native_context()) { 9188 top_info()->closure()->context()->native_context()) {
9189 return false; 9189 return false;
9190 } 9190 }
9191 if (argc >= CallApiCallbackStub::kArgMax) {
9192 return false;
9193 }
9194
9191 CallOptimization optimization(function); 9195 CallOptimization optimization(function);
9192 if (!optimization.is_simple_api_call()) return false; 9196 if (!optimization.is_simple_api_call()) return false;
9193 Handle<Map> holder_map; 9197 Handle<Map> holder_map;
9194 for (int i = 0; i < receiver_maps->length(); ++i) { 9198 for (int i = 0; i < receiver_maps->length(); ++i) {
9195 auto map = receiver_maps->at(i); 9199 auto map = receiver_maps->at(i);
9196 // Don't inline calls to receivers requiring accesschecks. 9200 // Don't inline calls to receivers requiring accesschecks.
9197 if (map->is_access_check_needed()) return false; 9201 if (map->is_access_check_needed()) return false;
9198 } 9202 }
9199 if (call_type == kCallApiFunction) { 9203 if (call_type == kCallApiFunction) {
9200 // Cannot embed a direct reference to the global proxy map 9204 // Cannot embed a direct reference to the global proxy map
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
9276 ApiFunction fun(v8::ToCData<Address>(api_call_info->callback())); 9280 ApiFunction fun(v8::ToCData<Address>(api_call_info->callback()));
9277 ExternalReference ref = ExternalReference(&fun, 9281 ExternalReference ref = ExternalReference(&fun,
9278 ExternalReference::DIRECT_API_CALL, 9282 ExternalReference::DIRECT_API_CALL,
9279 isolate()); 9283 isolate());
9280 HValue* api_function_address = Add<HConstant>(ExternalReference(ref)); 9284 HValue* api_function_address = Add<HConstant>(ExternalReference(ref));
9281 9285
9282 HValue* op_vals[] = {context(), Add<HConstant>(function), call_data, holder, 9286 HValue* op_vals[] = {context(), Add<HConstant>(function), call_data, holder,
9283 api_function_address, nullptr}; 9287 api_function_address, nullptr};
9284 9288
9285 HInstruction* call = nullptr; 9289 HInstruction* call = nullptr;
9290 CHECK(argc <= CallApiCallbackStub::kArgMax);
9286 if (!is_function) { 9291 if (!is_function) {
9287 CallApiAccessorStub stub(isolate(), is_store, call_data_undefined, 9292 CallApiCallbackStub stub(isolate(), is_store, call_data_undefined,
9288 !optimization.is_constant_call()); 9293 !optimization.is_constant_call());
9289 Handle<Code> code = stub.GetCode(); 9294 Handle<Code> code = stub.GetCode();
9290 HConstant* code_value = Add<HConstant>(code); 9295 HConstant* code_value = Add<HConstant>(code);
9291 ApiAccessorDescriptor descriptor(isolate());
9292 call = New<HCallWithDescriptor>( 9296 call = New<HCallWithDescriptor>(
9293 code_value, argc + 1, descriptor, 9297 code_value, argc + 1, stub.GetCallInterfaceDescriptor(),
9294 Vector<HValue*>(op_vals, arraysize(op_vals) - 1)); 9298 Vector<HValue*>(op_vals, arraysize(op_vals) - 1));
9295 } else if (argc <= CallApiFunctionWithFixedArgsStub::kMaxFixedArgs) { 9299 } else {
9296 CallApiFunctionWithFixedArgsStub stub(isolate(), argc, call_data_undefined); 9300 CallApiCallbackStub stub(isolate(), argc, call_data_undefined);
9297 Handle<Code> code = stub.GetCode(); 9301 Handle<Code> code = stub.GetCode();
9298 HConstant* code_value = Add<HConstant>(code); 9302 HConstant* code_value = Add<HConstant>(code);
9299 ApiFunctionWithFixedArgsDescriptor descriptor(isolate());
9300 call = New<HCallWithDescriptor>( 9303 call = New<HCallWithDescriptor>(
9301 code_value, argc + 1, descriptor, 9304 code_value, argc + 1, stub.GetCallInterfaceDescriptor(),
9302 Vector<HValue*>(op_vals, arraysize(op_vals) - 1)); 9305 Vector<HValue*>(op_vals, arraysize(op_vals) - 1));
9303 Drop(1); // Drop function. 9306 Drop(1); // Drop function.
9304 } else {
9305 op_vals[arraysize(op_vals) - 1] = Add<HConstant>(argc);
9306 CallApiFunctionStub stub(isolate(), call_data_undefined);
9307 Handle<Code> code = stub.GetCode();
9308 HConstant* code_value = Add<HConstant>(code);
9309 ApiFunctionDescriptor descriptor(isolate());
9310 call =
9311 New<HCallWithDescriptor>(code_value, argc + 1, descriptor,
9312 Vector<HValue*>(op_vals, arraysize(op_vals)));
9313 Drop(1); // Drop function.
9314 } 9307 }
9315 9308
9316 ast_context()->ReturnInstruction(call, ast_id); 9309 ast_context()->ReturnInstruction(call, ast_id);
9317 return true; 9310 return true;
9318 } 9311 }
9319 9312
9320 9313
9321 void HOptimizedGraphBuilder::HandleIndirectCall(Call* expr, HValue* function, 9314 void HOptimizedGraphBuilder::HandleIndirectCall(Call* expr, HValue* function,
9322 int arguments_count) { 9315 int arguments_count) {
9323 Handle<JSFunction> known_function; 9316 Handle<JSFunction> known_function;
(...skipping 4129 matching lines...) Expand 10 before | Expand all | Expand 10 after
13453 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13446 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13454 } 13447 }
13455 13448
13456 #ifdef DEBUG 13449 #ifdef DEBUG
13457 graph_->Verify(false); // No full verify. 13450 graph_->Verify(false); // No full verify.
13458 #endif 13451 #endif
13459 } 13452 }
13460 13453
13461 } // namespace internal 13454 } // namespace internal
13462 } // namespace v8 13455 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698