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
53 assert(!Clusters.empty()); in findJumpTables()
54 for (CaseCluster &C : Clusters) in findJumpTables()
56 for (unsigned i = 1, e = Clusters.size(); i < e; ++i) in findJumpTables()
57 assert(Clusters[i - 1].High->getValue().slt(Clusters[i].Low->getValue())); in findJumpTables()
68 const int64_t N = Clusters.size(); in findJumpTables()
75 const APInt &Hi = Clusters[i].High->getValue(); in findJumpTables()
76 const APInt &Lo = Clusters[i].Low->getValue(); in findJumpTables()
82 uint64_t Range = getJumpTableRange(Clusters,0, N - 1); in findJumpTables()
90 if (buildJumpTable(Clusters, 0, N - 1, SI, DefaultMBB, JTCluster)) { in findJumpTables()
91 Clusters[0] = JTCluster; in findJumpTables()
92 Clusters.resize(1); in findJumpTables()
141 Range = getJumpTableRange(Clusters, i, j); in findJumpTables()
180 buildJumpTable(Clusters, First, Last, SI, DefaultMBB, JTCluster)) { in findJumpTables()
181 Clusters[DstIndex++] = JTCluster; in findJumpTables()
184 std::memmove(&Clusters[DstIndex++], &Clusters[I], sizeof(Clusters[I])); in findJumpTables()
187 Clusters.resize(DstIndex); in findJumpTables()
190 bool SwitchCG::SwitchLowering::buildJumpTable(const CaseClusterVector &Clusters, in buildJumpTable() argument
204 JTProbs[Clusters[I].MBB] = BranchProbability::getZero(); in buildJumpTable()
207 assert(Clusters[I].Kind == CC_Range); in buildJumpTable()
208 Prob += Clusters[I].Prob; in buildJumpTable()
209 const APInt &Low = Clusters[I].Low->getValue(); in buildJumpTable()
210 const APInt &High = Clusters[I].High->getValue(); in buildJumpTable()
214 const APInt &PreviousHigh = Clusters[I - 1].High->getValue(); in buildJumpTable()
222 Table.push_back(Clusters[I].MBB); in buildJumpTable()
223 JTProbs[Clusters[I].MBB] += Clusters[I].Prob; in buildJumpTable()
228 Clusters[First].Low->getValue(), in buildJumpTable()
229 Clusters[Last].High->getValue(), *DL)) { in buildJumpTable()
255 JumpTableHeader JTH(Clusters[First].Low->getValue(), in buildJumpTable()
256 Clusters[Last].High->getValue(), SI->getCondition(), in buildJumpTable()
260 JTCluster = CaseCluster::jumpTable(Clusters[First].Low, Clusters[Last].High, in buildJumpTable()
265 void SwitchCG::SwitchLowering::findBitTestClusters(CaseClusterVector &Clusters, in findBitTestClusters() argument
272 assert(!Clusters.empty()); in findBitTestClusters()
273 assert(Clusters[0].Kind == CC_Range || Clusters[0].Kind == CC_JumpTable); in findBitTestClusters()
274 for (const CaseCluster &C : Clusters) in findBitTestClusters()
276 for (unsigned i = 1; i < Clusters.size(); ++i) in findBitTestClusters()
277 assert(Clusters[i-1].High->getValue().slt(Clusters[i].Low->getValue())); in findBitTestClusters()
290 const int64_t N = Clusters.size(); in findBitTestClusters()
316 if (!TLI->rangeFitsInWord(Clusters[i].Low->getValue(), in findBitTestClusters()
317 Clusters[j].High->getValue(), *DL)) in findBitTestClusters()
325 if (Clusters[k].Kind != CC_Range) { in findBitTestClusters()
329 Dests.set(Clusters[k].MBB->getNumber()); in findBitTestClusters()
352 if (buildBitTests(Clusters, First, Last, SI, BitTestCluster)) { in findBitTestClusters()
353 Clusters[DstIndex++] = BitTestCluster; in findBitTestClusters()
356 std::memmove(&Clusters[DstIndex], &Clusters[First], in findBitTestClusters()
357 sizeof(Clusters[0]) * NumClusters); in findBitTestClusters()
361 Clusters.resize(DstIndex); in findBitTestClusters()
364 bool SwitchCG::SwitchLowering::buildBitTests(CaseClusterVector &Clusters, in buildBitTests() argument
375 assert(Clusters[I].Kind == CC_Range); in buildBitTests()
376 Dests.set(Clusters[I].MBB->getNumber()); in buildBitTests()
377 NumCmps += (Clusters[I].Low == Clusters[I].High) ? 1 : 2; in buildBitTests()
381 APInt Low = Clusters[First].Low->getValue(); in buildBitTests()
382 APInt High = Clusters[Last].High->getValue(); in buildBitTests()
399 if (Clusters[I].Low->getValue() != Clusters[I - 1].High->getValue() + 1) { in buildBitTests()
422 if (CBV[j].BB == Clusters[i].MBB) in buildBitTests()
426 CaseBits(0, Clusters[i].MBB, 0, BranchProbability::getZero())); in buildBitTests()
430 uint64_t Lo = (Clusters[i].Low->getValue() - LowBound).getZExtValue(); in buildBitTests()
431 uint64_t Hi = (Clusters[i].High->getValue() - LowBound).getZExtValue(); in buildBitTests()
435 CB->ExtraProb += Clusters[i].Prob; in buildBitTests()
436 TotalProb += Clusters[i].Prob; in buildBitTests()
459 BTCluster = CaseCluster::bitTests(Clusters[First].Low, Clusters[Last].High, in buildBitTests()
464 void SwitchCG::sortAndRangeify(CaseClusterVector &Clusters) { in sortAndRangeify() argument
466 for (const CaseCluster &CC : Clusters) in sortAndRangeify()
470 llvm::sort(Clusters, [](const CaseCluster &a, const CaseCluster &b) { in sortAndRangeify()
475 const unsigned N = Clusters.size(); in sortAndRangeify()
478 CaseCluster &CC = Clusters[SrcIndex]; in sortAndRangeify()
482 if (DstIndex != 0 && Clusters[DstIndex - 1].MBB == Succ && in sortAndRangeify()
483 (CaseVal->getValue() - Clusters[DstIndex - 1].High->getValue()) == 1) { in sortAndRangeify()
486 Clusters[DstIndex - 1].High = CaseVal; in sortAndRangeify()
487 Clusters[DstIndex - 1].Prob += CC.Prob; in sortAndRangeify()
489 std::memmove(&Clusters[DstIndex++], &Clusters[SrcIndex], in sortAndRangeify()
490 sizeof(Clusters[SrcIndex])); in sortAndRangeify()
493 Clusters.resize(DstIndex); in sortAndRangeify()