• Home
  • Raw
  • Download

Lines Matching refs:PN

24 Instruction *InstCombiner::FoldPHIArgBinOpIntoPHI(PHINode &PN) {  in FoldPHIArgBinOpIntoPHI()  argument
25 Instruction *FirstInst = cast<Instruction>(PN.getIncomingValue(0)); in FoldPHIArgBinOpIntoPHI()
44 for (unsigned i = 1; i != PN.getNumIncomingValues(); ++i) { in FoldPHIArgBinOpIntoPHI()
45 Instruction *I = dyn_cast<Instruction>(PN.getIncomingValue(i)); in FoldPHIArgBinOpIntoPHI()
83 NewLHS = PHINode::Create(LHSType, PN.getNumIncomingValues(), in FoldPHIArgBinOpIntoPHI()
85 NewLHS->addIncoming(InLHS, PN.getIncomingBlock(0)); in FoldPHIArgBinOpIntoPHI()
86 InsertNewInstBefore(NewLHS, PN); in FoldPHIArgBinOpIntoPHI()
91 NewRHS = PHINode::Create(RHSType, PN.getNumIncomingValues(), in FoldPHIArgBinOpIntoPHI()
93 NewRHS->addIncoming(InRHS, PN.getIncomingBlock(0)); in FoldPHIArgBinOpIntoPHI()
94 InsertNewInstBefore(NewRHS, PN); in FoldPHIArgBinOpIntoPHI()
100 for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) { in FoldPHIArgBinOpIntoPHI()
101 Instruction *InInst = cast<Instruction>(PN.getIncomingValue(i)); in FoldPHIArgBinOpIntoPHI()
104 NewLHS->addIncoming(NewInLHS, PN.getIncomingBlock(i)); in FoldPHIArgBinOpIntoPHI()
108 NewRHS->addIncoming(NewInRHS, PN.getIncomingBlock(i)); in FoldPHIArgBinOpIntoPHI()
130 Instruction *InstCombiner::FoldPHIArgGEPIntoPHI(PHINode &PN) { in FoldPHIArgGEPIntoPHI() argument
131 GetElementPtrInst *FirstInst =cast<GetElementPtrInst>(PN.getIncomingValue(0)); in FoldPHIArgGEPIntoPHI()
147 for (unsigned i = 1; i != PN.getNumIncomingValues(); ++i) { in FoldPHIArgGEPIntoPHI()
148 GetElementPtrInst *GEP= dyn_cast<GetElementPtrInst>(PN.getIncomingValue(i)); in FoldPHIArgGEPIntoPHI()
209 InsertNewInstBefore(NewPN, PN); in FoldPHIArgGEPIntoPHI()
211 NewPN->addIncoming(FirstOp, PN.getIncomingBlock(0)); in FoldPHIArgGEPIntoPHI()
220 for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) { in FoldPHIArgGEPIntoPHI()
221 GetElementPtrInst *InGEP =cast<GetElementPtrInst>(PN.getIncomingValue(i)); in FoldPHIArgGEPIntoPHI()
222 BasicBlock *InBB = PN.getIncomingBlock(i); in FoldPHIArgGEPIntoPHI()
287 Instruction *InstCombiner::FoldPHIArgLoadIntoPHI(PHINode &PN) { in FoldPHIArgLoadIntoPHI() argument
288 LoadInst *FirstLI = cast<LoadInst>(PN.getIncomingValue(0)); in FoldPHIArgLoadIntoPHI()
306 if (FirstLI->getParent() != PN.getIncomingBlock(0) || in FoldPHIArgLoadIntoPHI()
318 for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) { in FoldPHIArgLoadIntoPHI()
319 LoadInst *LI = dyn_cast<LoadInst>(PN.getIncomingValue(i)); in FoldPHIArgLoadIntoPHI()
326 LI->getParent() != PN.getIncomingBlock(i) || in FoldPHIArgLoadIntoPHI()
349 PN.getNumIncomingValues(), in FoldPHIArgLoadIntoPHI()
350 PN.getName()+".in"); in FoldPHIArgLoadIntoPHI()
353 NewPN->addIncoming(InVal, PN.getIncomingBlock(0)); in FoldPHIArgLoadIntoPHI()
356 for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) { in FoldPHIArgLoadIntoPHI()
357 Value *NewInVal = cast<LoadInst>(PN.getIncomingValue(i))->getOperand(0); in FoldPHIArgLoadIntoPHI()
360 NewPN->addIncoming(NewInVal, PN.getIncomingBlock(i)); in FoldPHIArgLoadIntoPHI()
370 InsertNewInstBefore(NewPN, PN); in FoldPHIArgLoadIntoPHI()
378 for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i) in FoldPHIArgLoadIntoPHI()
379 cast<LoadInst>(PN.getIncomingValue(i))->setVolatile(false); in FoldPHIArgLoadIntoPHI()
391 Instruction *InstCombiner::FoldPHIArgOpIntoPHI(PHINode &PN) { in FoldPHIArgOpIntoPHI() argument
392 Instruction *FirstInst = cast<Instruction>(PN.getIncomingValue(0)); in FoldPHIArgOpIntoPHI()
395 return FoldPHIArgGEPIntoPHI(PN); in FoldPHIArgOpIntoPHI()
397 return FoldPHIArgLoadIntoPHI(PN); in FoldPHIArgOpIntoPHI()
412 if (PN.getType()->isIntegerTy() && CastSrcTy->isIntegerTy()) { in FoldPHIArgOpIntoPHI()
413 if (!ShouldChangeType(PN.getType(), CastSrcTy)) in FoldPHIArgOpIntoPHI()
421 return FoldPHIArgBinOpIntoPHI(PN); in FoldPHIArgOpIntoPHI()
435 for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) { in FoldPHIArgOpIntoPHI()
436 Instruction *I = dyn_cast<Instruction>(PN.getIncomingValue(i)); in FoldPHIArgOpIntoPHI()
457 PN.getNumIncomingValues(), in FoldPHIArgOpIntoPHI()
458 PN.getName()+".in"); in FoldPHIArgOpIntoPHI()
461 NewPN->addIncoming(InVal, PN.getIncomingBlock(0)); in FoldPHIArgOpIntoPHI()
464 for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) { in FoldPHIArgOpIntoPHI()
465 Value *NewInVal = cast<Instruction>(PN.getIncomingValue(i))->getOperand(0); in FoldPHIArgOpIntoPHI()
468 NewPN->addIncoming(NewInVal, PN.getIncomingBlock(i)); in FoldPHIArgOpIntoPHI()
478 InsertNewInstBefore(NewPN, PN); in FoldPHIArgOpIntoPHI()
485 PN.getType()); in FoldPHIArgOpIntoPHI()
508 static bool DeadPHICycle(PHINode *PN, in DeadPHICycle() argument
510 if (PN->use_empty()) return true; in DeadPHICycle()
511 if (!PN->hasOneUse()) return false; in DeadPHICycle()
514 if (!PotentiallyDeadPHIs.insert(PN)) in DeadPHICycle()
521 if (PHINode *PU = dyn_cast<PHINode>(PN->use_back())) in DeadPHICycle()
530 static bool PHIsEqualValue(PHINode *PN, Value *NonPhiInVal, in PHIsEqualValue() argument
533 if (!ValueEqualPHIs.insert(PN)) in PHIsEqualValue()
542 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) { in PHIsEqualValue()
543 Value *Op = PN->getIncomingValue(i); in PHIsEqualValue()
575 PHINode *PN; // The PHI that was lowered. member
580 : PN(pn), Shift(Sh), Width(Ty->getPrimitiveSizeInBits()) {} in LoweredPHIRecord()
584 : PN(pn), Shift(Sh), Width(0) {} in LoweredPHIRecord()
598 return DenseMapInfo<PHINode*>::getHashValue(Val.PN) ^ (Val.Shift>>3) ^ in getHashValue()
603 return LHS.PN == RHS.PN && LHS.Shift == RHS.Shift && in isEqual()
636 PHINode *PN = PHIsToSlice[PHIId]; in SliceUpIllegalIntegerPHI() local
642 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) { in SliceUpIllegalIntegerPHI()
643 InvokeInst *II = dyn_cast<InvokeInst>(PN->getIncomingValue(i)); in SliceUpIllegalIntegerPHI()
645 if (II->getParent() != PN->getIncomingBlock(i)) in SliceUpIllegalIntegerPHI()
655 for (Value::use_iterator UI = PN->use_begin(), E = PN->use_end(); in SliceUpIllegalIntegerPHI()
706 PHINode *PN = PHIsToSlice[PHIId]; in SliceUpIllegalIntegerPHI() local
714 if ((EltPHI = ExtractedVals[LoweredPHIRecord(PN, Offset, Ty)]) == 0) { in SliceUpIllegalIntegerPHI()
717 EltPHI = PHINode::Create(Ty, PN->getNumIncomingValues(), in SliceUpIllegalIntegerPHI()
718 PN->getName()+".off"+Twine(Offset), PN); in SliceUpIllegalIntegerPHI()
719 assert(EltPHI->getType() != PN->getType() && in SliceUpIllegalIntegerPHI()
722 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) { in SliceUpIllegalIntegerPHI()
723 BasicBlock *Pred = PN->getIncomingBlock(i); in SliceUpIllegalIntegerPHI()
733 Value *InVal = PN->getIncomingValue(i); in SliceUpIllegalIntegerPHI()
734 if (InVal == PN) { in SliceUpIllegalIntegerPHI()
740 if (PHINode *InPHI = dyn_cast<PHINode>(PN)) { in SliceUpIllegalIntegerPHI()
764 if (PHINode *OldInVal = dyn_cast<PHINode>(PN->getIncomingValue(i))) in SliceUpIllegalIntegerPHI()
777 ExtractedVals[LoweredPHIRecord(PN, Offset, Ty)] = EltPHI; in SliceUpIllegalIntegerPHI()
794 Instruction *InstCombiner::visitPHINode(PHINode &PN) { in visitPHINode() argument
795 if (Value *V = SimplifyInstruction(&PN, TD)) in visitPHINode()
796 return ReplaceInstUsesWith(PN, V); in visitPHINode()
800 if (isa<Instruction>(PN.getIncomingValue(0)) && in visitPHINode()
801 isa<Instruction>(PN.getIncomingValue(1)) && in visitPHINode()
802 cast<Instruction>(PN.getIncomingValue(0))->getOpcode() == in visitPHINode()
803 cast<Instruction>(PN.getIncomingValue(1))->getOpcode() && in visitPHINode()
806 PN.getIncomingValue(0)->hasOneUse()) in visitPHINode()
807 if (Instruction *Result = FoldPHIArgOpIntoPHI(PN)) in visitPHINode()
813 if (PN.hasOneUse()) { in visitPHINode()
814 Instruction *PHIUser = cast<Instruction>(PN.use_back()); in visitPHINode()
817 PotentiallyDeadPHIs.insert(&PN); in visitPHINode()
819 return ReplaceInstUsesWith(PN, UndefValue::get(PN.getType())); in visitPHINode()
830 PHIUser->use_back() == &PN) { in visitPHINode()
831 return ReplaceInstUsesWith(PN, UndefValue::get(PN.getType())); in visitPHINode()
842 unsigned InValNo = 0, NumIncomingVals = PN.getNumIncomingValues(); in visitPHINode()
845 isa<PHINode>(PN.getIncomingValue(InValNo))) in visitPHINode()
849 Value *NonPhiInVal = PN.getIncomingValue(InValNo); in visitPHINode()
854 Value *OpVal = PN.getIncomingValue(InValNo); in visitPHINode()
864 if (PHIsEqualValue(&PN, NonPhiInVal, ValueEqualPHIs)) in visitPHINode()
865 return ReplaceInstUsesWith(PN, NonPhiInVal); in visitPHINode()
874 PHINode *FirstPN = cast<PHINode>(PN.getParent()->begin()); in visitPHINode()
875 if (&PN != FirstPN) in visitPHINode()
877 BasicBlock *BBA = PN.getIncomingBlock(i); in visitPHINode()
880 Value *VA = PN.getIncomingValue(i); in visitPHINode()
881 unsigned j = PN.getBasicBlockIndex(BBB); in visitPHINode()
882 Value *VB = PN.getIncomingValue(j); in visitPHINode()
883 PN.setIncomingBlock(i, BBB); in visitPHINode()
884 PN.setIncomingValue(i, VB); in visitPHINode()
885 PN.setIncomingBlock(j, BBA); in visitPHINode()
886 PN.setIncomingValue(j, VA); in visitPHINode()
898 if (PN.getType()->isIntegerTy() && TD && in visitPHINode()
899 !TD->isLegalInteger(PN.getType()->getPrimitiveSizeInBits())) in visitPHINode()
900 if (Instruction *Res = SliceUpIllegalIntegerPHI(PN)) in visitPHINode()