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

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

Issue 2463083002: Remove default monomorphic check code from functions and stubs that do not need it. (Closed)
Patch Set: Created 4 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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/globals.h" // Needed here to get TARGET_ARCH_X64. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_X64.
6 #if defined(TARGET_ARCH_X64) 6 #if defined(TARGET_ARCH_X64)
7 7
8 #include "vm/flow_graph_compiler.h" 8 #include "vm/flow_graph_compiler.h"
9 9
10 #include "vm/ast_printer.h" 10 #include "vm/ast_printer.h"
(...skipping 966 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 __ movq(RBX, Address(RSP, 1 * kWordSize)); // Value. 977 __ movq(RBX, Address(RSP, 1 * kWordSize)); // Value.
978 __ StoreIntoObject(RAX, FieldAddress(RAX, offset), RBX); 978 __ StoreIntoObject(RAX, FieldAddress(RAX, offset), RBX);
979 __ LoadObject(RAX, Object::null_object()); 979 __ LoadObject(RAX, Object::null_object());
980 __ ret(); 980 __ ret();
981 } 981 }
982 982
983 983
984 // NOTE: If the entry code shape changes, ReturnAddressLocator in profiler.cc 984 // NOTE: If the entry code shape changes, ReturnAddressLocator in profiler.cc
985 // needs to be updated to match. 985 // needs to be updated to match.
986 void FlowGraphCompiler::EmitFrameEntry() { 986 void FlowGraphCompiler::EmitFrameEntry() {
987 const Function& function = parsed_function().function();
988 // Load pool pointer.
989
990 if (flow_graph().IsCompiledForOsr()) { 987 if (flow_graph().IsCompiledForOsr()) {
991 intptr_t extra_slots = StackSize() 988 intptr_t extra_slots = StackSize()
992 - flow_graph().num_stack_locals() 989 - flow_graph().num_stack_locals()
993 - flow_graph().num_copied_params(); 990 - flow_graph().num_copied_params();
994 ASSERT(extra_slots >= 0); 991 ASSERT(extra_slots >= 0);
995 __ EnterOsrFrame(extra_slots * kWordSize); 992 __ EnterOsrFrame(extra_slots * kWordSize);
996 } else { 993 } else {
997 const Register new_pp = R13; 994 const Register new_pp = R13;
998 __ LoadPoolPointer(new_pp); 995 __ LoadPoolPointer(new_pp);
999 996
997 const Function& function = parsed_function().function();
1000 if (CanOptimizeFunction() && 998 if (CanOptimizeFunction() &&
1001 function.IsOptimizable() && 999 function.IsOptimizable() &&
1002 (!is_optimizing() || may_reoptimize())) { 1000 (!is_optimizing() || may_reoptimize())) {
1003 __ Comment("Invocation Count Check"); 1001 __ Comment("Invocation Count Check");
1004 const Register function_reg = RDI; 1002 const Register function_reg = RDI;
1005 // Load function object using the callee's pool pointer. 1003 // Load function object using the callee's pool pointer.
1006 __ LoadFunctionFromCalleePool(function_reg, function, new_pp); 1004 __ LoadFunctionFromCalleePool(function_reg, function, new_pp);
1007 1005
1008 // Reoptimization of an optimized function is triggered by counting in 1006 // Reoptimization of an optimized function is triggered by counting in
1009 // IC stubs, but not at the entry of the function. 1007 // IC stubs, but not at the entry of the function.
(...skipping 10 matching lines...) Expand all
1020 } 1018 }
1021 ASSERT(StackSize() >= 0); 1019 ASSERT(StackSize() >= 0);
1022 __ Comment("Enter frame"); 1020 __ Comment("Enter frame");
1023 __ EnterDartFrame(StackSize() * kWordSize, new_pp); 1021 __ EnterDartFrame(StackSize() * kWordSize, new_pp);
1024 } 1022 }
1025 } 1023 }
1026 1024
1027 1025
1028 void FlowGraphCompiler::CompileGraph() { 1026 void FlowGraphCompiler::CompileGraph() {
1029 InitCompiler(); 1027 InitCompiler();
1028 const Function& function = parsed_function().function();
1029
1030 #ifdef DART_PRECOMPILER
1031 if (function.IsDynamicFunction()) {
1032 __ MonomorphicCheckedEntry();
1033 }
1034 #endif // DART_PRECOMPILER
1030 1035
1031 if (TryIntrinsify()) { 1036 if (TryIntrinsify()) {
1032 // Skip regular code generation. 1037 // Skip regular code generation.
1033 return; 1038 return;
1034 } 1039 }
1035 1040
1036 EmitFrameEntry(); 1041 EmitFrameEntry();
1037 ASSERT(assembler()->constant_pool_allowed()); 1042 ASSERT(assembler()->constant_pool_allowed());
1038 1043
1039 const Function& function = parsed_function().function();
1040
1041 const int num_fixed_params = function.num_fixed_parameters(); 1044 const int num_fixed_params = function.num_fixed_parameters();
1042 const int num_copied_params = parsed_function().num_copied_params(); 1045 const int num_copied_params = parsed_function().num_copied_params();
1043 const int num_locals = parsed_function().num_stack_locals(); 1046 const int num_locals = parsed_function().num_stack_locals();
1044 1047
1045 // We check the number of passed arguments when we have to copy them due to 1048 // We check the number of passed arguments when we have to copy them due to
1046 // the presence of optional parameters. 1049 // the presence of optional parameters.
1047 // No such checking code is generated if only fixed parameters are declared, 1050 // No such checking code is generated if only fixed parameters are declared,
1048 // unless we are in debug mode or unless we are compiling a closure. 1051 // unless we are in debug mode or unless we are compiling a closure.
1049 if (num_copied_params == 0) { 1052 if (num_copied_params == 0) {
1050 const bool check_arguments = 1053 const bool check_arguments =
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after
1840 __ movups(reg, Address(RSP, 0)); 1843 __ movups(reg, Address(RSP, 0));
1841 __ AddImmediate(RSP, Immediate(kFpuRegisterSize)); 1844 __ AddImmediate(RSP, Immediate(kFpuRegisterSize));
1842 } 1845 }
1843 1846
1844 1847
1845 #undef __ 1848 #undef __
1846 1849
1847 } // namespace dart 1850 } // namespace dart
1848 1851
1849 #endif // defined TARGET_ARCH_X64 1852 #endif // defined TARGET_ARCH_X64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698