[llvm] [VPlan] Simplify the computation of the block entry mask. (PR #173265)
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 11 00:29:47 PST 2026
================
@@ -127,15 +133,33 @@ VPValue *VPPredicator::createEdgeMask(VPBasicBlock *Src, VPBasicBlock *Dst) {
}
void VPPredicator::createBlockInMask(VPBasicBlock *VPBB) {
- // Start inserting after the block's phis, which be replaced by blends later.
+ // Compute the edge masks for all incoming edges to VPBB. Insert after the
+ // block's phis, which will be replaced by blends later.
+ // TODO: Skip creating edge masks for blocks that are control-flow equivalent
+ // to header and have no phis.
Builder.setInsertPoint(VPBB, VPBB->getFirstNonPhi());
+ for (auto *Predecessor : SetVector<VPBlockBase *>(
+ VPBB->getPredecessors().begin(), VPBB->getPredecessors().end()))
+ createEdgeMask(cast<VPBasicBlock>(Predecessor), VPBB);
+
+ // Reuse the mask of header block if VPBB is control-flow equivalent to
+ // header.
+ // TODO: Generalize to reuse mask of immediate dominator.
+ VPBasicBlock *Header =
+ VPBB->getPlan()->getVectorLoopRegion()->getEntryBasicBlock();
+ if (VPPDT.properlyDominates(VPBB, Header)) {
+ setBlockInMask(VPBB, getBlockInMask(Header));
+ return;
+ }
+
// All-one mask is modelled as no-mask following the convention for masked
// load/store/gather/scatter. Initialize BlockMask to no-mask.
VPValue *BlockMask = nullptr;
+
----------------
lukel97 wrote:
Nit stray whitespace change
https://github.com/llvm/llvm-project/pull/173265
More information about the llvm-commits
mailing list