Phis that are present inside loop headers can only be Induction Phis
legally. This patch adds an assertion to isInductionPhi which checks for
the said legality and it also updates the docs of the said function to
reflect the given legality.
Differential Revision: https://reviews.llvm.org/D149041
/// Returns true if \p Phi is an induction in the loop \p L. If \p Phi is an
/// induction, the induction descriptor \p D will contain the data describing
- /// this induction. If by some other means the caller has a better SCEV
+ /// this induction. Since Induction Phis can only be present inside loop
+ /// headers, the function will assert if it is passed a Phi whose parent is
+ /// not the loop header. If by some other means the caller has a better SCEV
/// expression for \p Phi than the one returned by the ScalarEvolution
/// analysis, it can be passed through \p Expr. If the def-use chain
/// associated with the phi includes casts (that we know we can ignore
return false;
}
+ // This function assumes that InductionPhi is called only on Phi nodes
+ // present inside loop headers. Check for the same, and throw an assert if
+ // the current Phi is not present inside the loop header.
+ assert(Phi->getParent() == AR->getLoop()->getHeader()
+ && "Invalid Phi node, not present in loop header");
+
Value *StartValue =
Phi->getIncomingValueForBlock(AR->getLoop()->getLoopPreheader());