[llvm] [VectorCombine] Fix crash when folding select of bitcast (PR #177183)
Mitch Briles via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 21 11:53:51 PST 2026
================
@@ -1651,7 +1651,38 @@ bool VectorCombine::foldSelectsFromBitcast(Instruction &I) {
}
// Create the vector select and bitcast once for this condition.
- Builder.SetInsertPoint(BC->getNextNode());
+ // Insert in a block that dominates all selects and after any local defs.
+ BasicBlock *InsertBB = Selects.front()->getParent();
+ for (SelectInst *Sel : Selects)
+ InsertBB = DT.findNearestCommonDominator(InsertBB, Sel->getParent());
+ if (!InsertBB)
+ continue;
+
+ BasicBlock::iterator InsertPt = InsertBB->getFirstInsertionPt();
+ if (InsertPt == InsertBB->end())
+ continue;
+
+ auto ProcessDef = [&](Value *V) -> bool {
+ auto *DefI = dyn_cast<Instruction>(V);
+ if (!DefI || DefI->getParent() != InsertBB)
+ return true;
+
+ auto AfterDefOpt = DefI->getInsertionPointAfterDef();
+ if (!AfterDefOpt)
+ return false;
+
+ BasicBlock::iterator AfterDefIt = *AfterDefOpt;
+ Instruction &AfterDef = *AfterDefIt;
----------------
MitchBriles wrote:
Agreed. Removed variable entirely.
https://github.com/llvm/llvm-project/pull/177183
More information about the llvm-commits
mailing list