Home | History | Annotate | Download | only in optimizing

Lines Matching defs:HBasicBlock

51 class HBasicBlock;
162 void SetBlockOfInstructions(HBasicBlock* block) const;
175 friend class HBasicBlock;
361 const ArenaVector<HBasicBlock*>& GetBlocks() const { return blocks_; }
366 HBasicBlock* GetEntryBlock() const { return entry_block_; }
367 HBasicBlock* GetExitBlock() const { return exit_block_; }
370 void SetEntryBlock(HBasicBlock* block) { entry_block_ = block; }
371 void SetExitBlock(HBasicBlock* block) { exit_block_ = block; }
373 void AddBlock(HBasicBlock* block);
401 void UpdateLoopAndTryInformationOfNewBlock(HBasicBlock* block,
402 HBasicBlock* reference,
407 void TransformLoopHeaderForBCE(HBasicBlock* header);
411 HBasicBlock* TransformLoopForVectorization(HBasicBlock* header,
412 HBasicBlock* body,
413 HBasicBlock* exit);
417 void DeleteDeadEmptyBlock(HBasicBlock* block);
423 HBasicBlock* SplitEdge(HBasicBlock* block, HBasicBlock* successor);
425 void SplitCriticalEdge(HBasicBlock* block, HBasicBlock* successor);
426 void OrderLoopHeaderPredecessors(HBasicBlock* header);
436 void TransformLoopToSinglePreheaderFormat(HBasicBlock* header);
438 void SimplifyLoop(HBasicBlock* header);
496 const ArenaVector<HBasicBlock*>& GetReversePostOrder() const {
500 ArrayRef<HBasicBlock* const> GetReversePostOrderSkipEntryBlock() {
502 return ArrayRef<HBasicBlock* const>(GetReversePostOrder()).SubArray(1);
505 IterationRange<ArenaVector<HBasicBlock*>::const_reverse_iterator> GetPostOrder() const {
509 const ArenaVector<HBasicBlock*>& GetLinearOrder() const {
513 IterationRange<ArenaVector<HBasicBlock*>::const_reverse_iterator> GetLinearPostOrder() const {
652 ArenaVector<HBasicBlock*> blocks_;
655 ArenaVector<HBasicBlock*> reverse_post_order_;
659 ArenaVector<HBasicBlock*> linear_order_;
661 HBasicBlock* entry_block_;
662 HBasicBlock* exit_block_;
766 HLoopInformation(HBasicBlock* header, HGraph* graph)
785 HBasicBlock* GetHeader() const {
789 void SetHeader(HBasicBlock* block) {
797 void AddBackEdge(HBasicBlock* back_edge) {
801 void RemoveBackEdge(HBasicBlock* back_edge) {
805 bool IsBackEdge(const HBasicBlock& block) const {
813 HBasicBlock* GetPreHeader() const;
815 const ArenaVector<HBasicBlock*>& GetBackEdges() const {
823 void ReplaceBackEdge(HBasicBlock* existing, HBasicBlock* new_back_edge) {
836 bool Contains(const HBasicBlock& block) const;
847 void Add(HBasicBlock* block);
848 void Remove(HBasicBlock* block);
860 bool DominatesAllBackEdges(HBasicBlock* block);
872 void PopulateRecursive(HBasicBlock* block);
873 void PopulateIrreducibleRecursive(HBasicBlock* block, ArenaBitVector* finalized);
875 HBasicBlock* header_;
879 ArenaVector<HBasicBlock*> back_edges_;
945 class HBasicBlock : public ArenaObject<kArenaAllocBasicBlock> {
947 explicit HBasicBlock(HGraph* graph, uint32_t dex_pc = kNoDexPc)
964 const ArenaVector<HBasicBlock*>& GetPredecessors() const {
968 const ArenaVector<HBasicBlock*>& GetSuccessors() const {
972 ArrayRef<HBasicBlock* const> GetNormalSuccessors() const;
973 ArrayRef<HBasicBlock* const> GetExceptionalSuccessors() const;
975 bool HasSuccessor(const HBasicBlock* block, size_t start_from = 0u) {
979 const ArenaVector<HBasicBlock*>& GetDominatedBlocks() const {
1004 void AddBackEdge(HBasicBlock* back_edge) {
1017 void AddBackEdgeWhileUpdating(HBasicBlock* back_edge) {
1031 HBasicBlock* GetDominator() const { return dominator_; }
1032 void SetDominator(HBasicBlock* dominator) { dominator_ = dominator; }
1033 void AddDominatedBlock(HBasicBlock* block) { dominated_blocks_.push_back(block); }
1035 void RemoveDominatedBlock(HBasicBlock* block) {
1039 void ReplaceDominatedBlock(HBasicBlock* existing, HBasicBlock* new_block) {
1058 void AddSuccessor(HBasicBlock* block) {
1063 void ReplaceSuccessor(HBasicBlock* existing, HBasicBlock* new_block) {
1070 void ReplacePredecessor(HBasicBlock* existing, HBasicBlock* new_block) {
1080 void InsertBetween(HBasicBlock* predecessor, HBasicBlock* successor) {
1089 void RemovePredecessor(HBasicBlock* block) {
1093 void RemoveSuccessor(HBasicBlock* block) {
1101 void AddPredecessor(HBasicBlock* block) {
1116 size_t GetPredecessorIndexOf(HBasicBlock* predecessor) const {
1120 size_t GetSuccessorIndexOf(HBasicBlock* successor) const {
1124 HBasicBlock* GetSinglePredecessor() const {
1129 HBasicBlock* GetSingleSuccessor() const {
1136 bool IsFirstIndexOfPredecessor(HBasicBlock* predecessor, size_t idx) const {
1145 HBasicBlock* CreateImmediateDominator();
1152 HBasicBlock* SplitBefore(HInstruction* cursor);
1159 HBasicBlock* SplitBeforeForInlining(HInstruction* cursor);
1162 HBasicBlock* SplitAfterForInlining(HInstruction* cursor);
1169 void MergeWithInlined(HBasicBlock* other);
1176 void ReplaceWith(HBasicBlock* other);
1179 void MergeInstructionsWith(HBasicBlock* other);
1185 void MergeWith(HBasicBlock* other);
1278 bool Dominates(HBasicBlock* block) const;
1293 ArenaVector<HBasicBlock*> predecessors_;
1294 ArenaVector<HBasicBlock*> successors_;
1298 HBasicBlock* dominator_;
1299 ArenaVector<HBasicBlock*> dominated_blocks_;
1310 DISALLOW_COPY_AND_ASSIGN(HBasicBlock);
1317 explicit HLoopInformationOutwardIterator(const HBasicBlock& block)
1897 void CopyFromWithLoopPhiAdjustment(HEnvironment* env, HBasicBlock* loop_header);
1989 HBasicBlock* GetBlock() const { return block_; }
1991 void SetBlock(HBasicBlock* block) { block_ = block; }
2186 HBasicBlock* block) {
2452 HBasicBlock* block_;
2494 friend class HBasicBlock;
2833 HBasicBlock* GetSuccessor() const {
3104 HBasicBlock* IfTrueSuccessor() const {
3108 HBasicBlock* IfFalseSuccessor() const {
3140 HBasicBlock* GetNormalFlowSuccessor() const { return GetBlock()->GetSuccessors()[0]; }
3142 ArrayRef<HBasicBlock* const> GetExceptionHandlers() const {
3143 return ArrayRef<HBasicBlock* const>(GetBlock()->GetSuccessors()).SubArray(1u);
3148 bool HasExceptionHandler(const HBasicBlock& handler) const {
3155 void AddExceptionHandler(HBasicBlock* handler) {
3393 HBasicBlock* GetDefaultBlock() const {
7411 virtual void VisitBasicBlock(HBasicBlock* block);
7498 HBasicBlock* Current() const { return blocks_[index_]; }
7510 const ArenaVector<HBasicBlock*>& blocks_;
7531 HBasicBlock* Current() const { return blocks_[index_]; }
7543 const ArenaVector<HBasicBlock*>& blocks_;
7601 inline void MakeRoomFor(ArenaVector<HBasicBlock*>* blocks,