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

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

Issue 1709273003: Make function lookup in classes thread-safe: (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: d Created 4 years, 10 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 | « no previous file | runtime/vm/hash_table.h » ('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_optimizer.h" 5 #include "vm/flow_graph_optimizer.h"
6 6
7 #include "vm/bit_vector.h" 7 #include "vm/bit_vector.h"
8 #include "vm/branch_optimizer.h" 8 #include "vm/branch_optimizer.h"
9 #include "vm/cha.h" 9 #include "vm/cha.h"
10 #include "vm/compiler.h" 10 #include "vm/compiler.h"
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 return false; 189 return false;
190 } 190 }
191 const Array& args_desc_array = Array::Handle(Z, 191 const Array& args_desc_array = Array::Handle(Z,
192 ArgumentsDescriptor::New(call->ArgumentCount(), 192 ArgumentsDescriptor::New(call->ArgumentCount(),
193 call->argument_names())); 193 call->argument_names()));
194 ArgumentsDescriptor args_desc(args_desc_array); 194 ArgumentsDescriptor args_desc(args_desc_array);
195 const Function& function = Function::Handle(Z, 195 const Function& function = Function::Handle(Z,
196 Resolver::ResolveDynamicForReceiverClass( 196 Resolver::ResolveDynamicForReceiverClass(
197 receiver_class, 197 receiver_class,
198 call->function_name(), 198 call->function_name(),
199 args_desc)); 199 args_desc,
200 false /* allow add */));
200 if (function.IsNull()) { 201 if (function.IsNull()) {
201 return false; 202 return false;
202 } 203 }
203 204
204 // Create new ICData, do not modify the one attached to the instruction 205 // Create new ICData, do not modify the one attached to the instruction
205 // since it is attached to the assembly instruction itself. 206 // since it is attached to the assembly instruction itself.
206 // TODO(srdjan): Prevent modification of ICData object that is 207 // TODO(srdjan): Prevent modification of ICData object that is
207 // referenced in assembly code. 208 // referenced in assembly code.
208 const ICData& ic_data = ICData::ZoneHandle(Z, 209 const ICData& ic_data = ICData::ZoneHandle(Z,
209 ICData::NewFrom(*call->ic_data(), class_ids.length())); 210 ICData::NewFrom(*call->ic_data(), class_ids.length()));
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 if (!owner_class.is_abstract() && 249 if (!owner_class.is_abstract() &&
249 !CHA::HasSubclasses(owner_class) && 250 !CHA::HasSubclasses(owner_class) &&
250 !CHA::IsImplemented(owner_class)) { 251 !CHA::IsImplemented(owner_class)) {
251 const Array& args_desc_array = Array::Handle(Z, 252 const Array& args_desc_array = Array::Handle(Z,
252 ArgumentsDescriptor::New(call->ArgumentCount(), 253 ArgumentsDescriptor::New(call->ArgumentCount(),
253 call->argument_names())); 254 call->argument_names()));
254 ArgumentsDescriptor args_desc(args_desc_array); 255 ArgumentsDescriptor args_desc(args_desc_array);
255 const Function& function = Function::Handle(Z, 256 const Function& function = Function::Handle(Z,
256 Resolver::ResolveDynamicForReceiverClass(owner_class, 257 Resolver::ResolveDynamicForReceiverClass(owner_class,
257 call->function_name(), 258 call->function_name(),
258 args_desc)); 259 args_desc,
260 false /* allow_add */));
259 if (!function.IsNull()) { 261 if (!function.IsNull()) {
260 const ICData& ic_data = ICData::ZoneHandle(Z, 262 const ICData& ic_data = ICData::ZoneHandle(Z,
261 ICData::NewFrom(*call->ic_data(), class_ids.length())); 263 ICData::NewFrom(*call->ic_data(), class_ids.length()));
262 ic_data.AddReceiverCheck(owner_class.id(), function); 264 ic_data.AddReceiverCheck(owner_class.id(), function);
263 call->set_ic_data(&ic_data); 265 call->set_ic_data(&ic_data);
264 return true; 266 return true;
265 } 267 }
266 } 268 }
267 } 269 }
268 270
(...skipping 3137 matching lines...) Expand 10 before | Expand all | Expand 10 after
3406 3408
3407 // Discard the environment from the original instruction because the store 3409 // Discard the environment from the original instruction because the store
3408 // can't deoptimize. 3410 // can't deoptimize.
3409 instr->RemoveEnvironment(); 3411 instr->RemoveEnvironment();
3410 ReplaceCall(instr, store); 3412 ReplaceCall(instr, store);
3411 return true; 3413 return true;
3412 } 3414 }
3413 3415
3414 3416
3415 } // namespace dart 3417 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/hash_table.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698