1; RUN: opt %loadPolly %defaultOpts -polly-cloog -analyze %s | FileCheck %s 2; RUN: opt %loadPolly %defaultOpts -polly-codegen %s | lli - 3; ModuleID = 'sequential_loops.s' 4target 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" 5target triple = "x86_64-pc-linux-gnu" 6 7@A = common global [1024 x i32] zeroinitializer, align 4 ; <[1024 x i32]*> [#uses=5] 8 9define void @sequential_loops() nounwind { 10bb: 11 br label %bb1 12 13bb1: ; preds = %bb3, %bb 14 %indvar1 = phi i64 [ %indvar.next2, %bb3 ], [ 0, %bb ] 15 %scevgep4 = getelementptr [1024 x i32]* @A, i64 0, i64 %indvar1 16 %exitcond3 = icmp ne i64 %indvar1, 512 17 br i1 %exitcond3, label %bb2, label %bb4 18 19bb2: ; preds = %bb1 20 store i32 1, i32* %scevgep4 21 br label %bb3 22 23bb3: ; preds = %bb2 24 %indvar.next2 = add i64 %indvar1, 1 25 br label %bb1 26 27bb4: ; preds = %bb1 28 br label %bb5 29 30bb5: ; preds = %bb7, %bb4 31 %indvar = phi i64 [ %indvar.next, %bb7 ], [ 0, %bb4 ] 32 %tmp = add i64 %indvar, 512 33 %scevgep = getelementptr [1024 x i32]* @A, i64 0, i64 %tmp 34 %exitcond = icmp ne i64 %indvar, 512 35 br i1 %exitcond, label %bb6, label %bb8 36 37bb6: ; preds = %bb5 38 store i32 2, i32* %scevgep 39 br label %bb7 40 41bb7: ; preds = %bb6 42 %indvar.next = add i64 %indvar, 1 43 br label %bb5 44 45bb8: ; preds = %bb5 46 ret void 47} 48 49define i32 @main() nounwind { 50bb: 51 call void @llvm.memset.p0i8.i64(i8* bitcast ([1024 x i32]* @A to i8*), i8 0, i64 4096, i32 1, i1 false) 52 call void @sequential_loops() 53 br label %bb1 54 55bb1: ; preds = %bb15, %bb 56 %indvar = phi i64 [ %indvar.next, %bb15 ], [ 0, %bb ] 57 %i.0 = trunc i64 %indvar to i32 58 %scevgep = getelementptr [1024 x i32]* @A, i64 0, i64 %indvar 59 %tmp = icmp slt i32 %i.0, 1024 60 br i1 %tmp, label %bb2, label %bb16 61 62bb2: ; preds = %bb1 63 %tmp3 = load i32* %scevgep 64 %tmp4 = icmp ne i32 %tmp3, 1 65 br i1 %tmp4, label %bb5, label %bb8 66 67bb5: ; preds = %bb2 68 %tmp6 = icmp slt i32 %i.0, 512 69 br i1 %tmp6, label %bb7, label %bb8 70 71bb7: ; preds = %bb5 72 br label %bb17 73 74bb8: ; preds = %bb5, %bb2 75 %tmp9 = load i32* %scevgep 76 %tmp10 = icmp ne i32 %tmp9, 2 77 br i1 %tmp10, label %bb11, label %bb14 78 79bb11: ; preds = %bb8 80 %tmp12 = icmp sge i32 %i.0, 512 81 br i1 %tmp12, label %bb13, label %bb14 82 83bb13: ; preds = %bb11 84 br label %bb17 85 86bb14: ; preds = %bb11, %bb8 87 br label %bb15 88 89bb15: ; preds = %bb14 90 %indvar.next = add i64 %indvar, 1 91 br label %bb1 92 93bb16: ; preds = %bb1 94 br label %bb17 95 96bb17: ; preds = %bb16, %bb13, %bb7 97 %.0 = phi i32 [ 1, %bb7 ], [ 1, %bb13 ], [ 0, %bb16 ] 98 ret i32 %.0 99} 100 101declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind 102; CHECK: for (c2=0;c2<=511;c2++) { 103; CHECK: Stmt_bb2(c2); 104; CHECK: } 105; CHECK: for (c2=0;c2<=511;c2++) { 106; CHECK: Stmt_bb6(c2); 107; CHECK: } 108 109