diff options
Diffstat (limited to 'llvm/test/Transforms/LoopUnroll/basic.ll')
| -rw-r--r-- | llvm/test/Transforms/LoopUnroll/basic.ll | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoopUnroll/basic.ll b/llvm/test/Transforms/LoopUnroll/basic.ll new file mode 100644 index 00000000000..1ceac935482 --- /dev/null +++ b/llvm/test/Transforms/LoopUnroll/basic.ll @@ -0,0 +1,48 @@ +; RUN: opt < %s -loop-unroll -S | FileCheck %s +; RUN: opt < %s -passes='require<opt-remark-emit>,unroll' -S | FileCheck %s + + +; This should not unroll since the address of the loop header is taken. + +; CHECK-LABEL: @test1( +; CHECK: store i8* blockaddress(@test1, %l1), i8** %P +; CHECK: l1: +; CHECK-NEXT: phi i32 +; rdar://8287027 +define i32 @test1(i8** %P) nounwind ssp { +entry: + store i8* blockaddress(@test1, %l1), i8** %P + br label %l1 + +l1: ; preds = %l1, %entry + %x.0 = phi i32 [ 0, %entry ], [ %inc, %l1 ] + %inc = add nsw i32 %x.0, 1 + %exitcond = icmp eq i32 %inc, 3 + br i1 %exitcond, label %l2, label %l1 + +l2: ; preds = %l1 + ret i32 0 +} + +; This should not unroll since the call is 'noduplicate'. + +; CHECK-LABEL: @test2( +define i32 @test2(i8** %P) nounwind ssp { +entry: + br label %l1 + +l1: ; preds = %l1, %entry + %x.0 = phi i32 [ 0, %entry ], [ %inc, %l1 ] +; CHECK: call void @f() +; CHECK-NOT: call void @f() + call void @f() noduplicate + %inc = add nsw i32 %x.0, 1 + %exitcond = icmp eq i32 %inc, 3 + br i1 %exitcond, label %l2, label %l1 + +l2: ; preds = %l1 + ret i32 0 +; CHECK: } +} + +declare void @f() |

