[llvm] [InstCombine] fix assertion failure in intrinsic distributive laws (PR #216483)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 18 09:46:07 PDT 2026
================
@@ -1853,24 +1853,24 @@ foldIntrinsicUsingDistributiveLaws(IntrinsicInst *II,
return nullptr;
}
- BinaryOperator *NewBinop;
+ Value *NewBinop; // dont decide BinaryOperator now
if (A == C &&
leftDistributesOverRight(InnerOpcode, HasNUW, HasNSW, TopLevelOpcode)) {
Value *NewIntrinsic = Builder.CreateBinaryIntrinsic(TopLevelOpcode, B, D);
- NewBinop =
- cast<BinaryOperator>(Builder.CreateBinOp(InnerOpcode, A, NewIntrinsic));
+ NewBinop = Builder.CreateBinOp(InnerOpcode, A, NewIntrinsic);
} else if (B == D && rightDistributesOverLeft(InnerOpcode, HasNUW, HasNSW,
TopLevelOpcode)) {
Value *NewIntrinsic = Builder.CreateBinaryIntrinsic(TopLevelOpcode, A, C);
- NewBinop =
- cast<BinaryOperator>(Builder.CreateBinOp(InnerOpcode, NewIntrinsic, B));
+ NewBinop = Builder.CreateBinOp(InnerOpcode, NewIntrinsic, B);
} else {
return nullptr;
}
- NewBinop->setHasNoUnsignedWrap(HasNUW);
- NewBinop->setHasNoSignedWrap(HasNSW);
-
+ // check if NewBinop is actually a BinaryOperator
+ if (BinaryOperator *NBO = dyn_cast<BinaryOperator>(NewBinop)) {
+ NBO->setHasNoUnsignedWrap(HasNUW);
+ NBO->setHasNoSignedWrap(HasNSW);
+ }
----------------
im-lunex wrote:
done
https://github.com/llvm/llvm-project/pull/216483
More information about the llvm-commits
mailing list