diff options
| author | Craig Topper <craig.topper@gmail.com> | 2017-05-06 06:03:07 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@gmail.com> | 2017-05-06 06:03:07 +0000 |
| commit | 6c5e22a4b876fa6a40929f06d8c3b3967324ce76 (patch) | |
| tree | 3686bab7f2086c2c25ec4828a2dfe4131c3e6ccf /llvm/lib/Analysis | |
| parent | 69f1af29fba253eb908d81fdcb0471487b8813f2 (diff) | |
| download | bcm5719-llvm-6c5e22a4b876fa6a40929f06d8c3b3967324ce76.tar.gz bcm5719-llvm-6c5e22a4b876fa6a40929f06d8c3b3967324ce76.zip | |
[SCEV] Remove extra APInt copies from getRangeForAffineARHelper.
This changes one parameter to be a const APInt& since we only read from it. Use std::move on local APInts once they are no longer needed so we can reuse their allocations. Lastly, use operator+=(uint64_t) instead of adding 1 to an APInt twice creating a new APInt each time.
llvm-svn: 302335
Diffstat (limited to 'llvm/lib/Analysis')
| -rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 69284e29336..e19bca4a236 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -4843,7 +4843,7 @@ ScalarEvolution::getRange(const SCEV *S, // argument defines if we treat Step as signed or unsigned. static ConstantRange getRangeForAffineARHelper(APInt Step, ConstantRange StartRange, - APInt MaxBECount, + const APInt &MaxBECount, unsigned BitWidth, bool Signed) { // If either Step or MaxBECount is 0, then the expression won't change, and we // just need to return the initial range. @@ -4882,8 +4882,8 @@ static ConstantRange getRangeForAffineARHelper(APInt Step, // if the expression is decreasing and will be increased by Offset otherwise. APInt StartLower = StartRange.getLower(); APInt StartUpper = StartRange.getUpper() - 1; - APInt MovedBoundary = - Descending ? (StartLower - Offset) : (StartUpper + Offset); + APInt MovedBoundary = Descending ? (StartLower - std::move(Offset)) + : (StartUpper + std::move(Offset)); // It's possible that the new minimum/maximum value will fall into the initial // range (due to wrap around). This means that the expression can take any @@ -4891,21 +4891,18 @@ static ConstantRange getRangeForAffineARHelper(APInt Step, if (StartRange.contains(MovedBoundary)) return ConstantRange(BitWidth, /* isFullSet = */ true); - APInt NewLower, NewUpper; - if (Descending) { - NewLower = MovedBoundary; - NewUpper = StartUpper; - } else { - NewLower = StartLower; - NewUpper = MovedBoundary; - } + APInt NewLower = + Descending ? std::move(MovedBoundary) : std::move(StartLower); + APInt NewUpper = + Descending ? std::move(StartUpper) : std::move(MovedBoundary); + NewUpper += 1; // If we end up with full range, return a proper full range. - if (NewLower == NewUpper + 1) + if (NewLower == NewUpper) return ConstantRange(BitWidth, /* isFullSet = */ true); // No overflow detected, return [StartLower, StartUpper + Offset + 1) range. - return ConstantRange(NewLower, NewUpper + 1); + return ConstantRange(std::move(NewLower), std::move(NewUpper)); } ConstantRange ScalarEvolution::getRangeForAffineAR(const SCEV *Start, |

