Lines Matching refs:node
568 LoopNode* node = new (loop_allocator_) LoopNode(loop_info); in AddLoop() local
572 last_loop_ = top_loop_ = node; in AddLoop()
575 node->outer = last_loop_; in AddLoop()
577 last_loop_ = last_loop_->inner = node; in AddLoop()
583 node->outer = last_loop_->outer; in AddLoop()
584 node->previous = last_loop_; in AddLoop()
586 last_loop_ = last_loop_->next = node; in AddLoop()
590 void HLoopOptimization::RemoveLoop(LoopNode* node) { in RemoveLoop() argument
591 DCHECK(node != nullptr); in RemoveLoop()
592 DCHECK(node->inner == nullptr); in RemoveLoop()
593 if (node->previous != nullptr) { in RemoveLoop()
595 node->previous->next = node->next; in RemoveLoop()
596 if (node->next != nullptr) { in RemoveLoop()
597 node->next->previous = node->previous; in RemoveLoop()
601 if (node->outer != nullptr) { in RemoveLoop()
602 node->outer->inner = node->next; in RemoveLoop()
604 top_loop_ = node->next; in RemoveLoop()
606 if (node->next != nullptr) { in RemoveLoop()
607 node->next->outer = node->outer; in RemoveLoop()
608 node->next->previous = nullptr; in RemoveLoop()
613 bool HLoopOptimization::TraverseLoopsInnerToOuter(LoopNode* node) { in TraverseLoopsInnerToOuter() argument
615 for ( ; node != nullptr; node = node->next) { in TraverseLoopsInnerToOuter()
618 if (TraverseLoopsInnerToOuter(node->inner)) { in TraverseLoopsInnerToOuter()
619 induction_range_.ReVisit(node->loop_info); in TraverseLoopsInnerToOuter()
627 SimplifyInduction(node); in TraverseLoopsInnerToOuter()
628 SimplifyBlocks(node); in TraverseLoopsInnerToOuter()
632 if (node->inner == nullptr) { in TraverseLoopsInnerToOuter()
633 changed = OptimizeInnerLoop(node) || changed; in TraverseLoopsInnerToOuter()
643 void HLoopOptimization::SimplifyInduction(LoopNode* node) { in SimplifyInduction() argument
644 HBasicBlock* header = node->loop_info->GetHeader(); in SimplifyInduction()
645 HBasicBlock* preheader = node->loop_info->GetPreHeader(); in SimplifyInduction()
654 TryAssignLastValue(node->loop_info, phi, preheader, /*collect_loop_uses*/ false)) { in SimplifyInduction()
670 void HLoopOptimization::SimplifyBlocks(LoopNode* node) { in SimplifyBlocks() argument
672 for (HBlocksInLoopIterator it(*node->loop_info); !it.Done(); it.Advance()) { in SimplifyBlocks()
707 bool HLoopOptimization::TryOptimizeInnerLoopFinite(LoopNode* node) { in TryOptimizeInnerLoopFinite() argument
708 HBasicBlock* header = node->loop_info->GetHeader(); in TryOptimizeInnerLoopFinite()
709 HBasicBlock* preheader = node->loop_info->GetPreHeader(); in TryOptimizeInnerLoopFinite()
712 if (!induction_range_.IsFinite(node->loop_info, &trip_count)) { in TryOptimizeInnerLoopFinite()
717 for (HBlocksInLoopIterator it(*node->loop_info); !it.Done(); it.Advance()) { in TryOptimizeInnerLoopFinite()
745 TryAssignLastValue(node->loop_info, main_phi, preheader, /*collect_loop_uses*/ true)) { in TryOptimizeInnerLoopFinite()
760 RemoveLoop(node); // update hierarchy in TryOptimizeInnerLoopFinite()
767 ShouldVectorize(node, body, trip_count) && in TryOptimizeInnerLoopFinite()
768 TryAssignLastValue(node->loop_info, main_phi, preheader, /*collect_loop_uses*/ true)) { in TryOptimizeInnerLoopFinite()
769 Vectorize(node, body, exit, trip_count); in TryOptimizeInnerLoopFinite()
777 bool HLoopOptimization::OptimizeInnerLoop(LoopNode* node) { in OptimizeInnerLoop() argument
778 return TryOptimizeInnerLoopFinite(node) || TryPeelingAndUnrolling(node); in OptimizeInnerLoop()
884 bool HLoopOptimization::TryPeelingAndUnrolling(LoopNode* node) { in TryPeelingAndUnrolling() argument
891 HLoopInformation* loop_info = node->loop_info; in TryPeelingAndUnrolling()
923 bool HLoopOptimization::ShouldVectorize(LoopNode* node, HBasicBlock* block, int64_t trip_count) { in ShouldVectorize() argument
940 if (!VectorizeDef(node, it.Current(), /*generate_code*/ false)) { in ShouldVectorize()
1039 void HLoopOptimization::Vectorize(LoopNode* node, in Vectorize() argument
1043 HBasicBlock* header = node->loop_info->GetHeader(); in Vectorize()
1044 HBasicBlock* preheader = node->loop_info->GetPreHeader(); in Vectorize()
1106 HInstruction* stc = induction_range_.GenerateTripCount(node->loop_info, graph_, preheader); in Vectorize()
1147 GenerateNewLoop(node, in Vectorize()
1160 GenerateNewLoop(node, in Vectorize()
1174 GenerateNewLoop(node, in Vectorize()
1207 node->loop_info = vloop; in Vectorize()
1210 void HLoopOptimization::GenerateNewLoop(LoopNode* node, in GenerateNewLoop() argument
1240 bool vectorized_def = VectorizeDef(node, it.Current(), /*generate_code*/ true); in GenerateNewLoop()
1272 bool HLoopOptimization::VectorizeDef(LoopNode* node, in VectorizeDef() argument
1293 node->loop_info->IsDefinedOutOfTheLoop(base) && in VectorizeDef()
1295 VectorizeUse(node, value, generate_code, type, restrictions)) { in VectorizeDef()
1313 if (VectorizeSADIdiom(node, instruction, generate_code, type, restrictions) || in VectorizeDef()
1314 VectorizeDotProdIdiom(node, instruction, generate_code, type, restrictions) || in VectorizeDef()
1316 VectorizeUse(node, instruction, generate_code, type, restrictions))) { in VectorizeDef()
1332 return !IsUsedOutsideLoop(node->loop_info, instruction) && !instruction->DoesAnyWrite(); in VectorizeDef()
1335 bool HLoopOptimization::VectorizeUse(LoopNode* node, in VectorizeUse() argument
1349 if (node->loop_info->IsDefinedOutOfTheLoop(instruction)) { in VectorizeUse()
1370 node->loop_info->IsDefinedOutOfTheLoop(base) && in VectorizeUse()
1411 VectorizeUse(node, opa, generate_code, type, restrictions | kNoHiBits)) || in VectorizeUse()
1414 VectorizeUse(node, opa, generate_code, type, restrictions))) { in VectorizeUse()
1430 VectorizeUse(node, opa, generate_code, from, restrictions)) { in VectorizeUse()
1441 if (VectorizeUse(node, opa, generate_code, type, restrictions)) { in VectorizeUse()
1458 if (VectorizeUse(node, opa, generate_code, type, restrictions) && in VectorizeUse()
1459 VectorizeUse(node, opb, generate_code, type, restrictions)) { in VectorizeUse()
1467 if (VectorizeHalvingAddIdiom(node, instruction, generate_code, type, restrictions)) { in VectorizeUse()
1496 if (VectorizeUse(node, r, generate_code, type, restrictions) && in VectorizeUse()
1523 if (VectorizeUse(node, r, generate_code, type, restrictions)) { in VectorizeUse()
2008 bool HLoopOptimization::VectorizeHalvingAddIdiom(LoopNode* node, in VectorizeHalvingAddIdiom() argument
2050 if (VectorizeUse(node, r, generate_code, type, restrictions) && in VectorizeHalvingAddIdiom()
2051 VectorizeUse(node, s, generate_code, type, restrictions)) { in VectorizeHalvingAddIdiom()
2080 bool HLoopOptimization::VectorizeSADIdiom(LoopNode* node, in VectorizeSADIdiom() argument
2125 if (VectorizeUse(node, q, generate_code, sub_type, restrictions) && in VectorizeSADIdiom()
2126 VectorizeUse(node, r, generate_code, sub_type, restrictions) && in VectorizeSADIdiom()
2127 VectorizeUse(node, s, generate_code, sub_type, restrictions)) { in VectorizeSADIdiom()
2154 bool HLoopOptimization::VectorizeDotProdIdiom(LoopNode* node, in VectorizeDotProdIdiom() argument
2193 if (VectorizeUse(node, q, generate_code, op_type, restrictions) && in VectorizeDotProdIdiom()
2194 VectorizeUse(node, r, generate_code, op_type, restrictions) && in VectorizeDotProdIdiom()
2195 VectorizeUse(node, s, generate_code, op_type, restrictions)) { in VectorizeDotProdIdiom()