diff options
author | Tobias Grosser <grosser@fim.uni-passau.de> | 2012-12-20 20:18:50 +0000 |
---|---|---|
committer | Tobias Grosser <grosser@fim.uni-passau.de> | 2012-12-20 20:18:50 +0000 |
commit | 047be171539ffe5029c6d56bd4b565b4129b8d4c (patch) | |
tree | e33141c9316355c54e11d1330f8bf162753215d7 | |
parent | c3960e42106e7b8c6f14bc324cef763df45f7f26 (diff) | |
download | llvm-047be171539ffe5029c6d56bd4b565b4129b8d4c.zip llvm-047be171539ffe5029c6d56bd4b565b4129b8d4c.tar.gz llvm-047be171539ffe5029c6d56bd4b565b4129b8d4c.tar.bz2 |
adapt cloog codegen testcases to isl
Merged from: https://llvm.org/svn/llvm-project/polly/trunk@169161
llvm-svn: 170750
40 files changed, 2616 insertions, 0 deletions
diff --git a/polly/test/Isl/CodeGen/20100617.ll b/polly/test/Isl/CodeGen/20100617.ll new file mode 100644 index 0000000..398e620 --- /dev/null +++ b/polly/test/Isl/CodeGen/20100617.ll @@ -0,0 +1,19 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl %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-unknown-linux-gnu" + +define void @init_array() nounwind { +entry: + br label %for.cond + +for.cond: ; preds = %for.cond1, %entry + %indvar1 = phi i64 [ %indvar.next2, %for.cond1 ], [ 0, %entry ] ; <i64> [#uses=1] + br i1 false, label %for.cond1, label %for.end32 + +for.cond1: ; preds = %for.cond + %indvar.next2 = add i64 %indvar1, 1 ; <i64> [#uses=1] + br label %for.cond + +for.end32: ; preds = %for.cond + ret void +} diff --git a/polly/test/Isl/CodeGen/20100622.ll b/polly/test/Isl/CodeGen/20100622.ll new file mode 100644 index 0000000..02c6775 --- /dev/null +++ b/polly/test/Isl/CodeGen/20100622.ll @@ -0,0 +1,43 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl %s +; RUN: opt %loadPolly %defaultOpts -polly-detect -analyze < %s | not FileCheck %s + +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:32:32" +target triple = "i386-portbld-freebsd8.0" + +define void @MAIN__() nounwind { +entry: + br i1 undef, label %bb6.preheader, label %bb3 + +bb3: ; preds = %bb3, %entry + br i1 undef, label %bb6.preheader, label %bb3 + +bb6.preheader: ; preds = %bb3, %entry + br i1 undef, label %bb11, label %bb9.preheader + +bb9.preheader: ; preds = %bb6.preheader + br label %bb11 + +bb11: ; preds = %bb9.preheader, %bb6.preheader + br label %bb15 + +bb15: ; preds = %bb15, %bb11 + br i1 undef, label %bb26.loopexit, label %bb15 + +bb26.loopexit: ; preds = %bb15 + br i1 undef, label %bb31, label %bb29.preheader + +bb29.preheader: ; preds = %bb26.loopexit + br label %bb29 + +bb29: ; preds = %bb29, %bb29.preheader + %indvar47 = phi i32 [ 0, %bb29.preheader ], [ %indvar.next48, %bb29 ] ; <i32> [#uses=1] + %indvar.next48 = add i32 %indvar47, 1 ; <i32> [#uses=2] + %exitcond50 = icmp eq i32 %indvar.next48, undef ; <i1> [#uses=1] + br i1 %exitcond50, label %bb31, label %bb29 + +bb31: ; preds = %bb29, %bb26.loopexit + %errtot.3 = phi float [ undef, %bb26.loopexit ], [ undef, %bb29 ] ; <float> [#uses=0] + ret void +} + +; CHECK: SCOP: diff --git a/polly/test/Isl/CodeGen/20100707.ll b/polly/test/Isl/CodeGen/20100707.ll new file mode 100644 index 0000000..a19d636 --- /dev/null +++ b/polly/test/Isl/CodeGen/20100707.ll @@ -0,0 +1,27 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl %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-unknown-linux-gnu" + +define void @clause_SetSplitField(i32 %Length) nounwind inlinehint { +entry: + br i1 undef, label %bb1, label %bb6 + +bb1: ; preds = %entry + unreachable + +bb6: ; preds = %entry + %tmp = zext i32 %Length to i64 ; <i64> [#uses=1] + br label %bb8 + +bb7: ; preds = %bb8 + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %bb8 + +bb8: ; preds = %bb7, %bb6 + %indvar = phi i64 [ %indvar.next, %bb7 ], [ 0, %bb6 ] ; <i64> [#uses=2] + %exitcond = icmp ne i64 %indvar, %tmp ; <i1> [#uses=1] + br i1 %exitcond, label %bb7, label %return + +return: ; preds = %bb8 + ret void +} diff --git a/polly/test/Isl/CodeGen/20100707_2.ll b/polly/test/Isl/CodeGen/20100707_2.ll new file mode 100644 index 0000000..ae46eb2 --- /dev/null +++ b/polly/test/Isl/CodeGen/20100707_2.ll @@ -0,0 +1,115 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl %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-unknown-linux-gnu" + +@win193 = external global [4 x [36 x double]], align 32 ; <[4 x [36 x double]]*> [#uses=3] +@sb_sample = external global [2 x [2 x [18 x [32 x double]]]], align 32 ; <[2 x [2 x [18 x [32 x double]]]]*> [#uses=2] + +define void @mdct_sub48() nounwind { +entry: + br i1 undef, label %bb, label %bb54 + +bb: ; preds = %entry + br label %bb54 + +bb3: ; preds = %bb50 + br label %bb8 + +bb4: ; preds = %bb8 + br label %bb8 + +bb8: ; preds = %bb4, %bb3 + br i1 undef, label %bb4, label %bb9 + +bb9: ; preds = %bb8 + br label %bb48 + +bb25: ; preds = %bb48 + br i1 false, label %bb26, label %bb27 + +bb26: ; preds = %bb48, %bb25 + br label %bb37 + +bb27: ; preds = %bb25 + br i1 undef, label %bb32, label %bb35 + +bb32: ; preds = %bb27 + br label %bb37 + +bb34: ; preds = %bb35 + %0 = getelementptr inbounds [36 x double]* undef, i64 0, i64 0 ; <double*> [#uses=0] + %1 = getelementptr inbounds [18 x [32 x double]]* undef, i64 0, i64 0 ; <[32 x double]*> [#uses=1] + %2 = getelementptr inbounds [32 x double]* %1, i64 0, i64 0 ; <double*> [#uses=0] + %3 = getelementptr inbounds [36 x double]* undef, i64 0, i64 0 ; <double*> [#uses=0] + %4 = sub nsw i32 17, %k.4 ; <i32> [#uses=1] + %5 = getelementptr inbounds [2 x [2 x [18 x [32 x double]]]]* @sb_sample, i64 0, i64 0 ; <[2 x [18 x [32 x double]]]*> [#uses=1] + %6 = getelementptr inbounds [2 x [18 x [32 x double]]]* %5, i64 0, i64 0 ; <[18 x [32 x double]]*> [#uses=1] + %7 = sext i32 %4 to i64 ; <i64> [#uses=1] + %8 = getelementptr inbounds [18 x [32 x double]]* %6, i64 0, i64 %7 ; <[32 x double]*> [#uses=1] + %9 = getelementptr inbounds [32 x double]* %8, i64 0, i64 0 ; <double*> [#uses=1] + %10 = load double* %9, align 8 ; <double> [#uses=0] + %11 = fsub double 0.000000e+00, undef ; <double> [#uses=1] + %12 = getelementptr inbounds double* getelementptr inbounds ([4 x [36 x double]]* @win193, i64 0, i64 2, i64 4), i64 0 ; <double*> [#uses=1] + store double %11, double* %12, align 8 + %13 = add nsw i32 %k.4, 9 ; <i32> [#uses=1] + %14 = add nsw i32 %k.4, 18 ; <i32> [#uses=1] + %15 = getelementptr inbounds [4 x [36 x double]]* @win193, i64 0, i64 0 ; <[36 x double]*> [#uses=1] + %16 = sext i32 %14 to i64 ; <i64> [#uses=1] + %17 = getelementptr inbounds [36 x double]* %15, i64 0, i64 %16 ; <double*> [#uses=1] + %18 = load double* %17, align 8 ; <double> [#uses=0] + %19 = sext i32 %k.4 to i64 ; <i64> [#uses=1] + %20 = getelementptr inbounds [18 x [32 x double]]* undef, i64 0, i64 %19 ; <[32 x double]*> [#uses=1] + %21 = sext i32 %band.2 to i64 ; <i64> [#uses=1] + %22 = getelementptr inbounds [32 x double]* %20, i64 0, i64 %21 ; <double*> [#uses=1] + %23 = load double* %22, align 8 ; <double> [#uses=0] + %24 = sext i32 %39 to i64 ; <i64> [#uses=1] + %25 = getelementptr inbounds [4 x [36 x double]]* @win193, i64 0, i64 %24 ; <[36 x double]*> [#uses=1] + %26 = getelementptr inbounds [36 x double]* %25, i64 0, i64 0 ; <double*> [#uses=1] + %27 = load double* %26, align 8 ; <double> [#uses=0] + %28 = sub nsw i32 17, %k.4 ; <i32> [#uses=1] + %29 = getelementptr inbounds [2 x [2 x [18 x [32 x double]]]]* @sb_sample, i64 0, i64 0 ; <[2 x [18 x [32 x double]]]*> [#uses=1] + %30 = getelementptr inbounds [2 x [18 x [32 x double]]]* %29, i64 0, i64 0 ; <[18 x [32 x double]]*> [#uses=1] + %31 = sext i32 %28 to i64 ; <i64> [#uses=1] + %32 = getelementptr inbounds [18 x [32 x double]]* %30, i64 0, i64 %31 ; <[32 x double]*> [#uses=1] + %33 = getelementptr inbounds [32 x double]* %32, i64 0, i64 0 ; <double*> [#uses=1] + %34 = load double* %33, align 8 ; <double> [#uses=0] + %35 = sext i32 %13 to i64 ; <i64> [#uses=1] + %36 = getelementptr inbounds double* getelementptr inbounds ([4 x [36 x double]]* @win193, i64 0, i64 2, i64 4), i64 %35 ; <double*> [#uses=1] + store double 0.000000e+00, double* %36, align 8 + %37 = sub nsw i32 %k.4, 1 ; <i32> [#uses=1] + br label %bb35 + +bb35: ; preds = %bb34, %bb27 + %k.4 = phi i32 [ %37, %bb34 ], [ 8, %bb27 ] ; <i32> [#uses=6] + br i1 undef, label %bb34, label %bb36 + +bb36: ; preds = %bb35 + unreachable + +bb37: ; preds = %bb32, %bb26 + %38 = add nsw i32 %band.2, 1 ; <i32> [#uses=1] + br label %bb48 + +bb48: ; preds = %bb37, %bb9 + %band.2 = phi i32 [ %38, %bb37 ], [ 0, %bb9 ] ; <i32> [#uses=2] + %39 = load i32* null, align 8 ; <i32> [#uses=1] + br i1 undef, label %bb26, label %bb25 + +bb50: ; preds = %bb54 + br i1 undef, label %bb3, label %bb51 + +bb51: ; preds = %bb50 + br i1 undef, label %bb52, label %bb53 + +bb52: ; preds = %bb51 + unreachable + +bb53: ; preds = %bb51 + br label %bb54 + +bb54: ; preds = %bb53, %bb, %entry + br i1 undef, label %bb50, label %return + +return: ; preds = %bb54 + ret void +} diff --git a/polly/test/Isl/CodeGen/20100708_2.ll b/polly/test/Isl/CodeGen/20100708_2.ll new file mode 100644 index 0000000..01a2ad7 --- /dev/null +++ b/polly/test/Isl/CodeGen/20100708_2.ll @@ -0,0 +1,28 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl %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" + +define void @init_array() nounwind { +bb: + br label %bb1 + +bb1: ; preds = %bb4, %bb + br i1 undef, label %bb2, label %bb5 + +bb2: ; preds = %bb3, %bb1 + %indvar = phi i64 [ %indvar.next, %bb3 ], [ 0, %bb1 ] ; <i64> [#uses=1] + %tmp3 = trunc i64 undef to i32 ; <i32> [#uses=1] + br i1 false, label %bb3, label %bb4 + +bb3: ; preds = %bb2 + %tmp = srem i32 %tmp3, 1024 ; <i32> [#uses=0] + store double undef, double* undef + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %bb2 + +bb4: ; preds = %bb2 + br label %bb1 + +bb5: ; preds = %bb1 + ret void +} diff --git a/polly/test/Isl/CodeGen/20100713.ll b/polly/test/Isl/CodeGen/20100713.ll new file mode 100644 index 0000000..cb3cdd4 --- /dev/null +++ b/polly/test/Isl/CodeGen/20100713.ll @@ -0,0 +1,34 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl %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-unknown-linux-gnu" + +define void @fft_float(i32 %NumSamples) nounwind { + br label %bb18 + +bb18: ; preds = %bb17 + br i1 false, label %bb19, label %bb22 + +bb19: ; preds = %bb18 + %a = uitofp i32 %NumSamples to double ; <double> [#uses=1] + br label %bb21 + +bb20: ; preds = %bb21 + %1 = load float* undef, align 4 ; <float> [#uses=0] + %2 = fpext float undef to double ; <double> [#uses=1] + %3 = fdiv double %2, %a ; <double> [#uses=0] + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %bb21 + +bb21: ; preds = %bb20, %bb19 + %indvar = phi i64 [ %indvar.next, %bb20 ], [ 0, %bb19 ] ; <i64> [#uses=1] + br i1 false, label %bb20, label %bb22.loopexit + +bb22.loopexit: ; preds = %bb21 + br label %bb22 + +bb22: ; preds = %bb22.loopexit, %bb18 + br label %return + +return: ; preds = %bb22 + ret void +} diff --git a/polly/test/Isl/CodeGen/20100713_2.ll b/polly/test/Isl/CodeGen/20100713_2.ll new file mode 100644 index 0000000..ba81cee --- /dev/null +++ b/polly/test/Isl/CodeGen/20100713_2.ll @@ -0,0 +1,34 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl %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-unknown-linux-gnu" + +define hidden void @luaD_callhook() nounwind { +entry: + br i1 undef, label %bb, label %return + +bb: ; preds = %entry + br i1 undef, label %bb1, label %return + +bb1: ; preds = %bb + %0 = sub nsw i64 undef, undef ; <i64> [#uses=1] + br i1 false, label %bb2, label %bb3 + +bb2: ; preds = %bb1 + br label %bb4 + +bb3: ; preds = %bb1 + br label %bb4 + +bb4: ; preds = %bb3, %bb2 + br i1 undef, label %bb5, label %bb6 + +bb5: ; preds = %bb4 + unreachable + +bb6: ; preds = %bb4 + %1 = getelementptr inbounds i8* undef, i64 %0 ; <i8*> [#uses=0] + ret void + +return: ; preds = %bb, %entry + ret void +} diff --git a/polly/test/Isl/CodeGen/20100717.ll b/polly/test/Isl/CodeGen/20100717.ll new file mode 100644 index 0000000..acadbbc --- /dev/null +++ b/polly/test/Isl/CodeGen/20100717.ll @@ -0,0 +1,39 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl -disable-output %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-unknown-linux-gnu" + +define void @matrixTranspose(double** %A) nounwind { +entry: + br label %bb4 + +bb: ; preds = %bb4 + %0 = add nsw i32 %i.0, 1 ; <i32> [#uses=1] + br label %bb2 + +bb1: ; preds = %bb2 + %1 = getelementptr inbounds double** %A, i64 0 ; <double**> [#uses=0] + %2 = getelementptr inbounds double** %A, i64 0 ; <double**> [#uses=0] + %3 = getelementptr inbounds double** %A, i64 0 ; <double**> [#uses=0] + %4 = sext i32 %j.0 to i64 ; <i64> [#uses=1] + %5 = getelementptr inbounds double** %A, i64 %4 ; <double**> [#uses=1] + %6 = load double** %5, align 8 ; <double*> [#uses=0] + %7 = add nsw i32 %j.0, 1 ; <i32> [#uses=1] + br label %bb2 + +bb2: ; preds = %bb1, %bb + %j.0 = phi i32 [ %0, %bb ], [ %7, %bb1 ] ; <i32> [#uses=3] + %8 = icmp sle i32 %j.0, 50 ; <i1> [#uses=1] + br i1 %8, label %bb1, label %bb3 + +bb3: ; preds = %bb2 + %9 = add nsw i32 %i.0, 1 ; <i32> [#uses=1] + br label %bb4 + +bb4: ; preds = %bb3, %entry + %i.0 = phi i32 [ 0, %entry ], [ %9, %bb3 ] ; <i32> [#uses=3] + %10 = icmp sle i32 %i.0, 50 ; <i1> [#uses=1] + br i1 %10, label %bb, label %return + +return: ; preds = %bb4 + ret void +} diff --git a/polly/test/Isl/CodeGen/20100718-DomInfo-2.ll b/polly/test/Isl/CodeGen/20100718-DomInfo-2.ll new file mode 100644 index 0000000..b5b1afa --- /dev/null +++ b/polly/test/Isl/CodeGen/20100718-DomInfo-2.ll @@ -0,0 +1,35 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl -verify-dom-info -disable-output < %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-unknown-linux-gnu" + +define void @getNonAffNeighbour() nounwind { +entry: + br i1 undef, label %bb, label %bb6 + +bb: ; preds = %entry + br i1 false, label %bb1, label %bb2 + +bb1: ; preds = %bb + br label %bb16 + +bb2: ; preds = %bb + br i1 false, label %bb3, label %bb4 + +bb3: ; preds = %bb2 + br label %bb16 + +bb4: ; preds = %bb2 + br label %bb16 + +bb6: ; preds = %entry + br i1 false, label %bb7, label %bb9 + +bb7: ; preds = %bb6 + br label %bb16 + +bb9: ; preds = %bb6 + br label %bb16 + +bb16: ; preds = %bb9, %bb7, %bb4, %bb3, %bb1 + ret void +} diff --git a/polly/test/Isl/CodeGen/20100718-DomInfo.ll b/polly/test/Isl/CodeGen/20100718-DomInfo.ll new file mode 100644 index 0000000..d0daa2c --- /dev/null +++ b/polly/test/Isl/CodeGen/20100718-DomInfo.ll @@ -0,0 +1,28 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl -verify-dom-info -disable-output < %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-unknown-linux-gnu" + +define void @intrapred_luma_16x16(i32 %predmode) nounwind { +entry: + switch i32 %predmode, label %bb81 [ + i32 0, label %bb25 + i32 1, label %bb26 + ] + +bb23: ; preds = %bb25 + %indvar.next95 = add i64 %indvar94, 1 ; <i64> [#uses=1] + br label %bb25 + +bb25: ; preds = %bb23, %entry + %indvar94 = phi i64 [ %indvar.next95, %bb23 ], [ 0, %entry ] ; <i64> [#uses=1] + br i1 false, label %bb23, label %return + +bb26: ; preds = %entry + ret void + +bb81: ; preds = %entry + ret void + +return: ; preds = %bb25 + ret void +} diff --git a/polly/test/Isl/CodeGen/20100720-MultipleConditions.ll b/polly/test/Isl/CodeGen/20100720-MultipleConditions.ll new file mode 100644 index 0000000..6424719 --- /dev/null +++ b/polly/test/Isl/CodeGen/20100720-MultipleConditions.ll @@ -0,0 +1,96 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze %s + +;int bar1(); +;int bar2(); +;int bar3(); +;int k; +;#define N 100 +;int A[N]; +; +;int main() { +; int i, j, z; +; +; __sync_synchronize(); +; for (i = 0; i < N; i++) { +; if (i < 50) +; A[i] = 8; +; if (i < 4) +; A[i] = 9; +; if (i < 3) +; A[i] = 10; +; } +; __sync_synchronize(); +; +; return A[z]; +;} + +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 [100 x i32] zeroinitializer, align 16 ; <[100 x i32]*> [#uses=2] +@k = common global i32 0, align 4 ; <i32*> [#uses=0] + +define i32 @main() nounwind { +; <label>:0 + fence seq_cst + br label %1 + +; <label>:1 ; preds = %12, %0 + %indvar = phi i64 [ %indvar.next, %12 ], [ 0, %0 ] ; <i64> [#uses=4] + %scevgep = getelementptr [100 x i32]* @A, i64 0, i64 %indvar ; <i32*> [#uses=3] + %i.0 = trunc i64 %indvar to i32 ; <i32> [#uses=3] + %exitcond = icmp ne i64 %indvar, 100 ; <i1> [#uses=1] + br i1 %exitcond, label %2, label %13 + +; <label>:2 ; preds = %1 + %3 = icmp slt i32 %i.0, 50 ; <i1> [#uses=1] + br i1 %3, label %4, label %5 + +; <label>:4 ; preds = %2 + store i32 8, i32* %scevgep + br label %5 + +; <label>:5 ; preds = %4, %2 + %6 = icmp slt i32 %i.0, 4 ; <i1> [#uses=1] + br i1 %6, label %7, label %8 + +; <label>:7 ; preds = %5 + store i32 9, i32* %scevgep + br label %8 + +; <label>:8 ; preds = %7, %5 + %9 = icmp slt i32 %i.0, 3 ; <i1> [#uses=1] + br i1 %9, label %10, label %11 + +; <label>:10 ; preds = %8 + store i32 10, i32* %scevgep + br label %11 + +; <label>:11 ; preds = %10, %8 + br label %12 + +; <label>:12 ; preds = %11 + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %1 + +; <label>:13 ; preds = %1 + fence seq_cst + %14 = sext i32 undef to i64 ; <i64> [#uses=1] + %15 = getelementptr inbounds i32* getelementptr inbounds ([100 x i32]* @A, i32 0, i32 0), i64 %14 ; <i32*> [#uses=1] + %16 = load i32* %15 ; <i32> [#uses=1] + ret i32 %16 +} + +; CHECK: for (c2=0;c2<=2;c2++) { +; CHECK: S0(c2); +; CHECK: S1(c2); +; CHECK: S2(c2); +; CHECK: } +; CHECK: S0(3); +; CHECK: S1(3); +; CHECK: for (c2=4;c2<=49;c2++) { +; CHECK: S0(c2); +; CHECK: } +; CHECK: S0: Stmt_4 +; CHECK: S1: Stmt_7 +; CHECK: S2: Stmt_10 diff --git a/polly/test/Isl/CodeGen/20100809-IndependentBlock.ll b/polly/test/Isl/CodeGen/20100809-IndependentBlock.ll new file mode 100644 index 0000000..df64aa0 --- /dev/null +++ b/polly/test/Isl/CodeGen/20100809-IndependentBlock.ll @@ -0,0 +1,31 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl -disable-output %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-unknown-linux-gnu" +define void @cfft2([2 x float]* %x) nounwind { +entry: + %d.1.reg2mem = alloca [2 x float]* ; <[2 x float]**> [#uses=3] + br i1 undef, label %bb2, label %bb34 + +bb2: ; preds = %bb34, %entry + ret void + +bb20: ; preds = %bb34 + store [2 x float]* undef, [2 x float]** %d.1.reg2mem + br i1 false, label %bb21, label %bb23 + +bb21: ; preds = %bb20 + %0 = getelementptr inbounds [2 x float]* %x, i64 undef ; <[2 x float]*> [#uses=1] + store [2 x float]* %0, [2 x float]** %d.1.reg2mem + br label %bb23 + +bb23: ; preds = %bb21, %bb20 + %d.1.reload = load [2 x float]** %d.1.reg2mem ; <[2 x float]*> [#uses=1] + br i1 undef, label %bb29, label %bb34 + +bb29: ; preds = %bb23 + %1 = getelementptr inbounds [2 x float]* %d.1.reload, i64 undef ; <[2 x float]*> [#uses=0] + br label %bb34 + +bb34: ; preds = %bb29, %bb23, %entry + br i1 undef, label %bb20, label %bb2 +} diff --git a/polly/test/Isl/CodeGen/20100811-ScalarDependencyBetweenBrAndCnd.ll b/polly/test/Isl/CodeGen/20100811-ScalarDependencyBetweenBrAndCnd.ll new file mode 100644 index 0000000..e6250fd --- /dev/null +++ b/polly/test/Isl/CodeGen/20100811-ScalarDependencyBetweenBrAndCnd.ll @@ -0,0 +1,30 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl -disable-output %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-unknown-linux-gnu" + +define void @main() nounwind { +entry: + br label %for.cond + +for.cond: ; preds = %for.inc, %entry + %indvar1 = phi i64 [ %indvar.next2, %for.inc ], [ 0, %entry ] ; <i64> [#uses=2] + %exitcond = icmp ne i64 %indvar1, 1024 ; <i1> [#uses=1] + br label %a + +a: ; preds = %for.cond + br i1 %exitcond, label %for.body, label %for.end + +for.body: ; preds = %a + br label %for.inc + +for.inc: ; preds = %for.body + %indvar.next2 = add i64 %indvar1, 1 ; <i64> [#uses=1] + br label %for.cond + +for.end: ; preds = %a + br label %for.cond5 + +for.cond5: ; preds = %for.inc17, %for.end + ret void +} diff --git a/polly/test/Isl/CodeGen/20101030-Overflow.ll b/polly/test/Isl/CodeGen/20101030-Overflow.ll new file mode 100644 index 0000000..540c2c1 --- /dev/null +++ b/polly/test/Isl/CodeGen/20101030-Overflow.ll @@ -0,0 +1,22 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl %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-unknown-linux-gnu" + +define void @compdecomp() nounwind { +entry: + %max = alloca i64 + %i = load i64* undef + br label %bb37 + +bb37: ; preds = %bb36, %bb28 + %tmp = icmp ugt i64 %i, 0 + br i1 %tmp, label %bb38, label %bb39 + +bb38: ; preds = %bb37 + store i64 %i, i64* %max + br label %bb39 + +bb39: ; preds = %bb38, %bb37 + unreachable + +} diff --git a/polly/test/Isl/CodeGen/20101103-Overflow3.ll b/polly/test/Isl/CodeGen/20101103-Overflow3.ll new file mode 100644 index 0000000..cc6bb66 --- /dev/null +++ b/polly/test/Isl/CodeGen/20101103-Overflow3.ll @@ -0,0 +1,24 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl %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-unknown-linux-gnu" +define void @Reflection_coefficients(i16* %r) nounwind { +bb20: + %indvar3.lcssa20.reload = load i64* undef + %tmp = mul i64 %indvar3.lcssa20.reload, -1 + %tmp5 = add i64 %tmp, 8 + br label %bb22 + +bb21: ; preds = %bb22 + %r_addr.1.moved.to.bb21 = getelementptr i16* %r, i64 0 + store i16 0, i16* %r_addr.1.moved.to.bb21, align 2 + %indvar.next = add i64 %indvar, 1 + br label %bb22 + +bb22: ; preds = %bb21, %bb20 + %indvar = phi i64 [ %indvar.next, %bb21 ], [ 0, %bb20 ] + %exitcond = icmp ne i64 %indvar, %tmp5 + br i1 %exitcond, label %bb21, label %return + +return: ; preds = %bb22 + ret void +} diff --git a/polly/test/Isl/CodeGen/20101103-signmissmatch.ll b/polly/test/Isl/CodeGen/20101103-signmissmatch.ll new file mode 100644 index 0000000..50636cf --- /dev/null +++ b/polly/test/Isl/CodeGen/20101103-signmissmatch.ll @@ -0,0 +1,38 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl %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" + +define void @CleanNet() nounwind { +entry: + %firstVia.0.reg2mem = alloca i64 + br label %bb7 + +bb7: ; preds = %bb7, %entry + br i1 undef, label %bb7, label %bb8 + +bb8: ; preds = %bb7 + %indvar5.lcssa.reload = load i64* undef + %tmp17 = mul i64 %indvar5.lcssa.reload, -1 + %tmp18 = add i64 0, %tmp17 + br label %bb18 + +bb13: ; preds = %bb18 + %0 = icmp ult i64 %i.1, 0 + br i1 %0, label %bb14, label %bb17 + +bb14: ; preds = %bb13 + store i64 %i.1, i64* %firstVia.0.reg2mem + br label %bb17 + +bb17: ; preds = %bb14, %bb13 + %indvar.next16 = add i64 %indvar15, 1 + br label %bb18 + +bb18: ; preds = %bb17, %bb8 + %indvar15 = phi i64 [ %indvar.next16, %bb17 ], [ 0, %bb8 ] + %i.1 = add i64 %tmp18, %indvar15 + br i1 undef, label %bb13, label %bb25 + +bb25: ; preds = %bb18 + ret void +} diff --git a/polly/test/Isl/CodeGen/20110226-Ignore-Dead-Code.ll b/polly/test/Isl/CodeGen/20110226-Ignore-Dead-Code.ll new file mode 100644 index 0000000..67b2e6f --- /dev/null +++ b/polly/test/Isl/CodeGen/20110226-Ignore-Dead-Code.ll @@ -0,0 +1,59 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl %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-unknown-linux-gnu" + +define void @main() nounwind { +.split: + br label %0 + +.loopexit.loopexit: ; preds = %.preheader.us + br label %.loopexit.simregexit + +.loopexit.simregexit: ; preds = %.loopexit.loopexit, %._crit_edge + br label %.loopexit + +.loopexit: ; preds = %.loopexit.simregexit + %indvar.next16 = add i64 %indvar15, 1 + %exitcond53 = icmp eq i64 %indvar.next16, 2048 + br i1 %exitcond53, label %2, label %0 + +; <label>:0 ; preds = %.loopexit, %.split + %indvar15 = phi i64 [ 0, %.split ], [ %indvar.next16, %.loopexit ] + br label %.simregentry + +.simregentry: ; preds = %0 + %indvar15.ph = phi i64 [ %indvar15, %0 ] + %tmp67 = add i64 %indvar15, 1 + %i.06 = trunc i64 %tmp67 to i32 + %tmp25 = add i64 undef, 1 + %1 = icmp slt i32 %i.06, 2048 + br i1 %1, label %.lr.ph.preheader, label %._crit_edge.simregexit + +.lr.ph.preheader: ; preds = %.simregentry + br label %.lr.ph + +.lr.ph: ; preds = %.lr.ph, %.lr.ph.preheader + %indvar33 = phi i64 [ %indvar.next34, %.lr.ph ], [ 0, %.lr.ph.preheader ] + %indvar.next34 = add i64 %indvar33, 1 + %exitcond40 = icmp eq i64 %indvar.next34, 0 + br i1 %exitcond40, label %._crit_edge.loopexit, label %.lr.ph + +._crit_edge.loopexit: ; preds = %.lr.ph + br label %._crit_edge.simregexit + +._crit_edge.simregexit: ; preds = %.simregentry, %._crit_edge.loopexit + br label %._crit_edge + +._crit_edge: ; preds = %._crit_edge.simregexit + br i1 false, label %.loopexit.simregexit, label %.preheader.us.preheader + +.preheader.us.preheader: ; preds = %._crit_edge + br label %.preheader.us + +.preheader.us: ; preds = %.preheader.us, %.preheader.us.preheader + %exitcond26.old = icmp eq i64 undef, %tmp25 + br i1 false, label %.loopexit.loopexit, label %.preheader.us + +; <label>:2 ; preds = %.loopexit + ret void +} diff --git a/polly/test/Isl/CodeGen/20110226-PHI-Node-removed.ll b/polly/test/Isl/CodeGen/20110226-PHI-Node-removed.ll new file mode 100644 index 0000000..d794bb0 --- /dev/null +++ b/polly/test/Isl/CodeGen/20110226-PHI-Node-removed.ll @@ -0,0 +1,29 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl %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-unknown-linux-gnu" + +define void @main() nounwind { +.split: + br label %0 + +.loopexit: ; preds = %.lr.ph, %0 + %indvar.next16 = add i64 %indvar15, 1 + %exitcond53 = icmp eq i64 %indvar.next16, 2048 + br i1 %exitcond53, label %1, label %0 + +; <label>:0 ; preds = %.loopexit, %.split + %indvar15 = phi i64 [ 0, %.split ], [ %indvar.next16, %.loopexit ] + %tmp59 = sub i64 2046, %indvar15 + %tmp38 = and i64 %tmp59, 4294967295 + %tmp39 = add i64 %tmp38, 1 + br i1 false, label %.lr.ph, label %.loopexit + +.lr.ph: ; preds = %.lr.ph, %0 + %indvar33 = phi i64 [ %indvar.next34, %.lr.ph ], [ 0, %0 ] + %indvar.next34 = add i64 %indvar33, 1 + %exitcond40 = icmp eq i64 %indvar.next34, %tmp39 + br i1 %exitcond40, label %.loopexit, label %.lr.ph + +; <label>:1 ; preds = %.loopexit + ret void +} diff --git a/polly/test/Isl/CodeGen/PHIInExit.ll b/polly/test/Isl/CodeGen/PHIInExit.ll new file mode 100644 index 0000000..55f2a86 --- /dev/null +++ b/polly/test/Isl/CodeGen/PHIInExit.ll @@ -0,0 +1,76 @@ +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl %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-unknown-linux-gnu" + +%struct..0__pthread_mutex_s = type { i32, i32, i32, i32, i32, i32, %struct.__pthread_list_t } +%struct.__pthread_list_t = type { %struct.__pthread_list_t*, %struct.__pthread_list_t* } +%union.pthread_attr_t = type { i64, [12 x i32] } +%union.pthread_mutex_t = type { %struct..0__pthread_mutex_s } +%union.pthread_mutexattr_t = type { i32 } + +@_ZL20__gthrw_pthread_oncePiPFvvE = alias weak i32 (i32*, void ()*)* @pthread_once ; <i32 (i32*, void ()*)*> [#uses=0] +@_ZL27__gthrw_pthread_getspecificj = alias weak i8* (i32)* @pthread_getspecific ; <i8* (i32)*> [#uses=0] +@_ZL27__gthrw_pthread_setspecificjPKv = alias weak i32 (i32, i8*)* @pthread_setspecific ; <i32 (i32, i8*)*> [#uses=0] +@_ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_ = alias weak i32 (i64*, %union.pthread_attr_t*, i8* (i8*)*, i8*)* @pthread_create ; <i32 (i64*, %union.pthread_attr_t*, i8* (i8*)*, i8*)*> [#uses=0] +@_ZL22__gthrw_pthread_cancelm = alias weak i32 (i64)* @pthread_cancel ; <i32 (i64)*> [#uses=0] +@_ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t = alias weak i32 (%union.pthread_mutex_t*)* @pthread_mutex_lock ; <i32 (%union.pthread_mutex_t*)*> [#uses=0] +@_ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t = alias weak i32 (%union.pthread_mutex_t*)* @pthread_mutex_trylock ; <i32 (%union.pthread_mutex_t*)*> [#uses=0] +@_ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t = alias weak i32 (%union.pthread_mutex_t*)* @pthread_mutex_unlock ; <i32 (%union.pthread_mutex_t*)*> [#uses=0] +@_ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t = alias weak i32 (%union.pthread_mutex_t*, %union.pthread_mutexattr_t*)* @pthread_mutex_init ; <i32 (%union.pthread_mutex_t*, %union.pthread_mutexattr_t*)*> [#uses=0] +@_ZL26__gthrw_pthread_key_createPjPFvPvE = alias weak i32 (i32*, void (i8*)*)* @pthread_key_create ; <i32 (i32*, void (i8*)*)*> [#uses=0] +@_ZL26__gthrw_pthread_key_deletej = alias weak i32 (i32)* @pthread_key_delete ; <i32 (i32)*> [#uses=0] +@_ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t = alias weak i32 (%union.pthread_mutexattr_t*)* @pthread_mutexattr_init ; <i32 (%union.pthread_mutexattr_t*)*> [#uses=0] +@_ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti = alias weak i32 (%union.pthread_mutexattr_t*, i32)* @pthread_mutexattr_settype ; <i32 (%union.pthread_mutexattr_t*, i32)*> [#uses=0] +@_ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t = alias weak i32 (%union.pthread_mutexattr_t*)* @pthread_mutexattr_destroy ; <i32 (%union.pthread_mutexattr_t*)*> [#uses=0] + +define void @_ZL6createP6node_tii3v_tS1_d() { +entry: + br i1 undef, label %bb, label %bb5 + +bb: ; preds = %entry + br i1 false, label %bb1, label %bb3 + +bb1: ; preds = %bb + br label %bb3 + +bb3: ; preds = %bb1, %bb + %iftmp.99.0 = phi i64 [ undef, %bb1 ], [ 1, %bb ] ; <i64> [#uses=0] + br label %bb5 + +bb5: ; preds = %bb3, %entry + br i1 undef, label %return, label %bb7 + +bb7: ; preds = %bb5 + unreachable + +return: ; preds = %bb5 + ret void +} + +declare i32 @pthread_once(i32*, void ()*) + +declare i8* @pthread_getspecific(i32) + +declare i32 @pthread_setspecific(i32, i8*) + +declare i32 @pthread_create(i64*, %union.pthread_attr_t*, i8* (i8*)*, i8*) + +declare i32 @pthread_cancel(i64) + +declare i32 @pthread_mutex_lock(%union.pthread_mutex_t*) + +declare i32 @pthread_mutex_trylock(%union.pthread_mutex_t*) + +declare i32 @pthread_mutex_unlock(%union.pthread_mutex_t*) + +declare i32 @pthread_mutex_init(%union.pthread_mutex_t*, %union.pthread_mutexattr_t*) + +declare i32 @pthread_key_create(i32*, void (i8*)*) + +declare i32 @pthread_key_delete(i32) + +declare i32 @pthread_mutexattr_init(%union.pthread_mutexattr_t*) + +declare i32 @pthread_mutexattr_settype(%union.pthread_mutexattr_t*, i32) + +declare i32 @pthread_mutexattr_destroy(%union.pthread_mutexattr_t*) diff --git a/polly/test/Isl/CodeGen/constant_condition.ll b/polly/test/Isl/CodeGen/constant_condition.ll new file mode 100644 index 0000000..045efff --- /dev/null +++ b/polly/test/Isl/CodeGen/constant_condition.ll @@ -0,0 +1,56 @@ +;RUN: opt %loadPolly %defaultOpts -polly-ast -analyze < %s | FileCheck %s + +;#include <string.h> +;int A[1]; +; +;void constant_condition () { +; int a = 0; +; int b = 0; +; +; if (a == b) +; A[0] = 0; +; else +; A[0] = 1; +;} +; +;int main () { +; int i; +; +; A[0] = 2; +; +; constant_condition(); +; +; return A[0]; +;} + +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-unknown-linux-gnu" +@A = common global [1 x i32] zeroinitializer, align 4 ; <[1 x i32]*> [#uses=1] + +define void @constant_condition() nounwind { +bb: + %tmp = icmp eq i32 0, 0 ; <i1> [#uses=0] + br i1 true, label %bb1, label %bb2 + +bb1: ; preds = %bb + store i32 0, i32* getelementptr inbounds ([1 x i32]* @A, i32 0, i32 0) + br label %bb3 + +bb2: ; preds = %bb + store i32 1, i32* getelementptr inbounds ([1 x i32]* @A, i32 0, i32 0) + br label %bb3 + +bb3: ; preds = %bb2, %bb1 + ret void +} + +define i32 @main() nounwind { +bb: + store i32 2, i32* getelementptr inbounds ([1 x i32]* @A, i32 0, i32 0) + call void @constant_condition() + %tmp = load i32* getelementptr inbounds ([1 x i32]* @A, i32 0, i32 0) ; <i32> [#uses=1] + ret i32 %tmp +} + + +; CHECK: Stmt_bb1(); diff --git a/polly/test/Isl/CodeGen/loop_with_condition.ll b/polly/test/Isl/CodeGen/loop_with_condition.ll new file mode 100644 index 0000000..29eb284 --- /dev/null +++ b/polly/test/Isl/CodeGen/loop_with_condition.ll @@ -0,0 +1,175 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze < %s | FileCheck %s + +;#include <string.h> +;#define N 1024 +;int A[N]; +;int B[N]; +; +;void loop_with_condition() { +; int i; +; +; __sync_synchronize(); +; for (i = 0; i < N; i++) { +; if (i <= N / 2) +; A[i] = 1; +; else +; A[i] = 2; +; B[i] = 3; +; } +; __sync_synchronize(); +;} +; +;int main () { +; int i; +; +; memset(A, 0, sizeof(int) * N); +; memset(B, 0, sizeof(int) * N); +; +; loop_with_condition(); +; +; for (i = 0; i < N; i++) +; if (B[i] != 3) +; return 1; +; +; for (i = 0; i < N; i++) +; if (i <= N / 2 && A[i] != 1) +; return 1; +; else if (i > N / 2 && A[i] != 2) +; return 1; +; return 0; +;} + +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 + fence seq_cst + br label %1 + +; <label>:1 ; preds = %7, %0 + %indvar = phi i64 [ %indvar.next, %7 ], [ 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=1] + %exitcond = icmp ne i64 %indvar, 1024 ; <i1> [#uses=1] + br i1 %exitcond, label %2, label %8 + +; <label>:2 ; preds = %1 + %3 = icmp sle i32 %i.0, 512 ; <i1> [#uses=1] + br i1 %3, label %4, label %5 + +; <label>:4 ; preds = %2 + store i32 1, i32* %scevgep + br label %6 + +; <label>:5 ; preds = %2 + store i32 2, i32* %scevgep + br label %6 + +; <label>:6 ; preds = %5, %4 + store i32 3, i32* %scevgep1 + br label %7 + +; <label>:7 ; preds = %6 + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %1 + +; <label>:8 ; preds = %1 + fence seq_cst + ret void +} + +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 %28 + +; <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 = %26, %9 + %indvar = phi i64 [ %indvar.next, %26 ], [ 0, %9 ] ; <i64> [#uses=3] + %scevgep = getelementptr [1024 x i32]* @A, i64 0, i64 %indvar ; <i32*> [#uses=2] + %i.1 = trunc i64 %indvar to i32 ; <i32> [#uses=3] + %11 = icmp slt i32 %i.1, 1024 ; <i1> [#uses=1] + br i1 %11, label %12, label %27 + +; <label>:12 ; preds = %10 + %13 = icmp sle i32 %i.1, 512 ; <i1> [#uses=1] + br i1 %13, label %14, label %18 + +; <label>:14 ; preds = %12 + %15 = load i32* %scevgep ; <i32> [#uses=1] + %16 = icmp ne i32 %15, 1 ; <i1> [#uses=1] + br i1 %16, label %17, label %18 + +; <label>:17 ; preds = %14 + br label %28 + +; <label>:18 ; preds = %14, %12 + %19 = icmp sgt i32 %i.1, 512 ; <i1> [#uses=1] + br i1 %19, label %20, label %24 + +; <label>:20 ; preds = %18 + %21 = load i32* %scevgep ; <i32> [#uses=1] + %22 = icmp ne i32 %21, 2 ; <i1> [#uses=1] + br i1 %22, label %23, label %24 + +; <label>:23 ; preds = %20 + br label %28 + +; <label>:24 ; preds = %20, %18 + br label %25 + +; <label>:25 ; preds = %24 + br label %26 + +; <label>:26 ; preds = %25 + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %10 + +; <label>:27 ; preds = %10 + br label %28 + +; <label>:28 ; preds = %27, %23, %17, %6 + %.0 = phi i32 [ 1, %6 ], [ 1, %17 ], [ 1, %23 ], [ 0, %27 ] ; <i32> [#uses=1] + ret i32 %.0 +} + +declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind + +; CHECK: for (int c1 = 0; c1 <= 1023; c1 += 1) { +; CHECK: if (c1 >= 513) { +; CHECK: Stmt_5(c1); +; CHECK: } else +; CHECK: Stmt_4(c1); +; CHECK: Stmt_6(c1); +; CHECK: } diff --git a/polly/test/Isl/CodeGen/loop_with_condition_2.ll b/polly/test/Isl/CodeGen/loop_with_condition_2.ll new file mode 100644 index 0000000..ce297db --- /dev/null +++ b/polly/test/Isl/CodeGen/loop_with_condition_2.ll @@ -0,0 +1,137 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze < %s | FileCheck %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-unknown-linux-gnu" + +@A = common global [1024 x i32] zeroinitializer, align 16 +@B = common global [1024 x i32] zeroinitializer, align 16 + +define void @loop_with_condition(i32 %m) nounwind { +entry: + fence seq_cst + %tmp = sub i32 0, %m + %tmp1 = zext i32 %tmp to i64 + br label %for.cond + +for.cond: ; preds = %for.inc, %entry + %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ] + %arrayidx = getelementptr [1024 x i32]* @A, i64 0, i64 %indvar + %arrayidx10 = getelementptr [1024 x i32]* @B, i64 0, i64 %indvar + %tmp2 = add i64 %tmp1, %indvar + %sub = trunc i64 %tmp2 to i32 + %exitcond = icmp ne i64 %indvar, 1024 + br i1 %exitcond, label %for.body, label %for.end + +for.body: ; preds = %for.cond + %cmp3 = icmp sle i32 %sub, 1024 + br i1 %cmp3, label %if.then, label %if.else + +if.then: ; preds = %for.body + store i32 1, i32* %arrayidx + br label %if.end + +if.else: ; preds = %for.body + store i32 2, i32* %arrayidx + br label %if.end + +if.end: ; preds = %if.else, %if.then + store i32 3, i32* %arrayidx10 + br label %for.inc + +for.inc: ; preds = %if.end + %indvar.next = add i64 %indvar, 1 + br label %for.cond + +for.end: ; preds = %for.cond + fence seq_cst + ret void +} + +define i32 @main() nounwind { +entry: + 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(i32 5) + br label %for.cond + +for.cond: ; preds = %for.inc, %entry + %indvar1 = phi i64 [ %indvar.next2, %for.inc ], [ 0, %entry ] + %arrayidx = getelementptr [1024 x i32]* @B, i64 0, i64 %indvar1 + %i.0 = trunc i64 %indvar1 to i32 + %cmp = icmp slt i32 %i.0, 1024 + br i1 %cmp, label %for.body, label %for.end + +for.body: ; preds = %for.cond + %tmp3 = load i32* %arrayidx + %cmp4 = icmp ne i32 %tmp3, 3 + br i1 %cmp4, label %if.then, label %if.end + +if.then: ; preds = %for.body + br label %return + +if.end: ; preds = %for.body + br label %for.inc + +for.inc: ; preds = %if.end + %indvar.next2 = add i64 %indvar1, 1 + br label %for.cond + +for.end: ; preds = %for.cond + br label %for.cond6 + +for.cond6: ; preds = %for.inc32, %for.end + %indvar = phi i64 [ %indvar.next, %for.inc32 ], [ 0, %for.end ] + %arrayidx15 = getelementptr [1024 x i32]* @A, i64 0, i64 %indvar + %i.1 = trunc i64 %indvar to i32 + %cmp8 = icmp slt i32 %i.1, 1024 + br i1 %cmp8, label %for.body9, label %for.end35 + +for.body9: ; preds = %for.cond6 + br i1 true, label %land.lhs.true, label %if.else + +land.lhs.true: ; preds = %for.body9 + %tmp16 = load i32* %arrayidx15 + %cmp17 = icmp ne i32 %tmp16, 1 + br i1 %cmp17, label %if.then18, label %if.else + +if.then18: ; preds = %land.lhs.true + br label %return + +if.else: ; preds = %land.lhs.true, %for.body9 + br i1 false, label %land.lhs.true23, label %if.end30 + +land.lhs.true23: ; preds = %if.else + %tmp27 = load i32* %arrayidx15 + %cmp28 = icmp ne i32 %tmp27, 2 + br i1 %cmp28, label %if.then29, label %if.end30 + +if.then29: ; preds = %land.lhs.true23 + br label %return + +if.end30: ; preds = %land.lhs.true23, %if.else + br label %if.end31 + +if.end31: ; preds = %if.end30 + br label %for.inc32 + +for.inc32: ; preds = %if.end31 + %indvar.next = add i64 %indvar, 1 + br label %for.cond6 + +for.end35: ; preds = %for.cond6 + br label %return + +return: ; preds = %for.end35, %if.then29, %if.then18, %if.then + %retval.0 = phi i32 [ 1, %if.then ], [ 1, %if.then18 ], [ 1, %if.then29 ], [ 0, %for.end35 ] + ret i32 %retval.0 +} + +declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind + +; CHECK: for (int c1 = 0; c1 <= 1023; c1 += 1) { +; CHECK: if (c1 >= m + 1025) { +; CHECK: Stmt_if_else(c1); +; CHECK: } else +; CHECK: Stmt_if_then(c1); +; CHECK: Stmt_if_end(c1); +; CHECK: } diff --git a/polly/test/Isl/CodeGen/loop_with_condition_ineq.ll b/polly/test/Isl/CodeGen/loop_with_condition_ineq.ll new file mode 100644 index 0000000..3066b8e --- /dev/null +++ b/polly/test/Isl/CodeGen/loop_with_condition_ineq.ll @@ -0,0 +1,177 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze < %s | FileCheck %s + +;#include <string.h> +;#define N 1024 +;int A[N]; +;int B[N]; +; +;void loop_with_condition_ineq() { +; int i; +; +; __sync_synchronize(); +; for (i = 0; i < N; i++) { +; if (i != N / 2) +; A[i] = 1; +; else +; A[i] = 2; +; B[i] = 3; +; } +; __sync_synchronize(); +;} +; +;int main () { +; int i; +; +; memset(A, 0, sizeof(int) * N); +; memset(B, 0, sizeof(int) * N); +; +; loop_with_condition_ineq(); +; +; for (i = 0; i < N; i++) +; if (B[i] != 3) +; return 1; +; +; for (i = 0; i < N; i++) +; if (i != N / 2 && A[i] != 1) +; return 1; +; else if (i == N && A[i] != 2) +; return 1; +; return 0; +;} + +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_ineq() nounwind { +; <label>:0 + fence seq_cst + br label %1 + +; <label>:1 ; preds = %7, %0 + %indvar = phi i64 [ %indvar.next, %7 ], [ 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=1] + %exitcond = icmp ne i64 %indvar, 1024 ; <i1> [#uses=1] + br i1 %exitcond, label %2, label %8 + +; <label>:2 ; preds = %1 + %3 = icmp ne i32 %i.0, 512 ; <i1> [#uses=1] + br i1 %3, label %4, label %5 + +; <label>:4 ; preds = %2 + store i32 1, i32* %scevgep + br label %6 + +; <label>:5 ; preds = %2 + store i32 2, i32* %scevgep + br label %6 + +; <label>:6 ; preds = %5, %4 + store i32 3, i32* %scevgep1 + br label %7 + +; <label>:7 ; preds = %6 + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %1 + +; <label>:8 ; preds = %1 + fence seq_cst + ret void +} + +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_ineq() + 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 %28 + +; <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 = %26, %9 + %indvar = phi i64 [ %indvar.next, %26 ], [ 0, %9 ] ; <i64> [#uses=3] + %scevgep = getelementptr [1024 x i32]* @A, i64 0, i64 %indvar ; <i32*> [#uses=2] + %i.1 = trunc i64 %indvar to i32 ; <i32> [#uses=3] + %11 = icmp slt i32 %i.1, 1024 ; <i1> [#uses=1] + br i1 %11, label %12, label %27 + +; <label>:12 ; preds = %10 + %13 = icmp ne i32 %i.1, 512 ; <i1> [#uses=1] + br i1 %13, label %14, label %18 + +; <label>:14 ; preds = %12 + %15 = load i32* %scevgep ; <i32> [#uses=1] + %16 = icmp ne i32 %15, 1 ; <i1> [#uses=1] + br i1 %16, label %17, label %18 + +; <label>:17 ; preds = %14 + br label %28 + +; <label>:18 ; preds = %14, %12 + %19 = icmp eq i32 %i.1, 1024 ; <i1> [#uses=1] + br i1 %19, label %20, label %24 + +; <label>:20 ; preds = %18 + %21 = load i32* %scevgep ; <i32> [#uses=1] + %22 = icmp ne i32 %21, 2 ; <i1> [#uses=1] + br i1 %22, label %23, label %24 + +; <label>:23 ; preds = %20 + br label %28 + +; <label>:24 ; preds = %20, %18 + br label %25 + +; <label>:25 ; preds = %24 + br label %26 + +; <label>:26 ; preds = %25 + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %10 + +; <label>:27 ; preds = %10 + br label %28 + +; <label>:28 ; preds = %27, %23, %17, %6 + %.0 = phi i32 [ 1, %6 ], [ 1, %17 ], [ 1, %23 ], [ 0, %27 ] ; <i32> [#uses=1] + ret i32 %.0 +} + +declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind + +; CHECK: for (int c1 = 0; c1 <= 1023; c1 += 1) { +; CHECK: if (c1 >= 513) { +; CHECK: Stmt_4(c1); +; CHECK: } else if (c1 <= 511) { +; CHECK: Stmt_4(c1); +; CHECK: } else +; CHECK: Stmt_5(512); +; CHECK: Stmt_6(c1); +; CHECK: } diff --git a/polly/test/Isl/CodeGen/loop_with_condition_nested.ll b/polly/test/Isl/CodeGen/loop_with_condition_nested.ll new file mode 100644 index 0000000..188e293 --- /dev/null +++ b/polly/test/Isl/CodeGen/loop_with_condition_nested.ll @@ -0,0 +1,211 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze < %s | FileCheck %s + +;#include <string.h> +;#define N 1024 +;int A[N]; +;int B[N]; +; +;void loop_with_condition() { +; int i; +; +; __sync_synchronize(); +; for (i = 0; i < N; i++) { +; if (i <= N / 2) { +; if (i > 20) +; A[i] = 1; +; else +; A[i] = 2; +; } +; B[i] = 3; +; } +; __sync_synchronize(); +;} +; +;int main () { +; int i; +; +; memset(A, 0, sizeof(int) * N); +; memset(B, 0, sizeof(int) * N); +; +; loop_with_condition(); +; +; for (i = 0; i < N; i++) +; if (B[i] != 3) +; return 1; +; +; for (i = 0; i < N; i++) +; if (i <= N / 2 && i > 20 && A[i] != 1) +; return 1; +; else if (i > N / 2) { +; if (i <= 20 && A[i] != 2) +; return 1; +; if (i > 20 && A[i] != 0) +; return 1; +; } +; return 0; +;} + +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 + fence seq_cst + 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 + fence seq_cst + ret void +} + +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 (int c1 = 0; c1 <= 1023; c1 += 1) { +; CHECK: if (c1 <= 20) { +; CHECK: Stmt_7(c1); +; CHECK: } else if (c1 <= 512) +; CHECK: Stmt_6(c1); +; CHECK: Stmt_9(c1); +; CHECK: } diff --git a/polly/test/Isl/CodeGen/reduction_2.ll b/polly/test/Isl/CodeGen/reduction_2.ll new file mode 100644 index 0000000..c1daa33 --- /dev/null +++ b/polly/test/Isl/CodeGen/reduction_2.ll @@ -0,0 +1,93 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze < %s | FileCheck %s + +;#include <string.h> +;#include <stdio.h> +;#define N 1021 +; +;int main () { +; int i; +; int A[N]; +; int RED[1]; +; +; memset(A, 0, sizeof(int) * N); +; +; A[0] = 1; +; A[1] = 1; +; RED[0] = 0; +; +; for (i = 2; i < N; i++) { +; A[i] = A[i-1] + A[i-2]; +; RED[0] += A[i-2]; +; } +; +; if (RED[0] != 382399368) +; return 1; +;} + +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-unknown-linux-gnu" + +define i32 @main() nounwind { +entry: + %A = alloca [1021 x i32], align 4 ; <[1021 x i32]*> [#uses=6] + %RED = alloca [1 x i32], align 4 ; <[1 x i32]*> [#uses=3] + %arraydecay = getelementptr inbounds [1021 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1] + %conv = bitcast i32* %arraydecay to i8* ; <i8*> [#uses=1] + call void @llvm.memset.p0i8.i64(i8* %conv, i8 0, i64 4084, i32 1, i1 false) + %arraydecay1 = getelementptr inbounds [1021 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1] + %arrayidx = getelementptr inbounds i32* %arraydecay1, i64 0 ; <i32*> [#uses=1] + store i32 1, i32* %arrayidx + %arraydecay2 = getelementptr inbounds [1021 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1] + %arrayidx3 = getelementptr inbounds i32* %arraydecay2, i64 1 ; <i32*> [#uses=1] + store i32 1, i32* %arrayidx3 + %arraydecay4 = getelementptr inbounds [1 x i32]* %RED, i32 0, i32 0 ; <i32*> [#uses=1] + %arrayidx5 = getelementptr inbounds i32* %arraydecay4, i64 0 ; <i32*> [#uses=1] + store i32 0, i32* %arrayidx5 + br label %for.cond + +for.cond: ; preds = %for.inc, %entry + %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ] ; <i64> [#uses=5] + %arrayidx15 = getelementptr [1021 x i32]* %A, i64 0, i64 %indvar ; <i32*> [#uses=2] + %tmp = add i64 %indvar, 2 ; <i64> [#uses=1] + %arrayidx20 = getelementptr [1021 x i32]* %A, i64 0, i64 %tmp ; <i32*> [#uses=1] + %tmp1 = add i64 %indvar, 1 ; <i64> [#uses=1] + %arrayidx9 = getelementptr [1021 x i32]* %A, i64 0, i64 %tmp1 ; <i32*> [#uses=1] + %exitcond = icmp ne i64 %indvar, 1019 ; <i1> [#uses=1] + br i1 %exitcond, label %for.body, label %for.end + +for.body: ; preds = %for.cond + %tmp10 = load i32* %arrayidx9 ; <i32> [#uses=1] + %tmp16 = load i32* %arrayidx15 ; <i32> [#uses=1] + %add = add nsw i32 %tmp10, %tmp16 ; <i32> [#uses=1] + store i32 %add, i32* %arrayidx20 + %tmp26 = load i32* %arrayidx15 ; <i32> [#uses=1] + %arraydecay27 = getelementptr inbounds [1 x i32]* %RED, i32 0, i32 0 ; <i32*> [#uses=1] + %arrayidx28 = getelementptr inbounds i32* %arraydecay27, i64 0 ; <i32*> [#uses=2] + %tmp29 = load i32* %arrayidx28 ; <i32> [#uses=1] + %add30 = add nsw i32 %tmp29, %tmp26 ; <i32> [#uses=1] + store i32 %add30, i32* %arrayidx28 + br label %for.inc + +for.inc: ; preds = %for.body + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %for.cond + +for.end: ; preds = %for.cond + %arraydecay32 = getelementptr inbounds [1 x i32]* %RED, i32 0, i32 0 ; <i32*> [#uses=1] + %arrayidx33 = getelementptr inbounds i32* %arraydecay32, i64 0 ; <i32*> [#uses=1] + %tmp34 = load i32* %arrayidx33 ; <i32> [#uses=1] + %cmp35 = icmp ne i32 %tmp34, 382399368 ; <i1> [#uses=1] + br i1 %cmp35, label %if.then, label %if.end + +if.then: ; preds = %for.end + br label %if.end + +if.end: ; preds = %if.then, %for.end + %retval.0 = phi i32 [ 1, %if.then ], [ 0, %for.end ] ; <i32> [#uses=1] + ret i32 %retval.0 +} + +declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind + +; CHECK: for (int c1 = 0; c1 <= 1018; c1 += 1) +; CHECK: Stmt_for_body(c1); diff --git a/polly/test/Isl/CodeGen/sequential_loops.ll b/polly/test/Isl/CodeGen/sequential_loops.ll new file mode 100644 index 0000000..538e454 --- /dev/null +++ b/polly/test/Isl/CodeGen/sequential_loops.ll @@ -0,0 +1,138 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze < %s | FileCheck %s + +;#include <string.h> +;#define N 1024 +; +;int A[N]; +; +;void sequential_loops() { +; int i; +; for (i = 0; i < N/2; i++) { +; A[i] = 1; +; } +; for (i = N/2 ; i < N; i++) { +; A[i] = 2; +; } +;} +; +;int main () { +; int i; +; memset(A, 0, sizeof(int) * N); +; +; sequential_loops(); +; +; for (i = 0; i < N; i++) { +; if (A[i] != 1 && i < N/2) +; return 1; +; if (A[i] != 2 && i >= N/2) +; return 1; +; } +; +; return 0; +;} + +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 4 ; <[1024 x i32]*> [#uses=5] + +define void @sequential_loops() nounwind { +bb: + br label %bb1 + +bb1: ; preds = %bb3, %bb + %indvar1 = phi i64 [ %indvar.next2, %bb3 ], [ 0, %bb ] + %scevgep4 = getelementptr [1024 x i32]* @A, i64 0, i64 %indvar1 + %exitcond3 = icmp ne i64 %indvar1, 512 + br i1 %exitcond3, label %bb2, label %bb4 + +bb2: ; preds = %bb1 + store i32 1, i32* %scevgep4 + br label %bb3 + +bb3: ; preds = %bb2 + %indvar.next2 = add i64 %indvar1, 1 + br label %bb1 + +bb4: ; preds = %bb1 + br label %bb5 + +bb5: ; preds = %bb7, %bb4 + %indvar = phi i64 [ %indvar.next, %bb7 ], [ 0, %bb4 ] + %tmp = add i64 %indvar, 512 + %scevgep = getelementptr [1024 x i32]* @A, i64 0, i64 %tmp + %exitcond = icmp ne i64 %indvar, 512 + br i1 %exitcond, label %bb6, label %bb8 + +bb6: ; preds = %bb5 + store i32 2, i32* %scevgep + br label %bb7 + +bb7: ; preds = %bb6 + %indvar.next = add i64 %indvar, 1 + br label %bb5 + +bb8: ; preds = %bb5 + ret void +} + +define i32 @main() nounwind { +bb: + call void @llvm.memset.p0i8.i64(i8* bitcast ([1024 x i32]* @A to i8*), i8 0, i64 4096, i32 1, i1 false) + call void @sequential_loops() + br label %bb1 + +bb1: ; preds = %bb15, %bb + %indvar = phi i64 [ %indvar.next, %bb15 ], [ 0, %bb ] + %i.0 = trunc i64 %indvar to i32 + %scevgep = getelementptr [1024 x i32]* @A, i64 0, i64 %indvar + %tmp = icmp slt i32 %i.0, 1024 + br i1 %tmp, label %bb2, label %bb16 + +bb2: ; preds = %bb1 + %tmp3 = load i32* %scevgep + %tmp4 = icmp ne i32 %tmp3, 1 + br i1 %tmp4, label %bb5, label %bb8 + +bb5: ; preds = %bb2 + %tmp6 = icmp slt i32 %i.0, 512 + br i1 %tmp6, label %bb7, label %bb8 + +bb7: ; preds = %bb5 + br label %bb17 + +bb8: ; preds = %bb5, %bb2 + %tmp9 = load i32* %scevgep + %tmp10 = icmp ne i32 %tmp9, 2 + br i1 %tmp10, label %bb11, label %bb14 + +bb11: ; preds = %bb8 + %tmp12 = icmp sge i32 %i.0, 512 + br i1 %tmp12, label %bb13, label %bb14 + +bb13: ; preds = %bb11 + br label %bb17 + +bb14: ; preds = %bb11, %bb8 + br label %bb15 + +bb15: ; preds = %bb14 + %indvar.next = add i64 %indvar, 1 + br label %bb1 + +bb16: ; preds = %bb1 + br label %bb17 + +bb17: ; preds = %bb16, %bb13, %bb7 + %.0 = phi i32 [ 1, %bb7 ], [ 1, %bb13 ], [ 0, %bb16 ] + ret i32 %.0 +} + +declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind + +; CHECK: { +; CHECK: for (int c1 = 0; c1 <= 511; c1 += 1) +; CHECK: Stmt_bb2(c1); +; CHECK: for (int c1 = 0; c1 <= 511; c1 += 1) +; CHECK: Stmt_bb6(c1); +; CHECK: } diff --git a/polly/test/Isl/CodeGen/simple_nonaffine_loop.ll b/polly/test/Isl/CodeGen/simple_nonaffine_loop.ll new file mode 100644 index 0000000..a1fd0ac --- /dev/null +++ b/polly/test/Isl/CodeGen/simple_nonaffine_loop.ll @@ -0,0 +1,59 @@ +; RUN: opt %loadPolly %defaultOpts -O3 -polly-ast -polly-allow-nonaffine -analyze < %s | FileCheck %s + +;#include <stdio.h> +;#include <stdlib.h> +;#include <math.h> +; +;int main() +;{ +; int A[1024*1024]; +; int i; +; for (i = 0; i < 1024; i++) +; A[i*i] = 2*i; +; +; printf("Random Value: %d", A[rand() % 1024*1024]); +; +; return 0; +;} + +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-S128" +target triple = "x86_64-apple-macosx10.7.2" + +@.str = private unnamed_addr constant [17 x i8] c"Random Value: %d\00", align 1 + +define i32 @main() nounwind uwtable ssp { +entry: + %A = alloca [1048576 x i32], align 16 + br label %entry.split + +entry.split: ; preds = %entry + br label %for.body + +for.body: ; preds = %entry.split, %for.body + %0 = phi i32 [ 0, %entry.split ], [ %1, %for.body ] + %mul = mul i32 %0, 2 + %mul1 = mul nsw i32 %0, %0 + %idxprom1 = zext i32 %mul1 to i64 + %arrayidx = getelementptr inbounds [1048576 x i32]* %A, i64 0, i64 %idxprom1 + store i32 %mul, i32* %arrayidx, align 4 + %1 = add nsw i32 %0, 1 + %exitcond = icmp ne i32 %1, 1024 + br i1 %exitcond, label %for.body, label %for.end + +for.end: ; preds = %for.body + %call = call i32 @rand() nounwind + %rem = srem i32 %call, 1024 + %mul2 = shl nsw i32 %rem, 10 + %idxprom3 = sext i32 %mul2 to i64 + %arrayidx4 = getelementptr inbounds [1048576 x i32]* %A, i64 0, i64 %idxprom3 + %2 = load i32* %arrayidx4, align 16 + %call5 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8]* @.str, i64 0, i64 0), i32 %2) nounwind + ret i32 0 +} + +declare i32 @printf(i8*, ...) + +declare i32 @rand() + +; CHECK: for (int c1 = 0; c1 <= 1023; c1 += 1) +; CHECK: Stmt_for_body(c1); diff --git a/polly/test/Isl/CodeGen/single_do_loop_int_max_iterations.ll b/polly/test/Isl/CodeGen/single_do_loop_int_max_iterations.ll new file mode 100644 index 0000000..1751d78 --- /dev/null +++ b/polly/test/Isl/CodeGen/single_do_loop_int_max_iterations.ll @@ -0,0 +1,93 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze -S < %s | FileCheck %s + +;#define N 20 +;#include "limits.h" +;#include <stdio.h> +;int A[N]; +; +;void single_do_loop_int_max_iterations() { +; int i; +; +; __sync_synchronize(); +; +; i = 0; +; +; do { +; A[0] = i; +; ++i; +; } while (i < INT_MAX); +; +; __sync_synchronize(); +;} +; +;int main () { +; int i; +; +; A[0] = 0; +; +; single_do_loop_int_max_iterations(); +; +; fprintf(stdout, "Output %d\n", A[0]); +; +; if (A[0] == INT_MAX - 1) +; return 0; +; else +; return 1; +;} + +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-unknown-linux-gnu" + +%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] } +%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 } + +@A = common global [20 x i32] zeroinitializer, align 4 ; <[20 x i32]*> [#uses=1] +@stdout = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=1] +@.str = private constant [11 x i8] c"Output %d\0A\00" ; <[11 x i8]*> [#uses=1] + +define void @single_do_loop_int_max_iterations() nounwind { +entry: + fence seq_cst + br label %do.body + +do.body: ; preds = %do.cond, %entry + %0 = phi i32 [ 0, %entry ], [ %inc, %do.cond ] ; <i32> [#uses=2] + store i32 %0, i32* getelementptr inbounds ([20 x i32]* @A, i32 0, i32 0) + %inc = add nsw i32 %0, 1 ; <i32> [#uses=2] + br label %do.cond + +do.cond: ; preds = %do.body + %exitcond = icmp ne i32 %inc, 2147483647 ; <i1> [#uses=1] + br i1 %exitcond, label %do.body, label %do.end + +do.end: ; preds = %do.cond + fence seq_cst + ret void +} + +define i32 @main() nounwind { +entry: + store i32 0, i32* getelementptr inbounds ([20 x i32]* @A, i32 0, i32 0) + call void @single_do_loop_int_max_iterations() + %tmp = load %struct._IO_FILE** @stdout ; <%struct._IO_FILE*> [#uses=1] + %tmp1 = load i32* getelementptr inbounds ([20 x i32]* @A, i32 0, i32 0) ; <i32> [#uses=1] + %call = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf(%struct._IO_FILE* %tmp, i8* getelementptr inbounds ([11 x i8]* @.str, i32 0, i32 0), i32 %tmp1) ; <i32> [#uses=0] + %tmp2 = load i32* getelementptr inbounds ([20 x i32]* @A, i32 0, i32 0) ; <i32> [#uses=1] + %cmp = icmp eq i32 %tmp2, 2147483646 ; <i1> [#uses=1] + br i1 %cmp, label %if.then, label %if.else + +if.then: ; preds = %entry + br label %return + +if.else: ; preds = %entry + br label %return + +return: ; preds = %if.else, %if.then + %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.else ] ; <i32> [#uses=1] + ret i32 %retval.0 +} + +declare i32 @fprintf(%struct._IO_FILE*, i8*, ...) + +; CHECK: for (int c1 = 0; c1 <= 2147483646; c1 += 1) +; CHECK: Stmt_do_body(c1); diff --git a/polly/test/Isl/CodeGen/single_do_loop_ll_max_iterations.ll b/polly/test/Isl/CodeGen/single_do_loop_ll_max_iterations.ll new file mode 100644 index 0000000..c9aa26f --- /dev/null +++ b/polly/test/Isl/CodeGen/single_do_loop_ll_max_iterations.ll @@ -0,0 +1,69 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze -S < %s | FileCheck %s +; RUN: opt %loadPolly %defaultOpts -polly-codegen-isl -O3 %s + +;#define N 20 +;#include "limits.h" +;long long A[N]; +; +;int main () { +; long long i; +; +; A[0] = 0; +; +; __sync_synchronize(); +; +; i = 0; +; +; do { +; A[0] = i; +; ++i; +; } while (i < LLONG_MAX); +; +; __sync_synchronize(); +; +; if (A[0] == LLONG_MAX - 1) +; return 0; +; else +; return 1; +;} + +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-unknown-linux-gnu" + +@A = common global [20 x i64] zeroinitializer, align 8 ; <[20 x i64]*> [#uses=1] + +define i32 @main() nounwind { +entry: + store i64 0, i64* getelementptr inbounds ([20 x i64]* @A, i32 0, i32 0) + fence seq_cst + br label %do.body + +do.body: ; preds = %do.cond, %entry + %0 = phi i64 [ 0, %entry ], [ %inc, %do.cond ] ; <i64> [#uses=2] + store i64 %0, i64* getelementptr inbounds ([20 x i64]* @A, i32 0, i32 0) + %inc = add nsw i64 %0, 1 ; <i64> [#uses=2] + br label %do.cond + +do.cond: ; preds = %do.body + %exitcond = icmp ne i64 %inc, 9223372036854775807 ; <i1> [#uses=1] + br i1 %exitcond, label %do.body, label %do.end + +do.end: ; preds = %do.cond + fence seq_cst + %tmp3 = load i64* getelementptr inbounds ([20 x i64]* @A, i32 0, i32 0) ; <i64> [#uses=1] + %cmp4 = icmp eq i64 %tmp3, 9223372036854775806 ; <i1> [#uses=1] + br i1 %cmp4, label %if.then, label %if.else + +if.then: ; preds = %do.end + br label %return + +if.else: ; preds = %do.end + br label %return + +return: ; preds = %if.else, %if.then + %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.else ] ; <i32> [#uses=1] + ret i32 %retval.0 +} + +; CHECK: for (int c1 = 0; c1 <= 9223372036854775806; c1 += 1) +; CHECK: Stmt_do_body(c1); diff --git a/polly/test/Isl/CodeGen/single_do_loop_scev_replace.ll b/polly/test/Isl/CodeGen/single_do_loop_scev_replace.ll new file mode 100644 index 0000000..5696415 --- /dev/null +++ b/polly/test/Isl/CodeGen/single_do_loop_scev_replace.ll @@ -0,0 +1,95 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze < %s | FileCheck %s + +;#define N 20 +;#include "limits.h" +;#include <stdio.h> +;int A[2 * N]; +; +;void single_do_loop_scev_replace() { +; int i; +; +; __sync_synchronize(); +; +; i = 0; +; +; do { +; A[2 * i] = i; +; ++i; +; } while (i < N); +; +; __sync_synchronize(); +;} +; +;int main () { +; int i; +; +; single_do_loop_scev_replace(); +; +; fprintf(stdout, "Output %d\n", A[0]); +; +; if (A[2 * N - 2] == N - 1) +; return 0; +; else +; return 1; +;} + +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-unknown-linux-gnu" + +%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] } +%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 } + +@A = common global [40 x i32] zeroinitializer, align 4 ; <[40 x i32]*> [#uses=3] +@stdout = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=1] +@.str = private constant [11 x i8] c"Output %d\0A\00" ; <[11 x i8]*> [#uses=1] + +define void @single_do_loop_scev_replace() nounwind { +entry: + fence seq_cst + br label %do.body + +do.body: ; preds = %do.cond, %entry + %indvar = phi i64 [ %indvar.next, %do.cond ], [ 0, %entry ] ; <i64> [#uses=3] + %tmp = mul i64 %indvar, 2 ; <i64> [#uses=1] + %arrayidx = getelementptr [40 x i32]* @A, i64 0, i64 %tmp ; <i32*> [#uses=1] + %i.0 = trunc i64 %indvar to i32 ; <i32> [#uses=1] + br label %do.cond + +do.cond: ; preds = %do.body + store i32 %i.0, i32* %arrayidx + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=2] + %exitcond = icmp ne i64 %indvar.next, 20 ; <i1> [#uses=1] + br i1 %exitcond, label %do.body, label %do.end + +do.end: ; preds = %do.cond + fence seq_cst + ret void +} + +define i32 @main() nounwind { +entry: + call void @single_do_loop_scev_replace() + %tmp = load %struct._IO_FILE** @stdout ; <%struct._IO_FILE*> [#uses=1] + %tmp1 = load i32* getelementptr inbounds ([40 x i32]* @A, i32 0, i32 0) ; <i32> [#uses=1] + %call = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf(%struct._IO_FILE* %tmp, i8* getelementptr inbounds ([11 x i8]* @.str, i32 0, i32 0), i32 %tmp1) ; <i32> [#uses=0] + %tmp2 = load i32* getelementptr inbounds ([40 x i32]* @A, i32 0, i64 38) ; <i32> [#uses=1] + %cmp = icmp eq i32 %tmp2, 19 ; <i1> [#uses=1] + br i1 %cmp, label %if.then, label %if.else + +if.then: ; preds = %entry + br label %return + +if.else: ; preds = %entry + br label %return + +return: ; preds = %if.else, %if.then + %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.else ] ; <i32> [#uses=1] + ret i32 %retval.0 +} + +declare i32 @fprintf(%struct._IO_FILE*, i8*, ...) + +; CHECK: for (int c1 = 0; c1 <= 19; c1 += 1) +; CHECK: Stmt_do_cond(c1); + + diff --git a/polly/test/Isl/CodeGen/single_loop.ll b/polly/test/Isl/CodeGen/single_loop.ll new file mode 100644 index 0000000..4add7d3 --- /dev/null +++ b/polly/test/Isl/CodeGen/single_loop.ll @@ -0,0 +1,85 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze < %s | FileCheck %s + +;#include <string.h> +;#define N 1024 +; +;int main () { +; int i; +; int A[N]; +; +; memset(A, 0, sizeof(int) * N); +; +; for (i = 0; i < N; i++) { +; A[i] = 1; +; } +; +; for (i = 0; i < N; i++) +; if (A[i] != 1) +; return 1; +; +; return 0; +;} +; + +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-unknown-linux-gnu" + +define i32 @main() nounwind { +entry: + %A = alloca [1024 x i32], align 4 ; <[1024 x i32]*> [#uses=3] + %arraydecay = getelementptr inbounds [1024 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1] + %conv = bitcast i32* %arraydecay to i8* ; <i8*> [#uses=1] + call void @llvm.memset.p0i8.i64(i8* %conv, i8 0, i64 4096, i32 1, i1 false) + br label %for.cond + +for.cond: ; preds = %for.inc, %entry + %indvar1 = phi i64 [ %indvar.next2, %for.inc ], [ 0, %entry ] ; <i64> [#uses=3] + %arrayidx = getelementptr [1024 x i32]* %A, i64 0, i64 %indvar1 ; <i32*> [#uses=1] + %exitcond = icmp ne i64 %indvar1, 1024 ; <i1> [#uses=1] + br i1 %exitcond, label %for.body, label %for.end + +for.body: ; preds = %for.cond + store i32 1, i32* %arrayidx + br label %for.inc + +for.inc: ; preds = %for.body + %indvar.next2 = add i64 %indvar1, 1 ; <i64> [#uses=1] + br label %for.cond + +for.end: ; preds = %for.cond + br label %for.cond5 + +for.cond5: ; preds = %for.inc17, %for.end + %indvar = phi i64 [ %indvar.next, %for.inc17 ], [ 0, %for.end ] ; <i64> [#uses=3] + %arrayidx13 = getelementptr [1024 x i32]* %A, i64 0, i64 %indvar ; <i32*> [#uses=1] + %i.1 = trunc i64 %indvar to i32 ; <i32> [#uses=1] + %cmp7 = icmp slt i32 %i.1, 1024 ; <i1> [#uses=1] + br i1 %cmp7, label %for.body9, label %for.end20 + +for.body9: ; preds = %for.cond5 + %tmp14 = load i32* %arrayidx13 ; <i32> [#uses=1] + %cmp15 = icmp ne i32 %tmp14, 1 ; <i1> [#uses=1] + br i1 %cmp15, label %if.then, label %if.end + +if.then: ; preds = %for.body9 + br label %return + +if.end: ; preds = %for.body9 + br label %for.inc17 + +for.inc17: ; preds = %if.end + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %for.cond5 + +for.end20: ; preds = %for.cond5 + br label %return + +return: ; preds = %for.end20, %if.then + %retval.0 = phi i32 [ 1, %if.then ], [ 0, %for.end20 ] ; <i32> [#uses=1] + ret i32 %retval.0 +} + +declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind + +; CHECK: for (int c1 = 0; c1 <= 1023; c1 += 1) +; CHECK: Stmt_for_body(c1); diff --git a/polly/test/Isl/CodeGen/single_loop_int_max_iterations.ll b/polly/test/Isl/CodeGen/single_loop_int_max_iterations.ll new file mode 100644 index 0000000..52ce1c3 --- /dev/null +++ b/polly/test/Isl/CodeGen/single_loop_int_max_iterations.ll @@ -0,0 +1,72 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze -S < %s | FileCheck %s + +;#define N 20 +;#include "limits.h" +; +;int main () { +; int i; +; int A[N]; +; +; A[0] = 0; +; +; __sync_synchronize(); +; +; for (i = 0; i < INT_MAX; i++) +; A[0] = i; +; +; __sync_synchronize(); +; +; if (A[0] == INT_MAX - 1) +; return 0; +; else +; return 1; +;} + +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-unknown-linux-gnu" + +define i32 @main() nounwind { +entry: + %A = alloca [20 x i32], align 4 ; <[20 x i32]*> [#uses=3] + %arraydecay = getelementptr inbounds [20 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1] + %arrayidx = getelementptr inbounds i32* %arraydecay, i64 0 ; <i32*> [#uses=1] + store i32 0, i32* %arrayidx + fence seq_cst + br label %for.cond + +for.cond: ; preds = %for.inc, %entry + %0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ] ; <i32> [#uses=3] + %exitcond = icmp ne i32 %0, 2147483647 ; <i1> [#uses=1] + br i1 %exitcond, label %for.body, label %for.end + +for.body: ; preds = %for.cond + %arraydecay2 = getelementptr inbounds [20 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1] + %arrayidx3 = getelementptr inbounds i32* %arraydecay2, i64 0 ; <i32*> [#uses=1] + store i32 %0, i32* %arrayidx3 + br label %for.inc + +for.inc: ; preds = %for.body + %inc = add nsw i32 %0, 1 ; <i32> [#uses=1] + br label %for.cond + +for.end: ; preds = %for.cond + fence seq_cst + %arraydecay5 = getelementptr inbounds [20 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1] + %arrayidx6 = getelementptr inbounds i32* %arraydecay5, i64 0 ; <i32*> [#uses=1] + %tmp7 = load i32* %arrayidx6 ; <i32> [#uses=1] + %cmp8 = icmp eq i32 %tmp7, 2147483646 ; <i1> [#uses=1] + br i1 %cmp8, label %if.then, label %if.else + +if.then: ; preds = %for.end + br label %return + +if.else: ; preds = %for.end + br label %return + +return: ; preds = %if.else, %if.then + %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.else ] ; <i32> [#uses=1] + ret i32 %retval.0 +} + +; CHECK: for (int c1 = 0; c1 <= 2147483646; c1 += 1) +; CHECK: Stmt_for_body(c1); diff --git a/polly/test/Isl/CodeGen/single_loop_ll_max_iterations.ll b/polly/test/Isl/CodeGen/single_loop_ll_max_iterations.ll new file mode 100644 index 0000000..4aad4c8 --- /dev/null +++ b/polly/test/Isl/CodeGen/single_loop_ll_max_iterations.ll @@ -0,0 +1,72 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze -S < %s | FileCheck %s + +;#include "limits.h" +;#define N 20 +; +;int main () { +; long long i; +; long long A[N]; +; +; A[0] = 0; +; +; __sync_synchronize(); +; +; for (i = 0; i < LLONG_MAX; i++) +; A[0] = i; +; +; __sync_synchronize(); +; +; if (A[0] == LLONG_MAX - 1) +; return 0; +; else +; return 1; +;} + +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-unknown-linux-gnu" + +define i32 @main() nounwind { +entry: + %A = alloca [20 x i64], align 8 ; <[20 x i64]*> [#uses=3] + %arraydecay = getelementptr inbounds [20 x i64]* %A, i32 0, i32 0 ; <i64*> [#uses=1] + %arrayidx = getelementptr inbounds i64* %arraydecay, i64 0 ; <i64*> [#uses=1] + store i64 0, i64* %arrayidx + fence seq_cst + br label %for.cond + +for.cond: ; preds = %for.inc, %entry + %0 = phi i64 [ 0, %entry ], [ %inc, %for.inc ] ; <i64> [#uses=3] + %exitcond = icmp ne i64 %0, 9223372036854775807 ; <i1> [#uses=1] + br i1 %exitcond, label %for.body, label %for.end + +for.body: ; preds = %for.cond + %arraydecay2 = getelementptr inbounds [20 x i64]* %A, i32 0, i32 0 ; <i64*> [#uses=1] + %arrayidx3 = getelementptr inbounds i64* %arraydecay2, i64 0 ; <i64*> [#uses=1] + store i64 %0, i64* %arrayidx3 + br label %for.inc + +for.inc: ; preds = %for.body + %inc = add nsw i64 %0, 1 ; <i64> [#uses=1] + br label %for.cond + +for.end: ; preds = %for.cond + fence seq_cst + %arraydecay5 = getelementptr inbounds [20 x i64]* %A, i32 0, i32 0 ; <i64*> [#uses=1] + %arrayidx6 = getelementptr inbounds i64* %arraydecay5, i64 0 ; <i64*> [#uses=1] + %tmp7 = load i64* %arrayidx6 ; <i64> [#uses=1] + %cmp8 = icmp eq i64 %tmp7, 9223372036854775806 ; <i1> [#uses=1] + br i1 %cmp8, label %if.then, label %if.else + +if.then: ; preds = %for.end + br label %return + +if.else: ; preds = %for.end + br label %return + +return: ; preds = %if.else, %if.then + %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.else ] ; <i32> [#uses=1] + ret i32 %retval.0 +} + +; CHECK: for (int c1 = 0; c1 <= 9223372036854775806; c1 += 1) +; CHECK: Stmt_for_body(c1); diff --git a/polly/test/Isl/CodeGen/single_loop_one_iteration.ll b/polly/test/Isl/CodeGen/single_loop_one_iteration.ll new file mode 100644 index 0000000..32b1289c --- /dev/null +++ b/polly/test/Isl/CodeGen/single_loop_one_iteration.ll @@ -0,0 +1,69 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze < %s | FileCheck %s + +;#define N 20 +; +;int main () { +; int i; +; int A[N]; +; +; A[0] = 0; +; +; __sync_synchronize(); +; +; for (i = 0; i < 1; i++) +; A[i] = 1; +; +; __sync_synchronize(); +; +; if (A[0] == 1) +; return 0; +; else +; return 1; +;} + +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-unknown-linux-gnu" + +define i32 @main() nounwind { +entry: + %A = alloca [20 x i32], align 4 ; <[20 x i32]*> [#uses=3] + %arraydecay = getelementptr inbounds [20 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1] + %arrayidx = getelementptr inbounds i32* %arraydecay, i64 0 ; <i32*> [#uses=1] + store i32 0, i32* %arrayidx + fence seq_cst + br label %for.cond + +for.cond: ; preds = %for.inc, %entry + %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ] ; <i64> [#uses=3] + %arrayidx3 = getelementptr [20 x i32]* %A, i64 0, i64 %indvar ; <i32*> [#uses=1] + %exitcond = icmp ne i64 %indvar, 1 ; <i1> [#uses=1] + br i1 %exitcond, label %for.body, label %for.end + +for.body: ; preds = %for.cond + store i32 1, i32* %arrayidx3 + br label %for.inc + +for.inc: ; preds = %for.body + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %for.cond + +for.end: ; preds = %for.cond + fence seq_cst + %arraydecay5 = getelementptr inbounds [20 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1] + %arrayidx6 = getelementptr inbounds i32* %arraydecay5, i64 0 ; <i32*> [#uses=1] + %tmp7 = load i32* %arrayidx6 ; <i32> [#uses=1] + %cmp8 = icmp eq i32 %tmp7, 1 ; <i1> [#uses=1] + br i1 %cmp8, label %if.then, label %if.else + +if.then: ; preds = %for.end + br label %return + +if.else: ; preds = %for.end + br label %return + +return: ; preds = %if.else, %if.then + %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.else ] ; <i32> [#uses=1] + ret i32 %retval.0 +} + +; CHECK: Stmt_for_body(0); diff --git a/polly/test/Isl/CodeGen/single_loop_param.ll b/polly/test/Isl/CodeGen/single_loop_param.ll new file mode 100644 index 0000000..570fe03 --- /dev/null +++ b/polly/test/Isl/CodeGen/single_loop_param.ll @@ -0,0 +1,71 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze < %s | FileCheck %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=3] + +define void @bar(i64 %n) nounwind { +bb: + fence seq_cst + br label %bb1 + +bb1: ; preds = %bb3, %bb + %i.0 = phi i64 [ 0, %bb ], [ %tmp, %bb3 ] ; <i64> [#uses=3] + %scevgep = getelementptr [1024 x i32]* @A, i64 0, i64 %i.0 ; <i32*> [#uses=1] + %exitcond = icmp ne i64 %i.0, %n ; <i1> [#uses=1] + br i1 %exitcond, label %bb2, label %bb4 + +bb2: ; preds = %bb1 + store i32 1, i32* %scevgep + br label %bb3 + +bb3: ; preds = %bb2 + %tmp = add nsw i64 %i.0, 1 ; <i64> [#uses=1] + br label %bb1 + +bb4: ; preds = %bb1 + fence seq_cst + ret void +} + +define i32 @main() nounwind { +bb: + call void @llvm.memset.p0i8.i64(i8* bitcast ([1024 x i32]* @A to i8*), i8 0, i64 4096, i32 1, i1 false) + call void @bar(i64 1024) + br label %bb1 + +bb1: ; preds = %bb7, %bb + %indvar = phi i64 [ %indvar.next, %bb7 ], [ 0, %bb ] ; <i64> [#uses=3] + %scevgep = getelementptr [1024 x i32]* @A, i64 0, i64 %indvar ; <i32*> [#uses=1] + %i.0 = trunc i64 %indvar to i32 ; <i32> [#uses=1] + %tmp = icmp slt i32 %i.0, 1024 ; <i1> [#uses=1] + br i1 %tmp, label %bb2, label %bb8 + +bb2: ; preds = %bb1 + %tmp3 = load i32* %scevgep ; <i32> [#uses=1] + %tmp4 = icmp ne i32 %tmp3, 1 ; <i1> [#uses=1] + br i1 %tmp4, label %bb5, label %bb6 + +bb5: ; preds = %bb2 + br label %bb9 + +bb6: ; preds = %bb2 + br label %bb7 + +bb7: ; preds = %bb6 + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %bb1 + +bb8: ; preds = %bb1 + br label %bb9 + +bb9: ; preds = %bb8, %bb5 + %.0 = phi i32 [ 1, %bb5 ], [ 0, %bb8 ] ; <i32> [#uses=1] + ret i32 %.0 +} + +declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind + +; CHECK: for (int c1 = 0; c1 < n; c1 += 1) +; CHECK: Stmt_bb2(c1); + diff --git a/polly/test/Isl/CodeGen/single_loop_zero_iterations.ll b/polly/test/Isl/CodeGen/single_loop_zero_iterations.ll new file mode 100644 index 0000000..23354ff --- /dev/null +++ b/polly/test/Isl/CodeGen/single_loop_zero_iterations.ll @@ -0,0 +1,70 @@ +; RUN: opt %loadPolly %defaultOpts -polly-ast -analyze -S < %s | FileCheck %s + +;#define N 20 +; +;int main () { +; int i; +; int A[N]; +; +; A[0] = 0; +; +; __sync_synchronize(); +; +; for (i = 0; i < 0; i++) +; A[i] = 1; +; +; __sync_synchronize(); +; +; if (A[0] == 0) +; return 0; +; else +; return 1; +;} + +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-unknown-linux-gnu" + +define i32 @main() nounwind { +entry: + %A = alloca [20 x i32], align 4 ; <[20 x i32]*> [#uses=3] + %arraydecay = getelementptr inbounds [20 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1] + %arrayidx = getelementptr inbounds i32* %arraydecay, i64 0 ; <i32*> [#uses=1] + store i32 0, i32* %arrayidx + fence seq_cst + br label %for.cond + +for.cond: ; preds = %for.inc, %entry + %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ] ; <i64> [#uses=2] + %arrayidx3 = getelementptr [20 x i32]* %A, i64 0, i64 %indvar ; <i32*> [#uses=1] + br i1 false, label %for.body, label %for.end + +for.body: ; preds = %for.cond + store i32 1, i32* %arrayidx3 + br label %for.inc + +for.inc: ; preds = %for.body + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1] + br label %for.cond + +for.end: ; preds = %for.cond + fence seq_cst + %arraydecay5 = getelementptr inbounds [20 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1] + %arrayidx6 = getelementptr inbounds i32* %arraydecay5, i64 0 ; <i32*> [#uses=1] + %tmp7 = load i32* %arrayidx6 ; <i32> [#uses=1] + %cmp8 = icmp eq i32 %tmp7, 0 ; <i1> [#uses=1] + br i1 %cmp8, label %if.then, label %if.else + +if.then: ; preds = %for.end + br label %return + +if.else: ; preds = %for.end + br label %return + +return: ; preds = %if.else, %if.then + %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.else ] ; <i32> [#uses=1] + ret i32 %retval.0 +} + +; CHECK: for region: 'for.cond => for.end.region' in function 'main': +; CHECK-NEXT: main(): +; CHECK-NEXT: Stmt_for_body(0); diff --git a/polly/test/Isl/CodeGen/split_edges.ll b/polly/test/Isl/CodeGen/split_edges.ll new file mode 100644 index 0000000..a166b76 --- /dev/null +++ b/polly/test/Isl/CodeGen/split_edges.ll @@ -0,0 +1,34 @@ +; RUN: opt %loadPolly -polly-codegen-isl -verify-region-info -verify-dom-info -S < %s | FileCheck %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" + +define void @loop_with_condition() nounwind { +bb0: + fence seq_cst + br label %bb1 + +bb1: + br i1 true, label %bb2, label %bb3 + +bb2: + %ind1 = phi i32 [0, %bb1], [ %inc1, %bb2] + %inc1 = add i32 %ind1, 1 + %cond1 = icmp eq i32 %ind1, 32 + br i1 %cond1, label %bb4, label %bb2 + +bb3: + %ind2 = phi i32 [0, %bb1], [ %inc2, %bb3] + %inc2 = add i32 %ind2, 1 + br i1 true, label %bb4, label %bb3 + +bb4: + br label %bb5 + +bb5: + fence seq_cst + ret void + +} + +; CHECK: polly.split_new_and_old +; CHECK: polly.merge_new_and_old diff --git a/polly/test/Isl/CodeGen/split_edges_2.ll b/polly/test/Isl/CodeGen/split_edges_2.ll new file mode 100644 index 0000000..dc56e88 --- /dev/null +++ b/polly/test/Isl/CodeGen/split_edges_2.ll @@ -0,0 +1,33 @@ +; RUN: opt %loadPolly -polly-codegen-isl -verify-region-info -verify-dom-info -S < %s | FileCheck %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" + +define void @loop_with_condition() nounwind { +bb0: + fence seq_cst + br label %bb1 + +bb1: + br label %bb2 + +bb2: + %ind1 = phi i32 [0, %bb1], [ %inc1, %bb2] + %inc1 = add i32 %ind1, 1 + %cond1 = icmp eq i32 %ind1, 32 + br i1 %cond1, label %bb4, label %bb2 + +bb4: + br label %bb5 + +bb5: + fence seq_cst + ret void + +} + +; CHECK: polly.split_new_and_old +; CHECK: polly.merge_new_and_old + + + diff --git a/polly/test/IslCodeGen/single_loop_param_less_equal.ll b/polly/test/Isl/single_loop_param_less_equal.ll index 45442b8..45442b8 100644 --- a/polly/test/IslCodeGen/single_loop_param_less_equal.ll +++ b/polly/test/Isl/single_loop_param_less_equal.ll diff --git a/polly/test/IslCodeGen/single_loop_param_less_than.ll b/polly/test/Isl/single_loop_param_less_than.ll index 25a4438..25a4438 100644 --- a/polly/test/IslCodeGen/single_loop_param_less_than.ll +++ b/polly/test/Isl/single_loop_param_less_than.ll |