Lines Matching defs:PN
201 Instruction &I, BasicBlock &ExitBlock, PHINode &PN, const LoopInfo *LI,
727 bool canHoistPHI(PHINode *PN) {
729 if (!ControlFlowHoisting || !CurLoop->hasLoopInvariantOperands(PN))
734 BasicBlock *BB = PN->getParent();
974 if (PHINode *PN = dyn_cast<PHINode>(&I)) {
975 if (CFH.canHoistPHI(PN)) {
978 for (unsigned int i = 0; i < PN->getNumIncomingValues(); ++i)
979 PN->setIncomingBlock(
980 i, CFH.getOrCreateHoistedBlock(PN->getIncomingBlock(i)));
981 hoist(*PN, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo,
983 assert(DT->dominates(PN, BB) && "Conditional PHIs not expected");
1346 static bool isTriviallyReplaceablePHI(const PHINode &PN, const Instruction &I) {
1347 for (const Value *IncValue : PN.incoming_values())
1393 if (const PHINode *PN = dyn_cast<PHINode>(UI)) {
1394 const BasicBlock *BB = PN->getParent();
1428 Instruction &I, BasicBlock &ExitBlock, PHINode &PN, const LoopInfo *LI,
1491 if (LI->wouldBeOutOfLoopUseRequiringLCSSA(Op.get(), PN.getParent())) {
1494 PHINode::Create(OInst->getType(), PN.getNumIncomingValues(),
1497 for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i)
1498 OpPN->addIncoming(OInst, PN.getIncomingBlock(i));
1544 static bool canSplitPredecessors(PHINode *PN, LoopSafetyInfo *SafetyInfo) {
1545 BasicBlock *BB = PN->getParent();
1562 static void splitPredecessorsOfLoopExit(PHINode *PN, DominatorTree *DT,
1572 BasicBlock *ExitBB = PN->getParent();
1614 if (PN->getBasicBlockIndex(PredBB) >= 0) {
1659 PHINode *PN = cast<PHINode>(User);
1664 BasicBlock *BB = PN->getIncomingBlock(U);
1671 VisitedUsers.insert(PN);
1672 if (isTriviallyReplaceablePHI(*PN, I))
1675 if (!canSplitPredecessors(PN, SafetyInfo))
1680 splitPredecessorsOfLoopExit(PN, DT, LI, CurLoop, SafetyInfo, &MSSAU);
1723 PHINode *PN = cast<PHINode>(User);
1724 assert(ExitBlockSet.count(PN->getParent()) &&
1729 PN, &I, LI, SunkCopies, SafetyInfo, CurLoop, MSSAU);
1732 PN->replaceAllUsesWith(New);
1733 eraseInstruction(*PN, *SafetyInfo, MSSAU);
1841 PHINode *PN = PHINode::Create(I->getType(), PredCache.size(BB),
1843 PN->insertBefore(BB->begin());
1845 PN->addIncoming(I, Pred);
1846 return PN;