[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