summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2015-06-06 05:24:10 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2015-06-06 05:24:10 +0000
commitad714b1af3d57b18439f62f2a0a7b96798c2b62b (patch)
treeee494f840941b9b9bb09368d72c34a6379e2449d /llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
parent1c297e66fb839f574cfe2796acbcb8a499168259 (diff)
downloadbcm5719-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.cpp6
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");
OpenPOWER on IntegriCloud