Lines Matching refs:Clusters

2588 void SelectionDAGBuilder::sortAndRangeify(CaseClusterVector &Clusters) {  in sortAndRangeify()  argument
2590 for (const CaseCluster &CC : Clusters) in sortAndRangeify()
2594 llvm::sort(Clusters, [](const CaseCluster &a, const CaseCluster &b) { in sortAndRangeify()
2599 const unsigned N = Clusters.size(); in sortAndRangeify()
2602 CaseCluster &CC = Clusters[SrcIndex]; in sortAndRangeify()
2606 if (DstIndex != 0 && Clusters[DstIndex - 1].MBB == Succ && in sortAndRangeify()
2607 (CaseVal->getValue() - Clusters[DstIndex - 1].High->getValue()) == 1) { in sortAndRangeify()
2610 Clusters[DstIndex - 1].High = CaseVal; in sortAndRangeify()
2611 Clusters[DstIndex - 1].Prob += CC.Prob; in sortAndRangeify()
2613 std::memmove(&Clusters[DstIndex++], &Clusters[SrcIndex], in sortAndRangeify()
2614 sizeof(Clusters[SrcIndex])); in sortAndRangeify()
2617 Clusters.resize(DstIndex); in sortAndRangeify()
9438 SelectionDAGBuilder::getJumpTableRange(const CaseClusterVector &Clusters, in getJumpTableRange() argument
9441 const APInt &LowCase = Clusters[First].Low->getValue(); in getJumpTableRange()
9442 const APInt &HighCase = Clusters[Last].High->getValue(); in getJumpTableRange()
9462 bool SelectionDAGBuilder::buildJumpTable(const CaseClusterVector &Clusters, in buildJumpTable() argument
9476 JTProbs[Clusters[I].MBB] = BranchProbability::getZero(); in buildJumpTable()
9479 assert(Clusters[I].Kind == CC_Range); in buildJumpTable()
9480 Prob += Clusters[I].Prob; in buildJumpTable()
9481 const APInt &Low = Clusters[I].Low->getValue(); in buildJumpTable()
9482 const APInt &High = Clusters[I].High->getValue(); in buildJumpTable()
9486 const APInt &PreviousHigh = Clusters[I - 1].High->getValue(); in buildJumpTable()
9494 Table.push_back(Clusters[I].MBB); in buildJumpTable()
9495 JTProbs[Clusters[I].MBB] += Clusters[I].Prob; in buildJumpTable()
9501 NumDests, NumCmps, Clusters[First].Low->getValue(), in buildJumpTable()
9502 Clusters[Last].High->getValue(), DAG.getDataLayout())) { in buildJumpTable()
9528 JumpTableHeader JTH(Clusters[First].Low->getValue(), in buildJumpTable()
9529 Clusters[Last].High->getValue(), SI->getCondition(), in buildJumpTable()
9533 JTCluster = CaseCluster::jumpTable(Clusters[First].Low, Clusters[Last].High, in buildJumpTable()
9538 void SelectionDAGBuilder::findJumpTables(CaseClusterVector &Clusters, in findJumpTables() argument
9543 assert(!Clusters.empty()); in findJumpTables()
9544 for (CaseCluster &C : Clusters) in findJumpTables()
9546 for (unsigned i = 1, e = Clusters.size(); i < e; ++i) in findJumpTables()
9547 assert(Clusters[i - 1].High->getValue().slt(Clusters[i].Low->getValue())); in findJumpTables()
9554 const int64_t N = Clusters.size(); in findJumpTables()
9564 const APInt &Hi = Clusters[i].High->getValue(); in findJumpTables()
9565 const APInt &Lo = Clusters[i].Low->getValue(); in findJumpTables()
9572 uint64_t Range = getJumpTableRange(Clusters,0, N - 1); in findJumpTables()
9578 if (buildJumpTable(Clusters, 0, N - 1, SI, DefaultMBB, JTCluster)) { in findJumpTables()
9579 Clusters[0] = JTCluster; in findJumpTables()
9580 Clusters.resize(1); in findJumpTables()
9629 uint64_t Range = getJumpTableRange(Clusters, i, j); in findJumpTables()
9667 buildJumpTable(Clusters, First, Last, SI, DefaultMBB, JTCluster)) { in findJumpTables()
9668 Clusters[DstIndex++] = JTCluster; in findJumpTables()
9671 std::memmove(&Clusters[DstIndex++], &Clusters[I], sizeof(Clusters[I])); in findJumpTables()
9674 Clusters.resize(DstIndex); in findJumpTables()
9677 bool SelectionDAGBuilder::buildBitTests(CaseClusterVector &Clusters, in buildBitTests() argument
9688 assert(Clusters[I].Kind == CC_Range); in buildBitTests()
9689 Dests.set(Clusters[I].MBB->getNumber()); in buildBitTests()
9690 NumCmps += (Clusters[I].Low == Clusters[I].High) ? 1 : 2; in buildBitTests()
9694 APInt Low = Clusters[First].Low->getValue(); in buildBitTests()
9695 APInt High = Clusters[Last].High->getValue(); in buildBitTests()
9714 if (Clusters[I].Low->getValue() != Clusters[I - 1].High->getValue() + 1) { in buildBitTests()
9737 if (CBV[j].BB == Clusters[i].MBB) in buildBitTests()
9741 CaseBits(0, Clusters[i].MBB, 0, BranchProbability::getZero())); in buildBitTests()
9745 uint64_t Lo = (Clusters[i].Low->getValue() - LowBound).getZExtValue(); in buildBitTests()
9746 uint64_t Hi = (Clusters[i].High->getValue() - LowBound).getZExtValue(); in buildBitTests()
9750 CB->ExtraProb += Clusters[i].Prob; in buildBitTests()
9751 TotalProb += Clusters[i].Prob; in buildBitTests()
9774 BTCluster = CaseCluster::bitTests(Clusters[First].Low, Clusters[Last].High, in buildBitTests()
9779 void SelectionDAGBuilder::findBitTestClusters(CaseClusterVector &Clusters, in findBitTestClusters() argument
9786 assert(!Clusters.empty()); in findBitTestClusters()
9787 assert(Clusters[0].Kind == CC_Range || Clusters[0].Kind == CC_JumpTable); in findBitTestClusters()
9788 for (const CaseCluster &C : Clusters) in findBitTestClusters()
9790 for (unsigned i = 1; i < Clusters.size(); ++i) in findBitTestClusters()
9791 assert(Clusters[i-1].High->getValue().slt(Clusters[i].Low->getValue())); in findBitTestClusters()
9807 const int64_t N = Clusters.size(); in findBitTestClusters()
9833 if (!TLI.rangeFitsInWord(Clusters[i].Low->getValue(), in findBitTestClusters()
9834 Clusters[j].High->getValue(), DL)) in findBitTestClusters()
9842 if (Clusters[k].Kind != CC_Range) { in findBitTestClusters()
9846 Dests.set(Clusters[k].MBB->getNumber()); in findBitTestClusters()
9869 if (buildBitTests(Clusters, First, Last, SI, BitTestCluster)) { in findBitTestClusters()
9870 Clusters[DstIndex++] = BitTestCluster; in findBitTestClusters()
9873 std::memmove(&Clusters[DstIndex], &Clusters[First], in findBitTestClusters()
9874 sizeof(Clusters[0]) * NumClusters); in findBitTestClusters()
9878 Clusters.resize(DstIndex); in findBitTestClusters()
10264 const SwitchInst &SI, CaseClusterVector &Clusters, in peelDominantCaseCluster() argument
10268 if (SwitchPeelThreshold > 100 || !FuncInfo.BPI || Clusters.size() < 2 || in peelDominantCaseCluster()
10276 for (unsigned Index = 0; Index < Clusters.size(); ++Index) { in peelDominantCaseCluster()
10277 CaseCluster &CC = Clusters[Index]; in peelDominantCaseCluster()
10298 auto PeeledCaseIt = Clusters.begin() + PeeledCaseIndex; in peelDominantCaseCluster()
10303 Clusters.erase(PeeledCaseIt); in peelDominantCaseCluster()
10304 for (CaseCluster &CC : Clusters) { in peelDominantCaseCluster()
10318 CaseClusterVector Clusters; in visitSwitch() local
10319 Clusters.reserve(SI.getNumCases()); in visitSwitch()
10326 Clusters.push_back(CaseCluster::range(CaseVal, CaseVal, Succ, Prob)); in visitSwitch()
10334 sortAndRangeify(Clusters); in visitSwitch()
10341 if (UnreachableDefault && !Clusters.empty()) { in visitSwitch()
10359 New.reserve(Clusters.size()); in visitSwitch()
10360 for (CaseCluster &CC : Clusters) { in visitSwitch()
10364 Clusters = std::move(New); in visitSwitch()
10371 peelDominantCaseCluster(SI, Clusters, PeeledCaseProb); in visitSwitch()
10375 if (Clusters.empty()) { in visitSwitch()
10385 findJumpTables(Clusters, &SI, DefaultMBB); in visitSwitch()
10386 findBitTestClusters(Clusters, &SI); in visitSwitch()
10390 for (const CaseCluster &C : Clusters) { in visitSwitch()
10406 assert(!Clusters.empty()); in visitSwitch()
10408 CaseClusterIt First = Clusters.begin(); in visitSwitch()
10409 CaseClusterIt Last = Clusters.end() - 1; in visitSwitch()