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

Dan Gohman gohman at apple.com
Thu Dec 17 18:59:06 PST 2009


Author: djg
Date: Thu Dec 17 20:59:05 2009
New Revision: 91663

URL: http://llvm.org/viewvc/llvm-project?rev=91663&view=rev
Log:
Add the NSW bit to integer negation operators.

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=91663&r1=91662&r2=91663&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Thu Dec 17 20:59:05 2009
@@ -3173,8 +3173,10 @@
     Value *V = Emit(TREE_OPERAND(exp, 0), 0);
     if (V->getType()->isFPOrFPVector())
       return Builder.CreateFNeg(V);
-    if (!isa<PointerType>(V->getType()))
-      return Builder.CreateNeg(V);
+    if (!isa<PointerType>(V->getType())) {
+      bool HasNSW = !TYPE_UNSIGNED(TREE_TYPE(exp)) && !flag_wrapv;
+      return HasNSW ? Builder.CreateNSWNeg(V) : Builder.CreateNeg(V);
+    }
 
     // GCC allows NEGATE_EXPR on pointers as well.  Cast to int, negate, cast
     // back.





More information about the llvm-commits mailing list