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

Side by Side Diff: src/crankshaft/hydrogen.h

Issue 2126233002: Devirtualize AstNode and subclasses, except for visiting-related methods. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: cleanup Created 4 years, 5 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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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_CRANKSHAFT_HYDROGEN_H_ 5 #ifndef V8_CRANKSHAFT_HYDROGEN_H_
6 #define V8_CRANKSHAFT_HYDROGEN_H_ 6 #define V8_CRANKSHAFT_HYDROGEN_H_
7 7
8 #include "src/accessors.h" 8 #include "src/accessors.h"
9 #include "src/allocation.h" 9 #include "src/allocation.h"
10 #include "src/ast/ast-type-bounds.h" 10 #include "src/ast/ast-type-bounds.h"
(...skipping 2253 matching lines...) Expand 10 before | Expand all | Expand 10 after
2264 2264
2265 void VisitDelete(UnaryOperation* expr); 2265 void VisitDelete(UnaryOperation* expr);
2266 void VisitVoid(UnaryOperation* expr); 2266 void VisitVoid(UnaryOperation* expr);
2267 void VisitTypeof(UnaryOperation* expr); 2267 void VisitTypeof(UnaryOperation* expr);
2268 void VisitNot(UnaryOperation* expr); 2268 void VisitNot(UnaryOperation* expr);
2269 2269
2270 void VisitComma(BinaryOperation* expr); 2270 void VisitComma(BinaryOperation* expr);
2271 void VisitLogicalExpression(BinaryOperation* expr); 2271 void VisitLogicalExpression(BinaryOperation* expr);
2272 void VisitArithmeticExpression(BinaryOperation* expr); 2272 void VisitArithmeticExpression(BinaryOperation* expr);
2273 2273
2274 void VisitLoopBody(IterationStatement* stmt, 2274 template <class IterationStatement>
2275 HBasicBlock* loop_entry); 2275 void VisitLoopBody(IterationStatement* stmt, HBasicBlock* loop_entry);
2276 2276
2277 void BuildForInBody(ForInStatement* stmt, Variable* each_var, 2277 void BuildForInBody(ForInStatement* stmt, Variable* each_var,
2278 HValue* enumerable); 2278 HValue* enumerable);
2279 2279
2280 // Create a back edge in the flow graph. body_exit is the predecessor 2280 // Create a back edge in the flow graph. body_exit is the predecessor
2281 // block and loop_entry is the successor block. loop_successor is the 2281 // block and loop_entry is the successor block. loop_successor is the
2282 // block where control flow exits the loop normally (e.g., via failure of 2282 // block where control flow exits the loop normally (e.g., via failure of
2283 // the condition) and break_block is the block where control flow breaks 2283 // the condition) and break_block is the block where control flow breaks
2284 // from the loop. All blocks except loop_entry can be NULL. The return 2284 // from the loop. All blocks except loop_entry can be NULL. The return
2285 // value is the new successor block which is the join of loop_successor 2285 // value is the new successor block which is the join of loop_successor
2286 // and break_block, or NULL. 2286 // and break_block, or NULL.
2287 HBasicBlock* CreateLoop(IterationStatement* statement, 2287 HBasicBlock* CreateLoop(IterationStatement* statement,
2288 HBasicBlock* loop_entry, 2288 HBasicBlock* loop_entry,
2289 HBasicBlock* body_exit, 2289 HBasicBlock* body_exit,
2290 HBasicBlock* loop_successor, 2290 HBasicBlock* loop_successor,
2291 HBasicBlock* break_block); 2291 HBasicBlock* break_block);
2292 2292
2293 // Build a loop entry 2293 // Build a loop entry
2294 HBasicBlock* BuildLoopEntry(); 2294 HBasicBlock* BuildLoopEntry();
2295 2295
2296 // Builds a loop entry respectful of OSR requirements 2296 // Builds a loop entry respectful of OSR requirements
2297 HBasicBlock* BuildLoopEntry(IterationStatement* statement); 2297 HBasicBlock* BuildLoopEntry(IterationStatement* statement);
2298 2298
2299 template <class IterationStatement>
2299 HBasicBlock* JoinContinue(IterationStatement* statement, 2300 HBasicBlock* JoinContinue(IterationStatement* statement,
2300 HBasicBlock* exit_block, 2301 HBasicBlock* exit_block,
2301 HBasicBlock* continue_block); 2302 HBasicBlock* continue_block);
2302 2303
2303 HValue* Top() const { return environment()->Top(); } 2304 HValue* Top() const { return environment()->Top(); }
2304 void Drop(int n) { environment()->Drop(n); } 2305 void Drop(int n) { environment()->Drop(n); }
2305 void Bind(Variable* var, HValue* value) { environment()->Bind(var, value); } 2306 void Bind(Variable* var, HValue* value) { environment()->Bind(var, value); }
2306 bool IsEligibleForEnvironmentLivenessAnalysis(Variable* var, 2307 bool IsEligibleForEnvironmentLivenessAnalysis(Variable* var,
2307 int index, 2308 int index,
2308 HEnvironment* env) { 2309 HEnvironment* env) {
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
2678 Handle<Map> transition_; 2679 Handle<Map> transition_;
2679 int number_; 2680 int number_;
2680 PropertyDetails details_; 2681 PropertyDetails details_;
2681 }; 2682 };
2682 2683
2683 HValue* BuildMonomorphicAccess(PropertyAccessInfo* info, HValue* object, 2684 HValue* BuildMonomorphicAccess(PropertyAccessInfo* info, HValue* object,
2684 HValue* checked_object, HValue* value, 2685 HValue* checked_object, HValue* value,
2685 BailoutId ast_id, BailoutId return_id, 2686 BailoutId ast_id, BailoutId return_id,
2686 bool can_inline_accessor = true); 2687 bool can_inline_accessor = true);
2687 2688
2689 template <class Expression>
2688 HValue* BuildNamedAccess(PropertyAccessType access, BailoutId ast_id, 2690 HValue* BuildNamedAccess(PropertyAccessType access, BailoutId ast_id,
2689 BailoutId reutrn_id, Expression* expr, 2691 BailoutId reutrn_id, Expression* expr,
2690 FeedbackVectorSlot slot, HValue* object, 2692 FeedbackVectorSlot slot, HValue* object,
2691 Handle<Name> name, HValue* value, 2693 Handle<Name> name, HValue* value,
2692 bool is_uninitialized = false); 2694 bool is_uninitialized = false);
2693 2695
2694 void HandlePolymorphicCallNamed(Call* expr, 2696 void HandlePolymorphicCallNamed(Call* expr,
2695 HValue* receiver, 2697 HValue* receiver,
2696 SmallMapList* types, 2698 SmallMapList* types,
2697 Handle<String> name); 2699 Handle<String> name);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2740 HValue* dependency, 2742 HValue* dependency,
2741 Handle<Map> map, 2743 Handle<Map> map,
2742 PropertyAccessType access_type, 2744 PropertyAccessType access_type,
2743 KeyedAccessStoreMode store_mode); 2745 KeyedAccessStoreMode store_mode);
2744 2746
2745 HValue* HandlePolymorphicElementAccess( 2747 HValue* HandlePolymorphicElementAccess(
2746 Expression* expr, FeedbackVectorSlot slot, HValue* object, HValue* key, 2748 Expression* expr, FeedbackVectorSlot slot, HValue* object, HValue* key,
2747 HValue* val, SmallMapList* maps, PropertyAccessType access_type, 2749 HValue* val, SmallMapList* maps, PropertyAccessType access_type,
2748 KeyedAccessStoreMode store_mode, bool* has_side_effects); 2750 KeyedAccessStoreMode store_mode, bool* has_side_effects);
2749 2751
2752 template <class Expression>
2750 HValue* HandleKeyedElementAccess(HValue* obj, HValue* key, HValue* val, 2753 HValue* HandleKeyedElementAccess(HValue* obj, HValue* key, HValue* val,
2751 Expression* expr, FeedbackVectorSlot slot, 2754 Expression* expr, FeedbackVectorSlot slot,
2752 BailoutId ast_id, BailoutId return_id, 2755 BailoutId ast_id, BailoutId return_id,
2753 PropertyAccessType access_type, 2756 PropertyAccessType access_type,
2754 bool* has_side_effects); 2757 bool* has_side_effects);
2755 2758
2756 HInstruction* BuildNamedGeneric(PropertyAccessType access, Expression* expr, 2759 HInstruction* BuildNamedGeneric(PropertyAccessType access, Expression* expr,
2757 FeedbackVectorSlot slot, HValue* object, 2760 FeedbackVectorSlot slot, HValue* object,
2758 Handle<Name> name, HValue* value, 2761 Handle<Name> name, HValue* value,
2759 bool is_uninitialized = false); 2762 bool is_uninitialized = false);
2760 2763
2761 HCheckMaps* AddCheckMap(HValue* object, Handle<Map> map); 2764 HCheckMaps* AddCheckMap(HValue* object, Handle<Map> map);
2762 2765
2763 void BuildLoad(Property* property, 2766 void BuildLoad(Property* property,
2764 BailoutId ast_id); 2767 BailoutId ast_id);
2765 void PushLoad(Property* property, 2768 void PushLoad(Property* property,
2766 HValue* object, 2769 HValue* object,
2767 HValue* key); 2770 HValue* key);
2768 2771
2772 template <class Expression>
2769 void BuildStoreForEffect(Expression* expression, Property* prop, 2773 void BuildStoreForEffect(Expression* expression, Property* prop,
2770 FeedbackVectorSlot slot, BailoutId ast_id, 2774 FeedbackVectorSlot slot, BailoutId ast_id,
2771 BailoutId return_id, HValue* object, HValue* key, 2775 BailoutId return_id, HValue* object, HValue* key,
2772 HValue* value); 2776 HValue* value);
2773 2777
2778 template <class Expression>
2774 void BuildStore(Expression* expression, Property* prop, 2779 void BuildStore(Expression* expression, Property* prop,
2775 FeedbackVectorSlot slot, BailoutId ast_id, 2780 FeedbackVectorSlot slot, BailoutId ast_id,
2776 BailoutId return_id, bool is_uninitialized = false); 2781 BailoutId return_id, bool is_uninitialized = false);
2777 2782
2778 HInstruction* BuildLoadNamedField(PropertyAccessInfo* info, 2783 HInstruction* BuildLoadNamedField(PropertyAccessInfo* info,
2779 HValue* checked_object); 2784 HValue* checked_object);
2780 HInstruction* BuildStoreNamedField(PropertyAccessInfo* info, 2785 HInstruction* BuildStoreNamedField(PropertyAccessInfo* info,
2781 HValue* checked_object, 2786 HValue* checked_object,
2782 HValue* value); 2787 HValue* value);
2783 2788
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
3042 } 3047 }
3043 3048
3044 private: 3049 private:
3045 HOptimizedGraphBuilder* builder_; 3050 HOptimizedGraphBuilder* builder_;
3046 }; 3051 };
3047 3052
3048 } // namespace internal 3053 } // namespace internal
3049 } // namespace v8 3054 } // namespace v8
3050 3055
3051 #endif // V8_CRANKSHAFT_HYDROGEN_H_ 3056 #endif // V8_CRANKSHAFT_HYDROGEN_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698