• Home
  • Raw
  • Download

Lines Matching refs:node

569   LoopNode* node = new (loop_allocator_) LoopNode(loop_info);  in AddLoop()  local
573 last_loop_ = top_loop_ = node; in AddLoop()
576 node->outer = last_loop_; in AddLoop()
578 last_loop_ = last_loop_->inner = node; in AddLoop()
584 node->outer = last_loop_->outer; in AddLoop()
585 node->previous = last_loop_; in AddLoop()
587 last_loop_ = last_loop_->next = node; in AddLoop()
591 void HLoopOptimization::RemoveLoop(LoopNode* node) { in RemoveLoop() argument
592 DCHECK(node != nullptr); in RemoveLoop()
593 DCHECK(node->inner == nullptr); in RemoveLoop()
594 if (node->previous != nullptr) { in RemoveLoop()
596 node->previous->next = node->next; in RemoveLoop()
597 if (node->next != nullptr) { in RemoveLoop()
598 node->next->previous = node->previous; in RemoveLoop()
602 if (node->outer != nullptr) { in RemoveLoop()
603 node->outer->inner = node->next; in RemoveLoop()
605 top_loop_ = node->next; in RemoveLoop()
607 if (node->next != nullptr) { in RemoveLoop()
608 node->next->outer = node->outer; in RemoveLoop()
609 node->next->previous = nullptr; in RemoveLoop()
614 bool HLoopOptimization::TraverseLoopsInnerToOuter(LoopNode* node) { in TraverseLoopsInnerToOuter() argument
616 for ( ; node != nullptr; node = node->next) { in TraverseLoopsInnerToOuter()
619 if (TraverseLoopsInnerToOuter(node->inner)) { in TraverseLoopsInnerToOuter()
620 induction_range_.ReVisit(node->loop_info); in TraverseLoopsInnerToOuter()
624 CalculateAndSetTryCatchKind(node); in TraverseLoopsInnerToOuter()
625 if (node->try_catch_kind == LoopNode::TryCatchKind::kHasTryCatch) { in TraverseLoopsInnerToOuter()
631 DCHECK(node->try_catch_kind == LoopNode::TryCatchKind::kNoTryCatch) in TraverseLoopsInnerToOuter()
632 << "kind: " << static_cast<int>(node->try_catch_kind) in TraverseLoopsInnerToOuter()
640 SimplifyInduction(node); in TraverseLoopsInnerToOuter()
641 SimplifyBlocks(node); in TraverseLoopsInnerToOuter()
645 if (node->inner == nullptr) { in TraverseLoopsInnerToOuter()
646 changed = OptimizeInnerLoop(node) || changed; in TraverseLoopsInnerToOuter()
652 void HLoopOptimization::CalculateAndSetTryCatchKind(LoopNode* node) { in CalculateAndSetTryCatchKind() argument
653 DCHECK(node != nullptr); in CalculateAndSetTryCatchKind()
654 DCHECK(node->try_catch_kind == LoopNode::TryCatchKind::kUnknown) in CalculateAndSetTryCatchKind()
655 << "kind: " << static_cast<int>(node->try_catch_kind) in CalculateAndSetTryCatchKind()
661 for (LoopNode* inner = node->inner; inner != nullptr; inner = inner->next) { in CalculateAndSetTryCatchKind()
667 node->try_catch_kind = LoopNode::TryCatchKind::kHasTryCatch; in CalculateAndSetTryCatchKind()
672 for (HBlocksInLoopIterator it_loop(*node->loop_info); !it_loop.Done(); it_loop.Advance()) { in CalculateAndSetTryCatchKind()
675 node->try_catch_kind = LoopNode::TryCatchKind::kHasTryCatch; in CalculateAndSetTryCatchKind()
680 node->try_catch_kind = LoopNode::TryCatchKind::kNoTryCatch; in CalculateAndSetTryCatchKind()
687 void HLoopOptimization::SimplifyInduction(LoopNode* node) { in SimplifyInduction() argument
688 HBasicBlock* header = node->loop_info->GetHeader(); in SimplifyInduction()
689 HBasicBlock* preheader = node->loop_info->GetPreHeader(); in SimplifyInduction()
698 TryAssignLastValue(node->loop_info, phi, preheader, /*collect_loop_uses*/ false)) { in SimplifyInduction()
714 void HLoopOptimization::SimplifyBlocks(LoopNode* node) { in SimplifyBlocks() argument
716 for (HBlocksInLoopIterator it(*node->loop_info); !it.Done(); it.Advance()) { in SimplifyBlocks()
751 bool HLoopOptimization::TryOptimizeInnerLoopFinite(LoopNode* node) { in TryOptimizeInnerLoopFinite() argument
752 HBasicBlock* header = node->loop_info->GetHeader(); in TryOptimizeInnerLoopFinite()
753 HBasicBlock* preheader = node->loop_info->GetPreHeader(); in TryOptimizeInnerLoopFinite()
756 if (!induction_range_.IsFinite(node->loop_info, &trip_count)) { in TryOptimizeInnerLoopFinite()
761 for (HBlocksInLoopIterator it(*node->loop_info); !it.Done(); it.Advance()) { in TryOptimizeInnerLoopFinite()
789 TryAssignLastValue(node->loop_info, main_phi, preheader, /*collect_loop_uses*/ true)) { in TryOptimizeInnerLoopFinite()
804 RemoveLoop(node); // update hierarchy in TryOptimizeInnerLoopFinite()
816 ShouldVectorize(node, body, trip_count) && in TryOptimizeInnerLoopFinite()
817 TryAssignLastValue(node->loop_info, main_phi, preheader, /*collect_loop_uses*/ true)) { in TryOptimizeInnerLoopFinite()
818 Vectorize(node, body, exit, trip_count); in TryOptimizeInnerLoopFinite()
826 bool HLoopOptimization::OptimizeInnerLoop(LoopNode* node) { in OptimizeInnerLoop() argument
827 return TryOptimizeInnerLoopFinite(node) || TryPeelingAndUnrolling(node); in OptimizeInnerLoop()
931 bool HLoopOptimization::TryPeelingAndUnrolling(LoopNode* node) { in TryPeelingAndUnrolling() argument
932 HLoopInformation* loop_info = node->loop_info; in TryPeelingAndUnrolling()
964 bool HLoopOptimization::ShouldVectorize(LoopNode* node, HBasicBlock* block, int64_t trip_count) { in ShouldVectorize() argument
981 if (!VectorizeDef(node, it.Current(), /*generate_code*/ false)) { in ShouldVectorize()
1083 void HLoopOptimization::Vectorize(LoopNode* node, in Vectorize() argument
1087 HBasicBlock* header = node->loop_info->GetHeader(); in Vectorize()
1088 HBasicBlock* preheader = node->loop_info->GetPreHeader(); in Vectorize()
1152 HInstruction* stc = induction_range_.GenerateTripCount(node->loop_info, graph_, preheader); in Vectorize()
1195 GenerateNewLoop(node, in Vectorize()
1208 GenerateNewLoop(node, in Vectorize()
1223 GenerateNewLoop(node, in Vectorize()
1256 node->loop_info = vloop; in Vectorize()
1259 void HLoopOptimization::GenerateNewLoop(LoopNode* node, in GenerateNewLoop() argument
1315 bool vectorized_def = VectorizeDef(node, it.Current(), /*generate_code*/ true); in GenerateNewLoop()
1351 bool HLoopOptimization::VectorizeDef(LoopNode* node, in VectorizeDef() argument
1376 node->loop_info->IsDefinedOutOfTheLoop(base) && in VectorizeDef()
1378 VectorizeUse(node, value, generate_code, type, restrictions)) { in VectorizeDef()
1396 if (VectorizeSADIdiom(node, instruction, generate_code, type, restrictions) || in VectorizeDef()
1397 VectorizeDotProdIdiom(node, instruction, generate_code, type, restrictions) || in VectorizeDef()
1399 VectorizeUse(node, instruction, generate_code, type, restrictions))) { in VectorizeDef()
1415 return !IsUsedOutsideLoop(node->loop_info, instruction) in VectorizeDef()
1419 bool HLoopOptimization::VectorizeUse(LoopNode* node, in VectorizeUse() argument
1433 if (node->loop_info->IsDefinedOutOfTheLoop(instruction)) { in VectorizeUse()
1457 node->loop_info->IsDefinedOutOfTheLoop(base) && in VectorizeUse()
1498 VectorizeUse(node, opa, generate_code, type, restrictions | kNoHiBits)) || in VectorizeUse()
1501 VectorizeUse(node, opa, generate_code, type, restrictions))) { in VectorizeUse()
1517 VectorizeUse(node, opa, generate_code, from, restrictions)) { in VectorizeUse()
1528 if (VectorizeUse(node, opa, generate_code, type, restrictions)) { in VectorizeUse()
1545 if (VectorizeUse(node, opa, generate_code, type, restrictions) && in VectorizeUse()
1546 VectorizeUse(node, opb, generate_code, type, restrictions)) { in VectorizeUse()
1554 if (VectorizeHalvingAddIdiom(node, instruction, generate_code, type, restrictions)) { in VectorizeUse()
1583 if (VectorizeUse(node, r, generate_code, type, restrictions) && in VectorizeUse()
1610 if (VectorizeUse(node, r, generate_code, type, restrictions)) { in VectorizeUse()
2109 bool HLoopOptimization::VectorizeHalvingAddIdiom(LoopNode* node, in VectorizeHalvingAddIdiom() argument
2152 if (VectorizeUse(node, r, generate_code, type, restrictions) && in VectorizeHalvingAddIdiom()
2153 VectorizeUse(node, s, generate_code, type, restrictions)) { in VectorizeHalvingAddIdiom()
2182 bool HLoopOptimization::VectorizeSADIdiom(LoopNode* node, in VectorizeSADIdiom() argument
2227 if (VectorizeUse(node, acc, generate_code, sub_type, restrictions) && in VectorizeSADIdiom()
2228 VectorizeUse(node, r, generate_code, sub_type, restrictions) && in VectorizeSADIdiom()
2229 VectorizeUse(node, s, generate_code, sub_type, restrictions)) { in VectorizeSADIdiom()
2262 bool HLoopOptimization::VectorizeDotProdIdiom(LoopNode* node, in VectorizeDotProdIdiom() argument
2301 if (VectorizeUse(node, acc, generate_code, op_type, restrictions) && in VectorizeDotProdIdiom()
2302 VectorizeUse(node, r, generate_code, op_type, restrictions) && in VectorizeDotProdIdiom()
2303 VectorizeUse(node, s, generate_code, op_type, restrictions)) { in VectorizeDotProdIdiom()