Lines Matching defs:PN
199 Instruction &I, BasicBlock &ExitBlock, PHINode &PN, const LoopInfo *LI,
726 bool canHoistPHI(PHINode *PN) {
728 if (!ControlFlowHoisting || !CurLoop->hasLoopInvariantOperands(PN))
733 BasicBlock *BB = PN->getParent();
973 if (PHINode *PN = dyn_cast<PHINode>(&I)) {
974 if (CFH.canHoistPHI(PN)) {
977 for (unsigned int i = 0; i < PN->getNumIncomingValues(); ++i)
978 PN->setIncomingBlock(
979 i, CFH.getOrCreateHoistedBlock(PN->getIncomingBlock(i)));
980 hoist(*PN, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo,
982 assert(DT->dominates(PN, BB) && "Conditional PHIs not expected");
1345 static bool isTriviallyReplaceablePHI(const PHINode &PN, const Instruction &I) {
1346 for (const Value *IncValue : PN.incoming_values())
1392 if (const PHINode *PN = dyn_cast<PHINode>(UI)) {
1393 const BasicBlock *BB = PN->getParent();
1427 Instruction &I, BasicBlock &ExitBlock, PHINode &PN, const LoopInfo *LI,
1490 if (LI->wouldBeOutOfLoopUseRequiringLCSSA(Op.get(), PN.getParent())) {
1493 PHINode::Create(OInst->getType(), PN.getNumIncomingValues(),
1496 for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i)
1497 OpPN->addIncoming(OInst, PN.getIncomingBlock(i));
1543 static bool canSplitPredecessors(PHINode *PN, LoopSafetyInfo *SafetyInfo) {
1544 BasicBlock *BB = PN->getParent();
1560 static void splitPredecessorsOfLoopExit(PHINode *PN, DominatorTree *DT,
1570 BasicBlock *ExitBB = PN->getParent();
1611 if (PN->getBasicBlockIndex(PredBB) >= 0) {
1656 PHINode *PN = cast<PHINode>(User);
1661 BasicBlock *BB = PN->getIncomingBlock(U);
1668 VisitedUsers.insert(PN);
1669 if (isTriviallyReplaceablePHI(*PN, I))
1672 if (!canSplitPredecessors(PN, SafetyInfo))
1677 splitPredecessorsOfLoopExit(PN, DT, LI, CurLoop, SafetyInfo, &MSSAU);
1720 PHINode *PN = cast<PHINode>(User);
1721 assert(ExitBlockSet.count(PN->getParent()) &&
1726 PN, &I, LI, SunkCopies, SafetyInfo, CurLoop, MSSAU);
1729 PN->replaceAllUsesWith(New);
1730 eraseInstruction(*PN, *SafetyInfo, MSSAU);
1838 PHINode *PN = PHINode::Create(I->getType(), PredCache.size(BB),
1840 PN->insertBefore(BB->begin());
1842 PN->addIncoming(I, Pred);
1843 return PN;