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

Unified Diff: src/feedback-vector.h

Issue 2707873002: Collect type profile for DevTools. (Closed)
Patch Set: Explain why throw is needed in message test. Created 3 years, 9 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
« no previous file with comments | « src/compiler/bytecode-graph-builder.cc ('k') | src/feedback-vector.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/feedback-vector.h
diff --git a/src/feedback-vector.h b/src/feedback-vector.h
index 9ac146d5113dbf70a325f2ac7a5d6b2b226b329e..a3cdace37538e1b29c77a9889d2e156eb51487e1 100644
--- a/src/feedback-vector.h
+++ b/src/feedback-vector.h
@@ -36,6 +36,7 @@ enum class FeedbackSlotKind {
kCompareOp,
kToBoolean,
kStoreDataPropertyInLiteral,
+ kTypeProfile,
kCreateClosure,
kLiteral,
// This is a general purpose slot that occupies one feedback vector element.
@@ -150,6 +151,11 @@ class FeedbackVectorSpecBase {
return AddSlot(FeedbackSlotKind::kStoreDataPropertyInLiteral);
}
+ FeedbackSlot AddTypeProfileSlot() {
+ DCHECK(FLAG_type_profile);
+ return AddSlot(FeedbackSlotKind::kTypeProfile);
+ }
+
#ifdef OBJECT_PRINT
// For gdb debugging.
void Print();
@@ -250,6 +256,8 @@ class FeedbackMetadata : public FixedArray {
static const char* Kind2String(FeedbackSlotKind kind);
+ bool HasTypeProfileSlot();
+
private:
static const int kFeedbackSlotKindBits = 5;
STATIC_ASSERT(static_cast<int>(FeedbackSlotKind::kKindsNumber) <
@@ -742,6 +750,30 @@ class StoreDataPropertyInLiteralICNexus : public FeedbackNexus {
InlineCacheState StateFromFeedback() const override;
};
+// For each assignment, store the type of the value in the collection of types
+// in the feedback vector.
+class CollectTypeProfileNexus : public FeedbackNexus {
+ public:
+ CollectTypeProfileNexus(Handle<FeedbackVector> vector, FeedbackSlot slot)
+ : FeedbackNexus(vector, slot) {
+ DCHECK_EQ(FeedbackSlotKind::kTypeProfile, vector->GetKind(slot));
+ }
+ CollectTypeProfileNexus(FeedbackVector* vector, FeedbackSlot slot)
+ : FeedbackNexus(vector, slot) {
+ DCHECK_EQ(FeedbackSlotKind::kTypeProfile, vector->GetKind(slot));
+ }
+
+ // Add a type to the list of types.
+ void Collect(Handle<Name> type);
+
+ // Dump the types to stdout.
+ // TODO(franzih): pass this information to the debugger protocol instead of
+ // stdout.
+ void Print() const;
+
+ InlineCacheState StateFromFeedback() const override;
+};
+
inline BinaryOperationHint BinaryOperationHintFromFeedback(int type_feedback);
inline CompareOperationHint CompareOperationHintFromFeedback(int type_feedback);
« no previous file with comments | « src/compiler/bytecode-graph-builder.cc ('k') | src/feedback-vector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698