summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp4
-rw-r--r--llvm/test/Transforms/LoopUnroll/PowerPC/a2-unrolling.ll25
-rw-r--r--llvm/test/Transforms/LoopUnroll/PowerPC/p7-unrolling.ll49
-rw-r--r--llvm/test/Transforms/LoopUnroll/partial-unroll-optsize.ll53
-rw-r--r--llvm/test/Transforms/LoopUnroll/unroll-opt-attribute.ll56
-rw-r--r--llvm/test/Transforms/LoopUnroll/unroll-pragmas.ll23
6 files changed, 38 insertions, 172 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
index 2e5c55e73a4..95ec12d5cb8 100644
--- a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
@@ -111,9 +111,9 @@ static TargetTransformInfo::UnrollingPreferences gatherUnrollingPreferences(
UP.Threshold = 150;
UP.PercentDynamicCostSavedThreshold = 20;
UP.DynamicCostSavingsDiscount = 2000;
- UP.OptSizeThreshold = 50;
+ UP.OptSizeThreshold = 0;
UP.PartialThreshold = UP.Threshold;
- UP.PartialOptSizeThreshold = UP.OptSizeThreshold;
+ UP.PartialOptSizeThreshold = 0;
UP.Count = 0;
UP.MaxCount = UINT_MAX;
UP.FullUnrollMaxCount = UINT_MAX;
diff --git a/llvm/test/Transforms/LoopUnroll/PowerPC/a2-unrolling.ll b/llvm/test/Transforms/LoopUnroll/PowerPC/a2-unrolling.ll
index bf2b9cf40dd..77e92bd7506 100644
--- a/llvm/test/Transforms/LoopUnroll/PowerPC/a2-unrolling.ll
+++ b/llvm/test/Transforms/LoopUnroll/PowerPC/a2-unrolling.ll
@@ -1,30 +1,5 @@
; RUN: opt < %s -S -mtriple=powerpc64-unknown-linux-gnu -mcpu=a2 -loop-unroll | FileCheck %s -check-prefix=EPILOG
; RUN: opt < %s -S -mtriple=powerpc64-unknown-linux-gnu -mcpu=a2 -loop-unroll -unroll-runtime-epilog=false | FileCheck %s -check-prefix=PROLOG
-define void @unroll_opt_for_size() nounwind optsize {
-entry:
- br label %loop
-
-loop:
- %iv = phi i32 [ 0, %entry ], [ %inc, %loop ]
- %inc = add i32 %iv, 1
- %exitcnd = icmp uge i32 %inc, 1024
- br i1 %exitcnd, label %exit, label %loop
-
-exit:
- ret void
-}
-
-; EPILOG-LABEL: @unroll_opt_for_size
-; EPILOG: add
-; EPILOG-NEXT: add
-; EPILOG-NEXT: add
-; EPILOG: icmp
-
-; PROLOG-LABEL: @unroll_opt_for_size
-; PROLOG: add
-; PROLOG-NEXT: add
-; PROLOG-NEXT: add
-; PROLOG: icmp
define i32 @test(i32* nocapture %a, i32 %n) nounwind uwtable readonly {
entry:
diff --git a/llvm/test/Transforms/LoopUnroll/PowerPC/p7-unrolling.ll b/llvm/test/Transforms/LoopUnroll/PowerPC/p7-unrolling.ll
index 7a50fc0a4f4..c9677d83e37 100644
--- a/llvm/test/Transforms/LoopUnroll/PowerPC/p7-unrolling.ll
+++ b/llvm/test/Transforms/LoopUnroll/PowerPC/p7-unrolling.ll
@@ -1,53 +1,4 @@
; RUN: opt < %s -S -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -loop-unroll | FileCheck %s
-define void @unroll_opt_for_size() nounwind optsize {
-entry:
- br label %loop
-
-loop:
- %iv = phi i32 [ 0, %entry ], [ %inc, %loop ]
- %inc = add i32 %iv, 1
- %exitcnd = icmp uge i32 %inc, 1024
- br i1 %exitcnd, label %exit, label %loop
-
-exit:
- ret void
-}
-
-; CHECK-LABEL: @unroll_opt_for_size
-; CHECK: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: icmp
-
define void @unroll_default() nounwind {
entry:
br label %loop
diff --git a/llvm/test/Transforms/LoopUnroll/partial-unroll-optsize.ll b/llvm/test/Transforms/LoopUnroll/partial-unroll-optsize.ll
deleted file mode 100644
index e5e0151761b..00000000000
--- a/llvm/test/Transforms/LoopUnroll/partial-unroll-optsize.ll
+++ /dev/null
@@ -1,53 +0,0 @@
-; RUN: opt < %s -S -loop-unroll -unroll-allow-partial | FileCheck %s
-; RUN: sed -e 's/optsize/minsize/' %s | opt -S -loop-unroll -unroll-allow-partial | FileCheck %s
-
-; Loop size = 3, when the function has the optsize attribute, the
-; OptSizeUnrollThreshold, i.e. 50, is used, hence the loop should be unrolled
-; by 32 times because (1 * 32) + 2 < 50 (whereas (1 * 64 + 2) is not).
-define void @unroll_opt_for_size() nounwind optsize {
-entry:
- br label %loop
-
-loop:
- %iv = phi i32 [ 0, %entry ], [ %inc, %loop ]
- %inc = add i32 %iv, 1
- %exitcnd = icmp uge i32 %inc, 1024
- br i1 %exitcnd, label %exit, label %loop
-
-exit:
- ret void
-}
-
-; CHECK: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: add
-; CHECK-NEXT: icmp
diff --git a/llvm/test/Transforms/LoopUnroll/unroll-opt-attribute.ll b/llvm/test/Transforms/LoopUnroll/unroll-opt-attribute.ll
index 334162f5605..f4a76c71368 100644
--- a/llvm/test/Transforms/LoopUnroll/unroll-opt-attribute.ll
+++ b/llvm/test/Transforms/LoopUnroll/unroll-opt-attribute.ll
@@ -4,10 +4,10 @@
;///////////////////// TEST 1 //////////////////////////////
-; This test shows that with optsize attribute, the loop is unrolled
-; according to the specified unroll factor.
+; This test shows that the loop is unrolled according to the specified
+; unroll factor.
-define void @Test1() nounwind optsize {
+define void @Test1() nounwind {
entry:
br label %loop
@@ -32,38 +32,10 @@ exit:
;///////////////////// TEST 2 //////////////////////////////
-; This test shows that with minsize attribute, the loop is unrolled
-; according to the specified unroll factor.
-
-define void @Test2() nounwind minsize {
-entry:
- br label %loop
-
-loop:
- %iv = phi i32 [ 0, %entry ], [ %inc, %loop ]
- %inc = add i32 %iv, 1
- %exitcnd = icmp uge i32 %inc, 1024
- br i1 %exitcnd, label %exit, label %loop
-
-exit:
- ret void
-}
-
-; CHECK_COUNT4-LABEL: @Test2
-; CHECK_COUNT4: phi
-; CHECK_COUNT4-NEXT: add
-; CHECK_COUNT4-NEXT: add
-; CHECK_COUNT4-NEXT: add
-; CHECK_COUNT4-NEXT: add
-; CHECK_COUNT4-NEXT: icmp
-
-
-;///////////////////// TEST 3 //////////////////////////////
-
; This test shows that with optnone attribute, the loop is not unrolled
; even if an unroll factor was specified.
-define void @Test3() nounwind optnone noinline {
+define void @Test2() nounwind optnone noinline {
entry:
br label %loop
@@ -77,20 +49,19 @@ exit:
ret void
}
-; CHECK_COUNT4-LABEL: @Test3
+; CHECK_COUNT4-LABEL: @Test2
; CHECK_COUNT4: phi
; CHECK_COUNT4-NEXT: add
; CHECK_COUNT4-NEXT: icmp
-;///////////////////// TEST 4 //////////////////////////////
+;///////////////////// TEST 3 //////////////////////////////
-; This test shows that without any attribute, this loop is fully unrolled
-; by default.
+; This test shows that this loop is fully unrolled by default.
@tab = common global [24 x i32] zeroinitializer, align 4
-define i32 @Test4() {
+define i32 @Test3() {
entry:
br label %for.body
@@ -106,7 +77,7 @@ for.end: ; preds = %for.body
ret i32 42
}
-; CHECK_NOCOUNT-LABEL: @Test4
+; CHECK_NOCOUNT-LABEL: @Test3
; CHECK_NOCOUNT: store
; CHECK_NOCOUNT-NEXT: store
; CHECK_NOCOUNT-NEXT: store
@@ -134,12 +105,11 @@ for.end: ; preds = %for.body
; CHECK_NOCOUNT-NEXT: ret
-;///////////////////// TEST 5 //////////////////////////////
+;///////////////////// TEST 4 //////////////////////////////
-; This test shows that with optsize attribute, this loop is not unrolled
-; by default.
+; This test shows that with optsize attribute, this loop is not unrolled.
-define i32 @Test5() optsize {
+define i32 @Test4() optsize {
entry:
br label %for.body
@@ -155,6 +125,6 @@ for.end: ; preds = %for.body
ret i32 42
}
-; CHECK_NOCOUNT-LABEL: @Test5
+; CHECK_NOCOUNT-LABEL: @Test4
; CHECK_NOCOUNT: phi
; CHECK_NOCOUNT: icmp
diff --git a/llvm/test/Transforms/LoopUnroll/unroll-pragmas.ll b/llvm/test/Transforms/LoopUnroll/unroll-pragmas.ll
index 88f32c92d69..5b405a030a1 100644
--- a/llvm/test/Transforms/LoopUnroll/unroll-pragmas.ll
+++ b/llvm/test/Transforms/LoopUnroll/unroll-pragmas.ll
@@ -108,6 +108,29 @@ for.end: ; preds = %for.body
!3 = !{!3, !4}
!4 = !{!"llvm.loop.unroll.full"}
+; #pragma clang loop unroll(full)
+; Loop should be fully unrolled, even for optsize.
+;
+; CHECK-LABEL: @loop64_with_full_optsize(
+; CHECK-NOT: br i1
+define void @loop64_with_full_optsize(i32* nocapture %a) optsize {
+entry:
+ br label %for.body
+
+for.body: ; preds = %for.body, %entry
+ %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
+ %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
+ %0 = load i32, i32* %arrayidx, align 4
+ %inc = add nsw i32 %0, 1
+ store i32 %inc, i32* %arrayidx, align 4
+ %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
+ %exitcond = icmp eq i64 %indvars.iv.next, 64
+ br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !3
+
+for.end: ; preds = %for.body
+ ret void
+}
+
; #pragma clang loop unroll_count(4)
; Loop should be unrolled 4 times.
;
OpenPOWER on IntegriCloud