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

Unified Diff: runtime/vm/il_printer.cc

Issue 2856543002: Use off-heap data for class check instructions (Closed)
Patch Set: Feedback from Slava: rejig inheritance of CallTargets 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 side-by-side diff with in-line comments
Download patch
Index: runtime/vm/il_printer.cc
diff --git a/runtime/vm/il_printer.cc b/runtime/vm/il_printer.cc
index fde3ffd26294535166b01b1d322ad1caa3c83d22..78821fc699b4385a5f02469d1e4eee5ea799c365 100644
--- a/runtime/vm/il_printer.cc
+++ b/runtime/vm/il_printer.cc
@@ -206,9 +206,9 @@ static void PrintTargetsHelper(BufferFormatter* f,
num_checks_to_print = targets.length();
}
for (intptr_t i = 0; i < num_checks_to_print; i++) {
- const CidRangeTarget& range = targets[i];
- const intptr_t count = range.count;
- target ^= range.target->raw();
+ const CidRange& range = targets[i];
+ const intptr_t count = targets.TargetAt(i)->count;
+ target ^= targets.TargetAt(i)->target->raw();
if (i > 0) {
f->Print(" | ");
}
@@ -216,9 +216,10 @@ static void PrintTargetsHelper(BufferFormatter* f,
const Class& cls =
Class::Handle(Isolate::Current()->class_table()->At(range.cid_start));
f->Print("%s", String::Handle(cls.Name()).ToCString());
- f->Print(" cnt:%" Pd " trgt:'%s'", count, target.ToQualifiedCString());
+ f->Print(" cid %" Pd " cnt:%" Pd " trgt:'%s'", range.cid_start, count,
+ target.ToQualifiedCString());
} else {
- const Class& cls = Class::Handle(range.target->Owner());
+ const Class& cls = Class::Handle(target.Owner());
f->Print("cid %" Pd "-%" Pd " %s", range.cid_start, range.cid_end,
String::Handle(cls.Name()).ToCString());
f->Print(" cnt:%" Pd " trgt:'%s'", count, target.ToQualifiedCString());
@@ -231,6 +232,36 @@ static void PrintTargetsHelper(BufferFormatter* f,
}
+static void PrintCidsHelper(BufferFormatter* f,
+ const Cids& targets,
+ intptr_t num_checks_to_print) {
+ f->Print(" Cids[");
+ f->Print("%" Pd ": ", targets.length());
+ if ((num_checks_to_print == FlowGraphPrinter::kPrintAll) ||
+ (num_checks_to_print > targets.length())) {
+ num_checks_to_print = targets.length();
+ }
+ for (intptr_t i = 0; i < num_checks_to_print; i++) {
+ const CidRange& range = targets[i];
+ if (i > 0) {
+ f->Print(" | ");
+ }
+ const Class& cls =
+ Class::Handle(Isolate::Current()->class_table()->At(range.cid_start));
+ f->Print("%s etc. ", String::Handle(cls.Name()).ToCString());
+ if (range.cid_start == range.cid_end) {
+ f->Print(" cid %" Pd, range.cid_start);
+ } else {
+ f->Print(" cid %" Pd "-%" Pd, range.cid_start, range.cid_end);
+ }
+ }
+ if (num_checks_to_print < targets.length()) {
+ f->Print("...");
+ }
+ f->Print("]");
+}
+
+
static void PrintICDataHelper(BufferFormatter* f,
const ICData& ic_data,
intptr_t num_checks_to_print) {
@@ -1031,11 +1062,7 @@ void CheckClassIdInstr::PrintOperandsTo(BufferFormatter* f) const {
void CheckClassInstr::PrintOperandsTo(BufferFormatter* f) const {
value()->PrintTo(f);
- if (FLAG_display_sorted_ic_data) {
- PrintICDataSortedHelper(f, unary_checks());
- } else {
- PrintICDataHelper(f, unary_checks(), FlowGraphPrinter::kPrintAll);
- }
+ PrintCidsHelper(f, cids_, FlowGraphPrinter::kPrintAll);
if (IsNullCheck()) {
f->Print(" nullcheck");
}

Powered by Google App Engine
This is Rietveld 408576698