diff options
Diffstat (limited to 'polly/test/CodeGen/loop_with_condition_nested.ll')
| -rw-r--r-- | polly/test/CodeGen/loop_with_condition_nested.ll | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/polly/test/CodeGen/loop_with_condition_nested.ll b/polly/test/CodeGen/loop_with_condition_nested.ll new file mode 100644 index 00000000000..0a5f0cc4c18 --- /dev/null +++ b/polly/test/CodeGen/loop_with_condition_nested.ll @@ -0,0 +1,174 @@ +; RUN: opt %loadPolly %defaultOpts -polly-cloog -analyze < %s | FileCheck %s +; RUN: opt %loadPolly %defaultOpts -polly-codegen < %s | lli +; ModuleID = 'loop_with_condition_nested.s' +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" +target triple = "x86_64-pc-linux-gnu" + +@A = common global [1024 x i32] zeroinitializer, align 16 ; <[1024 x i32]*> [#uses=4] +@B = common global [1024 x i32] zeroinitializer, align 16 ; <[1024 x i32]*> [#uses=4] + +define void @loop_with_condition() nounwind { +; <label>:0 + call void @llvm.memory.barrier(i1 true, i1 true, i1 true, i1 true, i1 false) + br label %1 + +; <label>:1 ; preds = %10, %0 + %indvar = phi i64 [ %indvar.next, %10 ], [ 0, %0 ] ; <i64> [#uses=5] + %scevgep = getelementptr [1024 x i32]* @A, i64 0, i64 %indvar ; <i32*> [#uses=2] + %scevgep1 = getelementptr [1024 x i32]* @B, i64 0, i64 %indvar ; <i32*> [#uses=1] + %i.0 = trunc i64 %indvar to i32 ; <i32> [#uses=2] + %exitcond = icmp ne i64 %indvar, 1024 ; <i1> [#uses=1] + br i1 %exitcond, label %2, label %11 + +; <label>:2 ; preds = %1 + %3 = icmp sle i32 %i.0, 512 ; <i1> [#uses=1] + br i1 %3, label %4, label %9 + +; <label>:4 ; preds = %2 + %5 = icmp sgt i32 %i.0, 20 ; <i1> [#uses=1] + br i1 %5, label %6, label %7 + +; <label>:6 ; preds = %4 + store i32 1, i32* %scevgep + br label %8 + +; <label>:7 ; preds = %4 + store i32 2, i32* %scevgep + br label %8 + +; <label>:8 ; preds = %7, %6 + br label %9 + +; <label>:9 ; preds = %8, %2 + store i32 3, i32* %scevgep1 + br label %10 + +; <label>:10 ; preds = %9 + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %1 + +; <label>:11 ; preds = %1 + call void @llvm.memory.barrier(i1 true, i1 true, i1 true, i1 true, i1 false) + ret void +} + +declare void @llvm.memory.barrier(i1, i1, i1, i1, i1) nounwind + +define i32 @main() nounwind { +; <label>:0 + call void @llvm.memset.p0i8.i64(i8* bitcast ([1024 x i32]* @A to i8*), i8 0, i64 4096, i32 1, i1 false) + call void @llvm.memset.p0i8.i64(i8* bitcast ([1024 x i32]* @B to i8*), i8 0, i64 4096, i32 1, i1 false) + call void @loop_with_condition() + br label %1 + +; <label>:1 ; preds = %8, %0 + %indvar1 = phi i64 [ %indvar.next2, %8 ], [ 0, %0 ] ; <i64> [#uses=3] + %scevgep3 = getelementptr [1024 x i32]* @B, i64 0, i64 %indvar1 ; <i32*> [#uses=1] + %i.0 = trunc i64 %indvar1 to i32 ; <i32> [#uses=1] + %2 = icmp slt i32 %i.0, 1024 ; <i1> [#uses=1] + br i1 %2, label %3, label %9 + +; <label>:3 ; preds = %1 + %4 = load i32* %scevgep3 ; <i32> [#uses=1] + %5 = icmp ne i32 %4, 3 ; <i1> [#uses=1] + br i1 %5, label %6, label %7 + +; <label>:6 ; preds = %3 + br label %39 + +; <label>:7 ; preds = %3 + br label %8 + +; <label>:8 ; preds = %7 + %indvar.next2 = add i64 %indvar1, 1 ; <i64> [#uses=1] + br label %1 + +; <label>:9 ; preds = %1 + br label %10 + +; <label>:10 ; preds = %37, %9 + %indvar = phi i64 [ %indvar.next, %37 ], [ 0, %9 ] ; <i64> [#uses=3] + %scevgep = getelementptr [1024 x i32]* @A, i64 0, i64 %indvar ; <i32*> [#uses=3] + %i.1 = trunc i64 %indvar to i32 ; <i32> [#uses=6] + %11 = icmp slt i32 %i.1, 1024 ; <i1> [#uses=1] + br i1 %11, label %12, label %38 + +; <label>:12 ; preds = %10 + %13 = icmp sle i32 %i.1, 512 ; <i1> [#uses=1] + br i1 %13, label %14, label %20 + +; <label>:14 ; preds = %12 + %15 = icmp sgt i32 %i.1, 20 ; <i1> [#uses=1] + br i1 %15, label %16, label %20 + +; <label>:16 ; preds = %14 + %17 = load i32* %scevgep ; <i32> [#uses=1] + %18 = icmp ne i32 %17, 1 ; <i1> [#uses=1] + br i1 %18, label %19, label %20 + +; <label>:19 ; preds = %16 + br label %39 + +; <label>:20 ; preds = %16, %14, %12 + %21 = icmp sgt i32 %i.1, 512 ; <i1> [#uses=1] + br i1 %21, label %22, label %35 + +; <label>:22 ; preds = %20 + %23 = icmp sle i32 %i.1, 20 ; <i1> [#uses=1] + br i1 %23, label %24, label %28 + +; <label>:24 ; preds = %22 + %25 = load i32* %scevgep ; <i32> [#uses=1] + %26 = icmp ne i32 %25, 2 ; <i1> [#uses=1] + br i1 %26, label %27, label %28 + +; <label>:27 ; preds = %24 + br label %39 + +; <label>:28 ; preds = %24, %22 + %29 = icmp sgt i32 %i.1, 20 ; <i1> [#uses=1] + br i1 %29, label %30, label %34 + +; <label>:30 ; preds = %28 + %31 = load i32* %scevgep ; <i32> [#uses=1] + %32 = icmp ne i32 %31, 0 ; <i1> [#uses=1] + br i1 %32, label %33, label %34 + +; <label>:33 ; preds = %30 + br label %39 + +; <label>:34 ; preds = %30, %28 + br label %35 + +; <label>:35 ; preds = %34, %20 + br label %36 + +; <label>:36 ; preds = %35 + br label %37 + +; <label>:37 ; preds = %36 + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %10 + +; <label>:38 ; preds = %10 + br label %39 + +; <label>:39 ; preds = %38, %33, %27, %19, %6 + %.0 = phi i32 [ 1, %6 ], [ 1, %19 ], [ 1, %27 ], [ 1, %33 ], [ 0, %38 ] ; <i32> [#uses=1] + ret i32 %.0 +} + +declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind + +; CHECK: for (c2=0;c2<=20;c2++) { +; CHECK: Stmt_7(c2); +; CHECK: Stmt_9(c2); +; CHECK: } +; CHECK: for (c2=21;c2<=512;c2++) { +; CHECK: Stmt_6(c2); +; CHECK: Stmt_9(c2); +; CHECK: } +; CHECK: for (c2=513;c2<=1023;c2++) { +; CHECK: Stmt_9(c2); +; CHECK: } + |

