Lines Matching refs:Clusters

23 uint64_t SwitchCG::getJumpTableRange(const CaseClusterVector &Clusters,  in getJumpTableRange()  argument
26 const APInt &LowCase = Clusters[First].Low->getValue(); in getJumpTableRange()
27 const APInt &HighCase = Clusters[Last].High->getValue(); in getJumpTableRange()
46 void SwitchCG::SwitchLowering::findJumpTables(CaseClusterVector &Clusters, in findJumpTables() argument
54 assert(!Clusters.empty()); in findJumpTables()
55 for (CaseCluster &C : Clusters) in findJumpTables()
57 for (unsigned i = 1, e = Clusters.size(); i < e; ++i) in findJumpTables()
58 assert(Clusters[i - 1].High->getValue().slt(Clusters[i].Low->getValue())); in findJumpTables()
69 const int64_t N = Clusters.size(); in findJumpTables()
76 const APInt &Hi = Clusters[i].High->getValue(); in findJumpTables()
77 const APInt &Lo = Clusters[i].Low->getValue(); in findJumpTables()
83 uint64_t Range = getJumpTableRange(Clusters,0, N - 1); in findJumpTables()
91 if (buildJumpTable(Clusters, 0, N - 1, SI, SL, DefaultMBB, JTCluster)) { in findJumpTables()
92 Clusters[0] = JTCluster; in findJumpTables()
93 Clusters.resize(1); in findJumpTables()
143 Range = getJumpTableRange(Clusters, i, j); in findJumpTables()
182 buildJumpTable(Clusters, First, Last, SI, SL, DefaultMBB, JTCluster)) { in findJumpTables()
183 Clusters[DstIndex++] = JTCluster; in findJumpTables()
186 std::memmove(&Clusters[DstIndex++], &Clusters[I], sizeof(Clusters[I])); in findJumpTables()
189 Clusters.resize(DstIndex); in findJumpTables()
192 bool SwitchCG::SwitchLowering::buildJumpTable(const CaseClusterVector &Clusters, in buildJumpTable() argument
207 JTProbs[Clusters[I].MBB] = BranchProbability::getZero(); in buildJumpTable()
210 assert(Clusters[I].Kind == CC_Range); in buildJumpTable()
211 Prob += Clusters[I].Prob; in buildJumpTable()
212 const APInt &Low = Clusters[I].Low->getValue(); in buildJumpTable()
213 const APInt &High = Clusters[I].High->getValue(); in buildJumpTable()
217 const APInt &PreviousHigh = Clusters[I - 1].High->getValue(); in buildJumpTable()
225 Table.push_back(Clusters[I].MBB); in buildJumpTable()
226 JTProbs[Clusters[I].MBB] += Clusters[I].Prob; in buildJumpTable()
231 Clusters[First].Low->getValue(), in buildJumpTable()
232 Clusters[Last].High->getValue(), *DL)) { in buildJumpTable()
258 JumpTableHeader JTH(Clusters[First].Low->getValue(), in buildJumpTable()
259 Clusters[Last].High->getValue(), SI->getCondition(), in buildJumpTable()
263 JTCluster = CaseCluster::jumpTable(Clusters[First].Low, Clusters[Last].High, in buildJumpTable()
268 void SwitchCG::SwitchLowering::findBitTestClusters(CaseClusterVector &Clusters, in findBitTestClusters() argument
275 assert(!Clusters.empty()); in findBitTestClusters()
276 assert(Clusters[0].Kind == CC_Range || Clusters[0].Kind == CC_JumpTable); in findBitTestClusters()
277 for (const CaseCluster &C : Clusters) in findBitTestClusters()
279 for (unsigned i = 1; i < Clusters.size(); ++i) in findBitTestClusters()
280 assert(Clusters[i-1].High->getValue().slt(Clusters[i].Low->getValue())); in findBitTestClusters()
293 const int64_t N = Clusters.size(); in findBitTestClusters()
319 if (!TLI->rangeFitsInWord(Clusters[i].Low->getValue(), in findBitTestClusters()
320 Clusters[j].High->getValue(), *DL)) in findBitTestClusters()
328 if (Clusters[k].Kind != CC_Range) { in findBitTestClusters()
332 Dests.set(Clusters[k].MBB->getNumber()); in findBitTestClusters()
355 if (buildBitTests(Clusters, First, Last, SI, BitTestCluster)) { in findBitTestClusters()
356 Clusters[DstIndex++] = BitTestCluster; in findBitTestClusters()
359 std::memmove(&Clusters[DstIndex], &Clusters[First], in findBitTestClusters()
360 sizeof(Clusters[0]) * NumClusters); in findBitTestClusters()
364 Clusters.resize(DstIndex); in findBitTestClusters()
367 bool SwitchCG::SwitchLowering::buildBitTests(CaseClusterVector &Clusters, in buildBitTests() argument
378 assert(Clusters[I].Kind == CC_Range); in buildBitTests()
379 Dests.set(Clusters[I].MBB->getNumber()); in buildBitTests()
380 NumCmps += (Clusters[I].Low == Clusters[I].High) ? 1 : 2; in buildBitTests()
384 APInt Low = Clusters[First].Low->getValue(); in buildBitTests()
385 APInt High = Clusters[Last].High->getValue(); in buildBitTests()
402 if (Clusters[I].Low->getValue() != Clusters[I - 1].High->getValue() + 1) { in buildBitTests()
425 if (CBV[j].BB == Clusters[i].MBB) in buildBitTests()
429 CaseBits(0, Clusters[i].MBB, 0, BranchProbability::getZero())); in buildBitTests()
433 uint64_t Lo = (Clusters[i].Low->getValue() - LowBound).getZExtValue(); in buildBitTests()
434 uint64_t Hi = (Clusters[i].High->getValue() - LowBound).getZExtValue(); in buildBitTests()
438 CB->ExtraProb += Clusters[i].Prob; in buildBitTests()
439 TotalProb += Clusters[i].Prob; in buildBitTests()
462 BTCluster = CaseCluster::bitTests(Clusters[First].Low, Clusters[Last].High, in buildBitTests()
467 void SwitchCG::sortAndRangeify(CaseClusterVector &Clusters) { in sortAndRangeify() argument
469 for (const CaseCluster &CC : Clusters) in sortAndRangeify()
473 llvm::sort(Clusters, [](const CaseCluster &a, const CaseCluster &b) { in sortAndRangeify()
478 const unsigned N = Clusters.size(); in sortAndRangeify()
481 CaseCluster &CC = Clusters[SrcIndex]; in sortAndRangeify()
485 if (DstIndex != 0 && Clusters[DstIndex - 1].MBB == Succ && in sortAndRangeify()
486 (CaseVal->getValue() - Clusters[DstIndex - 1].High->getValue()) == 1) { in sortAndRangeify()
489 Clusters[DstIndex - 1].High = CaseVal; in sortAndRangeify()
490 Clusters[DstIndex - 1].Prob += CC.Prob; in sortAndRangeify()
492 std::memmove(&Clusters[DstIndex++], &Clusters[SrcIndex], in sortAndRangeify()
493 sizeof(Clusters[SrcIndex])); in sortAndRangeify()
496 Clusters.resize(DstIndex); in sortAndRangeify()