diff options
Diffstat (limited to 'test/Transforms')
-rw-r--r-- | test/Transforms/FunctionAttrs/2008-12-31-NoCapture.ll | 24 | ||||
-rw-r--r-- | test/Transforms/JumpThreading/no-irreducible-loops.ll | 38 |
2 files changed, 58 insertions, 4 deletions
diff --git a/test/Transforms/FunctionAttrs/2008-12-31-NoCapture.ll b/test/Transforms/FunctionAttrs/2008-12-31-NoCapture.ll index b874c82..aec134a 100644 --- a/test/Transforms/FunctionAttrs/2008-12-31-NoCapture.ll +++ b/test/Transforms/FunctionAttrs/2008-12-31-NoCapture.ll @@ -39,6 +39,16 @@ define i1 @c5(i32* %q, i32 %bitno) { ret i1 %val } +declare void @throw_if_bit_set(i8*, i8) readonly +define i1 @c6(i8* %q, i8 %bit) { + invoke void @throw_if_bit_set(i8* %q, i8 %bit) + to label %ret0 unwind label %ret1 +ret0: + ret i1 0 +ret1: + ret i1 1 +} + define i32 @nc1(i32* %q, i32* %p, i1 %b) { e: br label %l @@ -63,14 +73,20 @@ define void @nc3(void ()* %p) { ret void } -declare void @external(i8*) readonly +declare void @external(i8*) readonly nounwind define void @nc4(i8* %p) { call void @external(i8* %p) ret void } -define void @nc5(void (i8*)* %f, i8* %p) { - call void %f(i8* %p) readonly - call void %f(i8* nocapture %p) +define void @nc5(void (i8*)* %p, i8* %r) { + call void %p(i8* %r) + call void %p(i8* nocapture %r) + ret void +} + +declare i8* @external_identity(i8*) readonly nounwind +define void @nc6(i8* %p) { + call i8* @external_identity(i8* %p) ret void } diff --git a/test/Transforms/JumpThreading/no-irreducible-loops.ll b/test/Transforms/JumpThreading/no-irreducible-loops.ll new file mode 100644 index 0000000..0c729d1 --- /dev/null +++ b/test/Transforms/JumpThreading/no-irreducible-loops.ll @@ -0,0 +1,38 @@ +; RUN: llvm-as < %s | opt -jump-threading -loop-rotate -instcombine -indvars -loop-unroll -simplifycfg | llvm-dis > %t +; RUN: grep {volatile store} %t | count 3 +; RUN: not grep {br label} %t + +; Jump threading should not prevent this loop from being unrolled. + +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" +target triple = "i386-apple-darwin9.6" +@v1 = external global i32 ; <i32*> [#uses=2] + +define i32 @unroll() nounwind { +entry: + br label %bb4 + +bb: ; preds = %bb4 + %0 = icmp eq i32 %i.0, 0 ; <i1> [#uses=1] + br i1 %0, label %bb1, label %bb2 + +bb1: ; preds = %bb + volatile store i32 1000, i32* @v1, align 4 + br label %bb3 + +bb2: ; preds = %bb + volatile store i32 1001, i32* @v1, align 4 + br label %bb3 + +bb3: ; preds = %bb2, %bb1 + %1 = add i32 %i.0, 1 ; <i32> [#uses=1] + br label %bb4 + +bb4: ; preds = %bb3, %entry + %i.0 = phi i32 [ 0, %entry ], [ %1, %bb3 ] ; <i32> [#uses=3] + %2 = icmp sgt i32 %i.0, 2 ; <i1> [#uses=1] + br i1 %2, label %bb5, label %bb + +bb5: ; preds = %bb4 + ret i32 0 +} |