[llvm-commits] [llvm-gcc-4.2] r78764 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Dan Gohman gohman at apple.com
Tue Aug 11 18:16:25 PDT 2009


Author: djg
Date: Tue Aug 11 20:16:25 2009
New Revision: 78764

URL: http://llvm.org/viewvc/llvm-project?rev=78764&view=rev
Log:
Use the new nsw form of add for signed integer addition.

Modified:
    llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=78764&r1=78763&r2=78764&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Tue Aug 11 20:16:25 2009
@@ -3605,6 +3605,7 @@
   bool RHSIsSigned = !TYPE_UNSIGNED(TREE_TYPE(TREE_OPERAND(exp, 1)));
   bool TyIsSigned  = !TYPE_UNSIGNED(TREE_TYPE(exp));
   bool IsExactDiv  = TREE_CODE(exp) == EXACT_DIV_EXPR;
+  bool IsPlus      = TREE_CODE(exp) == PLUS_EXPR;
 
   LHS = CastToAnyType(LHS, LHSIsSigned, Ty, TyIsSigned);
   RHS = CastToAnyType(RHS, RHSIsSigned, Ty, TyIsSigned);
@@ -3626,6 +3627,8 @@
   Value *V;
   if (Opc == Instruction::SDiv && IsExactDiv)
     V = Builder.CreateExactSDiv(LHS, RHS);
+  else if (Opc == Instruction::Add && IsPlus && TyIsSigned && !flag_wrapv)
+    V = Builder.CreateNSWAdd(LHS, RHS);
   else
     V = Builder.CreateBinOp((Instruction::BinaryOps)Opc, LHS, RHS);
   if (ResTy != Ty)





More information about the llvm-commits mailing list