Lines Matching refs:BasicBlock
19 class BasicBlock;
23 using BasicBlockVector = ZoneVector<BasicBlock*>;
29 class V8_EXPORT_PRIVATE BasicBlock final
58 BasicBlock(Zone* zone, Id id);
59 BasicBlock(const BasicBlock&) = delete;
60 BasicBlock& operator=(const BasicBlock&) = delete;
76 BasicBlock* PredecessorAt(size_t index) { return predecessors_[index]; }
78 void AddPredecessor(BasicBlock* predecessor);
85 BasicBlock* SuccessorAt(size_t index) { return successors_[index]; }
87 void AddSuccessor(BasicBlock* successor);
138 BasicBlock* dominator() const { return dominator_; }
139 void set_dominator(BasicBlock* dominator) { dominator_ = dominator; }
141 BasicBlock* rpo_next() const { return rpo_next_; }
142 void set_rpo_next(BasicBlock* rpo_next) { rpo_next_ = rpo_next; }
144 BasicBlock* loop_header() const { return loop_header_; }
145 void set_loop_header(BasicBlock* loop_header);
147 BasicBlock* loop_end() const { return loop_end_; }
148 void set_loop_end(BasicBlock* loop_end);
163 bool LoopContains(BasicBlock* block) const;
167 static BasicBlock* GetCommonDominator(BasicBlock* b1, BasicBlock* b2);
174 BasicBlock* dominator_; // Immediate dominator of the block.
175 BasicBlock* rpo_next_; // Link to next block in special RPO order.
176 BasicBlock* loop_header_; // Pointer to dominating loop header basic block,
179 BasicBlock* loop_end_; // end of the loop, if this block is a loop header.
194 std::ostream& operator<<(std::ostream&, const BasicBlock&);
195 std::ostream& operator<<(std::ostream&, const BasicBlock::Control&);
196 std::ostream& operator<<(std::ostream&, const BasicBlock::Id&);
209 BasicBlock* block(Node* node) const;
212 BasicBlock* GetBlockById(BasicBlock::Id block_id);
213 void ClearBlockById(BasicBlock::Id block_id);
221 // BasicBlock building: create a new block.
222 BasicBlock* NewBasicBlock();
224 // BasicBlock building: records that a node will later be added to a block but
226 void PlanNode(BasicBlock* block, Node* node);
228 // BasicBlock building: add a node to the end of the block.
229 void AddNode(BasicBlock* block, Node* node);
231 // BasicBlock building: add a goto to the end of {block}.
232 void AddGoto(BasicBlock* block, BasicBlock* succ);
234 // BasicBlock building: add a call at the end of {block}.
235 void AddCall(BasicBlock* block, Node* call, BasicBlock* success_block,
236 BasicBlock* exception_block);
238 // BasicBlock building: add a branch at the end of {block}.
239 void AddBranch(BasicBlock* block, Node* branch, BasicBlock* tblock,
240 BasicBlock* fblock);
242 // BasicBlock building: add a switch at the end of {block}.
243 void AddSwitch(BasicBlock* block, Node* sw, BasicBlock** succ_blocks,
246 // BasicBlock building: add a deoptimize at the end of {block}.
247 void AddDeoptimize(BasicBlock* block, Node* input);
249 // BasicBlock building: add a tailcall at the end of {block}.
250 void AddTailCall(BasicBlock* block, Node* input);
252 // BasicBlock building: add a return at the end of {block}.
253 void AddReturn(BasicBlock* block, Node* input);
255 // BasicBlock building: add a throw at the end of {block}.
256 void AddThrow(BasicBlock* block, Node* input);
258 // BasicBlock mutation: insert a branch into the end of {block}.
259 void InsertBranch(BasicBlock* block, BasicBlock* end, Node* branch,
260 BasicBlock* tblock, BasicBlock* fblock);
262 // BasicBlock mutation: insert a switch into the end of {block}.
263 void InsertSwitch(BasicBlock* block, BasicBlock* end, Node* sw,
264 BasicBlock** succ_blocks, size_t succ_count);
267 void AddSuccessorForTesting(BasicBlock* block, BasicBlock* succ) {
275 BasicBlock* start() { return start_; }
276 BasicBlock* end() { return end_; }
294 void EnsureSplitEdgeForm(BasicBlock* block);
296 void MovePhis(BasicBlock* from, BasicBlock* to);
300 void AddSuccessor(BasicBlock* block, BasicBlock* succ);
301 void MoveSuccessors(BasicBlock* from, BasicBlock* to);
303 void SetControlInput(BasicBlock* block, Node* node);
304 void SetBlockForNode(BasicBlock* block, Node* node);
310 BasicBlock* start_;
311 BasicBlock* end_;