summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-06-18 04:38:31 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2016-06-18 04:38:31 +0000
commite8fd9561cb16d9d8398276e8c4ca836199b7699c (patch)
tree87338a5f276ac96b69740a92fa8c45a4d14dd75f /llvm/test/Transforms
parentdc62be191503c932a2025b2489c2da0c55d46ec3 (diff)
downloadbcm5719-llvm-e8fd9561cb16d9d8398276e8c4ca836199b7699c.tar.gz
bcm5719-llvm-e8fd9561cb16d9d8398276e8c4ca836199b7699c.zip
[SCEV] Fix incorrect trip count computation
The way we elide max expressions when computing trip counts is incorrect -- it breaks cases like this: ``` static int wrapping_add(int a, int b) { return (int)((unsigned)a + (unsigned)b); } void test() { volatile int end_buf = 2147483548; // INT_MIN - 100 int end = end_buf; unsigned counter = 0; for (int start = wrapping_add(end, 200); start < end; start++) counter++; print(counter); } ``` Note: the `NoWrap` variable that was being tested has little to do with the values flowing into the max expression; it is a property of the induction variable. test/Transforms/LoopUnroll/nsw-tripcount.ll was added to solely test functionality I'm reverting in this change, so I've deleted the test fully. llvm-svn: 273079
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/LoopUnroll/nsw-tripcount.ll32
1 files changed, 0 insertions, 32 deletions
diff --git a/llvm/test/Transforms/LoopUnroll/nsw-tripcount.ll b/llvm/test/Transforms/LoopUnroll/nsw-tripcount.ll
deleted file mode 100644
index 98cab32a42a..00000000000
--- a/llvm/test/Transforms/LoopUnroll/nsw-tripcount.ll
+++ /dev/null
@@ -1,32 +0,0 @@
-; RUN: opt -loop-unroll -S %s | FileCheck %s
-
-; extern void f(int);
-; void test1(int v) {
-; for (int i=v; i<=v+1; ++i)
-; f(i);
-; }
-;
-; We can use the nsw information to see that the tripcount will be 2, so the
-; loop should be unrolled as this is always beneficial
-
-declare void @f(i32)
-
-; CHECK-LABEL: @test1
-define void @test1(i32 %v) {
-entry:
- %add = add nsw i32 %v, 1
- br label %for.body
-
-for.body:
- %i.04 = phi i32 [ %v, %entry ], [ %inc, %for.body ]
- tail call void @f(i32 %i.04)
- %inc = add nsw i32 %i.04, 1
- %cmp = icmp slt i32 %i.04, %add
- br i1 %cmp, label %for.body, label %for.end
-
-; CHECK: call void @f
-; CHECK-NOT: br i1
-; CHECK: call void @f
-for.end:
- ret void
-}
OpenPOWER on IntegriCloud