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

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

Issue 17421003: Store arguments descriptor in ICData. Remove loading of arguments descriptor at unoptimized call si… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/flow_graph_compiler_x64.cc ('k') | runtime/vm/flow_graph_optimizer.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 (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/flow_graph_inliner.h" 5 #include "vm/flow_graph_inliner.h"
6 6
7 #include "vm/compiler.h" 7 #include "vm/compiler.h"
8 #include "vm/flags.h" 8 #include "vm/flags.h"
9 #include "vm/flow_graph.h" 9 #include "vm/flow_graph.h"
10 #include "vm/flow_graph_builder.h" 10 #include "vm/flow_graph_builder.h"
(...skipping 1081 matching lines...) Expand 10 before | Expand all | Expand 10 after
1092 if (inlined_variants_[i].cid == kSmiCid) { 1092 if (inlined_variants_[i].cid == kSmiCid) {
1093 CheckSmiInstr* check_smi = 1093 CheckSmiInstr* check_smi =
1094 new CheckSmiInstr(new Value(redefinition), call_->deopt_id()); 1094 new CheckSmiInstr(new Value(redefinition), call_->deopt_id());
1095 check_smi->InheritDeoptTarget(call_); 1095 check_smi->InheritDeoptTarget(call_);
1096 cursor = AppendInstruction(cursor, check_smi); 1096 cursor = AppendInstruction(cursor, check_smi);
1097 } else { 1097 } else {
1098 const ICData& old_checks = call_->ic_data(); 1098 const ICData& old_checks = call_->ic_data();
1099 const ICData& new_checks = ICData::ZoneHandle( 1099 const ICData& new_checks = ICData::ZoneHandle(
1100 ICData::New(Function::Handle(old_checks.function()), 1100 ICData::New(Function::Handle(old_checks.function()),
1101 String::Handle(old_checks.target_name()), 1101 String::Handle(old_checks.target_name()),
1102 Array::Handle(old_checks.arguments_descriptor()),
1102 old_checks.deopt_id(), 1103 old_checks.deopt_id(),
1103 1)); // Number of args tested. 1104 1)); // Number of args tested.
1104 new_checks.AddReceiverCheck(inlined_variants_[i].cid, 1105 new_checks.AddReceiverCheck(inlined_variants_[i].cid,
1105 *inlined_variants_[i].target); 1106 *inlined_variants_[i].target);
1106 CheckClassInstr* check_class = 1107 CheckClassInstr* check_class =
1107 new CheckClassInstr(new Value(redefinition), 1108 new CheckClassInstr(new Value(redefinition),
1108 call_->deopt_id(), 1109 call_->deopt_id(),
1109 new_checks); 1110 new_checks);
1110 check_class->InheritDeoptTarget(call_); 1111 check_class->InheritDeoptTarget(call_);
1111 cursor = AppendInstruction(cursor, check_class); 1112 cursor = AppendInstruction(cursor, check_class);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1216 PushArgumentInstr* push = call_->PushArgumentAt(i); 1217 PushArgumentInstr* push = call_->PushArgumentAt(i);
1217 push->ReplaceUsesWith(push->value()->definition()); 1218 push->ReplaceUsesWith(push->value()->definition());
1218 push->previous()->LinkTo(push->next()); 1219 push->previous()->LinkTo(push->next());
1219 cursor->LinkTo(push); 1220 cursor->LinkTo(push);
1220 cursor = push; 1221 cursor = push;
1221 } 1222 }
1222 const ICData& old_checks = call_->ic_data(); 1223 const ICData& old_checks = call_->ic_data();
1223 const ICData& new_checks = ICData::ZoneHandle( 1224 const ICData& new_checks = ICData::ZoneHandle(
1224 ICData::New(Function::Handle(old_checks.function()), 1225 ICData::New(Function::Handle(old_checks.function()),
1225 String::Handle(old_checks.target_name()), 1226 String::Handle(old_checks.target_name()),
1227 Array::Handle(old_checks.arguments_descriptor()),
1226 old_checks.deopt_id(), 1228 old_checks.deopt_id(),
1227 1)); // Number of args tested. 1229 1)); // Number of args tested.
1228 for (intptr_t i = 0; i < non_inlined_variants_.length(); ++i) { 1230 for (intptr_t i = 0; i < non_inlined_variants_.length(); ++i) {
1229 new_checks.AddReceiverCheck(non_inlined_variants_[i].cid, 1231 new_checks.AddReceiverCheck(non_inlined_variants_[i].cid,
1230 *non_inlined_variants_[i].target, 1232 *non_inlined_variants_[i].target,
1231 non_inlined_variants_[i].count); 1233 non_inlined_variants_[i].count);
1232 } 1234 }
1233 PolymorphicInstanceCallInstr* fallback_call = 1235 PolymorphicInstanceCallInstr* fallback_call =
1234 new PolymorphicInstanceCallInstr(call_->instance_call(), 1236 new PolymorphicInstanceCallInstr(call_->instance_call(),
1235 new_checks, 1237 new_checks,
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
1341 OS::Print("After Inlining of %s\n", flow_graph_-> 1343 OS::Print("After Inlining of %s\n", flow_graph_->
1342 parsed_function().function().ToFullyQualifiedCString()); 1344 parsed_function().function().ToFullyQualifiedCString());
1343 FlowGraphPrinter printer(*flow_graph_); 1345 FlowGraphPrinter printer(*flow_graph_);
1344 printer.PrintBlocks(); 1346 printer.PrintBlocks();
1345 } 1347 }
1346 } 1348 }
1347 } 1349 }
1348 } 1350 }
1349 1351
1350 } // namespace dart 1352 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph_compiler_x64.cc ('k') | runtime/vm/flow_graph_optimizer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698