From: Chris Lattner Date: Mon, 29 Mar 2010 17:28:16 +0000 (+0000) Subject: emit signed integer subtractions as 'sub nsw', patch by X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2eb91e4812d54a1cf634c265a16633a3d3edcf91;p=clang emit signed integer subtractions as 'sub nsw', patch by Anton Yartsev! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99817 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 7e26971414..1ef06ccf6f 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -1337,6 +1337,11 @@ Value *ScalarExprEmitter::EmitSub(const BinOpInfo &Ops) { if (Ops.LHS->getType()->isFPOrFPVectorTy()) return Builder.CreateFSub(Ops.LHS, Ops.RHS, "sub"); + + // Signed integer overflow is undefined behavior. + if (Ops.Ty->isSignedIntegerType()) + return Builder.CreateNSWSub(Ops.LHS, Ops.RHS, "sub"); + return Builder.CreateSub(Ops.LHS, Ops.RHS, "sub"); }