forked from OSchip/llvm-project
Convert PHI getIncomingValue() to foreach over incoming_values(). NFC.
We already had a method to iterate over all the incoming values of a PHI. This just changes all eligible code to use it. Ineligible code included anything which cared about the index, or was also trying to get the i'th incoming BB. llvm-svn: 237169
This commit is contained in:
parent
26b7aa020b
commit
833f34d837
|
@ -718,8 +718,8 @@ BasicAliasAnalysis::pointsToConstantMemory(const Location &Loc, bool OrLocal) {
|
|||
Visited.clear();
|
||||
return AliasAnalysis::pointsToConstantMemory(Loc, OrLocal);
|
||||
}
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
|
||||
Worklist.push_back(PN->getIncomingValue(i));
|
||||
for (Value *IncValue : PN->incoming_values())
|
||||
Worklist.push_back(IncValue);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1477,8 +1477,7 @@ BasicAliasAnalysis::aliasPHI(const PHINode *PN, uint64_t PNSize,
|
|||
|
||||
SmallPtrSet<Value*, 4> UniqueSrc;
|
||||
SmallVector<Value*, 4> V1Srcs;
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
|
||||
Value *PV1 = PN->getIncomingValue(i);
|
||||
for (Value *PV1 : PN->incoming_values()) {
|
||||
if (isa<PHINode>(PV1))
|
||||
// If any of the source itself is a PHI, return MayAlias conservatively
|
||||
// to avoid compile time explosion. The worst possible case is if both
|
||||
|
|
|
@ -305,8 +305,7 @@ public:
|
|||
}
|
||||
|
||||
void visitPHINode(PHINode &Inst) {
|
||||
for (unsigned I = 0, E = Inst.getNumIncomingValues(); I != E; ++I) {
|
||||
Value *Val = Inst.getIncomingValue(I);
|
||||
for (Value *Val : Inst.incoming_values()) {
|
||||
Output.push_back(Edge(&Inst, Val, EdgeType::Assign, AttrNone));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -895,8 +895,7 @@ Constant *llvm::ConstantFoldInstruction(Instruction *I, const DataLayout &DL,
|
|||
if (PHINode *PN = dyn_cast<PHINode>(I)) {
|
||||
Constant *CommonValue = nullptr;
|
||||
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
|
||||
Value *Incoming = PN->getIncomingValue(i);
|
||||
for (Value *Incoming : PN->incoming_values()) {
|
||||
// If the incoming value is undef then skip it. Note that while we could
|
||||
// skip the value if it is equal to the phi node itself we choose not to
|
||||
// because that would break the rule that constant folding only applies if
|
||||
|
|
|
@ -469,8 +469,7 @@ static Value *ThreadBinOpOverPHI(unsigned Opcode, Value *LHS, Value *RHS,
|
|||
|
||||
// Evaluate the BinOp on the incoming phi values.
|
||||
Value *CommonValue = nullptr;
|
||||
for (unsigned i = 0, e = PI->getNumIncomingValues(); i != e; ++i) {
|
||||
Value *Incoming = PI->getIncomingValue(i);
|
||||
for (Value *Incoming : PI->incoming_values()) {
|
||||
// If the incoming value is the phi node itself, it can safely be skipped.
|
||||
if (Incoming == PI) continue;
|
||||
Value *V = PI == LHS ?
|
||||
|
@ -510,8 +509,7 @@ static Value *ThreadCmpOverPHI(CmpInst::Predicate Pred, Value *LHS, Value *RHS,
|
|||
|
||||
// Evaluate the BinOp on the incoming phi values.
|
||||
Value *CommonValue = nullptr;
|
||||
for (unsigned i = 0, e = PI->getNumIncomingValues(); i != e; ++i) {
|
||||
Value *Incoming = PI->getIncomingValue(i);
|
||||
for (Value *Incoming : PI->incoming_values()) {
|
||||
// If the incoming value is the phi node itself, it can safely be skipped.
|
||||
if (Incoming == PI) continue;
|
||||
Value *V = SimplifyCmpInst(Pred, Incoming, RHS, Q, MaxRecurse);
|
||||
|
@ -3377,8 +3375,7 @@ static Value *SimplifyPHINode(PHINode *PN, const Query &Q) {
|
|||
// with the common value.
|
||||
Value *CommonValue = nullptr;
|
||||
bool HasUndefInput = false;
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
|
||||
Value *Incoming = PN->getIncomingValue(i);
|
||||
for (Value *Incoming : PN->incoming_values()) {
|
||||
// If the incoming value is the phi node itself, it can safely be skipped.
|
||||
if (Incoming == PN) continue;
|
||||
if (isa<UndefValue>(Incoming)) {
|
||||
|
|
|
@ -1429,15 +1429,15 @@ void computeKnownBits(Value *V, APInt &KnownZero, APInt &KnownOne,
|
|||
|
||||
KnownZero = APInt::getAllOnesValue(BitWidth);
|
||||
KnownOne = APInt::getAllOnesValue(BitWidth);
|
||||
for (unsigned i = 0, e = P->getNumIncomingValues(); i != e; ++i) {
|
||||
for (Value *IncValue : P->incoming_values()) {
|
||||
// Skip direct self references.
|
||||
if (P->getIncomingValue(i) == P) continue;
|
||||
if (IncValue == P) continue;
|
||||
|
||||
KnownZero2 = APInt(BitWidth, 0);
|
||||
KnownOne2 = APInt(BitWidth, 0);
|
||||
// Recurse, but cap the recursion to one level, because we don't
|
||||
// want to waste time spinning around in loops.
|
||||
computeKnownBits(P->getIncomingValue(i), KnownZero2, KnownOne2, DL,
|
||||
computeKnownBits(IncValue, KnownZero2, KnownOne2, DL,
|
||||
MaxDepth - 1, Q);
|
||||
KnownZero &= KnownZero2;
|
||||
KnownOne &= KnownOne2;
|
||||
|
@ -2691,8 +2691,8 @@ static uint64_t GetStringLengthH(Value *V, SmallPtrSetImpl<PHINode*> &PHIs) {
|
|||
|
||||
// If it was new, see if all the input strings are the same length.
|
||||
uint64_t LenSoFar = ~0ULL;
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
|
||||
uint64_t Len = GetStringLengthH(PN->getIncomingValue(i), PHIs);
|
||||
for (Value *IncValue : PN->incoming_values()) {
|
||||
uint64_t Len = GetStringLengthH(IncValue, PHIs);
|
||||
if (Len == 0) return 0; // Unknown length -> unknown.
|
||||
|
||||
if (Len == ~0ULL) continue;
|
||||
|
@ -2826,8 +2826,8 @@ void llvm::GetUnderlyingObjects(Value *V, SmallVectorImpl<Value *> &Objects,
|
|||
// underlying objects.
|
||||
if (!LI || !LI->isLoopHeader(PN->getParent()) ||
|
||||
isSameUnderlyingObjectInLoop(PN, LI))
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
|
||||
Worklist.push_back(PN->getIncomingValue(i));
|
||||
for (Value *IncValue : PN->incoming_values())
|
||||
Worklist.push_back(IncValue);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -3204,8 +3204,8 @@ bool CodeGenPrepare::OptimizeMemoryInst(Instruction *MemoryInst, Value *Addr,
|
|||
|
||||
// For a PHI node, push all of its incoming values.
|
||||
if (PHINode *P = dyn_cast<PHINode>(V)) {
|
||||
for (unsigned i = 0, e = P->getNumIncomingValues(); i != e; ++i)
|
||||
worklist.push_back(P->getIncomingValue(i));
|
||||
for (Value *IncValue : P->incoming_values())
|
||||
worklist.push_back(IncValue);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -2132,8 +2132,8 @@ void Verifier::visitPHINode(PHINode &PN) {
|
|||
|
||||
// Check that all of the values of the PHI node have the same type as the
|
||||
// result, and that the incoming blocks are really basic blocks.
|
||||
for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i) {
|
||||
Assert(PN.getType() == PN.getIncomingValue(i)->getType(),
|
||||
for (Value *IncValue : PN.incoming_values()) {
|
||||
Assert(PN.getType() == IncValue->getType(),
|
||||
"PHI node operands are not the same type as the result!", &PN);
|
||||
}
|
||||
|
||||
|
|
|
@ -755,8 +755,8 @@ bool FunctionAttrs::IsFunctionMallocLike(Function *F,
|
|||
}
|
||||
case Instruction::PHI: {
|
||||
PHINode *PN = cast<PHINode>(RVI);
|
||||
for (int i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
|
||||
FlowsToReturn.insert(PN->getIncomingValue(i));
|
||||
for (Value *IncValue : PN->incoming_values())
|
||||
FlowsToReturn.insert(IncValue);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -418,8 +418,8 @@ static bool CanEvaluateTruncated(Value *V, Type *Ty, InstCombiner &IC,
|
|||
// get into trouble with cyclic PHIs here because we only consider
|
||||
// instructions with a single use.
|
||||
PHINode *PN = cast<PHINode>(I);
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
|
||||
if (!CanEvaluateTruncated(PN->getIncomingValue(i), Ty, IC, CxtI))
|
||||
for (Value *IncValue : PN->incoming_values())
|
||||
if (!CanEvaluateTruncated(IncValue, Ty, IC, CxtI))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
@ -1029,8 +1029,8 @@ static bool CanEvaluateSExtd(Value *V, Type *Ty) {
|
|||
// get into trouble with cyclic PHIs here because we only consider
|
||||
// instructions with a single use.
|
||||
PHINode *PN = cast<PHINode>(I);
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
|
||||
if (!CanEvaluateSExtd(PN->getIncomingValue(i), Ty)) return false;
|
||||
for (Value *IncValue : PN->incoming_values())
|
||||
if (!CanEvaluateSExtd(IncValue, Ty)) return false;
|
||||
return true;
|
||||
}
|
||||
default:
|
||||
|
|
|
@ -556,8 +556,8 @@ static bool isObjectSizeLessThanOrEq(Value *V, uint64_t MaxSize,
|
|||
}
|
||||
|
||||
if (PHINode *PN = dyn_cast<PHINode>(P)) {
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
|
||||
Worklist.push_back(PN->getIncomingValue(i));
|
||||
for (Value *IncValue : PN->incoming_values())
|
||||
Worklist.push_back(IncValue);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -375,8 +375,8 @@ Instruction *InstCombiner::FoldPHIArgLoadIntoPHI(PHINode &PN) {
|
|||
// and mark all the input loads as non-volatile. If we don't do this, we will
|
||||
// insert a new volatile load and the old ones will not be deletable.
|
||||
if (isVolatile)
|
||||
for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i)
|
||||
cast<LoadInst>(PN.getIncomingValue(i))->setVolatile(false);
|
||||
for (Value *IncValue : PN.incoming_values())
|
||||
cast<LoadInst>(IncValue)->setVolatile(false);
|
||||
|
||||
LoadInst *NewLI = new LoadInst(PhiVal, "", isVolatile, LoadAlignment);
|
||||
NewLI->setDebugLoc(FirstLI->getDebugLoc());
|
||||
|
@ -539,8 +539,7 @@ static bool PHIsEqualValue(PHINode *PN, Value *NonPhiInVal,
|
|||
|
||||
// Scan the operands to see if they are either phi nodes or are equal to
|
||||
// the value.
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
|
||||
Value *Op = PN->getIncomingValue(i);
|
||||
for (Value *Op : PN->incoming_values()) {
|
||||
if (PHINode *OpPN = dyn_cast<PHINode>(Op)) {
|
||||
if (!PHIsEqualValue(OpPN, NonPhiInVal, ValueEqualPHIs))
|
||||
return false;
|
||||
|
|
|
@ -175,8 +175,8 @@ static bool CanEvaluateShifted(Value *V, unsigned NumBits, bool isLeftShift,
|
|||
// get into trouble with cyclic PHIs here because we only consider
|
||||
// instructions with a single use.
|
||||
PHINode *PN = cast<PHINode>(I);
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
|
||||
if (!CanEvaluateShifted(PN->getIncomingValue(i), NumBits, isLeftShift,
|
||||
for (Value *IncValue : PN->incoming_values())
|
||||
if (!CanEvaluateShifted(IncValue, NumBits, isLeftShift,
|
||||
IC, PN))
|
||||
return false;
|
||||
return true;
|
||||
|
|
|
@ -1940,8 +1940,7 @@ AllocaInst *FunctionStackPoisoner::findAllocaForValue(Value *V) {
|
|||
if (CastInst *CI = dyn_cast<CastInst>(V))
|
||||
Res = findAllocaForValue(CI->getOperand(0));
|
||||
else if (PHINode *PN = dyn_cast<PHINode>(V)) {
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
|
||||
Value *IncValue = PN->getIncomingValue(i);
|
||||
for (Value *IncValue : PN->incoming_values()) {
|
||||
// Allow self-referencing phi-nodes.
|
||||
if (IncValue == PN) continue;
|
||||
AllocaInst *IncValueAI = findAllocaForValue(IncValue);
|
||||
|
|
|
@ -105,8 +105,8 @@ static inline bool AreAnyUnderlyingObjectsAnAlloca(const Value *V,
|
|||
}
|
||||
|
||||
if (const PHINode *PN = dyn_cast<const PHINode>(P)) {
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
|
||||
Worklist.push_back(PN->getIncomingValue(i));
|
||||
for (Value *IncValue : PN->incoming_values())
|
||||
Worklist.push_back(IncValue);
|
||||
continue;
|
||||
}
|
||||
} while (!Worklist.empty());
|
||||
|
|
|
@ -62,8 +62,7 @@ bool ProvenanceAnalysis::relatedPHI(const PHINode *A,
|
|||
|
||||
// Check each unique source of the PHI node against B.
|
||||
SmallPtrSet<const Value *, 4> UniqueSrc;
|
||||
for (unsigned i = 0, e = A->getNumIncomingValues(); i != e; ++i) {
|
||||
const Value *PV1 = A->getIncomingValue(i);
|
||||
for (Value *PV1 : A->incoming_values()) {
|
||||
if (UniqueSrc.insert(PV1).second && related(PV1, B, DL))
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -491,8 +491,8 @@ bool canSinkOrHoistInst(Instruction &I, AliasAnalysis *AA, DominatorTree *DT,
|
|||
/// This pattern occurs most often with LCSSA PHI nodes.
|
||||
///
|
||||
static bool isTriviallyReplacablePHI(const PHINode &PN, const Instruction &I) {
|
||||
for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i)
|
||||
if (PN.getIncomingValue(i) != &I)
|
||||
for (const Value *IncValue : PN.incoming_values())
|
||||
if (IncValue != &I)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
|
|
@ -136,8 +136,8 @@ bool llvm::MergeBlockIntoPredecessor(BasicBlock *BB, DominatorTree *DT,
|
|||
// Can't merge if there is PHI loop.
|
||||
for (BasicBlock::iterator BI = BB->begin(), BE = BB->end(); BI != BE; ++BI) {
|
||||
if (PHINode *PN = dyn_cast<PHINode>(BI)) {
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
|
||||
if (PN->getIncomingValue(i) == PN)
|
||||
for (Value *IncValue : PN->incoming_values())
|
||||
if (IncValue == PN)
|
||||
return false;
|
||||
} else
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue