Home
last modified time | relevance | path

Searched refs:Phi (Results 1 – 25 of 126) sorted by relevance

123456

/freebsd/contrib/llvm-project/llvm/lib/Analysis/
H A DIVDescriptors.cpp70 static Instruction *lookThroughAnd(PHINode *Phi, Type *&RT, in lookThroughAnd() argument
73 if (!Phi->hasOneUse()) in lookThroughAnd()
74 return Phi; in lookThroughAnd()
77 Instruction *I, *J = cast<Instruction>(Phi->use_begin()->getUser()); in lookThroughAnd()
84 RT = IntegerType::get(Phi->getContext(), Bits); in lookThroughAnd()
85 Visited.insert(Phi); in lookThroughAnd()
90 return Phi; in lookThroughAnd()
184 Instruction *Exit, PHINode *Phi) { in checkOrderedReduction() argument
204 if (Kind == RecurKind::FAdd && Op0 != Phi && Op1 != Phi) in checkOrderedReduction()
206 if (Kind == RecurKind::FMulAdd && Exit->getOperand(2) != Phi) in checkOrderedReduction()
[all …]
H A DMemorySSAUpdater.cpp89 MemoryPhi *Phi = dyn_cast_or_null<MemoryPhi>(MSSA->getMemoryAccess(BB)); in getPreviousDefRecursive() local
92 auto *Result = tryRemoveTrivialPhi(Phi, PhiOps); in getPreviousDefRecursive()
94 if (Result == Phi && UniqueIncomingAccess && SingleAccess) { in getPreviousDefRecursive()
96 if (Phi) { in getPreviousDefRecursive()
97 assert(Phi->operands().empty() && "Expected empty Phi"); in getPreviousDefRecursive()
98 Phi->replaceAllUsesWith(SingleAccess); in getPreviousDefRecursive()
99 removeMemoryAccess(Phi); in getPreviousDefRecursive()
102 } else if (Result == Phi && !(UniqueIncomingAccess && SingleAccess)) { in getPreviousDefRecursive()
103 if (!Phi) in getPreviousDefRecursive()
104 Phi = MSSA->createMemoryPhi(BB); in getPreviousDefRecursive()
[all …]
H A DPhiValues.cpp49 void PhiValues::processPhi(const PHINode *Phi, in processPhi() argument
52 assert(DepthMap.lookup(Phi) == 0); in processPhi()
55 DepthMap[Phi] = RootDepthNumber; in processPhi()
58 TrackedValues.insert(PhiValuesCallbackVH(const_cast<PHINode *>(Phi), this)); in processPhi()
59 for (Value *PhiOp : Phi->incoming_values()) { in processPhi()
71 unsigned &Depth = DepthMap[Phi]; in processPhi()
80 Stack.push_back(Phi); in processPhi()
84 if (DepthMap[Phi] == RootDepthNumber) { in processPhi()
H A DHashRecognize.cpp251 for (auto [Phi, Step] : PhiEvolutions) in computeEvolutions()
252 KnownPhis.emplace_or_assign(Phi, computeInstr(Step)); in computeEvolutions()
262 const PHINode *Phi = nullptr; member
273 Phi->print(OS); in print()
322 Phi = P; in matchSimpleRecurrence()
323 return llvm::matchSimpleRecurrence(Phi, BO, Start, Step); in matchSimpleRecurrence()
342 if (match(I, m_c_BinOp(m_Value(), m_Specific(Phi)))) in digRecurrence()
380 Phi = P; in matchConditionalRecurrence()
381 if (Phi->getNumIncomingValues() != 2) in matchConditionalRecurrence()
385 Value *FoundStep = Phi->getIncomingValue(Idx); in matchConditionalRecurrence()
[all …]
/freebsd/contrib/llvm-project/llvm/lib/CodeGen/
H A DUnreachableBlockElim.cpp160 for (MachineInstr &Phi : succ->phis()) { in run()
161 for (unsigned i = Phi.getNumOperands() - 1; i >= 2; i -= 2) { in run()
162 if (Phi.getOperand(i).isMBB() && in run()
163 Phi.getOperand(i).getMBB() == &BB) { in run()
164 Phi.removeOperand(i); in run()
165 Phi.removeOperand(i - 1); in run()
190 for (MachineInstr &Phi : make_early_inc_range(BB.phis())) { in run()
191 for (unsigned i = Phi.getNumOperands() - 1; i >= 2; i -= 2) { in run()
192 if (!preds.count(Phi.getOperand(i).getMBB())) { in run()
193 Phi.removeOperand(i); in run()
[all …]
H A DMachineSSAContext.cpp64 bool MachineSSAContext::isConstantOrUndefValuePhi(const MachineInstr &Phi) { in isConstantOrUndefValuePhi() argument
65 if (!Phi.isPHI()) in isConstantOrUndefValuePhi()
69 if (Phi.getOpcode() == TargetOpcode::PHI) in isConstantOrUndefValuePhi()
70 return Phi.isConstantValuePHI().isValid(); in isConstantOrUndefValuePhi()
73 const MachineRegisterInfo &MRI = Phi.getMF()->getRegInfo(); in isConstantOrUndefValuePhi()
74 Register This = Phi.getOperand(0).getReg(); in isConstantOrUndefValuePhi()
76 for (unsigned i = 1, e = Phi.getNumOperands(); i < e; i += 2) { in isConstantOrUndefValuePhi()
77 Register Incoming = Phi.getOperand(i).getReg(); in isConstantOrUndefValuePhi()
H A DWindowScheduler.cpp198 auto IsLoopCarried = [&](MachineInstr &Phi) { in initialize() argument
202 if (PrevUses.count(Phi.getOperand(0).getReg())) in initialize()
204 PrevDefs.insert(Phi.getOperand(0).getReg()); in initialize()
205 for (unsigned I = 1, E = Phi.getNumOperands(); I != E; I += 2) { in initialize()
206 if (PrevDefs.count(Phi.getOperand(I).getReg())) in initialize()
208 PrevUses.insert(Phi.getOperand(I).getReg()); in initialize()
377 for (auto &Phi : MBB->phis()) { in generateTripleMBB() local
379 if (Phi.readsRegister(DefRegPair.first, TRI)) in generateTripleMBB()
380 Phi.substituteRegister(DefRegPair.first, DefRegPair.second, 0, *TRI); in generateTripleMBB()
535 for (auto &Phi : MBB->phis()) { in schedulePhi() local
[all …]
H A DModuloSchedule.cpp40 static void getPhiRegs(MachineInstr &Phi, MachineBasicBlock *Loop, in getPhiRegs() argument
42 assert(Phi.isPHI() && "Expecting a Phi."); in getPhiRegs()
46 for (unsigned i = 1, e = Phi.getNumOperands(); i != e; i += 2) in getPhiRegs()
47 if (Phi.getOperand(i + 1).getMBB() != Loop) in getPhiRegs()
48 InitVal = Phi.getOperand(i).getReg(); in getPhiRegs()
50 LoopVal = Phi.getOperand(i).getReg(); in getPhiRegs()
56 static Register getInitPhiReg(MachineInstr &Phi, MachineBasicBlock *LoopBB) { in getInitPhiReg() argument
57 for (unsigned i = 1, e = Phi.getNumOperands(); i != e; i += 2) in getInitPhiReg()
58 if (Phi.getOperand(i + 1).getMBB() != LoopBB) in getInitPhiReg()
59 return Phi.getOperand(i).getReg(); in getInitPhiReg()
[all …]
/freebsd/contrib/llvm-project/llvm/lib/Transforms/Utils/
H A DControlFlowUtils.cpp94 auto *Phi = PHINode::Create(Int32Ty, Branches.size(), "merged.bb.idx", in calcPredicateUsingInteger() local
115 Phi->addIncoming(IncomingId, BB); in calcPredicateUsingInteger()
122 auto *Cmp = ICmpInst::Create(Instruction::ICmp, ICmpInst::ICMP_EQ, Phi, in calcPredicateUsingInteger()
147 auto *Phi = in calcPredicateUsingBooleans() local
150 GuardPredicates[Out] = Phi; in calcPredicateUsingBooleans()
166 PHINode *Phi = cast<PHINode>(GuardPredicates[Out]); in calcPredicateUsingBooleans() local
168 Phi->addIncoming(BoolFalse, BB); in calcPredicateUsingBooleans()
172 Phi->addIncoming(BoolTrue, BB); in calcPredicateUsingBooleans()
176 Phi->addIncoming(Condition, BB); in calcPredicateUsingBooleans()
180 Phi->addIncoming(Inverted, BB); in calcPredicateUsingBooleans()
[all …]
H A DLoopUnrollAndJam.cpp155 for (auto &Phi : Header->phis()) { in processHeaderPhiOperands() local
156 Value *V = Phi.getIncomingValueForBlock(Latch); in processHeaderPhiOperands()
442 for (PHINode &Phi : ForeBlocksFirst[It]->phis()) { in UnrollAndJamLoop()
443 Value *OldValue = Phi.getIncomingValueForBlock(AftBlocksLast[It]); in UnrollAndJamLoop()
449 assert(Phi.getNumOperands() == 2); in UnrollAndJamLoop()
450 Phi.setIncomingBlock(0, ForeBlocksLast[It - 1]); in UnrollAndJamLoop()
451 Phi.setIncomingValue(0, NewValue); in UnrollAndJamLoop()
452 Phi.removeIncomingValue(1); in UnrollAndJamLoop()
465 for (PHINode &Phi : BB->phis()) { in UnrollAndJamLoop()
466 for (unsigned b = 0; b < Phi.getNumIncomingValues(); ++b) { in UnrollAndJamLoop()
[all …]
H A DCallPromotionUtils.cpp58 for (PHINode &Phi : Invoke->getNormalDest()->phis()) { in fixupPHINodeForNormalDest()
59 int Idx = Phi.getBasicBlockIndex(OrigBlock); in fixupPHINodeForNormalDest()
62 Phi.setIncomingBlock(Idx, MergeBlock); in fixupPHINodeForNormalDest()
90 for (PHINode &Phi : Invoke->getUnwindDest()->phis()) { in fixupPHINodeForUnwindDest()
91 int Idx = Phi.getBasicBlockIndex(OrigBlock); in fixupPHINodeForUnwindDest()
94 auto *V = Phi.getIncomingValue(Idx); in fixupPHINodeForUnwindDest()
95 Phi.setIncomingBlock(Idx, ThenBlock); in fixupPHINodeForUnwindDest()
96 Phi.addIncoming(V, ElseBlock); in fixupPHINodeForUnwindDest()
120 PHINode *Phi = Builder.CreatePHI(OrigInst->getType(), 0); in createRetPHINode() local
123 U->replaceUsesOfWith(OrigInst, Phi); in createRetPHINode()
[all …]
H A DScalarEvolutionExpander.cpp894 const SCEVAddRecExpr *Phi, in canBeCheaplyTransformed() argument
898 Type *PhiTy = Phi->getType(); in canBeCheaplyTransformed()
907 Phi = dyn_cast<SCEVAddRecExpr>(SE.getTruncateOrNoop(Phi, RequestedTy)); in canBeCheaplyTransformed()
908 if (!Phi) in canBeCheaplyTransformed()
912 if (Phi == Requested) { in canBeCheaplyTransformed()
918 if (SE.getMinusSCEV(Requested->getStart(), Requested) == Phi) { in canBeCheaplyTransformed()
1609 PHINode *&Phi, PHINode *&OrigPhi, Loop *L, const DominatorTree *DT, in replaceCongruentIVInc() argument
1618 dyn_cast<Instruction>(Phi->getIncomingValueForBlock(LatchBlock)); in replaceCongruentIVInc()
1625 if (OrigPhi->getType() == Phi->getType()) { in replaceCongruentIVInc()
1626 bool Chained = ChainedPhis.contains(Phi); in replaceCongruentIVInc()
[all …]
/freebsd/contrib/llvm-project/llvm/lib/Target/ARM/
H A DMVEGatherScatterLowering.cpp152 void pushOutAdd(PHINode *&Phi, Value *OffsSecondOperand, unsigned StartIndex);
154 void pushOutMulShl(unsigned Opc, PHINode *&Phi, Value *IncrementPerRound,
809 PHINode *Phi = dyn_cast<PHINode>(Offsets); in tryCreateIncrementingWBGatScat() local
810 if (Phi == nullptr || Phi->getNumIncomingValues() != 2 || in tryCreateIncrementingWBGatScat()
811 Phi->getParent() != L->getHeader() || !Phi->hasNUses(2)) in tryCreateIncrementingWBGatScat()
819 Phi->getIncomingBlock(0) == L->getLoopLatch() ? 0 : 1; in tryCreateIncrementingWBGatScat()
821 Offsets = Phi->getIncomingValue(IncrementIndex); in tryCreateIncrementingWBGatScat()
828 if (OffsetsIncoming != Phi) in tryCreateIncrementingWBGatScat()
833 Builder.SetInsertPoint(&Phi->getIncomingBlock(1 - IncrementIndex)->back()); in tryCreateIncrementingWBGatScat()
839 Instruction::Shl, Phi->getIncomingValue(1 - IncrementIndex), in tryCreateIncrementingWBGatScat()
[all …]
/freebsd/contrib/llvm-project/llvm/lib/Target/RISCV/
H A DRISCVCodeGenPrepare.cpp148 auto *Phi = dyn_cast<PHINode>(PhiV); in widenVPMerge() local
149 if (!Phi || !Phi->hasOneUse() || Phi->getNumIncomingValues() != 2 || in widenVPMerge()
150 !match(Phi->getIncomingValue(0), m_Zero()) || in widenVPMerge()
151 Phi->getIncomingValue(1) != &II) in widenVPMerge()
158 IRBuilder<> Builder(Phi); in widenVPMerge()
161 Phi->getIncomingBlock(0)); in widenVPMerge()
166 WidePhi->addIncoming(WideMerge, Phi->getIncomingBlock(1)); in widenVPMerge()
172 Phi->setIncomingValue(1, Phi->getIncomingValue(0)); in widenVPMerge()
H A DRISCVGatherScatterLowering.cpp199 if (auto *Phi = dyn_cast<PHINode>(Index)) { in matchStridedRecurrence() local
202 if (Phi->getParent() != L->getHeader()) in matchStridedRecurrence()
206 if (!matchSimpleRecurrence(Phi, Inc, Start, Step) || in matchStridedRecurrence()
209 assert(Phi->getNumIncomingValues() == 2 && "Expected 2 operand phi."); in matchStridedRecurrence()
210 unsigned IncrementingBlock = Phi->getIncomingValue(0) == Inc ? 0 : 1; in matchStridedRecurrence()
211 assert(Phi->getIncomingValue(IncrementingBlock) == Inc && in matchStridedRecurrence()
226 PHINode::Create(Start->getType(), 2, Phi->getName() + ".scalar", Phi->getIterator()); in matchStridedRecurrence()
229 BasePtr->addIncoming(Start, Phi->getIncomingBlock(1 - IncrementingBlock)); in matchStridedRecurrence()
230 BasePtr->addIncoming(Inc, Phi->getIncomingBlock(IncrementingBlock)); in matchStridedRecurrence()
233 MaybeDeadPHIs.push_back(Phi); in matchStridedRecurrence()
[all …]
/freebsd/contrib/llvm-project/llvm/lib/Transforms/Scalar/
H A DMergeICmps.cpp405 BCECmpChain(const std::vector<BasicBlock *> &Blocks, PHINode &Phi,
473 BCECmpChain::BCECmpChain(const std::vector<BasicBlock *> &Blocks, PHINode &Phi, in BCECmpChain() argument
475 : Phi_(Phi) { in BCECmpChain()
487 Phi.getIncomingValueForBlock(Block), Block, Phi.getParent(), BaseId); in BCECmpChain()
610 PHINode &Phi, const TargetLibraryInfo &TLI, in mergeComparisons() argument
661 unsigned SizeTBits = TLI.getSizeTSize(*Phi.getModule()); in mergeComparisons()
665 const auto &DL = Phi.getDataLayout(); in mergeComparisons()
674 BasicBlock *const PhiBB = Phi.getParent(); in mergeComparisons()
679 Phi.addIncoming(IsEqual, BB); in mergeComparisons()
684 Phi.addIncoming(ConstantInt::getFalse(Context), BB); in mergeComparisons()
[all …]
H A DDFAJumpThreading.cpp225 for (PHINode &Phi : EndBlock->phis()) { in unfold()
226 if (SIUse == &Phi) in unfold()
228 Phi.addIncoming(Phi.getIncomingValueForBlock(StartBlock), NewBlock); in unfold()
319 for (PHINode &Phi : EndBlock->phis()) { in unfold()
320 if (SIUse == &Phi) in unfold()
322 Phi.addIncoming(Phi.getIncomingValueForBlock(StartBlock), NewBlockT); in unfold()
323 Phi.addIncoming(Phi.getIncomingValueForBlock(StartBlock), NewBlockF); in unfold()
324 Phi.removeIncomingValue(StartBlock); in unfold()
470 if (auto *Phi = dyn_cast<PHINode>(Current)) { in isCandidate() local
471 for (BasicBlock *IncomingBB : Phi->blocks()) { in isCandidate()
[all …]
H A DIndVarSimplify.cpp677 PHINode *Phi = dyn_cast<PHINode>(IncI->getOperand(0)); in getLoopPhiForCounter() local
678 if (Phi && Phi->getParent() == L->getHeader()) { in getLoopPhiForCounter()
680 return Phi; in getLoopPhiForCounter()
687 Phi = dyn_cast<PHINode>(IncI->getOperand(1)); in getLoopPhiForCounter()
688 if (Phi && Phi->getParent() == L->getHeader()) { in getLoopPhiForCounter()
690 return Phi; in getLoopPhiForCounter()
740 PHINode *Phi = dyn_cast<PHINode>(LHS); in needsLFTR() local
741 if (!Phi) in needsLFTR()
742 Phi = getLoopPhiForCounter(LHS, L); in needsLFTR()
744 if (!Phi) in needsLFTR()
[all …]
H A DStructurizeCFG.cpp664 for (PHINode &Phi : To->phis()) { in delPhiValues()
666 while (Phi.getBasicBlockIndex(From) != -1) { in delPhiValues()
667 Value *Deleted = Phi.removeIncomingValue(From, false); in delPhiValues()
668 Map[&Phi].push_back(std::make_pair(From, Deleted)); in delPhiValues()
670 AffectedPhis.push_back(&Phi); in delPhiValues()
679 for (PHINode &Phi : To->phis()) { in addPhiValues()
680 Value *Poison = PoisonValue::get(Phi.getType()); in addPhiValues()
681 Phi.addIncoming(Poison, From); in addPhiValues()
821 for (const auto &[Phi, Incomings] : OldPhiIt->second) { in setPhiValues()
834 mergeIfCompatible(PhiClasses, Phi, OtherPhi); in setPhiValues()
[all …]
/freebsd/contrib/llvm-project/clang/lib/Analysis/
H A DThreadSafetyTIL.cpp62 if (auto *Ph = dyn_cast<Phi>(E)) { in addPredecessor()
73 if (auto *Ph = dyn_cast<Phi>(E)) { in reservePredecessors()
89 if (const auto *Ph = dyn_cast<Phi>(E)) { in getCanonicalVal()
90 if (Ph->status() == Phi::PH_SingleVal) { in getCanonicalVal()
116 if (auto *Ph = dyn_cast<Phi>(E)) { in simplifyToCanonicalVal()
117 if (Ph->status() == Phi::PH_Incomplete) in simplifyToCanonicalVal()
120 if (Ph->status() == Phi::PH_SingleVal) { in simplifyToCanonicalVal()
132 void til::simplifyIncompleteArg(til::Phi *Ph) { in simplifyIncompleteArg()
133 assert(Ph && Ph->status() == Phi::PH_Incomplete); in simplifyIncompleteArg()
136 Ph->setStatus(Phi::PH_MultiVal); in simplifyIncompleteArg()
[all …]
/freebsd/contrib/llvm-project/llvm/lib/Target/AMDGPU/
H A DSIAnnotateControlFlow.cpp75 bool isElse(PHINode *Phi);
79 bool eraseIfUnused(PHINode *Phi);
150 bool SIAnnotateControlFlow::isElse(PHINode *Phi) { in isElse() argument
151 BasicBlock *IDom = DT->getNode(Phi->getParent())->getIDom()->getBlock(); in isElse()
152 for (unsigned i = 0, e = Phi->getNumIncomingValues(); i != e; ++i) { in isElse()
153 if (Phi->getIncomingBlock(i) == IDom) { in isElse()
155 if (Phi->getIncomingValue(i) != BoolTrue) in isElse()
159 if (Phi->getIncomingValue(i) != BoolFalse) in isElse()
177 bool SIAnnotateControlFlow::eraseIfUnused(PHINode *Phi) { in eraseIfUnused() argument
178 bool Changed = RecursivelyDeleteDeadPHINode(Phi); in eraseIfUnused()
[all …]
H A DAMDGPULateCodeGenPrepare.cpp304 if (PHINode *Phi = dyn_cast<PHINode>(II)) { in optimizeLiveType() local
305 PhiNodes.insert(Phi); in optimizeLiveType()
307 for (Value *V : Phi->incoming_values()) { in optimizeLiveType()
356 for (PHINode *Phi : PhiNodes) { in optimizeLiveType()
357 ValMap[Phi] = PHINode::Create(calculateConvertType(Phi->getType()), in optimizeLiveType()
358 Phi->getNumIncomingValues(), in optimizeLiveType()
359 Phi->getName() + ".tc", Phi->getIterator()); in optimizeLiveType()
363 for (PHINode *Phi : PhiNodes) { in optimizeLiveType()
364 PHINode *NewPhi = cast<PHINode>(ValMap[Phi]); in optimizeLiveType()
366 for (int I = 0, E = Phi->getNumIncomingValues(); I < E; I++) { in optimizeLiveType()
[all …]
/freebsd/contrib/llvm-project/llvm/lib/Transforms/Vectorize/
H A DLoopVectorizationLegality.cpp679 PHINode *Phi, const InductionDescriptor &ID, in addInductionPhi() argument
681 Inductions[Phi] = ID; in addInductionPhi()
691 Type *PhiTy = Phi->getType(); in addInductionPhi()
692 const DataLayout &DL = Phi->getDataLayout(); in addInductionPhi()
716 PrimaryInduction = Phi; in addInductionPhi()
726 AllowedExit.insert(Phi); in addInductionPhi()
727 AllowedExit.insert(Phi->getIncomingValueForBlock(TheLoop->getLoopLatch())); in addInductionPhi()
737 auto IsSupportedPhi = [&](PHINode &Phi) -> bool { in setupOuterLoopInductions() argument
739 if (InductionDescriptor::isInductionPHI(&Phi, TheLoop, PSE, ID) && in setupOuterLoopInductions()
741 addInductionPhi(&Phi, ID, AllowedExit); in setupOuterLoopInductions()
[all …]
H A DVPlanConstruction.cpp91 for (auto *Phi : PhisToFix) { in fixHeaderPhis() local
92 assert(IRDef2VPValue.count(Phi) && "Missing VPInstruction for PHINode."); in fixHeaderPhis()
93 VPValue *VPVal = IRDef2VPValue[Phi]; in fixHeaderPhis()
99 assert(isHeaderBB(Phi->getParent(), LI->getLoopFor(Phi->getParent())) && in fixHeaderPhis()
101 assert(Phi->getNumOperands() == 2 && in fixHeaderPhis()
103 for (BasicBlock *Pred : predecessors(Phi->getParent())) in fixHeaderPhis()
105 getOrCreateVPOperand(Phi->getIncomingValueForBlock(Pred))); in fixHeaderPhis()
206 if (auto *Phi = dyn_cast<PHINode>(Inst)) { in createVPInstructionsForVPBB() local
210 NewR = new VPWidenPHIRecipe(Phi, nullptr, Phi->getDebugLoc(), "vec.phi"); in createVPInstructionsForVPBB()
212 if (isHeaderBB(Phi->getParent(), LI->getLoopFor(Phi->getParent()))) { in createVPInstructionsForVPBB()
[all …]
/freebsd/contrib/llvm-project/llvm/include/llvm/Analysis/
H A DIVDescriptors.h144 isRecurrenceInstr(Loop *L, PHINode *Phi, Instruction *I, RecurKind Kind,
196 AddReductionVar(PHINode *Phi, RecurKind Kind, Loop *TheLoop,
207 isReductionPHI(PHINode *Phi, Loop *TheLoop, RecurrenceDescriptor &RedDes,
220 LLVM_ABI static bool isFixedOrderRecurrence(PHINode *Phi, Loop *TheLoop,
336 LLVM_ABI SmallVector<Instruction *, 4> getReductionOpChain(PHINode *Phi,
408 isInductionPHI(PHINode *Phi, const Loop *L, ScalarEvolution *SE,
415 LLVM_ABI static bool isFPInductionPHI(PHINode *Phi, const Loop *L,
425 LLVM_ABI static bool isInductionPHI(PHINode *Phi, const Loop *L,

123456