Lines Matching defs:Scope
242 auto *Scope = new CHRScope(TailRegInfos, TailSubs);
245 return Scope;
296 for (CHRScope *Scope : Scopes) {
297 delete Scope;
309 if (CHRScope *Scope = findScopes(R, nullptr, nullptr, Output)) {
310 Output.push_back(Scope);
316 void checkScopeHoistable(CHRScope *Scope);
320 SmallVector<CHRScope *, 8> splitScope(CHRScope *Scope,
328 void classifyBiasedScopes(CHRScope *Scope, CHRScope *OutermostScope);
335 void setCHRRegions(CHRScope *Scope, CHRScope *OutermostScope);
341 void transformScopes(CHRScope *Scope, DenseSet<PHINode *> &TrivialPHIs);
342 void cloneScopeBlocks(CHRScope *Scope,
351 void fixupBranchesAndSelects(CHRScope *Scope, BasicBlock *PreEntryBlock,
353 void fixupBranch(Region *R, CHRScope *Scope, IRBuilder<> &IRB,
355 void fixupSelect(SelectInst *SI, CHRScope *Scope, IRBuilder<> &IRB,
358 Instruction *BranchOrSelect, CHRScope *Scope,
409 raw_ostream &operator<<(raw_ostream &OS, const CHRScope &Scope) {
410 Scope.print(OS);
499 // We don't stop at a block that's not in the Scope because we would miss
506 // I is hoistable above the Scope.
873 void CHR::checkScopeHoistable(CHRScope *Scope) {
874 RegInfo &RI = Scope->RegInfos[0];
991 CHR_DEBUG(dbgs() << "Subregion Scope " << *SubCHRScope << "\n");
993 CHR_DEBUG(dbgs() << "Subregion Scope null\n");
1106 static void getSelectsInScope(CHRScope *Scope,
1108 for (RegInfo &RI : Scope->RegInfos)
1111 for (CHRScope *Sub : Scope->Subs)
1117 for (CHRScope *Scope : Input) {
1118 assert(!Scope->BranchInsertPoint &&
1121 getSelectsInScope(Scope, Unhoistables);
1122 splitScope(Scope, nullptr, nullptr, nullptr, Output, Unhoistables);
1125 for (CHRScope *Scope : Output) {
1126 assert(Scope->BranchInsertPoint && "BranchInsertPoint must be set");
1132 CHRScope *Scope,
1149 SmallVector<RegInfo, 8> RegInfos(Scope->RegInfos); // Copy
1195 CHRScope *Tail = Scope->split(RI.R);
1197 Splits.push_back(Scope);
1201 Scope = Tail;
1218 Splits.push_back(Scope);
1262 for (CHRScope *Scope : Scopes) {
1263 assert(Scope->TrueBiasedRegions.empty() && Scope->FalseBiasedRegions.empty() && "Empty");
1264 classifyBiasedScopes(Scope, Scope);
1266 dbgs() << "classifyBiasedScopes " << *Scope << "\n";
1268 for (Region *R : Scope->TrueBiasedRegions) {
1273 for (Region *R : Scope->FalseBiasedRegions) {
1278 for (SelectInst *SI : Scope->TrueBiasedSelects) {
1283 for (SelectInst *SI : Scope->FalseBiasedSelects) {
1290 void CHR::classifyBiasedScopes(CHRScope *Scope, CHRScope *OutermostScope) {
1291 for (RegInfo &RI : Scope->RegInfos) {
1310 for (CHRScope *Sub : Scope->Subs) {
1315 static bool hasAtLeastTwoBiasedBranches(CHRScope *Scope) {
1316 unsigned NumBiased = Scope->TrueBiasedRegions.size() +
1317 Scope->FalseBiasedRegions.size() +
1318 Scope->TrueBiasedSelects.size() +
1319 Scope->FalseBiasedSelects.size();
1325 for (CHRScope *Scope : Input) {
1327 if (!hasAtLeastTwoBiasedBranches(Scope)) {
1329 << Scope->TrueBiasedRegions.size()
1330 << " falsy-regions " << Scope->FalseBiasedRegions.size()
1331 << " true-selects " << Scope->TrueBiasedSelects.size()
1332 << " false-selects " << Scope->FalseBiasedSelects.size() << "\n");
1337 Scope->RegInfos[0].R->getEntry()->getTerminator())
1344 Output.push_back(Scope);
1350 for (CHRScope *Scope : Input) {
1351 assert(Scope->HoistStopMap.empty() && Scope->CHRRegions.empty() &&
1353 setCHRRegions(Scope, Scope);
1354 Output.push_back(Scope);
1356 dbgs() << "setCHRRegions HoistStopMap " << *Scope << "\n";
1357 for (auto pair : Scope->HoistStopMap) {
1365 for (RegInfo &RI : Scope->CHRRegions) {
1371 void CHR::setCHRRegions(CHRScope *Scope, CHRScope *OutermostScope) {
1376 for (RegInfo &RI : Scope->RegInfos) {
1382 for (RegInfo &RI : Scope->RegInfos) {
1416 for (CHRScope *Sub : Scope->Subs)
1481 static void hoistScopeConditions(CHRScope *Scope, Instruction *HoistPoint,
1485 for (const RegInfo &RI : Scope->CHRRegions) {
1487 bool IsTrueBiased = Scope->TrueBiasedRegions.count(R);
1488 bool IsFalseBiased = Scope->FalseBiasedRegions.count(R);
1491 hoistValue(BI->getCondition(), HoistPoint, R, Scope->HoistStopMap,
1495 bool IsTrueBiased = Scope->TrueBiasedSelects.count(SI);
1496 bool IsFalseBiased = Scope->FalseBiasedSelects.count(SI);
1499 hoistValue(SI->getCondition(), HoistPoint, R, Scope->HoistStopMap,
1509 CHRScope *Scope) {
1536 if (Scope->TrueBiasedSelects.count(SI)) {
1537 assert(!Scope->FalseBiasedSelects.contains(SI) &&
1539 Scope->FalseBiasedSelects.insert(SI);
1540 } else if (Scope->FalseBiasedSelects.count(SI)) {
1541 assert(!Scope->TrueBiasedSelects.contains(SI) &&
1543 Scope->TrueBiasedSelects.insert(SI);
1556 static void insertTrivialPHIs(CHRScope *Scope,
1560 for (RegInfo &RI : Scope->RegInfos) {
1619 assertCHRRegionsHaveBiasedBranchOrSelect(CHRScope *Scope) {
1621 auto HasBiasedBranchOrSelect = [](RegInfo &RI, CHRScope *Scope) {
1622 if (Scope->TrueBiasedRegions.count(RI.R) ||
1623 Scope->FalseBiasedRegions.count(RI.R))
1626 if (Scope->TrueBiasedSelects.count(SI) ||
1627 Scope->FalseBiasedSelects.count(SI))
1631 for (RegInfo &RI : Scope->CHRRegions) {
1632 assert(HasBiasedBranchOrSelect(RI, Scope) &&
1641 CHRScope *Scope, BasicBlock *PreEntryBlock) {
1643 for (RegInfo &RI : Scope->CHRRegions) {
1645 bool IsTrueBiased = Scope->TrueBiasedRegions.count(R);
1646 bool IsFalseBiased = Scope->FalseBiasedRegions.count(R);
1654 !Scope->contains(I)) &&
1659 bool IsTrueBiased = Scope->TrueBiasedSelects.count(SI);
1660 bool IsFalseBiased = Scope->FalseBiasedSelects.count(SI);
1668 !Scope->contains(I)) &&
1675 void CHR::transformScopes(CHRScope *Scope, DenseSet<PHINode *> &TrivialPHIs) {
1676 CHR_DEBUG(dbgs() << "transformScopes " << *Scope << "\n");
1678 assert(Scope->RegInfos.size() >= 1 && "Should have at least one Region");
1680 for (RegInfo &RI : Scope->RegInfos) {
1696 for (RegInfo &RI : Scope->RegInfos) {
1700 Region *FirstRegion = Scope->RegInfos[0].R;
1702 Region *LastRegion = Scope->RegInfos[Scope->RegInfos.size() - 1].R;
1713 insertTrivialPHIs(Scope, EntryBlock, ExitBlock, TrivialPHIs);
1724 << " at " << *Scope->BranchInsertPoint << "\n");
1726 SplitBlock(EntryBlock, Scope->BranchInsertPoint, &DT);
1736 cloneScopeBlocks(Scope, PreEntryBlock, ExitBlock, LastRegion, VMap);
1744 assertCHRRegionsHaveBiasedBranchOrSelect(Scope);
1748 hoistScopeConditions(Scope, PreEntryBlock->getTerminator(), TrivialPHIs, DT);
1751 assertBranchOrSelectConditionHoisted(Scope, PreEntryBlock);
1756 fixupBranchesAndSelects(Scope, PreEntryBlock, MergedBr,
1763 void CHR::cloneScopeBlocks(CHRScope *Scope,
1774 for (RegInfo &RI : Scope->RegInfos)
1848 void CHR::fixupBranchesAndSelects(CHRScope *Scope,
1856 for (RegInfo &RI : Scope->CHRRegions) {
1859 fixupBranch(R, Scope, IRB, MergedCondition, CHRBranchBias);
1863 fixupSelect(SI, Scope, IRB, MergedCondition, CHRBranchBias);
1889 void CHR::fixupBranch(Region *R, CHRScope *Scope,
1893 bool IsTrueBiased = Scope->TrueBiasedRegions.count(R);
1894 assert((IsTrueBiased || Scope->FalseBiasedRegions.count(R)) &&
1919 addToMergedCondition(ConditionTrue, Cond, BI, Scope, IRB,
1932 void CHR::fixupSelect(SelectInst *SI, CHRScope *Scope,
1936 bool IsTrueBiased = Scope->TrueBiasedSelects.count(SI);
1938 Scope->FalseBiasedSelects.count(SI)) && "Must be biased");
1946 addToMergedCondition(IsTrueBiased, Cond, SI, Scope, IRB,
1957 Instruction *BranchOrSelect, CHRScope *Scope,
1965 !negateICmpIfUsedByBranchOrSelectOnly(ICmp, BranchOrSelect, Scope))
1980 for (CHRScope *Scope : CHRScopes) {
1981 transformScopes(Scope, TrivialPHIs);
1993 for (CHRScope *Scope : Scopes) {
1994 dbgs() << *Scope << "\n";