[VPlan] Move isUniformAfterVectorization from VPlan to vputils (NFC).
This allows re-using the utility without a VPlan object. The helper also doesn't access any data from VPlan.
This commit is contained in:
parent
c7b815a510
commit
4e5c44964a
@ -2680,12 +2680,6 @@ public:
|
||||
return map_range(Operands, Fn);
|
||||
}
|
||||
|
||||
/// Returns true if \p VPV is uniform after vectorization.
|
||||
bool isUniformAfterVectorization(VPValue *VPV) const {
|
||||
auto RepR = dyn_cast_or_null<VPReplicateRecipe>(VPV->getDef());
|
||||
return !VPV->getDef() || (RepR && RepR->isUniform());
|
||||
}
|
||||
|
||||
/// Returns the VPRegionBlock of the vector loop.
|
||||
VPRegionBlock *getVectorLoopRegion() {
|
||||
return cast<VPRegionBlock>(getEntry()->getSingleSuccessor());
|
||||
@ -3061,6 +3055,12 @@ bool onlyFirstLaneUsed(VPValue *Def);
|
||||
/// create a new one.
|
||||
VPValue *getOrCreateVPValueForSCEVExpr(VPlan &Plan, const SCEV *Expr,
|
||||
ScalarEvolution &SE);
|
||||
|
||||
/// Returns true if \p VPV is uniform after vectorization.
|
||||
inline bool isUniformAfterVectorization(VPValue *VPV) {
|
||||
auto RepR = dyn_cast_or_null<VPReplicateRecipe>(VPV->getDef());
|
||||
return !VPV->getDef() || (RepR && RepR->isUniform());
|
||||
}
|
||||
} // end namespace vputils
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
@ -134,7 +134,7 @@ bool VPRecipeBase::mayHaveSideEffects() const {
|
||||
void VPLiveOut::fixPhi(VPlan &Plan, VPTransformState &State) {
|
||||
auto Lane = VPLane::getLastLaneForVF(State.VF);
|
||||
VPValue *ExitValue = getOperand(0);
|
||||
if (Plan.isUniformAfterVectorization(ExitValue))
|
||||
if (vputils::isUniformAfterVectorization(ExitValue))
|
||||
Lane = VPLane::getFirstLane();
|
||||
Phi->addIncoming(State.get(ExitValue, VPIteration(State.UF - 1, Lane)),
|
||||
State.Builder.GetInsertBlock());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user