================ @@ -4093,6 +4109,11 @@ Value *ScalarExprEmitter::EmitAdd(const BinOpInfo &op) { op.RHS->getType()->isPointerTy()) return emitPointerArithmetic(CGF, op, CodeGenFunction::NotSubtraction); + if ((op.Ty->isSignedIntegerOrEnumerationType() || ---------------- JustinStitt wrote:
It can't just be flat out removed, if that's what you're asking. An alternative would be a few additions to existing if-statements resulting in about the same level of readability. Specifically a diff like this should perform the same: ```diff diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index 70b3849240cd..3f6bac748506 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -4109,12 +4109,7 @@ Value *ScalarExprEmitter::EmitAdd(const BinOpInfo &op) { op.RHS->getType()->isPointerTy()) return emitPointerArithmetic(CGF, op, CodeGenFunction::NotSubtraction); - if ((op.Ty->isSignedIntegerOrEnumerationType() || - op.Ty->isUnsignedIntegerType()) && - op.hasWrappingOperand()) - return Builder.CreateAdd(op.LHS, op.RHS, "add"); - - if (op.Ty->isSignedIntegerOrEnumerationType()) { + if (op.Ty->isSignedIntegerOrEnumerationType() && !op.hasWrappingOperand()) { switch (CGF.getLangOpts().getSignedOverflowBehavior()) { case LangOptions::SOB_Defined: if (!CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow)) @@ -4147,7 +4142,7 @@ Value *ScalarExprEmitter::EmitAdd(const BinOpInfo &op) { if (op.Ty->isUnsignedIntegerType() && CGF.SanOpts.has(SanitizerKind::UnsignedIntegerOverflow) && - !CanElideOverflowCheck(CGF.getContext(), op)) + !CanElideOverflowCheck(CGF.getContext(), op) && !op.hasWrappingOperand()) return EmitOverflowCheckedBinOp(op); if (op.LHS->getType()->isFPOrFPVectorTy()) { ``` https://github.com/llvm/llvm-project/pull/86618 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits