adapt cloog codegen testcases to isl

llvm-svn: 169161
This commit is contained in:
Sebastian Pop 2012-12-03 21:34:09 +00:00
parent 47987128b6
commit a267d9b829
40 changed files with 2616 additions and 0 deletions

View File

@ -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
}

View File

@ -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:

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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*)

View File

@ -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();

View File

@ -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: }

View File

@ -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: }

View File

@ -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: }

View File

@ -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: }

View File

@ -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);

View File

@ -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: }

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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