[llvm-branch-commits] [llvm-branch] r226839 - Merging r226755:
Hans Wennborg
hans at hanshq.net
Thu Jan 22 08:58:19 PST 2015
Author: hans
Date: Thu Jan 22 10:58:19 2015
New Revision: 226839
URL: http://llvm.org/viewvc/llvm-project?rev=226839&view=rev
Log:
Merging r226755:
------------------------------------------------------------------------
r226755 | sanjoy | 2015-01-21 16:48:47 -0800 (Wed, 21 Jan 2015) | 11 lines
Make ScalarEvolution less aggressive with respect to no-wrap flags.
ScalarEvolution currently lowers a subtraction recurrence to an add
recurrence with the same no-wrap flags as the subtraction. This is
incorrect because `sub nsw X, Y` is not the same as `add nsw X, -Y`
and `sub nuw X, Y` is not the same as `add nuw X, -Y`. This patch
fixes the issue, and adds two test cases demonstrating the bug.
Differential Revision: http://reviews.llvm.org/D7081
------------------------------------------------------------------------
Added:
llvm/branches/release_36/test/Analysis/ScalarEvolution/nw-sub-is-not-nw-add.ll
- copied unchanged from r226755, llvm/trunk/test/Analysis/ScalarEvolution/nw-sub-is-not-nw-add.ll
Modified:
llvm/branches/release_36/ (props changed)
llvm/branches/release_36/lib/Analysis/ScalarEvolution.cpp
Propchange: llvm/branches/release_36/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 22 10:58:19 2015
@@ -1,3 +1,3 @@
/llvm/branches/Apple/Pertwee:110850,110961
/llvm/branches/type-system-rewrite:133420-134817
-/llvm/trunk:155241,226023,226029,226044,226046,226048,226058,226075,226170-226171,226182,226473
+/llvm/trunk:155241,226023,226029,226044,226046,226048,226058,226075,226170-226171,226182,226473,226755
Modified: llvm/branches/release_36/lib/Analysis/ScalarEvolution.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_36/lib/Analysis/ScalarEvolution.cpp?rev=226839&r1=226838&r2=226839&view=diff
==============================================================================
--- llvm/branches/release_36/lib/Analysis/ScalarEvolution.cpp (original)
+++ llvm/branches/release_36/lib/Analysis/ScalarEvolution.cpp Thu Jan 22 10:58:19 2015
@@ -3154,8 +3154,9 @@ const SCEV *ScalarEvolution::getMinusSCE
if (LHS == RHS)
return getConstant(LHS->getType(), 0);
- // X - Y --> X + -Y
- return getAddExpr(LHS, getNegativeSCEV(RHS), Flags);
+ // X - Y --> X + -Y.
+ // X -(nsw || nuw) Y --> X + -Y.
+ return getAddExpr(LHS, getNegativeSCEV(RHS));
}
/// getTruncateOrZeroExtend - Return a SCEV corresponding to a conversion of the
@@ -3461,12 +3462,10 @@ const SCEV *ScalarEvolution::createNodeF
if (isKnownPositive(getMinusSCEV(getSCEV(GEP), Ptr)))
Flags = setFlags(Flags, SCEV::FlagNUW);
}
- } else if (const SubOperator *OBO =
- dyn_cast<SubOperator>(BEValueV)) {
- if (OBO->hasNoUnsignedWrap())
- Flags = setFlags(Flags, SCEV::FlagNUW);
- if (OBO->hasNoSignedWrap())
- Flags = setFlags(Flags, SCEV::FlagNSW);
+
+ // We cannot transfer nuw and nsw flags from subtraction
+ // operations -- sub nuw X, Y is not the same as add nuw X, -Y
+ // for instance.
}
const SCEV *StartVal = getSCEV(StartValueV);
More information about the llvm-branch-commits
mailing list