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

Side by Side Diff: src/hydrogen.h

Issue 7216009: Change the handling of stack check on backward branches (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Changed stack check elimination to remove the stack check instruction Created 9 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 | Annotate | Revision Log
« no previous file with comments | « src/arm/lithium-codegen-arm.cc ('k') | src/hydrogen.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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 ASSERT(parent_loop_header_ == NULL); 113 ASSERT(parent_loop_header_ == NULL);
114 parent_loop_header_ = block; 114 parent_loop_header_ = block;
115 } 115 }
116 116
117 bool HasParentLoopHeader() const { return parent_loop_header_ != NULL; } 117 bool HasParentLoopHeader() const { return parent_loop_header_ != NULL; }
118 118
119 void SetJoinId(int id); 119 void SetJoinId(int id);
120 120
121 void Finish(HControlInstruction* last); 121 void Finish(HControlInstruction* last);
122 void FinishExit(HControlInstruction* instruction); 122 void FinishExit(HControlInstruction* instruction);
123 void Goto(HBasicBlock* block, bool include_stack_check = false); 123 void Goto(HBasicBlock* block);
124 124
125 int PredecessorIndexOf(HBasicBlock* predecessor) const; 125 int PredecessorIndexOf(HBasicBlock* predecessor) const;
126 void AddSimulate(int id) { AddInstruction(CreateSimulate(id)); } 126 void AddSimulate(int id) { AddInstruction(CreateSimulate(id)); }
127 void AssignCommonDominator(HBasicBlock* other); 127 void AssignCommonDominator(HBasicBlock* other);
128 128
129 void FinishExitWithDeoptimization(HDeoptimize::UseEnvironment has_uses) { 129 void FinishExitWithDeoptimization(HDeoptimize::UseEnvironment has_uses) {
130 FinishExit(CreateDeoptimize(has_uses)); 130 FinishExit(CreateDeoptimize(has_uses));
131 } 131 }
132 132
133 // Add the inlined function exit sequence, adding an HLeaveInlined 133 // Add the inlined function exit sequence, adding an HLeaveInlined
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 ZoneList<int> deleted_phis_; 178 ZoneList<int> deleted_phis_;
179 HBasicBlock* parent_loop_header_; 179 HBasicBlock* parent_loop_header_;
180 bool is_inline_return_target_; 180 bool is_inline_return_target_;
181 bool is_deoptimizing_; 181 bool is_deoptimizing_;
182 }; 182 };
183 183
184 184
185 class HLoopInformation: public ZoneObject { 185 class HLoopInformation: public ZoneObject {
186 public: 186 public:
187 explicit HLoopInformation(HBasicBlock* loop_header) 187 explicit HLoopInformation(HBasicBlock* loop_header)
188 : back_edges_(4), loop_header_(loop_header), blocks_(8) { 188 : back_edges_(4),
189 loop_header_(loop_header),
190 blocks_(8),
191 stack_check_(NULL) {
189 blocks_.Add(loop_header); 192 blocks_.Add(loop_header);
190 } 193 }
191 virtual ~HLoopInformation() {} 194 virtual ~HLoopInformation() {}
192 195
193 const ZoneList<HBasicBlock*>* back_edges() const { return &back_edges_; } 196 const ZoneList<HBasicBlock*>* back_edges() const { return &back_edges_; }
194 const ZoneList<HBasicBlock*>* blocks() const { return &blocks_; } 197 const ZoneList<HBasicBlock*>* blocks() const { return &blocks_; }
195 HBasicBlock* loop_header() const { return loop_header_; } 198 HBasicBlock* loop_header() const { return loop_header_; }
196 HBasicBlock* GetLastBackEdge() const; 199 HBasicBlock* GetLastBackEdge() const;
197 void RegisterBackEdge(HBasicBlock* block); 200 void RegisterBackEdge(HBasicBlock* block);
198 201
202 HStackCheck* stack_check() const { return stack_check_; }
203 void set_stack_check(HStackCheck* stack_check) {
204 stack_check_ = stack_check;
205 }
206
199 private: 207 private:
200 void AddBlock(HBasicBlock* block); 208 void AddBlock(HBasicBlock* block);
201 209
202 ZoneList<HBasicBlock*> back_edges_; 210 ZoneList<HBasicBlock*> back_edges_;
203 HBasicBlock* loop_header_; 211 HBasicBlock* loop_header_;
204 ZoneList<HBasicBlock*> blocks_; 212 ZoneList<HBasicBlock*> blocks_;
213 HStackCheck* stack_check_;
205 }; 214 };
206 215
207 216
208 class HGraph: public ZoneObject { 217 class HGraph: public ZoneObject {
209 public: 218 public:
210 explicit HGraph(CompilationInfo* info); 219 explicit HGraph(CompilationInfo* info);
211 220
212 Isolate* isolate() { return isolate_; } 221 Isolate* isolate() { return isolate_; }
213 Zone* zone() { return isolate_->zone(); } 222 Zone* zone() { return isolate_->zone(); }
214 223
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 void VisitBitNot(UnaryOperation* expr); 773 void VisitBitNot(UnaryOperation* expr);
765 void VisitNot(UnaryOperation* expr); 774 void VisitNot(UnaryOperation* expr);
766 775
767 void VisitComma(BinaryOperation* expr); 776 void VisitComma(BinaryOperation* expr);
768 void VisitLogicalExpression(BinaryOperation* expr); 777 void VisitLogicalExpression(BinaryOperation* expr);
769 void VisitArithmeticExpression(BinaryOperation* expr); 778 void VisitArithmeticExpression(BinaryOperation* expr);
770 779
771 void PreProcessOsrEntry(IterationStatement* statement); 780 void PreProcessOsrEntry(IterationStatement* statement);
772 // True iff. we are compiling for OSR and the statement is the entry. 781 // True iff. we are compiling for OSR and the statement is the entry.
773 bool HasOsrEntryAt(IterationStatement* statement); 782 bool HasOsrEntryAt(IterationStatement* statement);
783 void VisitLoopBody(Statement* body,
784 HBasicBlock* loop_entry,
785 BreakAndContinueInfo* break_info);
774 786
775 HBasicBlock* CreateJoin(HBasicBlock* first, 787 HBasicBlock* CreateJoin(HBasicBlock* first,
776 HBasicBlock* second, 788 HBasicBlock* second,
777 int join_id); 789 int join_id);
778 790
779 // Create a back edge in the flow graph. body_exit is the predecessor 791 // Create a back edge in the flow graph. body_exit is the predecessor
780 // block and loop_entry is the successor block. loop_successor is the 792 // block and loop_entry is the successor block. loop_successor is the
781 // block where control flow exits the loop normally (e.g., via failure of 793 // block where control flow exits the loop normally (e.g., via failure of
782 // the condition) and break_block is the block where control flow breaks 794 // the condition) and break_block is the block where control flow breaks
783 // from the loop. All blocks except loop_entry can be NULL. The return 795 // from the loop. All blocks except loop_entry can be NULL. The return
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
1200 const char* filename_; 1212 const char* filename_;
1201 HeapStringAllocator string_allocator_; 1213 HeapStringAllocator string_allocator_;
1202 StringStream trace_; 1214 StringStream trace_;
1203 int indent_; 1215 int indent_;
1204 }; 1216 };
1205 1217
1206 1218
1207 } } // namespace v8::internal 1219 } } // namespace v8::internal
1208 1220
1209 #endif // V8_HYDROGEN_H_ 1221 #endif // V8_HYDROGEN_H_
OLDNEW
« no previous file with comments | « src/arm/lithium-codegen-arm.cc ('k') | src/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698