diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-06-06 05:24:10 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-06-06 05:24:10 +0000 |
commit | ad714b1af3d57b18439f62f2a0a7b96798c2b62b (patch) | |
tree | ee494f840941b9b9bb09368d72c34a6379e2449d /llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp | |
parent | 1c297e66fb839f574cfe2796acbcb8a499168259 (diff) | |
download | bcm5719-llvm-ad714b1af3d57b18439f62f2a0a7b96798c2b62b.tar.gz bcm5719-llvm-ad714b1af3d57b18439f62f2a0a7b96798c2b62b.zip |
[LoopUnroll] Fix truncation bug in canUnrollCompletely.
Summary:
canUnrollCompletely takes `unsigned` values for `UnrolledCost` and
`RolledDynamicCost` but is passed in `uint64_t`s that are silently
truncated. Because of this, when `UnrolledSize` is a large integer
that has a small remainder with UINT32_MAX, LLVM tries to completely
unroll loops with high trip counts.
Reviewers: mzolotukhin, chandlerc
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D10293
llvm-svn: 239218
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp index d8ba9648b95..e831d834070 100644 --- a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp +++ b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp @@ -227,7 +227,7 @@ namespace { bool canUnrollCompletely(Loop *L, unsigned Threshold, unsigned PercentDynamicCostSavedThreshold, unsigned DynamicCostSavingsDiscount, - unsigned UnrolledCost, unsigned RolledDynamicCost); + uint64_t UnrolledCost, uint64_t RolledDynamicCost); }; } @@ -768,8 +768,8 @@ static void SetLoopAlreadyUnrolled(Loop *L) { bool LoopUnroll::canUnrollCompletely(Loop *L, unsigned Threshold, unsigned PercentDynamicCostSavedThreshold, unsigned DynamicCostSavingsDiscount, - unsigned UnrolledCost, - unsigned RolledDynamicCost) { + uint64_t UnrolledCost, + uint64_t RolledDynamicCost) { if (Threshold == NoThreshold) { DEBUG(dbgs() << " Can fully unroll, because no threshold is set.\n"); |