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

Side by Side Diff: src/type-feedback-vector.h

Issue 1445513002: [turbofan] Introduce JSCallReducer to strength reduce JSCallFunction nodes. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Comment. Created 5 years, 1 month 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 | « src/compiler/pipeline.cc ('k') | src/type-feedback-vector.cc » ('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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_TYPE_FEEDBACK_VECTOR_H_ 5 #ifndef V8_TYPE_FEEDBACK_VECTOR_H_
6 #define V8_TYPE_FEEDBACK_VECTOR_H_ 6 #define V8_TYPE_FEEDBACK_VECTOR_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "src/base/logging.h" 10 #include "src/base/logging.h"
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 virtual bool FindHandlers(CodeHandleList* code_list, int length = -1) const; 368 virtual bool FindHandlers(CodeHandleList* code_list, int length = -1) const;
369 virtual Name* FindFirstName() const { return NULL; } 369 virtual Name* FindFirstName() const { return NULL; }
370 370
371 virtual void ConfigureUninitialized(); 371 virtual void ConfigureUninitialized();
372 virtual void ConfigurePremonomorphic(); 372 virtual void ConfigurePremonomorphic();
373 virtual void ConfigureMegamorphic(); 373 virtual void ConfigureMegamorphic();
374 374
375 inline Object* GetFeedback() const; 375 inline Object* GetFeedback() const;
376 inline Object* GetFeedbackExtra() const; 376 inline Object* GetFeedbackExtra() const;
377 377
378 protected:
379 inline Isolate* GetIsolate() const; 378 inline Isolate* GetIsolate() const;
380 379
380 protected:
381 inline void SetFeedback(Object* feedback, 381 inline void SetFeedback(Object* feedback,
382 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); 382 WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
383 inline void SetFeedbackExtra(Object* feedback_extra, 383 inline void SetFeedbackExtra(Object* feedback_extra,
384 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); 384 WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
385 385
386 Handle<FixedArray> EnsureArrayOfSize(int length); 386 Handle<FixedArray> EnsureArrayOfSize(int length);
387 Handle<FixedArray> EnsureExtraArrayOfSize(int length); 387 Handle<FixedArray> EnsureExtraArrayOfSize(int length);
388 void InstallHandlers(Handle<FixedArray> array, MapHandleList* maps, 388 void InstallHandlers(Handle<FixedArray> array, MapHandleList* maps,
389 CodeHandleList* handlers); 389 CodeHandleList* handlers);
390 390
391 private: 391 private:
392 // The reason for having a vector handle and a raw pointer is that we can and 392 // The reason for having a vector handle and a raw pointer is that we can and
393 // should use handles during IC miss, but not during GC when we clear ICs. If 393 // should use handles during IC miss, but not during GC when we clear ICs. If
394 // you have a handle to the vector that is better because more operations can 394 // you have a handle to the vector that is better because more operations can
395 // be done, like allocation. 395 // be done, like allocation.
396 Handle<TypeFeedbackVector> vector_handle_; 396 Handle<TypeFeedbackVector> vector_handle_;
397 TypeFeedbackVector* vector_; 397 TypeFeedbackVector* vector_;
398 FeedbackVectorSlot slot_; 398 FeedbackVectorSlot slot_;
399 }; 399 };
400 400
401 401
402 class CallICNexus : public FeedbackNexus { 402 class CallICNexus final : public FeedbackNexus {
403 public: 403 public:
404 // Monomorphic call ics store call counts. Platform code needs to increment 404 // Monomorphic call ics store call counts. Platform code needs to increment
405 // the count appropriately (ie, by 2). 405 // the count appropriately (ie, by 2).
406 static const int kCallCountIncrement = 2; 406 static const int kCallCountIncrement = 2;
407 407
408 CallICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) 408 CallICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
409 : FeedbackNexus(vector, slot) { 409 : FeedbackNexus(vector, slot) {
410 DCHECK_EQ(FeedbackVectorSlotKind::CALL_IC, vector->GetKind(slot)); 410 DCHECK_EQ(FeedbackVectorSlotKind::CALL_IC, vector->GetKind(slot));
411 } 411 }
412 CallICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) 412 CallICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot)
413 : FeedbackNexus(vector, slot) { 413 : FeedbackNexus(vector, slot) {
414 DCHECK_EQ(FeedbackVectorSlotKind::CALL_IC, vector->GetKind(slot)); 414 DCHECK_EQ(FeedbackVectorSlotKind::CALL_IC, vector->GetKind(slot));
415 } 415 }
416 416
417 void Clear(Code* host); 417 void Clear(Code* host);
418 418
419 void ConfigureMonomorphicArray(); 419 void ConfigureMonomorphicArray();
420 void ConfigureMonomorphic(Handle<JSFunction> function); 420 void ConfigureMonomorphic(Handle<JSFunction> function);
421 void ConfigureMegamorphic() final;
422 void ConfigureMegamorphic(int call_count);
421 423
422 InlineCacheState StateFromFeedback() const override; 424 InlineCacheState StateFromFeedback() const final;
423 425
424 int ExtractMaps(MapHandleList* maps) const override { 426 int ExtractMaps(MapHandleList* maps) const final {
425 // CallICs don't record map feedback. 427 // CallICs don't record map feedback.
426 return 0; 428 return 0;
427 } 429 }
428 MaybeHandle<Code> FindHandlerForMap(Handle<Map> map) const override { 430 MaybeHandle<Code> FindHandlerForMap(Handle<Map> map) const final {
429 return MaybeHandle<Code>(); 431 return MaybeHandle<Code>();
430 } 432 }
431 bool FindHandlers(CodeHandleList* code_list, int length = -1) const override { 433 bool FindHandlers(CodeHandleList* code_list, int length = -1) const final {
432 return length == 0; 434 return length == 0;
433 } 435 }
434 436
435 int ExtractCallCount(); 437 int ExtractCallCount();
436 }; 438 };
437 439
438 440
439 class LoadICNexus : public FeedbackNexus { 441 class LoadICNexus : public FeedbackNexus {
440 public: 442 public:
441 LoadICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) 443 LoadICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 KeyedAccessStoreMode GetKeyedAccessStoreMode() const; 543 KeyedAccessStoreMode GetKeyedAccessStoreMode() const;
542 IcCheckType GetKeyType() const; 544 IcCheckType GetKeyType() const;
543 545
544 InlineCacheState StateFromFeedback() const override; 546 InlineCacheState StateFromFeedback() const override;
545 Name* FindFirstName() const override; 547 Name* FindFirstName() const override;
546 }; 548 };
547 } // namespace internal 549 } // namespace internal
548 } // namespace v8 550 } // namespace v8
549 551
550 #endif // V8_TRANSITIONS_H_ 552 #endif // V8_TRANSITIONS_H_
OLDNEW
« no previous file with comments | « src/compiler/pipeline.cc ('k') | src/type-feedback-vector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698