[llvm] [VectorCombine] Fix transitive Uses in shuffleToVector (PR #188989)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 30 04:06:17 PDT 2026
================
@@ -3701,55 +3702,63 @@ bool VectorCombine::foldShuffleToIdentity(Instruction &I) {
};
if (all_of(drop_begin(Item), CheckLaneIsEquivalentToFirst)) {
// Check the operator is one that we support.
- if (isa<BinaryOperator, CmpInst>(FrontU)) {
+ if (isa<BinaryOperator, CmpInst>(FrontV)) {
// We exclude div/rem in case they hit UB from poison lanes.
- if (auto *BO = dyn_cast<BinaryOperator>(FrontU);
+ if (auto *BO = dyn_cast<BinaryOperator>(FrontV);
BO && BO->isIntDivRem())
return false;
- Worklist.push_back(generateInstLaneVectorFromOperand(Item, 0));
- Worklist.push_back(generateInstLaneVectorFromOperand(Item, 1));
+ Worklist.emplace_back(generateInstLaneVectorFromOperand(Item, 0),
+ &cast<Instruction>(FrontV)->getOperandUse(0));
+ Worklist.emplace_back(generateInstLaneVectorFromOperand(Item, 1),
+ &cast<Instruction>(FrontV)->getOperandUse(1));
continue;
} else if (isa<UnaryOperator, TruncInst, ZExtInst, SExtInst, FPToSIInst,
- FPToUIInst, SIToFPInst, UIToFPInst>(FrontU)) {
- Worklist.push_back(generateInstLaneVectorFromOperand(Item, 0));
+ FPToUIInst, SIToFPInst, UIToFPInst>(FrontV)) {
+ Worklist.emplace_back(generateInstLaneVectorFromOperand(Item, 0),
+ &cast<Instruction>(FrontV)->getOperandUse(0));
continue;
- } else if (auto *BitCast = dyn_cast<BitCastInst>(FrontU)) {
+ } else if (auto *BitCast = dyn_cast<BitCastInst>(FrontV)) {
// TODO: Handle vector widening/narrowing bitcasts.
auto *DstTy = dyn_cast<FixedVectorType>(BitCast->getDestTy());
auto *SrcTy = dyn_cast<FixedVectorType>(BitCast->getSrcTy());
if (DstTy && SrcTy &&
SrcTy->getNumElements() == DstTy->getNumElements()) {
- Worklist.push_back(generateInstLaneVectorFromOperand(Item, 0));
+ Worklist.emplace_back(generateInstLaneVectorFromOperand(Item, 0),
+ &cast<Instruction>(FrontV)->getOperandUse(0));
continue;
}
- } else if (isa<SelectInst>(FrontU)) {
- Worklist.push_back(generateInstLaneVectorFromOperand(Item, 0));
- Worklist.push_back(generateInstLaneVectorFromOperand(Item, 1));
- Worklist.push_back(generateInstLaneVectorFromOperand(Item, 2));
+ } else if (isa<SelectInst>(FrontV)) {
----------------
RKSimon wrote:
Pull out casts into isa as a dyn_cast?
```suggestion
} else if (auto *Sel = dyn_cast<SelectInst>(FrontV)) {
```
https://github.com/llvm/llvm-project/pull/188989
More information about the llvm-commits
mailing list