File tree Expand file tree Collapse file tree 3 files changed +10
-8
lines changed
llvm/lib/Transforms/Vectorize Expand file tree Collapse file tree 3 files changed +10
-8
lines changed Original file line number Diff line number Diff line change @@ -1961,7 +1961,7 @@ class VPScalarPHIRecipe : public VPHeaderPHIRecipe {
1961
1961
// / A recipe for widened phis. Incoming values are operands of the recipe and
1962
1962
// / their operand index corresponds to the incoming predeocessor block. If the
1963
1963
// / recipe is placed in an entry block to a (non-replicate) region, it must have
1964
- // / exactly 2 incoming values, from from the predecessors of the region and one
1964
+ // / exactly 2 incoming values, the first from the predecessors of the region and the second
1965
1965
// / from the exiting block of the region.
1966
1966
class VPWidenPHIRecipe : public VPSingleDefRecipe {
1967
1967
public:
Original file line number Diff line number Diff line change @@ -145,13 +145,13 @@ void PlainCFGBuilder::fixPhiNodes() {
145
145
}
146
146
147
147
// Add operands for VPPhi in the order matching its predecessors in VPlan.
148
- DenseMap<const VPBasicBlock *, VPValue *> IncomingValues ;
148
+ DenseMap<const VPBasicBlock *, VPValue *> VPPredToIncomingValue ;
149
149
for (unsigned I = 0 ; I != Phi->getNumOperands (); ++I) {
150
- IncomingValues [BB2VPBB[Phi->getIncomingBlock (I)]] =
150
+ VPPredToIncomingValue [BB2VPBB[Phi->getIncomingBlock (I)]] =
151
151
getOrCreateVPOperand (Phi->getIncomingValue (I));
152
152
}
153
153
for (VPBlockBase *Pred : VPPhi->getParent ()->getPredecessors ())
154
- VPPhi->addOperand (IncomingValues .lookup (Pred->getExitingBasicBlock ()));
154
+ VPPhi->addOperand (VPPredToIncomingValue .lookup (Pred->getExitingBasicBlock ()));
155
155
}
156
156
}
157
157
Original file line number Diff line number Diff line change @@ -3607,10 +3607,12 @@ VPBasicBlock *VPWidenPHIRecipe::getIncomingBlock(unsigned I) {
3607
3607
VPBasicBlock *Parent = getParent ();
3608
3608
VPBlockBase *Pred = nullptr ;
3609
3609
if (Parent->getNumPredecessors () == 0 ) {
3610
- auto *R = Parent->getParent ();
3611
- assert (R && R->getEntry () == Parent);
3612
- assert (I < 2 );
3613
- Pred = I == 0 ? R->getSinglePredecessor () : R;
3610
+ auto *Region = Parent->getParent ();
3611
+ assert (Region && !Region->isReplicator () && Region->getEntry () == Parent && " must be in the entry block of a non-replicate region" );
3612
+ assert (I < 2 && getNumOperands () == 2 && " when placed in an entry block, only 2 incoming blocks are available" );
3613
+
3614
+ // I == 0 selects the predecessor of the region, I == 1 selects the region itself whose exiting block feeds the phi across the backedge.
3615
+ Pred = I == 0 ? Region->getSinglePredecessor () : Region;
3614
3616
} else {
3615
3617
Pred = Parent->getPredecessors ()[I];
3616
3618
}
You can’t perform that action at this time.
0 commit comments