diff options
author | Owen Anderson <resistor@mac.com> | 2010-09-09 20:02:23 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2010-09-09 20:02:23 +0000 |
commit | 547462b98cc0da6505ffafb1d47f0ed6f7518288 (patch) | |
tree | 566b2cf8432874ababcba8e10e40233913dc004b | |
parent | cc443c37eed4fca3ab592bb7bf16a3bf6ec6c510 (diff) | |
download | external_llvm-547462b98cc0da6505ffafb1d47f0ed6f7518288.zip external_llvm-547462b98cc0da6505ffafb1d47f0ed6f7518288.tar.gz external_llvm-547462b98cc0da6505ffafb1d47f0ed6f7518288.tar.bz2 |
Revert r113439, which relaxed the requirement that loops containing calls cannot be unrolled. After some discussion,
there seems to be a better way to achieve the same effect.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113528 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/Scalar/LoopUnrollPass.cpp | 6 | ||||
-rw-r--r-- | test/Transforms/LoopUnroll/call.ll | 51 |
2 files changed, 2 insertions, 55 deletions
diff --git a/lib/Transforms/Scalar/LoopUnrollPass.cpp b/lib/Transforms/Scalar/LoopUnrollPass.cpp index 4d23178..7968939 100644 --- a/lib/Transforms/Scalar/LoopUnrollPass.cpp +++ b/lib/Transforms/Scalar/LoopUnrollPass.cpp @@ -155,10 +155,8 @@ bool LoopUnroll::runOnLoop(Loop *L, LPPassManager &LPM) { unsigned LoopSize = ApproximateLoopSize(L, NumCalls); DEBUG(dbgs() << " Loop Size = " << LoopSize << "\n"); if (NumCalls != 0) { - // Even for a loop that contains calls, it can still be profitable to - // unroll if the loop is really, REALLY small. - DEBUG(dbgs() <<" Using lower threshold for loop with function calls.\n"); - CurrentThreshold = OptSizeUnrollThreshold; + DEBUG(dbgs() << " Not unrolling loop with function calls.\n"); + return false; } uint64_t Size = (uint64_t)LoopSize*Count; if (TripCount != 1 && Size > CurrentThreshold) { diff --git a/test/Transforms/LoopUnroll/call.ll b/test/Transforms/LoopUnroll/call.ll deleted file mode 100644 index 5dcb3bc..0000000 --- a/test/Transforms/LoopUnroll/call.ll +++ /dev/null @@ -1,51 +0,0 @@ -; RUN: opt < %s -S -loop-unroll | FileCheck %s - -@id = internal global i32 0 -@val = internal global [4 x i32] zeroinitializer, align 16 - -; CHECK: @test -define i32 @test(i32 %k) nounwind ssp { -; CHECK-NOT: call i32 @test(i32 %t.06) -; CHECK: call i32 @test(i32 0) -; CHECK-NOT: call i32 @test(i32 %t.06) -; CHECK: call i32 @test(i32 1) -; CHECK-NOT: call i32 @test(i32 %t.06) -; CHECK: call i32 @test(i32 2) -; CHECK-NOT: call i32 @test(i32 %t.06) -; CHECK: call i32 @test(i32 3) -; CHECK-NOT: call i32 @test(i32 %t.06) - -bb.nph: - %0 = load i32* @id, align 4 - %1 = add nsw i32 %0, 1 - store i32 %1, i32* @id, align 4 - %2 = sext i32 %k to i64 - %3 = getelementptr inbounds [4 x i32]* @val, i64 0, i64 %2 - store i32 %1, i32* %3, align 4 - br label %bb - -bb: ; preds = %bb2, %bb.nph - %indvar = phi i64 [ 0, %bb.nph ], [ %indvar.next, %bb2 ] - %scevgep = getelementptr [4 x i32]* @val, i64 0, i64 %indvar - %4 = load i32* %scevgep, align 4 - %5 = icmp eq i32 %4, 0 - br i1 %5, label %bb1, label %bb2 - -bb1: ; preds = %bb - %t.06 = trunc i64 %indvar to i32 - %6 = tail call i32 @test(i32 %t.06) nounwind - br label %bb2 - -bb2: ; preds = %bb1, %bb - %indvar.next = add i64 %indvar, 1 - %exitcond = icmp eq i64 %indvar.next, 4 - br i1 %exitcond, label %bb4, label %bb - -bb4: ; preds = %bb2 - %.pre = load i32* @id, align 4 - %7 = add nsw i32 %.pre, -1 - store i32 %7, i32* @id, align 4 - store i32 0, i32* %3, align 4 - ret i32 undef -; CHECK: } -} |