mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-15 20:51:35 +00:00
[LV] Factor out phi type access to variable (NFC).
A slight simplification of the code to reduce future diffs.
This commit is contained in:
parent
279ea930fa
commit
9d45579279
@ -4268,6 +4268,7 @@ void InnerLoopVectorizer::fixReduction(PHINode *Phi, VPTransformState &State) {
|
||||
|
||||
setDebugLocFromInst(Builder, LoopExitInst);
|
||||
|
||||
Type *PhiTy = Phi->getType();
|
||||
// If tail is folded by masking, the vector value to leave the loop should be
|
||||
// a Select choosing between the vectorized LoopExitInst and vectorized Phi,
|
||||
// instead of the former. For an inloop reduction the reduction will already
|
||||
@ -4293,7 +4294,7 @@ void InnerLoopVectorizer::fixReduction(PHINode *Phi, VPTransformState &State) {
|
||||
// LoopExitValue.
|
||||
if (PreferPredicatedReductionSelect ||
|
||||
TTI->preferPredicatedReductionSelect(
|
||||
RdxDesc.getOpcode(), Phi->getType(),
|
||||
RdxDesc.getOpcode(), PhiTy,
|
||||
TargetTransformInfo::ReductionFlags())) {
|
||||
auto *VecRdxPhi =
|
||||
cast<PHINode>(State.get(State.Plan->getVPValue(Phi), Part));
|
||||
@ -4306,7 +4307,7 @@ void InnerLoopVectorizer::fixReduction(PHINode *Phi, VPTransformState &State) {
|
||||
// If the vector reduction can be performed in a smaller type, we truncate
|
||||
// then extend the loop exit value to enable InstCombine to evaluate the
|
||||
// entire expression in the smaller type.
|
||||
if (VF.isVector() && Phi->getType() != RdxDesc.getRecurrenceType()) {
|
||||
if (VF.isVector() && PhiTy != RdxDesc.getRecurrenceType()) {
|
||||
assert(!IsInLoopReductionPhi && "Unexpected truncated inloop reduction!");
|
||||
assert(!VF.isScalable() && "scalable vectors not yet supported.");
|
||||
Type *RdxVecTy = VectorType::get(RdxDesc.getRecurrenceType(), VF);
|
||||
@ -4368,16 +4369,15 @@ void InnerLoopVectorizer::fixReduction(PHINode *Phi, VPTransformState &State) {
|
||||
createTargetReduction(Builder, TTI, RdxDesc, ReducedPartRdx);
|
||||
// If the reduction can be performed in a smaller type, we need to extend
|
||||
// the reduction to the wider type before we branch to the original loop.
|
||||
if (Phi->getType() != RdxDesc.getRecurrenceType())
|
||||
ReducedPartRdx =
|
||||
RdxDesc.isSigned()
|
||||
? Builder.CreateSExt(ReducedPartRdx, Phi->getType())
|
||||
: Builder.CreateZExt(ReducedPartRdx, Phi->getType());
|
||||
if (PhiTy != RdxDesc.getRecurrenceType())
|
||||
ReducedPartRdx = RdxDesc.isSigned()
|
||||
? Builder.CreateSExt(ReducedPartRdx, PhiTy)
|
||||
: Builder.CreateZExt(ReducedPartRdx, PhiTy);
|
||||
}
|
||||
|
||||
// Create a phi node that merges control-flow from the backedge-taken check
|
||||
// block and the middle block.
|
||||
PHINode *BCBlockPhi = PHINode::Create(Phi->getType(), 2, "bc.merge.rdx",
|
||||
PHINode *BCBlockPhi = PHINode::Create(PhiTy, 2, "bc.merge.rdx",
|
||||
LoopScalarPreHeader->getTerminator());
|
||||
for (unsigned I = 0, E = LoopBypassBlocks.size(); I != E; ++I)
|
||||
BCBlockPhi->addIncoming(ReductionStartValue, LoopBypassBlocks[I]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user