[llvm-commits] [llvm] r83606 - /llvm/trunk/lib/Analysis/ScalarEvolution.cpp

Dan Gohman gohman at apple.com
Thu Oct 8 17:41:24 PDT 2009


Author: djg
Date: Thu Oct  8 19:41:22 2009
New Revision: 83606

URL: http://llvm.org/viewvc/llvm-project?rev=83606&view=rev
Log:
Preserve HasNSW and HasNUW when constructing SCEVs for Add and Mul
instructions.

Modified:
    llvm/trunk/lib/Analysis/ScalarEvolution.cpp

Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=83606&r1=83605&r2=83606&view=diff

==============================================================================
--- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original)
+++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Thu Oct  8 19:41:22 2009
@@ -2951,12 +2951,20 @@
 
   Operator *U = cast<Operator>(V);
   switch (Opcode) {
-  case Instruction::Add:
+  case Instruction::Add: {
+    AddOperator *A = cast<AddOperator>(U);
     return getAddExpr(getSCEV(U->getOperand(0)),
-                      getSCEV(U->getOperand(1)));
-  case Instruction::Mul:
+                      getSCEV(U->getOperand(1)),
+                      A->hasNoUnsignedWrap(),
+                      A->hasNoSignedWrap());
+  }
+  case Instruction::Mul: {
+    MulOperator *M = cast<MulOperator>(U);
     return getMulExpr(getSCEV(U->getOperand(0)),
-                      getSCEV(U->getOperand(1)));
+                      getSCEV(U->getOperand(1)),
+                      M->hasNoUnsignedWrap(),
+                      M->hasNoSignedWrap());
+  }
   case Instruction::UDiv:
     return getUDivExpr(getSCEV(U->getOperand(0)),
                        getSCEV(U->getOperand(1)));





More information about the llvm-commits mailing list