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

Unified Diff: src/objects.h

Issue 1906823002: Move of the type feedback vector to the closure. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: REBASE. Created 4 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: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index a2cc6d5b305506d441cc99cc35f0aadb4a9f40d6..e9dd3b5698804581204ffec12d29e8c7c8534a39 100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -856,6 +856,7 @@ class SafepointEntry;
class SharedFunctionInfo;
class StringStream;
class TypeFeedbackInfo;
+class TypeFeedbackMetadata;
class TypeFeedbackVector;
class WeakCell;
class TransitionArray;
@@ -4720,8 +4721,8 @@ class LiteralsArray : public FixedArray {
public:
static const int kVectorIndex = 0;
static const int kFirstLiteralIndex = 1;
- static const int kOffsetToFirstLiteral =
- FixedArray::kHeaderSize + kPointerSize;
+ static const int kFeedbackVectorOffset = FixedArray::kHeaderSize;
Michael Starzinger 2016/05/10 13:47:20 nit: It is possible to use OffsetOfElementAt(kVect
mvstanton 2016/05/24 16:31:50 Done.
+ static const int kOffsetToFirstLiteral = kFeedbackVectorOffset + kPointerSize;
Michael Starzinger 2016/05/10 13:47:20 nit: Likewise.
mvstanton 2016/05/24 16:31:50 Done.
static int OffsetOfLiteralAt(int index) {
return SizeFor(index + kFirstLiteralIndex);
@@ -4731,6 +4732,7 @@ class LiteralsArray : public FixedArray {
inline void set_feedback_vector(TypeFeedbackVector* vector);
inline Object* literal(int literal_index) const;
inline void set_literal(int literal_index, Object* literal);
+ inline void set_literal_undefined(int literal_index);
inline int literals_count() const;
static Handle<LiteralsArray> New(Isolate* isolate,
@@ -6582,6 +6584,9 @@ class SharedFunctionInfo: public HeapObject {
// Clear optimized code map.
void ClearOptimizedCodeMap();
+ // Like ClearOptimizedCodeMap, but preserves literals.
+ void ClearCodeFromOptimizedCodeMap();
+
// We have a special root FixedArray with the right shape and values
// to represent the cleared optimized code map. This predicate checks
// if that root is installed.
@@ -6595,6 +6600,9 @@ class SharedFunctionInfo: public HeapObject {
// Trims the optimized code map after entries have been removed.
void TrimOptimizedCodeMap(int shrink_by);
+ static Handle<LiteralsArray> FindOrCreateLiterals(
+ Handle<SharedFunctionInfo> shared, Handle<Context> native_context);
+
// Add or update entry in the optimized code map for context-independent code.
static void AddSharedCodeToOptimizedCodeMap(Handle<SharedFunctionInfo> shared,
Handle<Code> code);
@@ -6664,16 +6672,10 @@ class SharedFunctionInfo: public HeapObject {
inline int expected_nof_properties() const;
inline void set_expected_nof_properties(int value);
- // [feedback_vector] - accumulates ast node feedback from full-codegen and
+ // [feedback_metadata] - describes ast node feedback from full-codegen and
// (increasingly) from crankshafted code where sufficient feedback isn't
// available.
- DECL_ACCESSORS(feedback_vector, TypeFeedbackVector)
-
- // Unconditionally clear the type feedback vector (including vector ICs).
- void ClearTypeFeedbackInfo();
-
- // Clear the type feedback vector with a more subtle policy at GC time.
- void ClearTypeFeedbackInfoAtGCTime();
+ DECL_ACCESSORS(feedback_metadata, TypeFeedbackMetadata)
#if TRACE_MAPS
// [unique_id] - For --trace-maps purposes, an identifier that's persistent
@@ -6985,15 +6987,15 @@ class SharedFunctionInfo: public HeapObject {
static const int kScriptOffset = kFunctionDataOffset + kPointerSize;
static const int kDebugInfoOffset = kScriptOffset + kPointerSize;
static const int kFunctionIdentifierOffset = kDebugInfoOffset + kPointerSize;
- static const int kFeedbackVectorOffset =
+ static const int kFeedbackMetadataOffset =
kFunctionIdentifierOffset + kPointerSize;
#if TRACE_MAPS
- static const int kUniqueIdOffset = kFeedbackVectorOffset + kPointerSize;
+ static const int kUniqueIdOffset = kFeedbackMetadataOffset + kPointerSize;
static const int kLastPointerFieldOffset = kUniqueIdOffset;
#else
// Just to not break the postmortrem support with conditional offsets
- static const int kUniqueIdOffset = kFeedbackVectorOffset;
- static const int kLastPointerFieldOffset = kFeedbackVectorOffset;
+ static const int kUniqueIdOffset = kFeedbackMetadataOffset;
+ static const int kLastPointerFieldOffset = kFeedbackMetadataOffset;
#endif
#if V8_HOST_ARCH_32_BIT
@@ -7404,6 +7406,7 @@ class JSFunction: public JSObject {
inline void set_code(Code* code);
inline void set_code_no_write_barrier(Code* code);
inline void ReplaceCode(Code* code);
+ static void EnsureLiterals(Handle<JSFunction> function);
Michael Starzinger 2016/05/10 13:47:20 nit: Please move this down to the "[literals]" sec
mvstanton 2016/05/24 16:31:50 Done.
// Get the abstract code associated with the function, which will either be
// a Code object or a BytecodeArray.
@@ -7429,6 +7432,12 @@ class JSFunction: public JSObject {
// Tells whether or not the function is on the concurrent recompilation queue.
inline bool IsInOptimizationQueue();
+ // Unconditionally clear the type feedback vector (including vector ICs).
+ void ClearTypeFeedbackInfo();
Michael Starzinger 2016/05/10 13:47:20 nit: Likewise, please move this down to after the
mvstanton 2016/05/24 16:31:50 Done.
+
+ // Clear the type feedback vector with a more subtle policy at GC time.
+ void ClearTypeFeedbackInfoAtGCTime();
+
// Completes inobject slack tracking on initial map if it is active.
inline void CompleteInobjectSlackTrackingIfActive();
@@ -7443,6 +7452,8 @@ class JSFunction: public JSObject {
// access to.
DECL_ACCESSORS(literals, LiteralsArray)
+ inline TypeFeedbackVector* feedback_vector();
+
// The initial map for an object created by this constructor.
inline Map* initial_map();
static void SetInitialMap(Handle<JSFunction> function, Handle<Map> map,

Powered by Google App Engine
This is Rietveld 408576698