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

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

Issue 2608373002: Move Null type to the Bottom in the VM (fixes #28025). (Closed)
Patch Set: address comments and sync Created 3 years, 11 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 | « runtime/vm/object.cc ('k') | tests/corelib/corelib.status » ('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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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/precompiler.h" 5 #include "vm/precompiler.h"
6 6
7 #include "vm/aot_optimizer.h" 7 #include "vm/aot_optimizer.h"
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/ast_printer.h" 9 #include "vm/ast_printer.h"
10 #include "vm/branch_optimizer.h" 10 #include "vm/branch_optimizer.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 #include "vm/version.h" 46 #include "vm/version.h"
47 #include "vm/json_parser.h" 47 #include "vm/json_parser.h"
48 48
49 namespace dart { 49 namespace dart {
50 50
51 #define T (thread()) 51 #define T (thread())
52 #define I (isolate()) 52 #define I (isolate())
53 #define Z (zone()) 53 #define Z (zone())
54 54
55 55
56 DEFINE_FLAG(bool, print_unique_targets, false, "Print unique dynaic targets"); 56 DEFINE_FLAG(bool, print_unique_targets, false, "Print unique dynamic targets");
57 DEFINE_FLAG(bool, trace_precompiler, false, "Trace precompiler."); 57 DEFINE_FLAG(bool, trace_precompiler, false, "Trace precompiler.");
58 DEFINE_FLAG( 58 DEFINE_FLAG(
59 int, 59 int,
60 max_speculative_inlining_attempts, 60 max_speculative_inlining_attempts,
61 1, 61 1,
62 "Max number of attempts with speculative inlining (precompilation only)"); 62 "Max number of attempts with speculative inlining (precompilation only)");
63 DEFINE_FLAG(int, precompiler_rounds, 1, "Number of precompiler iterations"); 63 DEFINE_FLAG(int, precompiler_rounds, 1, "Number of precompiler iterations");
64 64
65 DECLARE_FLAG(bool, allocation_sinking); 65 DECLARE_FLAG(bool, allocation_sinking);
66 DECLARE_FLAG(bool, common_subexpression_elimination); 66 DECLARE_FLAG(bool, common_subexpression_elimination);
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 *upper_limit = -1; 267 *upper_limit = -1;
268 intptr_t last_matching_cid = -1; 268 intptr_t last_matching_cid = -1;
269 269
270 ClassTable* table = thread_->isolate()->class_table(); 270 ClassTable* table = thread_->isolate()->class_table();
271 Class& cls = Class::Handle(zone); 271 Class& cls = Class::Handle(zone);
272 AbstractType& cls_type = AbstractType::Handle(zone); 272 AbstractType& cls_type = AbstractType::Handle(zone);
273 for (intptr_t cid = kInstanceCid; cid < table->NumCids(); cid++) { 273 for (intptr_t cid = kInstanceCid; cid < table->NumCids(); cid++) {
274 if (!table->HasValidClassAt(cid)) continue; 274 if (!table->HasValidClassAt(cid)) continue;
275 if (cid == kVoidCid) continue; 275 if (cid == kVoidCid) continue;
276 if (cid == kDynamicCid) continue; 276 if (cid == kDynamicCid) continue;
277 if (cid == kNullCid) continue; // Instance is not at Bottom like Null type.
277 cls = table->At(cid); 278 cls = table->At(cid);
278 if (cls.is_abstract()) continue; 279 if (cls.is_abstract()) continue;
279 if (cls.is_patch()) continue; 280 if (cls.is_patch()) continue;
280 if (cls.IsTopLevel()) continue; 281 if (cls.IsTopLevel()) continue;
281 282
282 cls_type = cls.RareType(); 283 cls_type = cls.RareType();
283 if (cls_type.IsSubtypeOf(type, NULL, NULL, Heap::kOld)) { 284 if (cls_type.IsSubtypeOf(type, NULL, NULL, Heap::kOld)) {
284 last_matching_cid = cid; 285 last_matching_cid = cid;
285 if (*lower_limit == -1) { 286 if (*lower_limit == -1) {
286 // Found beginning of range. 287 // Found beginning of range.
(...skipping 3368 matching lines...) Expand 10 before | Expand all | Expand 10 after
3655 3656
3656 ASSERT(FLAG_precompiled_mode); 3657 ASSERT(FLAG_precompiled_mode);
3657 const bool optimized = function.IsOptimizable(); // False for natives. 3658 const bool optimized = function.IsOptimizable(); // False for natives.
3658 DartPrecompilationPipeline pipeline(zone, field_type_map); 3659 DartPrecompilationPipeline pipeline(zone, field_type_map);
3659 return PrecompileFunctionHelper(precompiler, &pipeline, function, optimized); 3660 return PrecompileFunctionHelper(precompiler, &pipeline, function, optimized);
3660 } 3661 }
3661 3662
3662 #endif // DART_PRECOMPILER 3663 #endif // DART_PRECOMPILER
3663 3664
3664 } // namespace dart 3665 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | tests/corelib/corelib.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698