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

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

Issue 2902313004: CoreJIT snapshots without training. (Closed)
Patch Set: . Created 3 years, 7 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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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/object.h" 5 #include "vm/object.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/assembler.h" 9 #include "vm/assembler.h"
10 #include "vm/become.h" 10 #include "vm/become.h"
(...skipping 3552 matching lines...) Expand 10 before | Expand all | Expand 10 after
3563 if (largest_seen < function.end_token_pos()) { 3563 if (largest_seen < function.end_token_pos()) {
3564 largest_seen = function.end_token_pos(); 3564 largest_seen = function.end_token_pos();
3565 } 3565 }
3566 } 3566 }
3567 } 3567 }
3568 return TokenPosition(largest_seen); 3568 return TokenPosition(largest_seen);
3569 } 3569 }
3570 3570
3571 const TokenStream& tkns = TokenStream::Handle(zone, scr.tokens()); 3571 const TokenStream& tkns = TokenStream::Handle(zone, scr.tokens());
3572 if (tkns.IsNull()) { 3572 if (tkns.IsNull()) {
3573 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT); 3573 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kFullAOT);
3574 return TokenPosition::kNoSource; 3574 return TokenPosition::kNoSource;
3575 } 3575 }
3576 TokenStream::Iterator tkit(zone, tkns, token_pos(), 3576 TokenStream::Iterator tkit(zone, tkns, token_pos(),
3577 TokenStream::Iterator::kNoNewlines); 3577 TokenStream::Iterator::kNoNewlines);
3578 intptr_t level = 0; 3578 intptr_t level = 0;
3579 while (tkit.CurrentTokenKind() != Token::kEOS) { 3579 while (tkit.CurrentTokenKind() != Token::kEOS) {
3580 if (tkit.CurrentTokenKind() == Token::kLBRACE) { 3580 if (tkit.CurrentTokenKind() == Token::kLBRACE) {
3581 level++; 3581 level++;
3582 } else if (tkit.CurrentTokenKind() == Token::kRBRACE) { 3582 } else if (tkit.CurrentTokenKind() == Token::kRBRACE) {
3583 if (--level == 0) { 3583 if (--level == 0) {
(...skipping 4365 matching lines...) Expand 10 before | Expand all | Expand 10 after
7949 } 7949 }
7950 7950
7951 7951
7952 RawString* Field::InitializingExpression() const { 7952 RawString* Field::InitializingExpression() const {
7953 Thread* thread = Thread::Current(); 7953 Thread* thread = Thread::Current();
7954 Zone* zone = thread->zone(); 7954 Zone* zone = thread->zone();
7955 const class Script& scr = Script::Handle(zone, Script()); 7955 const class Script& scr = Script::Handle(zone, Script());
7956 ASSERT(!scr.IsNull()); 7956 ASSERT(!scr.IsNull());
7957 const TokenStream& tkns = TokenStream::Handle(zone, scr.tokens()); 7957 const TokenStream& tkns = TokenStream::Handle(zone, scr.tokens());
7958 if (tkns.IsNull()) { 7958 if (tkns.IsNull()) {
7959 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT); 7959 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kFullAOT);
7960 return String::null(); 7960 return String::null();
7961 } 7961 }
7962 TokenStream::Iterator tkit(zone, tkns, token_pos()); 7962 TokenStream::Iterator tkit(zone, tkns, token_pos());
7963 ASSERT(Token::IsIdentifier(tkit.CurrentTokenKind())); 7963 ASSERT(Token::IsIdentifier(tkit.CurrentTokenKind()));
7964 #if defined(DEBUG) 7964 #if defined(DEBUG)
7965 const String& literal = String::Handle(zone, tkit.CurrentLiteral()); 7965 const String& literal = String::Handle(zone, tkit.CurrentLiteral());
7966 ASSERT(literal.raw() == name()); 7966 ASSERT(literal.raw() == name());
7967 #endif 7967 #endif
7968 tkit.Advance(); 7968 tkit.Advance();
7969 if (tkit.CurrentTokenKind() != Token::kASSIGN) { 7969 if (tkit.CurrentTokenKind() != Token::kASSIGN) {
(...skipping 1132 matching lines...) Expand 10 before | Expand all | Expand 10 after
9102 9102
9103 9103
9104 RawString* Script::GenerateSource() const { 9104 RawString* Script::GenerateSource() const {
9105 if (kind() == RawScript::kKernelTag) { 9105 if (kind() == RawScript::kKernelTag) {
9106 // In kernel it's embedded. 9106 // In kernel it's embedded.
9107 return raw_ptr()->source_; 9107 return raw_ptr()->source_;
9108 } 9108 }
9109 9109
9110 const TokenStream& token_stream = TokenStream::Handle(tokens()); 9110 const TokenStream& token_stream = TokenStream::Handle(tokens());
9111 if (token_stream.IsNull()) { 9111 if (token_stream.IsNull()) {
9112 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT); 9112 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kFullAOT);
9113 return String::null(); 9113 return String::null();
9114 } 9114 }
9115 return token_stream.GenerateSource(); 9115 return token_stream.GenerateSource();
9116 } 9116 }
9117 9117
9118 9118
9119 void Script::set_compile_time_constants(const Array& value) const { 9119 void Script::set_compile_time_constants(const Array& value) const {
9120 StorePointer(&raw_ptr()->compile_time_constants_, value.raw()); 9120 StorePointer(&raw_ptr()->compile_time_constants_, value.raw());
9121 } 9121 }
9122 9122
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
9467 ++i) { 9467 ++i) {
9468 ++*token_len; 9468 ++*token_len;
9469 } 9469 }
9470 } 9470 }
9471 } 9471 }
9472 return; 9472 return;
9473 } 9473 }
9474 9474
9475 const TokenStream& tkns = TokenStream::Handle(zone, tokens()); 9475 const TokenStream& tkns = TokenStream::Handle(zone, tokens());
9476 if (tkns.IsNull()) { 9476 if (tkns.IsNull()) {
9477 ASSERT((Dart::vm_snapshot_kind() == Snapshot::kAppAOT)); 9477 ASSERT((Dart::vm_snapshot_kind() == Snapshot::kFullAOT));
9478 *line = -1; 9478 *line = -1;
9479 if (column != NULL) { 9479 if (column != NULL) {
9480 *column = -1; 9480 *column = -1;
9481 } 9481 }
9482 if (token_len != NULL) { 9482 if (token_len != NULL) {
9483 *token_len = 1; 9483 *token_len = 1;
9484 } 9484 }
9485 return; 9485 return;
9486 } 9486 }
9487 if (column == NULL) { 9487 if (column == NULL) {
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
9625 } 9625 }
9626 result = result & ((static_cast<uint32_t>(1) << 31) - 1); 9626 result = result & ((static_cast<uint32_t>(1) << 31) - 1);
9627 ASSERT(result <= static_cast<uint32_t>(kMaxInt32)); 9627 ASSERT(result <= static_cast<uint32_t>(kMaxInt32));
9628 return result; 9628 return result;
9629 } 9629 }
9630 9630
9631 9631
9632 RawString* Script::GetLine(intptr_t line_number, Heap::Space space) const { 9632 RawString* Script::GetLine(intptr_t line_number, Heap::Space space) const {
9633 const String& src = String::Handle(Source()); 9633 const String& src = String::Handle(Source());
9634 if (src.IsNull()) { 9634 if (src.IsNull()) {
9635 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT); 9635 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kFullAOT);
9636 return Symbols::OptimizedOut().raw(); 9636 return Symbols::OptimizedOut().raw();
9637 } 9637 }
9638 intptr_t relative_line_number = line_number - line_offset(); 9638 intptr_t relative_line_number = line_number - line_offset();
9639 intptr_t current_line = 1; 9639 intptr_t current_line = 1;
9640 intptr_t line_start_idx = -1; 9640 intptr_t line_start_idx = -1;
9641 intptr_t last_char_idx = -1; 9641 intptr_t last_char_idx = -1;
9642 for (intptr_t ix = 0; 9642 for (intptr_t ix = 0;
9643 (ix < src.Length()) && (current_line <= relative_line_number); ix++) { 9643 (ix < src.Length()) && (current_line <= relative_line_number); ix++) {
9644 if ((current_line == relative_line_number) && (line_start_idx < 0)) { 9644 if ((current_line == relative_line_number) && (line_start_idx < 0)) {
9645 line_start_idx = ix; 9645 line_start_idx = ix;
(...skipping 29 matching lines...) Expand all
9675 return GetSnippet(from_line, from_column, to_line, to_column); 9675 return GetSnippet(from_line, from_column, to_line, to_column);
9676 } 9676 }
9677 9677
9678 9678
9679 RawString* Script::GetSnippet(intptr_t from_line, 9679 RawString* Script::GetSnippet(intptr_t from_line,
9680 intptr_t from_column, 9680 intptr_t from_column,
9681 intptr_t to_line, 9681 intptr_t to_line,
9682 intptr_t to_column) const { 9682 intptr_t to_column) const {
9683 const String& src = String::Handle(Source()); 9683 const String& src = String::Handle(Source());
9684 if (src.IsNull()) { 9684 if (src.IsNull()) {
9685 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT); 9685 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kFullAOT);
9686 return Symbols::OptimizedOut().raw(); 9686 return Symbols::OptimizedOut().raw();
9687 } 9687 }
9688 intptr_t length = src.Length(); 9688 intptr_t length = src.Length();
9689 intptr_t line = 1 + line_offset(); 9689 intptr_t line = 1 + line_offset();
9690 intptr_t column = 1; 9690 intptr_t column = 1;
9691 intptr_t scan_position = 0; 9691 intptr_t scan_position = 0;
9692 intptr_t snippet_start = -1; 9692 intptr_t snippet_start = -1;
9693 intptr_t snippet_end = -1; 9693 intptr_t snippet_end = -1;
9694 if (from_line - line_offset() == 1) { 9694 if (from_line - line_offset() == 1) {
9695 column += col_offset(); 9695 column += col_offset();
(...skipping 1876 matching lines...) Expand 10 before | Expand all | Expand 10 after
11572 11572
11573 11573
11574 bool LibraryPrefix::LoadLibrary() const { 11574 bool LibraryPrefix::LoadLibrary() const {
11575 // Non-deferred prefixes are loaded. 11575 // Non-deferred prefixes are loaded.
11576 ASSERT(is_deferred_load() || is_loaded()); 11576 ASSERT(is_deferred_load() || is_loaded());
11577 if (is_loaded()) { 11577 if (is_loaded()) {
11578 return true; // Load request has already completed. 11578 return true; // Load request has already completed.
11579 } 11579 }
11580 ASSERT(is_deferred_load()); 11580 ASSERT(is_deferred_load());
11581 ASSERT(num_imports() == 1); 11581 ASSERT(num_imports() == 1);
11582 if (Dart::vm_snapshot_kind() == Snapshot::kAppAOT) { 11582 if (Dart::vm_snapshot_kind() == Snapshot::kFullAOT) {
11583 // The library list was tree-shaken away. 11583 // The library list was tree-shaken away.
11584 this->set_is_loaded(); 11584 this->set_is_loaded();
11585 return true; 11585 return true;
11586 } 11586 }
11587 // This is a prefix for a deferred library. If the library is not loaded 11587 // This is a prefix for a deferred library. If the library is not loaded
11588 // yet and isn't being loaded, call the library tag handler to schedule 11588 // yet and isn't being loaded, call the library tag handler to schedule
11589 // loading. Once all outstanding load requests have completed, the embedder 11589 // loading. Once all outstanding load requests have completed, the embedder
11590 // will call the core library to: 11590 // will call the core library to:
11591 // - invalidate dependent code of this prefix; 11591 // - invalidate dependent code of this prefix;
11592 // - mark this prefixes as loaded; 11592 // - mark this prefixes as loaded;
(...skipping 1445 matching lines...) Expand 10 before | Expand all | Expand 10 after
13038 const intptr_t num_checks = NumberOfChecks(); 13038 const intptr_t num_checks = NumberOfChecks();
13039 return OS::SCreate(Thread::Current()->zone(), 13039 return OS::SCreate(Thread::Current()->zone(),
13040 "ICData target:'%s' num-args: %" Pd " num-checks: %" Pd "", 13040 "ICData target:'%s' num-args: %" Pd " num-checks: %" Pd "",
13041 name.ToCString(), num_args, num_checks); 13041 name.ToCString(), num_args, num_checks);
13042 } 13042 }
13043 13043
13044 13044
13045 RawFunction* ICData::Owner() const { 13045 RawFunction* ICData::Owner() const {
13046 Object& obj = Object::Handle(raw_ptr()->owner_); 13046 Object& obj = Object::Handle(raw_ptr()->owner_);
13047 if (obj.IsNull()) { 13047 if (obj.IsNull()) {
13048 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT); 13048 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kFullAOT);
13049 return Function::null(); 13049 return Function::null();
13050 } else if (obj.IsFunction()) { 13050 } else if (obj.IsFunction()) {
13051 return Function::Cast(obj).raw(); 13051 return Function::Cast(obj).raw();
13052 } else { 13052 } else {
13053 ICData& original = ICData::Handle(); 13053 ICData& original = ICData::Handle();
13054 original ^= obj.raw(); 13054 original ^= obj.raw();
13055 return original.Owner(); 13055 return original.Owner();
13056 } 13056 }
13057 } 13057 }
13058 13058
(...skipping 1176 matching lines...) Expand 10 before | Expand all | Expand 10 after
14235 14235
14236 14236
14237 RawTypedData* Code::GetDeoptInfoAtPc(uword pc, 14237 RawTypedData* Code::GetDeoptInfoAtPc(uword pc,
14238 ICData::DeoptReasonId* deopt_reason, 14238 ICData::DeoptReasonId* deopt_reason,
14239 uint32_t* deopt_flags) const { 14239 uint32_t* deopt_flags) const {
14240 ASSERT(is_optimized()); 14240 ASSERT(is_optimized());
14241 const Instructions& instrs = Instructions::Handle(instructions()); 14241 const Instructions& instrs = Instructions::Handle(instructions());
14242 uword code_entry = instrs.PayloadStart(); 14242 uword code_entry = instrs.PayloadStart();
14243 const Array& table = Array::Handle(deopt_info_array()); 14243 const Array& table = Array::Handle(deopt_info_array());
14244 if (table.IsNull()) { 14244 if (table.IsNull()) {
14245 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT); 14245 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kFullAOT);
14246 return TypedData::null(); 14246 return TypedData::null();
14247 } 14247 }
14248 // Linear search for the PC offset matching the target PC. 14248 // Linear search for the PC offset matching the target PC.
14249 intptr_t length = DeoptTable::GetLength(table); 14249 intptr_t length = DeoptTable::GetLength(table);
14250 Smi& offset = Smi::Handle(); 14250 Smi& offset = Smi::Handle();
14251 Smi& reason_and_flags = Smi::Handle(); 14251 Smi& reason_and_flags = Smi::Handle();
14252 TypedData& info = TypedData::Handle(); 14252 TypedData& info = TypedData::Handle();
14253 for (intptr_t i = 0; i < length; ++i) { 14253 for (intptr_t i = 0; i < length; ++i) {
14254 DeoptTable::GetEntry(table, i, &offset, &info, &reason_and_flags); 14254 DeoptTable::GetEntry(table, i, &offset, &info, &reason_and_flags);
14255 if (pc == (code_entry + offset.Value())) { 14255 if (pc == (code_entry + offset.Value())) {
(...skipping 9097 matching lines...) Expand 10 before | Expand all | Expand 10 after
23353 return UserTag::null(); 23353 return UserTag::null();
23354 } 23354 }
23355 23355
23356 23356
23357 const char* UserTag::ToCString() const { 23357 const char* UserTag::ToCString() const {
23358 const String& tag_label = String::Handle(label()); 23358 const String& tag_label = String::Handle(label());
23359 return tag_label.ToCString(); 23359 return tag_label.ToCString();
23360 } 23360 }
23361 23361
23362 } // namespace dart 23362 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698