Lines Matching defs:Scope
241 auto *Scope = new CHRScope(TailRegInfos, TailSubs);
244 return Scope;
294 for (CHRScope *Scope : Scopes) {
295 delete Scope;
307 if (CHRScope *Scope = findScopes(R, nullptr, nullptr, Output)) {
308 Output.push_back(Scope);
314 void checkScopeHoistable(CHRScope *Scope);
318 SmallVector<CHRScope *, 8> splitScope(CHRScope *Scope,
326 void classifyBiasedScopes(CHRScope *Scope, CHRScope *OutermostScope);
333 void setCHRRegions(CHRScope *Scope, CHRScope *OutermostScope);
339 void transformScopes(CHRScope *Scope, DenseSet<PHINode *> &TrivialPHIs);
340 void cloneScopeBlocks(CHRScope *Scope,
349 void fixupBranchesAndSelects(CHRScope *Scope, BasicBlock *PreEntryBlock,
351 void fixupBranch(Region *R, CHRScope *Scope, IRBuilder<> &IRB,
353 void fixupSelect(SelectInst *SI, CHRScope *Scope, IRBuilder<> &IRB,
356 Instruction *BranchOrSelect, CHRScope *Scope,
407 raw_ostream &operator<<(raw_ostream &OS, const CHRScope &Scope) {
408 Scope.print(OS);
497 // We don't stop at a block that's not in the Scope because we would miss
504 // I is hoistable above the Scope.
871 void CHR::checkScopeHoistable(CHRScope *Scope) {
872 RegInfo &RI = Scope->RegInfos[0];
989 CHR_DEBUG(dbgs() << "Subregion Scope " << *SubCHRScope << "\n");
991 CHR_DEBUG(dbgs() << "Subregion Scope null\n");
1104 static void getSelectsInScope(CHRScope *Scope,
1106 for (RegInfo &RI : Scope->RegInfos)
1109 for (CHRScope *Sub : Scope->Subs)
1115 for (CHRScope *Scope : Input) {
1116 assert(!Scope->BranchInsertPoint &&
1119 getSelectsInScope(Scope, Unhoistables);
1120 splitScope(Scope, nullptr, nullptr, nullptr, Output, Unhoistables);
1123 for (CHRScope *Scope : Output) {
1124 assert(Scope->BranchInsertPoint && "BranchInsertPoint must be set");
1130 CHRScope *Scope,
1147 SmallVector<RegInfo, 8> RegInfos(Scope->RegInfos); // Copy
1193 CHRScope *Tail = Scope->split(RI.R);
1195 Splits.push_back(Scope);
1199 Scope = Tail;
1216 Splits.push_back(Scope);
1260 for (CHRScope *Scope : Scopes) {
1261 assert(Scope->TrueBiasedRegions.empty() && Scope->FalseBiasedRegions.empty() && "Empty");
1262 classifyBiasedScopes(Scope, Scope);
1264 dbgs() << "classifyBiasedScopes " << *Scope << "\n";
1266 for (Region *R : Scope->TrueBiasedRegions) {
1271 for (Region *R : Scope->FalseBiasedRegions) {
1276 for (SelectInst *SI : Scope->TrueBiasedSelects) {
1281 for (SelectInst *SI : Scope->FalseBiasedSelects) {
1288 void CHR::classifyBiasedScopes(CHRScope *Scope, CHRScope *OutermostScope) {
1289 for (RegInfo &RI : Scope->RegInfos) {
1308 for (CHRScope *Sub : Scope->Subs) {
1313 static bool hasAtLeastTwoBiasedBranches(CHRScope *Scope) {
1314 unsigned NumBiased = Scope->TrueBiasedRegions.size() +
1315 Scope->FalseBiasedRegions.size() +
1316 Scope->TrueBiasedSelects.size() +
1317 Scope->FalseBiasedSelects.size();
1323 for (CHRScope *Scope : Input) {
1325 if (!hasAtLeastTwoBiasedBranches(Scope)) {
1327 << Scope->TrueBiasedRegions.size()
1328 << " falsy-regions " << Scope->FalseBiasedRegions.size()
1329 << " true-selects " << Scope->TrueBiasedSelects.size()
1330 << " false-selects " << Scope->FalseBiasedSelects.size() << "\n");
1335 Scope->RegInfos[0].R->getEntry()->getTerminator())
1342 Output.push_back(Scope);
1348 for (CHRScope *Scope : Input) {
1349 assert(Scope->HoistStopMap.empty() && Scope->CHRRegions.empty() &&
1351 setCHRRegions(Scope, Scope);
1352 Output.push_back(Scope);
1354 dbgs() << "setCHRRegions HoistStopMap " << *Scope << "\n";
1355 for (auto pair : Scope->HoistStopMap) {
1363 for (RegInfo &RI : Scope->CHRRegions) {
1369 void CHR::setCHRRegions(CHRScope *Scope, CHRScope *OutermostScope) {
1374 for (RegInfo &RI : Scope->RegInfos) {
1380 for (RegInfo &RI : Scope->RegInfos) {
1414 for (CHRScope *Sub : Scope->Subs)
1479 static void hoistScopeConditions(CHRScope *Scope, Instruction *HoistPoint,
1483 for (const RegInfo &RI : Scope->CHRRegions) {
1485 bool IsTrueBiased = Scope->TrueBiasedRegions.count(R);
1486 bool IsFalseBiased = Scope->FalseBiasedRegions.count(R);
1489 hoistValue(BI->getCondition(), HoistPoint, R, Scope->HoistStopMap,
1493 bool IsTrueBiased = Scope->TrueBiasedSelects.count(SI);
1494 bool IsFalseBiased = Scope->FalseBiasedSelects.count(SI);
1497 hoistValue(SI->getCondition(), HoistPoint, R, Scope->HoistStopMap,
1507 CHRScope *Scope) {
1534 if (Scope->TrueBiasedSelects.count(SI)) {
1535 assert(!Scope->FalseBiasedSelects.contains(SI) &&
1537 Scope->FalseBiasedSelects.insert(SI);
1538 } else if (Scope->FalseBiasedSelects.count(SI)) {
1539 assert(!Scope->TrueBiasedSelects.contains(SI) &&
1541 Scope->TrueBiasedSelects.insert(SI);
1554 static void insertTrivialPHIs(CHRScope *Scope,
1558 for (RegInfo &RI : Scope->RegInfos) {
1617 assertCHRRegionsHaveBiasedBranchOrSelect(CHRScope *Scope) {
1619 auto HasBiasedBranchOrSelect = [](RegInfo &RI, CHRScope *Scope) {
1620 if (Scope->TrueBiasedRegions.count(RI.R) ||
1621 Scope->FalseBiasedRegions.count(RI.R))
1624 if (Scope->TrueBiasedSelects.count(SI) ||
1625 Scope->FalseBiasedSelects.count(SI))
1629 for (RegInfo &RI : Scope->CHRRegions) {
1630 assert(HasBiasedBranchOrSelect(RI, Scope) &&
1639 CHRScope *Scope, BasicBlock *PreEntryBlock) {
1641 for (RegInfo &RI : Scope->CHRRegions) {
1643 bool IsTrueBiased = Scope->TrueBiasedRegions.count(R);
1644 bool IsFalseBiased = Scope->FalseBiasedRegions.count(R);
1652 !Scope->contains(I)) &&
1657 bool IsTrueBiased = Scope->TrueBiasedSelects.count(SI);
1658 bool IsFalseBiased = Scope->FalseBiasedSelects.count(SI);
1666 !Scope->contains(I)) &&
1673 void CHR::transformScopes(CHRScope *Scope, DenseSet<PHINode *> &TrivialPHIs) {
1674 CHR_DEBUG(dbgs() << "transformScopes " << *Scope << "\n");
1676 assert(Scope->RegInfos.size() >= 1 && "Should have at least one Region");
1678 for (RegInfo &RI : Scope->RegInfos) {
1694 for (RegInfo &RI : Scope->RegInfos) {
1698 Region *FirstRegion = Scope->RegInfos[0].R;
1700 Region *LastRegion = Scope->RegInfos[Scope->RegInfos.size() - 1].R;
1711 insertTrivialPHIs(Scope, EntryBlock, ExitBlock, TrivialPHIs);
1722 << " at " << *Scope->BranchInsertPoint << "\n");
1724 SplitBlock(EntryBlock, Scope->BranchInsertPoint, &DT);
1734 cloneScopeBlocks(Scope, PreEntryBlock, ExitBlock, LastRegion, VMap);
1742 assertCHRRegionsHaveBiasedBranchOrSelect(Scope);
1746 hoistScopeConditions(Scope, PreEntryBlock->getTerminator(), TrivialPHIs, DT);
1749 assertBranchOrSelectConditionHoisted(Scope, PreEntryBlock);
1754 fixupBranchesAndSelects(Scope, PreEntryBlock, MergedBr,
1761 void CHR::cloneScopeBlocks(CHRScope *Scope,
1772 for (RegInfo &RI : Scope->RegInfos)
1846 void CHR::fixupBranchesAndSelects(CHRScope *Scope,
1854 for (RegInfo &RI : Scope->CHRRegions) {
1857 fixupBranch(R, Scope, IRB, MergedCondition, CHRBranchBias);
1861 fixupSelect(SI, Scope, IRB, MergedCondition, CHRBranchBias);
1888 void CHR::fixupBranch(Region *R, CHRScope *Scope,
1892 bool IsTrueBiased = Scope->TrueBiasedRegions.count(R);
1893 assert((IsTrueBiased || Scope->FalseBiasedRegions.count(R)) &&
1918 addToMergedCondition(ConditionTrue, Cond, BI, Scope, IRB,
1931 void CHR::fixupSelect(SelectInst *SI, CHRScope *Scope,
1935 bool IsTrueBiased = Scope->TrueBiasedSelects.count(SI);
1937 Scope->FalseBiasedSelects.count(SI)) && "Must be biased");
1945 addToMergedCondition(IsTrueBiased, Cond, SI, Scope, IRB,
1956 Instruction *BranchOrSelect, CHRScope *Scope,
1964 !negateICmpIfUsedByBranchOrSelectOnly(ICmp, BranchOrSelect, Scope))
1979 for (CHRScope *Scope : CHRScopes) {
1980 transformScopes(Scope, TrivialPHIs);
1992 for (CHRScope *Scope : Scopes) {
1993 dbgs() << *Scope << "\n";