[COMMIT] Preoptimize tests in polybench with -mem2reg -loop-simplify -indvars

1 view
Skip to first unread message

ether

unread,
Apr 6, 2011, 12:37:24 PM4/6/11
to polly-...@googlegroups.com

commit 462081a34fdfa805a3e213995605ab05f0ca43a9
Author: ether <et...@linux-eda-0.site>
Date: Thu Apr 7 00:34:06 2011 +0800

Preoptimize tests in polybench with -mem2reg -loop-simplify -indvars

diff --git a/test/polybench/datamining/correlation/correlation_with_param.ll b/test/polybench/datamining/correlation/correlation_with_param.ll
index fa0f6ed..046b87f 100644
--- a/test/polybench/datamining/correlation/correlation_with_param.ll
+++ b/test/polybench/datamining/correlation/correlation_with_param.ll
@@ -1,128 +1,169 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-analyze-ir -print-top-scop-only -analyze %s | FileCheck %s
+; RUN: opt %loadPolly %defaultOpts -polly-analyze-ir -print-top-scop-only -analyze %s | FileCheck %s
; XFAIL: *
+; ModuleID = './datamining/correlation/correlation_with_param.ll'
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 }
-@float_n = global double 0x41B32863F6028F5C ; <double*> [#uses=3]
-@eps = global double 5.000000e-03 ; <double*> [#uses=1]
-@data = common global [501 x [501 x double]] zeroinitializer, align 32 ; <[501 x [501 x double]]*> [#uses=7]
-@symmat = common global [501 x [501 x double]] zeroinitializer, align 32 ; <[501 x [501 x double]]*> [#uses=8]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@mean = common global [501 x double] zeroinitializer, align 32 ; <[501 x double]*> [#uses=3]
-@stddev = common global [501 x double] zeroinitializer, align 32 ; <[501 x double]*> [#uses=2]
+
+@float_n = global double 0x41B32863F6028F5C
+@eps = global double 5.000000e-03
+@data = common global [501 x [501 x double]] zeroinitializer, align 32
+@symmat = common global [501 x [501 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@mean = common global [501 x double] zeroinitializer, align 32
+@stddev = common global [501 x double] zeroinitializer, align 32
+
define void @scop_func(i64 %m, i64 %n) nounwind {
entry:
- %0 = icmp slt i64 %n, 1 ; <i1> [#uses=2]
- %1 = icmp slt i64 %m, 1 ; <i1> [#uses=1]
- %or.cond = or i1 %0, %1 ; <i1> [#uses=1]
- br i1 %or.cond, label %bb13.preheader, label %bb2.preheader
+ %0 = icmp slt i64 %n, 1
+ %1 = icmp slt i64 %m, 1
+ %or.cond = or i1 %0, %1
+ br i1 %or.cond, label %bb13.preheader, label %bb2.preheader.preheader
+
+bb2.preheader.preheader: ; preds = %entry
+ br label %bb2.preheader

bb1: ; preds = %bb2.preheader, %bb1
- %indvar52 = phi i64 [ %tmp63, %bb1 ], [ 0, %bb2.preheader ] ; <i64> [#uses=2]
- %tmp63 = add i64 %indvar52, 1 ; <i64> [#uses=4]
- %scevgep59 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp62, i64 %tmp63 ; <double*> [#uses=3]
- %scevgep55 = getelementptr [501 x double]* @stddev, i64 0, i64 %tmp63 ; <double*> [#uses=1]
- %scevgep60 = getelementptr [501 x double]* @mean, i64 0, i64 %tmp63 ; <double*> [#uses=1]
- %2 = load double* %scevgep59, align 8 ; <double> [#uses=1]
- %3 = load double* %scevgep60, align 8 ; <double> [#uses=1]
- %4 = fsub double %2, %3 ; <double> [#uses=2]
+ %indvar52 = phi i64 [ %tmp63, %bb1 ], [ 0, %bb2.preheader ]
+ %tmp9 = add i64 %indvar52, 1
+ %scevgep59 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp8, i64 %tmp9
+ %tmp61 = add i64 %indvar52, 2
+ %tmp3 = add i64 %indvar52, 1
+ %scevgep60 = getelementptr [501 x double]* @mean, i64 0, i64 %tmp3
+ %scevgep55 = getelementptr [501 x double]* @stddev, i64 0, i64 %tmp3
+ %tmp63 = add i64 %indvar52, 1
+ %2 = load double* %scevgep59, align 8
+ %3 = load double* %scevgep60, align 8
+ %4 = fsub double %2, %3
store double %4, double* %scevgep59, align 8
- %5 = load double* @float_n, align 8 ; <double> [#uses=1]
- %6 = tail call double @sqrt(double %5) nounwind readonly ; <double> [#uses=1]
- %7 = load double* %scevgep55, align 8 ; <double> [#uses=1]
- %8 = fmul double %6, %7 ; <double> [#uses=1]
- %9 = fdiv double %4, %8 ; <double> [#uses=1]
+ %5 = load double* @float_n, align 8
+ %6 = tail call double @sqrt(double %5) nounwind readonly
+ %7 = load double* %scevgep55, align 8
+ %8 = fmul double %6, %7
+ %9 = fdiv double %4, %8
store double %9, double* %scevgep59, align 8
- %tmp61 = add i64 %indvar52, 2 ; <i64> [#uses=1]
- %10 = icmp sgt i64 %tmp61, %m ; <i1> [#uses=1]
+ %10 = icmp sgt i64 %tmp61, %m
br i1 %10, label %bb3, label %bb1

bb3: ; preds = %bb1
- %11 = icmp sgt i64 %tmp65, %n ; <i1> [#uses=1]
- br i1 %11, label %bb13.preheader, label %bb2.preheader
+ %11 = icmp sgt i64 %tmp65, %n
+ br i1 %11, label %bb13.preheader.loopexit, label %bb2.preheader

-bb2.preheader: ; preds = %bb3, %entry
- %indvar56 = phi i64 [ %tmp62, %bb3 ], [ 0, %entry ] ; <i64> [#uses=2]
- %tmp62 = add i64 %indvar56, 1 ; <i64> [#uses=2]
- %tmp65 = add i64 %indvar56, 2 ; <i64> [#uses=1]
+bb2.preheader: ; preds = %bb2.preheader.preheader, %bb3
+ %indvar56 = phi i64 [ %tmp62, %bb3 ], [ 0, %bb2.preheader.preheader ]
+ %tmp8 = add i64 %indvar56, 1
+ %tmp65 = add i64 %indvar56, 2
+ %tmp62 = add i64 %indvar56, 1
br label %bb1

-bb13.preheader: ; preds = %bb3, %entry
- %12 = add nsw i64 %m, -1 ; <i64> [#uses=2]
- %13 = icmp slt i64 %12, 1 ; <i1> [#uses=1]
- br i1 %13, label %return, label %bb6
-
-bb6: ; preds = %bb12, %bb13.preheader
- %storemerge113 = phi i32 [ %33, %bb12 ], [ 1, %bb13.preheader ] ; <i32> [#uses=6]
- %14 = sext i32 %storemerge113 to i64 ; <i64> [#uses=7]
- %15 = getelementptr inbounds [501 x [501 x double]]* @symmat, i64 0, i64 %14, i64 %14 ; <double*> [#uses=1]
- store double 1.000000e+00, double* %15, align 8
- %storemerge27 = add i32 %storemerge113, 1 ; <i32> [#uses=3]
- %16 = sext i32 %storemerge27 to i64 ; <i64> [#uses=1]
- %17 = icmp sgt i64 %16, %m ; <i1> [#uses=1]
- br i1 %17, label %bb12, label %bb.nph12
+bb13.preheader.loopexit: ; preds = %bb3
+ br label %bb13.preheader
+
+bb13.preheader: ; preds = %bb13.preheader.loopexit, %entry
+ %12 = add nsw i64 %m, -1
+ %13 = icmp slt i64 %12, 1
+ br i1 %13, label %return, label %bb6.preheader
+
+bb6.preheader: ; preds = %bb13.preheader
+ %tmp = add i64 %m, -1
+ br label %bb6
+
+bb6: ; preds = %bb6.preheader, %bb12
+ %indvar14 = phi i64 [ 0, %bb6.preheader ], [ %indvar.next15, %bb12 ]
+ %tmp35 = add i64 %indvar14, 3
+ %tmp36 = trunc i64 %tmp35 to i32
+ %tmp38 = add i64 %indvar14, 2
+ %tmp39 = trunc i64 %tmp38 to i32
+ %tmp46 = add i64 %indvar14, 1
+ %scevgep49 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 0, i64 %tmp46
+ %scevgep53 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 %tmp46, i64 0
+ %tmp59 = mul i64 %indvar14, 502
+ %tmp60 = add i64 %tmp59, 1
+ %scevgep61 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 1, i64 %tmp60
+ store double 1.000000e+00, double* %scevgep61, align 8
+ %14 = icmp sgt i64 %tmp38, %m
+ br i1 %14, label %bb12, label %bb.nph12

bb.nph12: ; preds = %bb6
- %tmp = add i32 %storemerge113, 2 ; <i32> [#uses=2]
- br i1 %0, label %bb10.us, label %bb.nph
-
-bb10.us: ; preds = %bb10.us, %bb.nph12
- %indvar = phi i32 [ %indvar.next, %bb10.us ], [ 0, %bb.nph12 ] ; <i32> [#uses=3]
- %storemerge115 = phi i32 [ %storemerge115, %bb10.us ], [ %storemerge113, %bb.nph12 ] ; <i32> [#uses=2]
- %storemerge2.us = add i32 %tmp, %indvar ; <i32> [#uses=1]
- %storemerge28.us = add i32 %storemerge27, %indvar ; <i32> [#uses=1]
- %18 = sext i32 %storemerge28.us to i64 ; <i64> [#uses=2]
- %19 = getelementptr inbounds [501 x [501 x double]]* @symmat, i64 0, i64 %14, i64 %18 ; <double*> [#uses=1]
- store double 0.000000e+00, double* %19, align 8
- %20 = getelementptr inbounds [501 x [501 x double]]* @symmat, i64 0, i64 %18, i64 %14 ; <double*> [#uses=1]
- store double 0.000000e+00, double* %20, align 8
- %21 = sext i32 %storemerge2.us to i64 ; <i64> [#uses=1]
- %22 = icmp sgt i64 %21, %m ; <i1> [#uses=1]
- %indvar.next = add i32 %indvar, 1 ; <i32> [#uses=1]
- br i1 %22, label %bb12, label %bb10.us
-
-bb.nph: ; preds = %bb10, %bb.nph12
- %indvar41 = phi i32 [ %indvar.next42, %bb10 ], [ 0, %bb.nph12 ] ; <i32> [#uses=3]
- %storemerge28 = add i32 %storemerge27, %indvar41 ; <i32> [#uses=1]
- %storemerge2 = add i32 %tmp, %indvar41 ; <i32> [#uses=1]
- %tmp45 = sext i32 %storemerge28 to i64 ; <i64> [#uses=3]
- %23 = getelementptr inbounds [501 x [501 x double]]* @symmat, i64 0, i64 %14, i64 %tmp45 ; <double*> [#uses=2]
- store double 0.000000e+00, double* %23, align 8
+ br i1 %0, label %bb10.us.preheader, label %bb.nph.preheader
+
+bb10.us.preheader: ; preds = %bb.nph12
+ br label %bb10.us
+
+bb.nph.preheader: ; preds = %bb.nph12
+ br label %bb.nph
+
+bb10.us: ; preds = %bb10.us.preheader, %bb10.us
+ %indvar = phi i32 [ %indvar.next, %bb10.us ], [ 0, %bb10.us.preheader ]
+ %storemerge2.us = add i32 %tmp36, %indvar
+ %storemerge28.us = add i32 %tmp39, %indvar
+ %tmp55 = sext i32 %storemerge28.us to i64
+ %tmp56 = mul i64 %tmp55, 501
+ %scevgep57 = getelementptr double* %scevgep49, i64 %tmp56
+ %scevgep58 = getelementptr double* %scevgep53, i64 %tmp55
+ store double 0.000000e+00, double* %scevgep58, align 8
+ store double 0.000000e+00, double* %scevgep57, align 8
+ %15 = sext i32 %storemerge2.us to i64
+ %16 = icmp sgt i64 %15, %m
+ %indvar.next = add i32 %indvar, 1
+ br i1 %16, label %bb12.loopexit1, label %bb10.us
+
+bb.nph: ; preds = %bb.nph.preheader, %bb10
+ %indvar41 = phi i32 [ %indvar.next42, %bb10 ], [ 0, %bb.nph.preheader ]
+ %storemerge2 = add i32 %tmp36, %indvar41
+ %storemerge28 = add i32 %tmp39, %indvar41
+ %tmp50 = sext i32 %storemerge28 to i64
+ %tmp51 = mul i64 %tmp50, 501
+ %scevgep52 = getelementptr double* %scevgep49, i64 %tmp51
+ %scevgep54 = getelementptr double* %scevgep53, i64 %tmp50
+ %tmp21 = sext i32 %storemerge28 to i64
+ store double 0.000000e+00, double* %scevgep54, align 8
br label %bb8

bb8: ; preds = %bb8, %bb.nph
- %indvar38 = phi i64 [ 0, %bb.nph ], [ %tmp40, %bb8 ] ; <i64> [#uses=2]
- %24 = phi double [ 0.000000e+00, %bb.nph ], [ %28, %bb8 ] ; <double> [#uses=1]
- %tmp40 = add i64 %indvar38, 1 ; <i64> [#uses=3]
- %scevgep = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp40, i64 %tmp45 ; <double*> [#uses=1]
- %scevgep47 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp40, i64 %14 ; <double*> [#uses=1]
- %25 = load double* %scevgep47, align 8 ; <double> [#uses=1]
- %26 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %27 = fmul double %25, %26 ; <double> [#uses=1]
- %28 = fadd double %24, %27 ; <double> [#uses=3]
- %tmp48 = add i64 %indvar38, 2 ; <i64> [#uses=1]
- %29 = icmp sgt i64 %tmp48, %n ; <i1> [#uses=1]
- br i1 %29, label %bb10, label %bb8
+ %indvar38 = phi i64 [ 0, %bb.nph ], [ %tmp40, %bb8 ]
+ %17 = phi double [ 0.000000e+00, %bb.nph ], [ %21, %bb8 ]
+ %tmp44 = add i64 %indvar38, 1
+ %scevgep47 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp44, i64 %tmp46
+ %tmp48 = add i64 %indvar38, 2
+ %tmp13 = add i64 %indvar38, 1
+ %scevgep = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp13, i64 %tmp21
+ %tmp40 = add i64 %indvar38, 1
+ %18 = load double* %scevgep47, align 8
+ %19 = load double* %scevgep, align 8
+ %20 = fmul double %18, %19
+ %21 = fadd double %17, %20
+ %22 = icmp sgt i64 %tmp48, %n
+ br i1 %22, label %bb10, label %bb8

bb10: ; preds = %bb8
- store double %28, double* %23
- %30 = getelementptr inbounds [501 x [501 x double]]* @symmat, i64 0, i64 %tmp45, i64 %14 ; <double*> [#uses=1]
- store double %28, double* %30, align 8
- %31 = sext i32 %storemerge2 to i64 ; <i64> [#uses=1]
- %32 = icmp sgt i64 %31, %m ; <i1> [#uses=1]
- %indvar.next42 = add i32 %indvar41, 1 ; <i32> [#uses=1]
- br i1 %32, label %bb12, label %bb.nph
-
-bb12: ; preds = %bb10, %bb10.us, %bb6
- %storemerge125 = phi i32 [ %storemerge113, %bb6 ], [ %storemerge115, %bb10.us ], [ %storemerge113, %bb10 ] ; <i32> [#uses=1]
- %33 = add nsw i32 %storemerge125, 1 ; <i32> [#uses=2]
- %34 = sext i32 %33 to i64 ; <i64> [#uses=1]
- %35 = icmp sgt i64 %34, %12 ; <i1> [#uses=1]
- br i1 %35, label %return, label %bb6
-
-return: ; preds = %bb12, %bb13.preheader
+ %.lcssa = phi double [ %21, %bb8 ]
+ store double %.lcssa, double* %scevgep54
+ store double %.lcssa, double* %scevgep52, align 8
+ %23 = sext i32 %storemerge2 to i64
+ %24 = icmp sgt i64 %23, %m
+ %indvar.next42 = add i32 %indvar41, 1
+ br i1 %24, label %bb12.loopexit, label %bb.nph
+
+bb12.loopexit: ; preds = %bb10
+ br label %bb12
+
+bb12.loopexit1: ; preds = %bb10.us
+ br label %bb12
+
+bb12: ; preds = %bb12.loopexit1, %bb12.loopexit, %bb6
+ %indvar.next15 = add i64 %indvar14, 1
+ %exitcond = icmp eq i64 %indvar.next15, %tmp
+ br i1 %exitcond, label %return.loopexit, label %bb6
+
+return.loopexit: ; preds = %bb12
+ br label %return
+
+return: ; preds = %return.loopexit, %bb13.preheader
ret void
}
+
declare double @sqrt(double) nounwind readonly
diff --git a/test/polybench/datamining/correlation/correlation_without_param.ll b/test/polybench/datamining/correlation/correlation_without_param.ll
index 596d03c..edde980 100644
--- a/test/polybench/datamining/correlation/correlation_without_param.ll
+++ b/test/polybench/datamining/correlation/correlation_without_param.ll
@@ -1,102 +1,117 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-analyze-ir -print-top-scop-only -analyze %s | FileCheck %s
-
-; * The two sequential loops are not detected.
-; * In the first loop is a function call blocking if from being handled.
-; tail call double @sqrt(double %3) nounwind readonly.
-; * The condition in the last loop nest seems to be seen as not well structured.
+; RUN: opt %loadPolly %defaultOpts -polly-analyze-ir -print-top-scop-only -analyze %s | FileCheck %s
; XFAIL: *
+; ModuleID = './datamining/correlation/correlation_without_param.ll'
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 }
-@float_n = global double 0x41B32863F6028F5C ; <double*> [#uses=3]
-@eps = global double 5.000000e-03 ; <double*> [#uses=1]
-@data = common global [501 x [501 x double]] zeroinitializer, align 32 ; <[501 x [501 x double]]*> [#uses=7]
-@symmat = common global [501 x [501 x double]] zeroinitializer, align 32 ; <[501 x [501 x double]]*> [#uses=6]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@mean = common global [501 x double] zeroinitializer, align 32 ; <[501 x double]*> [#uses=3]
-@stddev = common global [501 x double] zeroinitializer, align 32 ; <[501 x double]*> [#uses=2]
+
+@float_n = global double 0x41B32863F6028F5C
+@eps = global double 5.000000e-03
+@data = common global [501 x [501 x double]] zeroinitializer, align 32
+@symmat = common global [501 x [501 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@mean = common global [501 x double] zeroinitializer, align 32
+@stddev = common global [501 x double] zeroinitializer, align 32
+
define void @scop_func() nounwind {
bb.nph33.bb.nph33.split_crit_edge:
br label %bb2.preheader

bb1: ; preds = %bb2.preheader, %bb1
- %indvar45 = phi i64 [ %tmp57, %bb1 ], [ 0, %bb2.preheader ] ; <i64> [#uses=1]
- %tmp57 = add i64 %indvar45, 1 ; <i64> [#uses=5]
- %scevgep53 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp56, i64 %tmp57 ; <double*> [#uses=3]
- %scevgep49 = getelementptr [501 x double]* @stddev, i64 0, i64 %tmp57 ; <double*> [#uses=1]
- %scevgep54 = getelementptr [501 x double]* @mean, i64 0, i64 %tmp57 ; <double*> [#uses=1]
- %0 = load double* %scevgep53, align 8 ; <double> [#uses=1]
- %1 = load double* %scevgep54, align 8 ; <double> [#uses=1]
- %2 = fsub double %0, %1 ; <double> [#uses=2]
+ %indvar45 = phi i64 [ %tmp57, %bb1 ], [ 0, %bb2.preheader ]
+ %tmp51 = add i64 %indvar45, 1
+ %scevgep53 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp50, i64 %tmp51
+ %tmp44 = add i64 %indvar45, 1
+ %scevgep54 = getelementptr [501 x double]* @mean, i64 0, i64 %tmp44
+ %scevgep49 = getelementptr [501 x double]* @stddev, i64 0, i64 %tmp44
+ %tmp57 = add i64 %indvar45, 1
+ %0 = load double* %scevgep53, align 8
+ %1 = load double* %scevgep54, align 8
+ %2 = fsub double %0, %1
store double %2, double* %scevgep53, align 8
- %3 = load double* @float_n, align 8 ; <double> [#uses=1]
- %4 = tail call double @sqrt(double %3) nounwind readonly ; <double> [#uses=1]
- %5 = load double* %scevgep49, align 8 ; <double> [#uses=1]
- %6 = fmul double %4, %5 ; <double> [#uses=1]
- %7 = fdiv double %2, %6 ; <double> [#uses=1]
+ %3 = load double* @float_n, align 8
+ %4 = tail call double @sqrt(double %3) nounwind readonly
+ %5 = load double* %scevgep49, align 8
+ %6 = fmul double %4, %5
+ %7 = fdiv double %2, %6
store double %7, double* %scevgep53, align 8
- %exitcond47 = icmp eq i64 %tmp57, 500 ; <i1> [#uses=1]
- br i1 %exitcond47, label %bb3, label %bb1
+ %exitcond43 = icmp eq i64 %tmp57, 500
+ br i1 %exitcond43, label %bb3, label %bb1

bb3: ; preds = %bb1
- %exitcond55 = icmp eq i64 %tmp56, 500 ; <i1> [#uses=1]
- br i1 %exitcond55, label %bb6, label %bb2.preheader
+ %tmp56 = add i64 %indvar50, 1
+ %exitcond49 = icmp eq i64 %tmp56, 500
+ br i1 %exitcond49, label %bb6.preheader, label %bb2.preheader
+
+bb6.preheader: ; preds = %bb3
+ br label %bb6

bb2.preheader: ; preds = %bb3, %bb.nph33.bb.nph33.split_crit_edge
- %indvar50 = phi i64 [ 0, %bb.nph33.bb.nph33.split_crit_edge ], [ %tmp56, %bb3 ] ; <i64> [#uses=1]
- %tmp56 = add i64 %indvar50, 1 ; <i64> [#uses=3]
+ %indvar50 = phi i64 [ 0, %bb.nph33.bb.nph33.split_crit_edge ], [ %tmp56, %bb3 ]
+ %tmp50 = add i64 %indvar50, 1
br label %bb1

-bb6: ; preds = %bb12, %bb3
- %storemerge113 = phi i32 [ %storemerge27, %bb12 ], [ 1, %bb3 ] ; <i32> [#uses=3]
- %8 = sext i32 %storemerge113 to i64 ; <i64> [#uses=5]
- %9 = getelementptr inbounds [501 x [501 x double]]* @symmat, i64 0, i64 %8, i64 %8 ; <double*> [#uses=1]
- store double 1.000000e+00, double* %9, align 8
- %storemerge27 = add i32 %storemerge113, 1 ; <i32> [#uses=4]
- %10 = icmp sgt i32 %storemerge27, 500 ; <i1> [#uses=1]
- br i1 %10, label %bb12, label %bb.nph12.bb.nph12.split_crit_edge
+bb6: ; preds = %bb6.preheader, %bb12
+ %indvar3 = phi i64 [ 0, %bb6.preheader ], [ %indvar.next, %bb12 ]
+ %tmp25 = mul i64 %indvar3, 502
+ %tmp26 = add i64 %tmp25, 2
+ %tmp30 = add i64 %tmp25, 1
+ %tmp33 = add i64 %indvar3, 2
+ %tmp36 = mul i64 %indvar3, -1
+ %tmp12 = add i64 %tmp36, 499
+ %tmp38 = add i64 %indvar3, 1
+ %scevgep42 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 1, i64 %tmp30
+ store double 1.000000e+00, double* %scevgep42, align 8
+ br i1 false, label %bb12, label %bb.nph12.bb.nph12.split_crit_edge

bb.nph12.bb.nph12.split_crit_edge: ; preds = %bb6
- %tmp43 = add i32 %storemerge113, 2 ; <i32> [#uses=1]
br label %bb.nph

bb.nph: ; preds = %bb10, %bb.nph12.bb.nph12.split_crit_edge
- %indvar35 = phi i32 [ 0, %bb.nph12.bb.nph12.split_crit_edge ], [ %indvar.next36, %bb10 ] ; <i32> [#uses=3]
- %storemerge28 = add i32 %storemerge27, %indvar35 ; <i32> [#uses=1]
- %storemerge2 = add i32 %tmp43, %indvar35 ; <i32> [#uses=1]
- %tmp39 = sext i32 %storemerge28 to i64 ; <i64> [#uses=3]
- %11 = getelementptr inbounds [501 x [501 x double]]* @symmat, i64 0, i64 %8, i64 %tmp39 ; <double*> [#uses=2]
- store double 0.000000e+00, double* %11, align 8
+ %indvar6 = phi i64 [ %indvar.next7, %bb10 ], [ 0, %bb.nph12.bb.nph12.split_crit_edge ]
+ %tmp27 = add i64 %tmp26, %indvar6
+ %scevgep23 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 1, i64 %tmp27
+ %tmp29 = add i64 %indvar6, 2
+ %scevgep20 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 %tmp29, i64 %tmp30
+ %tmp34 = add i64 %tmp33, %indvar6
+ store double 0.000000e+00, double* %scevgep23, align 8
br label %bb8

bb8: ; preds = %bb8, %bb.nph
- %indvar = phi i64 [ 0, %bb.nph ], [ %tmp, %bb8 ] ; <i64> [#uses=1]
- %12 = phi double [ 0.000000e+00, %bb.nph ], [ %16, %bb8 ] ; <double> [#uses=1]
- %tmp = add i64 %indvar, 1 ; <i64> [#uses=4]
- %scevgep = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp, i64 %tmp39 ; <double*> [#uses=1]
- %scevgep41 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp, i64 %8 ; <double*> [#uses=1]
- %13 = load double* %scevgep41, align 8 ; <double> [#uses=1]
- %14 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %15 = fmul double %13, %14 ; <double> [#uses=1]
- %16 = fadd double %12, %15 ; <double> [#uses=3]
- %exitcond = icmp eq i64 %tmp, 500 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb10, label %bb8
+ %indvar = phi i64 [ 0, %bb.nph ], [ %tmp, %bb8 ]
+ %8 = phi double [ 0.000000e+00, %bb.nph ], [ %12, %bb8 ]
+ %tmp32 = add i64 %indvar, 1
+ %scevgep = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp32, i64 %tmp34
+ %scevgep41 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp32, i64 %tmp38
+ %tmp = add i64 %indvar, 1
+ %9 = load double* %scevgep41, align 8
+ %10 = load double* %scevgep, align 8
+ %11 = fmul double %9, %10
+ %12 = fadd double %8, %11
+ %exitcond1 = icmp eq i64 %tmp, 500
+ br i1 %exitcond1, label %bb10, label %bb8

bb10: ; preds = %bb8
- store double %16, double* %11
- %17 = getelementptr inbounds [501 x [501 x double]]* @symmat, i64 0, i64 %tmp39, i64 %8 ; <double*> [#uses=1]
- store double %16, double* %17, align 8
- %18 = icmp sgt i32 %storemerge2, 500 ; <i1> [#uses=1]
- %indvar.next36 = add i32 %indvar35, 1 ; <i32> [#uses=1]
- br i1 %18, label %bb12, label %bb.nph
+ %.lcssa = phi double [ %12, %bb8 ]
+ store double %.lcssa, double* %scevgep23
+ store double %.lcssa, double* %scevgep20, align 8
+ %indvar.next7 = add i64 %indvar6, 1
+ %exitcond = icmp eq i64 %indvar.next7, %tmp12
+ br i1 %exitcond, label %bb12.loopexit, label %bb.nph
+
+bb12.loopexit: ; preds = %bb10
+ br label %bb12

-bb12: ; preds = %bb10, %bb6
- %19 = icmp sgt i32 %storemerge27, 499 ; <i1> [#uses=1]
- br i1 %19, label %return, label %bb6
+bb12: ; preds = %bb12.loopexit, %bb6
+ %indvar.next = add i64 %indvar3, 1
+ %exitcond24 = icmp eq i64 %indvar.next, 499
+ br i1 %exitcond24, label %return, label %bb6

return: ; preds = %bb12
ret void
}
+
declare double @sqrt(double) nounwind readonly
diff --git a/test/polybench/datamining/covariance/covariance_with_param.ll b/test/polybench/datamining/covariance/covariance_with_param.ll
index 47ac4b0..df54701 100644
--- a/test/polybench/datamining/covariance/covariance_with_param.ll
+++ b/test/polybench/datamining/covariance/covariance_with_param.ll
@@ -1,159 +1,203 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-analyze-ir -print-top-scop-only -analyze %s | FileCheck %s
-; Scalar evolution cannot predict backedge taken count.
+; RUN: opt %loadPolly %defaultOpts -polly-analyze-ir -print-top-scop-only -analyze %s | FileCheck %s
; XFAIL: *
+; ModuleID = './datamining/covariance/covariance_with_param.ll'
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 }
-@float_n = global double 0x41B32863F6028F5C ; <double*> [#uses=1]
-@data = common global [501 x [501 x double]] zeroinitializer, align 32 ; <[501 x [501 x double]]*> [#uses=6]
-@symmat = common global [501 x [501 x double]] zeroinitializer, align 32 ; <[501 x [501 x double]]*> [#uses=6]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@mean = common global [501 x double] zeroinitializer, align 32 ; <[501 x double]*> [#uses=3]
+
+@float_n = global double 0x41B32863F6028F5C
+@data = common global [501 x [501 x double]] zeroinitializer, align 32
+@symmat = common global [501 x [501 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@mean = common global [501 x double] zeroinitializer, align 32
+
define void @scop_func(i64 %m, i64 %n) nounwind {
entry:
- %0 = icmp slt i64 %m, 1 ; <i1> [#uses=3]
+ %0 = icmp slt i64 %m, 1
br i1 %0, label %bb10.preheader, label %bb.nph44

bb.nph44: ; preds = %entry
- %1 = icmp slt i64 %n, 1 ; <i1> [#uses=1]
- %2 = load double* @float_n, align 8 ; <double> [#uses=2]
- br i1 %1, label %bb3.us, label %bb.nph36
-
-bb3.us: ; preds = %bb3.us, %bb.nph44
- %indvar = phi i64 [ %tmp, %bb3.us ], [ 0, %bb.nph44 ] ; <i64> [#uses=2]
- %tmp = add i64 %indvar, 1 ; <i64> [#uses=2]
- %scevgep = getelementptr [501 x double]* @mean, i64 0, i64 %tmp ; <double*> [#uses=1]
- %tmp45 = add i64 %indvar, 2 ; <i64> [#uses=1]
- %3 = fdiv double 0.000000e+00, %2 ; <double> [#uses=1]
+ %1 = icmp slt i64 %n, 1
+ %2 = load double* @float_n, align 8
+ br i1 %1, label %bb3.us.preheader, label %bb.nph36.preheader
+
+bb3.us.preheader: ; preds = %bb.nph44
+ br label %bb3.us
+
+bb.nph36.preheader: ; preds = %bb.nph44
+ br label %bb.nph36
+
+bb3.us: ; preds = %bb3.us.preheader, %bb3.us
+ %indvar = phi i64 [ %tmp, %bb3.us ], [ 0, %bb3.us.preheader ]
+ %tmp45 = add i64 %indvar, 2
+ %tmp13 = add i64 %indvar, 1
+ %scevgep = getelementptr [501 x double]* @mean, i64 0, i64 %tmp13
+ %tmp = add i64 %indvar, 1
+ %3 = fdiv double 0.000000e+00, %2
store double %3, double* %scevgep, align 8
- %4 = icmp sgt i64 %tmp45, %m ; <i1> [#uses=1]
- br i1 %4, label %bb10.preheader, label %bb3.us
-
-bb.nph36: ; preds = %bb3, %bb.nph44
- %indvar94 = phi i64 [ %tmp100, %bb3 ], [ 0, %bb.nph44 ] ; <i64> [#uses=2]
- %tmp100 = add i64 %indvar94, 1 ; <i64> [#uses=3]
- %tmp102 = add i64 %indvar94, 2 ; <i64> [#uses=1]
- %scevgep103 = getelementptr [501 x double]* @mean, i64 0, i64 %tmp100 ; <double*> [#uses=2]
+ %4 = icmp sgt i64 %tmp45, %m
+ br i1 %4, label %bb10.preheader.loopexit1, label %bb3.us
+
+bb.nph36: ; preds = %bb.nph36.preheader, %bb3
+ %indvar94 = phi i64 [ %tmp100, %bb3 ], [ 0, %bb.nph36.preheader ]
+ %tmp8 = add i64 %indvar94, 1
+ %tmp102 = add i64 %indvar94, 2
+ %scevgep103 = getelementptr [501 x double]* @mean, i64 0, i64 %tmp8
+ %tmp100 = add i64 %indvar94, 1
store double 0.000000e+00, double* %scevgep103, align 8
br label %bb1

bb1: ; preds = %bb1, %bb.nph36
- %indvar91 = phi i64 [ 0, %bb.nph36 ], [ %tmp99, %bb1 ] ; <i64> [#uses=2]
- %5 = phi double [ 0.000000e+00, %bb.nph36 ], [ %7, %bb1 ] ; <double> [#uses=1]
- %tmp99 = add i64 %indvar91, 1 ; <i64> [#uses=2]
- %scevgep97 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp99, i64 %tmp100 ; <double*> [#uses=1]
- %6 = load double* %scevgep97, align 8 ; <double> [#uses=1]
- %7 = fadd double %5, %6 ; <double> [#uses=2]
- %tmp98 = add i64 %indvar91, 2 ; <i64> [#uses=1]
- %8 = icmp sgt i64 %tmp98, %n ; <i1> [#uses=1]
+ %indvar91 = phi i64 [ 0, %bb.nph36 ], [ %tmp99, %bb1 ]
+ %5 = phi double [ 0.000000e+00, %bb.nph36 ], [ %7, %bb1 ]
+ %tmp7 = add i64 %indvar91, 1
+ %scevgep97 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp7, i64 %tmp8
+ %tmp98 = add i64 %indvar91, 2
+ %tmp99 = add i64 %indvar91, 1
+ %6 = load double* %scevgep97, align 8
+ %7 = fadd double %5, %6
+ %8 = icmp sgt i64 %tmp98, %n
br i1 %8, label %bb3, label %bb1

bb3: ; preds = %bb1
- %9 = fdiv double %7, %2 ; <double> [#uses=1]
+ %.lcssa = phi double [ %7, %bb1 ]
+ %9 = fdiv double %.lcssa, %2
store double %9, double* %scevgep103, align 8
- %10 = icmp sgt i64 %tmp102, %m ; <i1> [#uses=1]
- br i1 %10, label %bb10.preheader, label %bb.nph36
+ %10 = icmp sgt i64 %tmp102, %m
+ br i1 %10, label %bb10.preheader.loopexit, label %bb.nph36
+
+bb10.preheader.loopexit: ; preds = %bb3
+ br label %bb10.preheader
+
+bb10.preheader.loopexit1: ; preds = %bb3.us
+ br label %bb10.preheader

-bb10.preheader: ; preds = %bb3, %bb3.us, %entry
- %11 = icmp slt i64 %n, 1 ; <i1> [#uses=2]
+bb10.preheader: ; preds = %bb10.preheader.loopexit1, %bb10.preheader.loopexit, %entry
+ %11 = icmp slt i64 %n, 1
br i1 %11, label %bb19.preheader, label %bb.nph33

bb7: ; preds = %bb8.preheader, %bb7
- %indvar77 = phi i64 [ %tmp87, %bb7 ], [ 0, %bb8.preheader ] ; <i64> [#uses=2]
- %tmp87 = add i64 %indvar77, 1 ; <i64> [#uses=3]
- %scevgep83 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp86, i64 %tmp87 ; <double*> [#uses=2]
- %scevgep84 = getelementptr [501 x double]* @mean, i64 0, i64 %tmp87 ; <double*> [#uses=1]
- %12 = load double* %scevgep83, align 8 ; <double> [#uses=1]
- %13 = load double* %scevgep84, align 8 ; <double> [#uses=1]
- %14 = fsub double %12, %13 ; <double> [#uses=1]
+ %indvar77 = phi i64 [ %tmp87, %bb7 ], [ 0, %bb8.preheader ]
+ %tmp21 = add i64 %indvar77, 1
+ %scevgep83 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp20, i64 %tmp21
+ %tmp85 = add i64 %indvar77, 2
+ %tmp16 = add i64 %indvar77, 1
+ %scevgep84 = getelementptr [501 x double]* @mean, i64 0, i64 %tmp16
+ %tmp87 = add i64 %indvar77, 1
+ %12 = load double* %scevgep83, align 8
+ %13 = load double* %scevgep84, align 8
+ %14 = fsub double %12, %13
store double %14, double* %scevgep83, align 8
- %tmp85 = add i64 %indvar77, 2 ; <i64> [#uses=1]
- %15 = icmp sgt i64 %tmp85, %m ; <i1> [#uses=1]
+ %15 = icmp sgt i64 %tmp85, %m
br i1 %15, label %bb9, label %bb7

bb9: ; preds = %bb7
- %16 = icmp sgt i64 %tmp89, %n ; <i1> [#uses=1]
- br i1 %16, label %bb19.preheader, label %bb8.preheader
+ %16 = icmp sgt i64 %tmp89, %n
+ br i1 %16, label %bb19.preheader.loopexit, label %bb8.preheader

bb.nph33: ; preds = %bb10.preheader
- br i1 %0, label %return, label %bb8.preheader
+ br i1 %0, label %return, label %bb8.preheader.preheader

-bb8.preheader: ; preds = %bb.nph33, %bb9
- %indvar79 = phi i64 [ %tmp86, %bb9 ], [ 0, %bb.nph33 ] ; <i64> [#uses=2]
- %tmp86 = add i64 %indvar79, 1 ; <i64> [#uses=2]
- %tmp89 = add i64 %indvar79, 2 ; <i64> [#uses=1]
+bb8.preheader.preheader: ; preds = %bb.nph33
+ br label %bb8.preheader
+
+bb8.preheader: ; preds = %bb8.preheader.preheader, %bb9
+ %indvar79 = phi i64 [ %tmp86, %bb9 ], [ 0, %bb8.preheader.preheader ]
+ %tmp20 = add i64 %indvar79, 1
+ %tmp89 = add i64 %indvar79, 2
+ %tmp86 = add i64 %indvar79, 1
br label %bb7

-bb19.preheader: ; preds = %bb9, %bb10.preheader
- br i1 %0, label %return, label %bb17.preheader
+bb19.preheader.loopexit: ; preds = %bb9
+ br label %bb19.preheader
+
+bb19.preheader: ; preds = %bb19.preheader.loopexit, %bb10.preheader
+ br i1 %0, label %return, label %bb17.preheader.preheader
+
+bb17.preheader.preheader: ; preds = %bb19.preheader
+ br label %bb17.preheader

bb.nph13: ; preds = %bb17.preheader
- %tmp53 = add i64 %storemerge214, 1 ; <i64> [#uses=2]
- br i1 %11, label %bb16.us, label %bb.nph13.bb.nph13.split_crit_edge
+ br i1 %11, label %bb16.us.preheader, label %bb.nph13.bb.nph13.split_crit_edge
+
+bb16.us.preheader: ; preds = %bb.nph13
+ br label %bb16.us

bb.nph13.bb.nph13.split_crit_edge: ; preds = %bb.nph13
- %tmp73 = mul i64 %storemerge214, 502 ; <i64> [#uses=2]
br label %bb.nph

-bb16.us: ; preds = %bb16.us, %bb.nph13
- %indvar48 = phi i64 [ %indvar.next49, %bb16.us ], [ 0, %bb.nph13 ] ; <i64> [#uses=3]
- %storemerge218 = phi i64 [ %storemerge218, %bb16.us ], [ %storemerge214, %bb.nph13 ] ; <i64> [#uses=4]
- %tmp50 = add i64 %storemerge214, %indvar48 ; <i64> [#uses=2]
- %tmp54 = add i64 %tmp53, %indvar48 ; <i64> [#uses=1]
- %tmp56 = mul i64 %storemerge218, 501 ; <i64> [#uses=1]
- %scevgep55.sum = add i64 %tmp50, %tmp56 ; <i64> [#uses=1]
- %scevgep57 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 0, i64 %scevgep55.sum ; <double*> [#uses=1]
+bb16.us: ; preds = %bb16.us.preheader, %bb16.us
+ %indvar48 = phi i64 [ %indvar.next49, %bb16.us ], [ 0, %bb16.us.preheader ]
+ %tmp57 = add i64 %tmp56, %indvar48
+ %scevgep57 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 1, i64 %tmp57
+ %tmp59 = add i64 %indvar48, 1
+ %scevgep52 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 %tmp59, i64 %tmp56
+ %tmp54 = add i64 %tmp61, %indvar48
store double 0.000000e+00, double* %scevgep57, align 8
- %scevgep52 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 %tmp50, i64 %storemerge218 ; <double*> [#uses=1]
store double 0.000000e+00, double* %scevgep52, align 8
- %17 = icmp sgt i64 %tmp54, %m ; <i1> [#uses=1]
- %indvar.next49 = add i64 %indvar48, 1 ; <i64> [#uses=1]
- br i1 %17, label %bb18, label %bb16.us
+ %17 = icmp sgt i64 %tmp54, %m
+ %indvar.next49 = add i64 %indvar48, 1
+ br i1 %17, label %bb18.loopexit2, label %bb16.us

bb.nph: ; preds = %bb16, %bb.nph13.bb.nph13.split_crit_edge
- %indvar62 = phi i64 [ 0, %bb.nph13.bb.nph13.split_crit_edge ], [ %indvar.next63, %bb16 ] ; <i64> [#uses=5]
- %tmp69 = add i64 %storemerge214, %indvar62 ; <i64> [#uses=1]
- %tmp72 = add i64 %tmp53, %indvar62 ; <i64> [#uses=1]
- %scevgep74 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 %indvar62, i64 %tmp73 ; <double*> [#uses=1]
- %tmp75 = add i64 %tmp73, %indvar62 ; <i64> [#uses=1]
- %scevgep76 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 0, i64 %tmp75 ; <double*> [#uses=2]
+ %indvar62 = phi i64 [ 0, %bb.nph13.bb.nph13.split_crit_edge ], [ %indvar.next63, %bb16 ]
+ %tmp72 = add i64 %tmp61, %indvar62
+ %tmp64 = add i64 %indvar62, 1
+ %scevgep74 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 %tmp64, i64 %tmp56
+ %tmp69 = add i64 %tmp56, %indvar62
+ %scevgep76 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 1, i64 %tmp69
+ %tmp74 = add i64 %storemerge214, %indvar62
store double 0.000000e+00, double* %scevgep76, align 8
br label %bb14

bb14: ; preds = %bb14, %bb.nph
- %indvar59 = phi i64 [ 0, %bb.nph ], [ %tmp68, %bb14 ] ; <i64> [#uses=2]
- %18 = phi double [ 0.000000e+00, %bb.nph ], [ %22, %bb14 ] ; <double> [#uses=1]
- %tmp68 = add i64 %indvar59, 1 ; <i64> [#uses=3]
- %scevgep65 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp68, i64 %tmp69 ; <double*> [#uses=1]
- %scevgep66 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp68, i64 %storemerge214 ; <double*> [#uses=1]
- %19 = load double* %scevgep66, align 8 ; <double> [#uses=1]
- %20 = load double* %scevgep65, align 8 ; <double> [#uses=1]
- %21 = fmul double %19, %20 ; <double> [#uses=1]
- %22 = fadd double %18, %21 ; <double> [#uses=3]
- %tmp67 = add i64 %indvar59, 2 ; <i64> [#uses=1]
- %23 = icmp sgt i64 %tmp67, %n ; <i1> [#uses=1]
+ %indvar59 = phi i64 [ 0, %bb.nph ], [ %tmp68, %bb14 ]
+ %18 = phi double [ 0.000000e+00, %bb.nph ], [ %22, %bb14 ]
+ %tmp71 = add i64 %indvar59, 1
+ %scevgep65 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp71, i64 %tmp74
+ %scevgep66 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp71, i64 %storemerge214
+ %tmp67 = add i64 %indvar59, 2
+ %tmp68 = add i64 %indvar59, 1
+ %19 = load double* %scevgep66, align 8
+ %20 = load double* %scevgep65, align 8
+ %21 = fmul double %19, %20
+ %22 = fadd double %18, %21
+ %23 = icmp sgt i64 %tmp67, %n
br i1 %23, label %bb16, label %bb14

bb16: ; preds = %bb14
- store double %22, double* %scevgep76
- store double %22, double* %scevgep74, align 8
- %24 = icmp sgt i64 %tmp72, %m ; <i1> [#uses=1]
- %indvar.next63 = add i64 %indvar62, 1 ; <i64> [#uses=1]
- br i1 %24, label %bb18, label %bb.nph
-
-bb18: ; preds = %bb17.preheader, %bb16, %bb16.us
- %storemerge225 = phi i64 [ %storemerge214, %bb17.preheader ], [ %storemerge218, %bb16.us ], [ %storemerge214, %bb16 ] ; <i64> [#uses=1]
- %25 = add nsw i64 %storemerge225, 1 ; <i64> [#uses=2]
- %26 = icmp sgt i64 %25, %m ; <i1> [#uses=1]
- br i1 %26, label %return, label %bb17.preheader
-
-bb17.preheader: ; preds = %bb18, %bb19.preheader
- %storemerge214 = phi i64 [ %25, %bb18 ], [ 1, %bb19.preheader ] ; <i64> [#uses=9]
- %27 = icmp sgt i64 %storemerge214, %m ; <i1> [#uses=1]
- br i1 %27, label %bb18, label %bb.nph13
-
-return: ; preds = %bb18, %bb19.preheader, %bb.nph33
+ %.lcssa24 = phi double [ %22, %bb14 ]
+ store double %.lcssa24, double* %scevgep76
+ store double %.lcssa24, double* %scevgep74, align 8
+ %24 = icmp sgt i64 %tmp72, %m
+ %indvar.next63 = add i64 %indvar62, 1
+ br i1 %24, label %bb18.loopexit, label %bb.nph
+
+bb18.loopexit: ; preds = %bb16
+ br label %bb18
+
+bb18.loopexit2: ; preds = %bb16.us
+ br label %bb18
+
+bb18: ; preds = %bb18.loopexit2, %bb18.loopexit, %bb17.preheader
+ %indvar.next = add i64 %indvar27, 1
+ %exitcond = icmp eq i64 %indvar.next, %m
+ br i1 %exitcond, label %return.loopexit, label %bb17.preheader
+
+bb17.preheader: ; preds = %bb17.preheader.preheader, %bb18
+ %indvar27 = phi i64 [ 0, %bb17.preheader.preheader ], [ %indvar.next, %bb18 ]
+ %tmp55 = mul i64 %indvar27, 502
+ %tmp56 = add i64 %tmp55, 1
+ %tmp61 = add i64 %indvar27, 2
+ %storemerge214 = add i64 %indvar27, 1
+ br i1 false, label %bb18, label %bb.nph13
+
+return.loopexit: ; preds = %bb18
+ br label %return
+
+return: ; preds = %return.loopexit, %bb19.preheader, %bb.nph33
ret void
}
diff --git a/test/polybench/datamining/covariance/covariance_without_param.ll b/test/polybench/datamining/covariance/covariance_without_param.ll
index e8df2a9..67f0d83 100644
--- a/test/polybench/datamining/covariance/covariance_without_param.ll
+++ b/test/polybench/datamining/covariance/covariance_without_param.ll
@@ -1,110 +1,132 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -polly-cloog -analyze %s | FileCheck %s
+; RUN: opt %loadPolly %defaultOpts -polly-detect -polly-cloog -analyze %s | FileCheck %s
+; ModuleID = './datamining/covariance/covariance_without_param.ll'
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 }
-@float_n = global double 0x41B32863F6028F5C ; <double*> [#uses=1]
-@data = common global [501 x [501 x double]] zeroinitializer, align 32 ; <[501 x [501 x double]]*> [#uses=6]
-@symmat = common global [501 x [501 x double]] zeroinitializer, align 32 ; <[501 x [501 x double]]*> [#uses=4]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@mean = common global [501 x double] zeroinitializer, align 32 ; <[501 x double]*> [#uses=2]
+
+@float_n = global double 0x41B32863F6028F5C
+@data = common global [501 x [501 x double]] zeroinitializer, align 32
+@symmat = common global [501 x [501 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@mean = common global [501 x double] zeroinitializer, align 32
+
define void @scop_func() nounwind {
bb.nph44.bb.nph44.split_crit_edge:
- %0 = load double* @float_n, align 8 ; <double> [#uses=1]
+ %0 = load double* @float_n, align 8
br label %bb.nph36

bb.nph36: ; preds = %bb3, %bb.nph44.bb.nph44.split_crit_edge
- %indvar77 = phi i64 [ 0, %bb.nph44.bb.nph44.split_crit_edge ], [ %tmp83, %bb3 ] ; <i64> [#uses=1]
- %tmp83 = add i64 %indvar77, 1 ; <i64> [#uses=4]
- %scevgep85 = getelementptr [501 x double]* @mean, i64 0, i64 %tmp83 ; <double*> [#uses=2]
+ %indvar77 = phi i64 [ 0, %bb.nph44.bb.nph44.split_crit_edge ], [ %tmp83, %bb3 ]
+ %tmp48 = add i64 %indvar77, 1
+ %scevgep85 = getelementptr [501 x double]* @mean, i64 0, i64 %tmp48
+ %tmp83 = add i64 %indvar77, 1
store double 0.000000e+00, double* %scevgep85, align 8
br label %bb1

bb1: ; preds = %bb1, %bb.nph36
- %indvar73 = phi i64 [ 0, %bb.nph36 ], [ %tmp82, %bb1 ] ; <i64> [#uses=1]
- %1 = phi double [ 0.000000e+00, %bb.nph36 ], [ %3, %bb1 ] ; <double> [#uses=1]
- %tmp82 = add i64 %indvar73, 1 ; <i64> [#uses=3]
- %scevgep80 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp82, i64 %tmp83 ; <double*> [#uses=1]
- %2 = load double* %scevgep80, align 8 ; <double> [#uses=1]
- %3 = fadd double %1, %2 ; <double> [#uses=2]
- %exitcond75 = icmp eq i64 %tmp82, 500 ; <i1> [#uses=1]
- br i1 %exitcond75, label %bb3, label %bb1
+ %indvar73 = phi i64 [ 0, %bb.nph36 ], [ %tmp82, %bb1 ]
+ %1 = phi double [ 0.000000e+00, %bb.nph36 ], [ %3, %bb1 ]
+ %tmp47 = add i64 %indvar73, 1
+ %scevgep80 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp47, i64 %tmp48
+ %tmp82 = add i64 %indvar73, 1
+ %2 = load double* %scevgep80, align 8
+ %3 = fadd double %1, %2
+ %exitcond42 = icmp eq i64 %tmp82, 500
+ br i1 %exitcond42, label %bb3, label %bb1

bb3: ; preds = %bb1
- %4 = fdiv double %3, %0 ; <double> [#uses=1]
+ %.lcssa41 = phi double [ %3, %bb1 ]
+ %4 = fdiv double %.lcssa41, %0
store double %4, double* %scevgep85, align 8
- %exitcond81 = icmp eq i64 %tmp83, 500 ; <i1> [#uses=1]
- br i1 %exitcond81, label %bb8.preheader, label %bb.nph36
+ %exitcond46 = icmp eq i64 %tmp83, 500
+ br i1 %exitcond46, label %bb8.preheader.preheader, label %bb.nph36
+
+bb8.preheader.preheader: ; preds = %bb3
+ br label %bb8.preheader

bb7: ; preds = %bb8.preheader, %bb7
- %indvar59 = phi i64 [ %tmp70, %bb7 ], [ 0, %bb8.preheader ] ; <i64> [#uses=1]
- %tmp70 = add i64 %indvar59, 1 ; <i64> [#uses=4]
- %scevgep66 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp69, i64 %tmp70 ; <double*> [#uses=2]
- %scevgep67 = getelementptr [501 x double]* @mean, i64 0, i64 %tmp70 ; <double*> [#uses=1]
- %5 = load double* %scevgep66, align 8 ; <double> [#uses=1]
- %6 = load double* %scevgep67, align 8 ; <double> [#uses=1]
- %7 = fsub double %5, %6 ; <double> [#uses=1]
+ %indvar59 = phi i64 [ %tmp70, %bb7 ], [ 0, %bb8.preheader ]
+ %tmp39 = add i64 %indvar59, 1
+ %scevgep66 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp38, i64 %tmp39
+ %tmp = add i64 %indvar59, 1
+ %scevgep67 = getelementptr [501 x double]* @mean, i64 0, i64 %tmp
+ %tmp70 = add i64 %indvar59, 1
+ %5 = load double* %scevgep66, align 8
+ %6 = load double* %scevgep67, align 8
+ %7 = fsub double %5, %6
store double %7, double* %scevgep66, align 8
- %exitcond61 = icmp eq i64 %tmp70, 500 ; <i1> [#uses=1]
- br i1 %exitcond61, label %bb9, label %bb7
+ %exitcond33 = icmp eq i64 %tmp70, 500
+ br i1 %exitcond33, label %bb9, label %bb7

bb9: ; preds = %bb7
- %exitcond68 = icmp eq i64 %tmp69, 500 ; <i1> [#uses=1]
- br i1 %exitcond68, label %bb17.preheader, label %bb8.preheader
+ %tmp69 = add i64 %indvar62, 1
+ %exitcond37 = icmp eq i64 %tmp69, 500
+ br i1 %exitcond37, label %bb17.preheader.preheader, label %bb8.preheader
+
+bb17.preheader.preheader: ; preds = %bb9
+ br label %bb17.preheader

-bb8.preheader: ; preds = %bb9, %bb3
- %indvar62 = phi i64 [ %tmp69, %bb9 ], [ 0, %bb3 ] ; <i64> [#uses=1]
- %tmp69 = add i64 %indvar62, 1 ; <i64> [#uses=3]
+bb8.preheader: ; preds = %bb8.preheader.preheader, %bb9
+ %indvar62 = phi i64 [ %tmp69, %bb9 ], [ 0, %bb8.preheader.preheader ]
+ %tmp38 = add i64 %indvar62, 1
br label %bb7

bb.nph13.bb.nph13.split_crit_edge: ; preds = %bb17.preheader
- %tmp53 = add i64 %storemerge214, 1 ; <i64> [#uses=1]
- %tmp55 = mul i64 %storemerge214, 502 ; <i64> [#uses=2]
br label %bb.nph

bb.nph: ; preds = %bb16, %bb.nph13.bb.nph13.split_crit_edge
- %indvar46 = phi i64 [ 0, %bb.nph13.bb.nph13.split_crit_edge ], [ %indvar.next47, %bb16 ] ; <i64> [#uses=5]
- %tmp51 = add i64 %storemerge214, %indvar46 ; <i64> [#uses=1]
- %tmp54 = add i64 %tmp53, %indvar46 ; <i64> [#uses=1]
- %scevgep56 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 %indvar46, i64 %tmp55 ; <double*> [#uses=1]
- %tmp57 = add i64 %tmp55, %indvar46 ; <i64> [#uses=1]
- %scevgep58 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 0, i64 %tmp57 ; <double*> [#uses=2]
+ %indvar46 = phi i64 [ 0, %bb.nph13.bb.nph13.split_crit_edge ], [ %indvar.next47, %bb16 ]
+ %tmp20 = add i64 %indvar46, 1
+ %scevgep56 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 %tmp20, i64 %tmp22
+ %tmp24 = add i64 %tmp22, %indvar46
+ %scevgep58 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 1, i64 %tmp24
+ %tmp28 = add i64 %storemerge214, %indvar46
store double 0.000000e+00, double* %scevgep58, align 8
br label %bb14

bb14: ; preds = %bb14, %bb.nph
- %indvar = phi i64 [ 0, %bb.nph ], [ %tmp50, %bb14 ] ; <i64> [#uses=1]
- %8 = phi double [ 0.000000e+00, %bb.nph ], [ %12, %bb14 ] ; <double> [#uses=1]
- %tmp50 = add i64 %indvar, 1 ; <i64> [#uses=4]
- %scevgep = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp50, i64 %tmp51 ; <double*> [#uses=1]
- %scevgep49 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp50, i64 %storemerge214 ; <double*> [#uses=1]
- %9 = load double* %scevgep49, align 8 ; <double> [#uses=1]
- %10 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %11 = fmul double %9, %10 ; <double> [#uses=1]
- %12 = fadd double %8, %11 ; <double> [#uses=3]
- %exitcond = icmp eq i64 %tmp50, 500 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb16, label %bb14
+ %indvar = phi i64 [ 0, %bb.nph ], [ %tmp50, %bb14 ]
+ %8 = phi double [ 0.000000e+00, %bb.nph ], [ %12, %bb14 ]
+ %tmp26 = add i64 %indvar, 1
+ %scevgep = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp26, i64 %tmp28
+ %scevgep49 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp26, i64 %storemerge214
+ %tmp50 = add i64 %indvar, 1
+ %9 = load double* %scevgep49, align 8
+ %10 = load double* %scevgep, align 8
+ %11 = fmul double %9, %10
+ %12 = fadd double %8, %11
+ %exitcond1 = icmp eq i64 %tmp50, 500
+ br i1 %exitcond1, label %bb16, label %bb14

bb16: ; preds = %bb14
- store double %12, double* %scevgep58
- store double %12, double* %scevgep56, align 8
- %13 = icmp sgt i64 %tmp54, 500 ; <i1> [#uses=1]
- %indvar.next47 = add i64 %indvar46, 1 ; <i64> [#uses=1]
- br i1 %13, label %bb18, label %bb.nph
-
-bb18: ; preds = %bb17.preheader, %bb16
- %14 = add nsw i64 %storemerge214, 1 ; <i64> [#uses=2]
- %15 = icmp sgt i64 %14, 500 ; <i1> [#uses=1]
- br i1 %15, label %return, label %bb17.preheader
-
-bb17.preheader: ; preds = %bb18, %bb9
- %storemerge214 = phi i64 [ %14, %bb18 ], [ 1, %bb9 ] ; <i64> [#uses=6]
- %16 = icmp sgt i64 %storemerge214, 500 ; <i1> [#uses=1]
- br i1 %16, label %bb18, label %bb.nph13.bb.nph13.split_crit_edge
+ %.lcssa = phi double [ %12, %bb14 ]
+ store double %.lcssa, double* %scevgep58
+ store double %.lcssa, double* %scevgep56, align 8
+ %indvar.next47 = add i64 %indvar46, 1
+ %exitcond = icmp eq i64 %indvar.next47, %tmp8
+ br i1 %exitcond, label %bb18.loopexit, label %bb.nph
+
+bb18.loopexit: ; preds = %bb16
+ br label %bb18
+
+bb18: ; preds = %bb18.loopexit, %bb17.preheader
+ %indvar.next = add i64 %indvar2, 1
+ %exitcond19 = icmp eq i64 %indvar.next, 500
+ br i1 %exitcond19, label %return, label %bb17.preheader
+
+bb17.preheader: ; preds = %bb17.preheader.preheader, %bb18
+ %indvar2 = phi i64 [ 0, %bb17.preheader.preheader ], [ %indvar.next, %bb18 ]
+ %tmp21 = mul i64 %indvar2, 502
+ %tmp22 = add i64 %tmp21, 1
+ %storemerge214 = add i64 %indvar2, 1
+ %tmp30 = mul i64 %indvar2, -1
+ %tmp8 = add i64 %tmp30, 500
+ br i1 false, label %bb18, label %bb.nph13.bb.nph13.split_crit_edge

return: ; preds = %bb18
ret void
}
; CHECK: for region: 'bb.nph36 => return' in function 'scop_func':
-
diff --git a/test/polybench/linear-algebra/kernels/2mm/2mm_with_param.ll b/test/polybench/linear-algebra/kernels/2mm/2mm_with_param.ll
index 5e6cd29..646ed3e 100644
--- a/test/polybench/linear-algebra/kernels/2mm/2mm_with_param.ll
+++ b/test/polybench/linear-algebra/kernels/2mm/2mm_with_param.ll
@@ -1,130 +1,164 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-cloog -analyze %s| FileCheck %s
+; RUN: opt %loadPolly %defaultOpts -polly-cloog -analyze %s| FileCheck %s
+; ModuleID = './linear-algebra/kernels/2mm/2mm_with_param.ll'
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 }
-@alpha1 = common global double 0.000000e+00 ; <double*> [#uses=1]
-@beta1 = common global double 0.000000e+00 ; <double*> [#uses=1]
-@alpha2 = common global double 0.000000e+00 ; <double*> [#uses=1]
-@beta2 = common global double 0.000000e+00 ; <double*> [#uses=1]
-@A = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=2]
-@B = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=2]
-@C = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=4]
-@D = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=2]
-@E = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=5]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@alpha1 = common global double 0.000000e+00
+@beta1 = common global double 0.000000e+00
+@alpha2 = common global double 0.000000e+00
+@beta2 = common global double 0.000000e+00
+@A = common global [512 x [512 x double]] zeroinitializer, align 32
+@B = common global [512 x [512 x double]] zeroinitializer, align 32
+@C = common global [512 x [512 x double]] zeroinitializer, align 32
+@D = common global [512 x [512 x double]] zeroinitializer, align 32
+@E = common global [512 x [512 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func(i64 %ni, i64 %nj, i64 %nk, i64 %nl) nounwind {
entry:
- %0 = icmp sgt i64 %ni, 0 ; <i1> [#uses=2]
+ %0 = icmp sgt i64 %ni, 0
br i1 %0, label %bb.nph50, label %return

-bb.nph35: ; preds = %bb.nph50, %bb6
- %storemerge37 = phi i64 [ %7, %bb6 ], [ 0, %bb.nph50 ] ; <i64> [#uses=4]
- br i1 %10, label %bb.nph27.us, label %bb4
+bb.nph35: ; preds = %bb.nph35.preheader, %bb6
+ %indvar17 = phi i64 [ 0, %bb.nph35.preheader ], [ %indvar.next18, %bb6 ]
+ br i1 %8, label %bb.nph27.us.preheader, label %bb4.preheader
+
+bb.nph27.us.preheader: ; preds = %bb.nph35
+ br label %bb.nph27.us
+
+bb4.preheader: ; preds = %bb.nph35
+ br label %bb4

bb4.us: ; preds = %bb2.us
- store double %5, double* %scevgep64
- %1 = add nsw i64 %storemerge431.us, 1 ; <i64> [#uses=2]
- %exitcond62 = icmp eq i64 %1, %nj ; <i1> [#uses=1]
- br i1 %exitcond62, label %bb6, label %bb.nph27.us
+ %.lcssa20 = phi double [ %5, %bb2.us ]
+ store double %.lcssa20, double* %scevgep64
+ %1 = add nsw i64 %storemerge431.us, 1
+ %exitcond24 = icmp eq i64 %1, %nj
+ br i1 %exitcond24, label %bb6.loopexit2, label %bb.nph27.us

bb2.us: ; preds = %bb.nph27.us, %bb2.us
- %.tmp.029.us = phi double [ 0.000000e+00, %bb.nph27.us ], [ %5, %bb2.us ] ; <double> [#uses=1]
- %storemerge526.us = phi i64 [ 0, %bb.nph27.us ], [ %6, %bb2.us ] ; <i64> [#uses=3]
- %scevgep60 = getelementptr [512 x [512 x double]]* @B, i64 0, i64 %storemerge526.us, i64 %storemerge431.us ; <double*> [#uses=1]
- %scevgep61 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %storemerge37, i64 %storemerge526.us ; <double*> [#uses=1]
- %2 = load double* %scevgep61, align 8 ; <double> [#uses=1]
- %3 = load double* %scevgep60, align 8 ; <double> [#uses=1]
- %4 = fmul double %2, %3 ; <double> [#uses=1]
- %5 = fadd double %.tmp.029.us, %4 ; <double> [#uses=2]
- %6 = add nsw i64 %storemerge526.us, 1 ; <i64> [#uses=2]
- %exitcond59 = icmp eq i64 %6, %nk ; <i1> [#uses=1]
- br i1 %exitcond59, label %bb4.us, label %bb2.us
-
-bb.nph27.us: ; preds = %bb4.us, %bb.nph35
- %storemerge431.us = phi i64 [ %1, %bb4.us ], [ 0, %bb.nph35 ] ; <i64> [#uses=3]
- %scevgep64 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %storemerge37, i64 %storemerge431.us ; <double*> [#uses=2]
+ %.tmp.029.us = phi double [ 0.000000e+00, %bb.nph27.us ], [ %5, %bb2.us ]
+ %storemerge526.us = phi i64 [ 0, %bb.nph27.us ], [ %6, %bb2.us ]
+ %scevgep61 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %indvar17, i64 %storemerge526.us
+ %scevgep60 = getelementptr [512 x [512 x double]]* @B, i64 0, i64 %storemerge526.us, i64 %storemerge431.us
+ %2 = load double* %scevgep61, align 8
+ %3 = load double* %scevgep60, align 8
+ %4 = fmul double %2, %3
+ %5 = fadd double %.tmp.029.us, %4
+ %6 = add nsw i64 %storemerge526.us, 1
+ %exitcond21 = icmp eq i64 %6, %nk
+ br i1 %exitcond21, label %bb4.us, label %bb2.us
+
+bb.nph27.us: ; preds = %bb.nph27.us.preheader, %bb4.us
+ %storemerge431.us = phi i64 [ %1, %bb4.us ], [ 0, %bb.nph27.us.preheader ]
+ %scevgep64 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %indvar17, i64 %storemerge431.us
store double 0.000000e+00, double* %scevgep64, align 8
br label %bb2.us

-bb4: ; preds = %bb4, %bb.nph35
- %indvar67 = phi i64 [ %indvar.next68, %bb4 ], [ 0, %bb.nph35 ] ; <i64> [#uses=2]
- %storemerge44 = phi i64 [ %storemerge44, %bb4 ], [ %storemerge37, %bb.nph35 ] ; <i64> [#uses=3]
- %tmp71 = shl i64 %storemerge44, 9 ; <i64> [#uses=1]
- %scevgep70.sum = add i64 %indvar67, %tmp71 ; <i64> [#uses=1]
- %scevgep72 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 0, i64 %scevgep70.sum ; <double*> [#uses=1]
+bb4: ; preds = %bb4.preheader, %bb4
+ %indvar67 = phi i64 [ %indvar.next68, %bb4 ], [ 0, %bb4.preheader ]
+ %scevgep72 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %indvar17, i64 %indvar67
store double 0.000000e+00, double* %scevgep72, align 8
- %indvar.next68 = add i64 %indvar67, 1 ; <i64> [#uses=2]
- %exitcond69 = icmp eq i64 %indvar.next68, %nj ; <i1> [#uses=1]
- br i1 %exitcond69, label %bb6, label %bb4
+ %indvar.next68 = add i64 %indvar67, 1
+ %exitcond16 = icmp eq i64 %indvar.next68, %nj
+ br i1 %exitcond16, label %bb6.loopexit, label %bb4
+
+bb6.loopexit: ; preds = %bb4
+ br label %bb6

-bb6: ; preds = %bb4, %bb4.us
- %storemerge49 = phi i64 [ %storemerge37, %bb4.us ], [ %storemerge44, %bb4 ] ; <i64> [#uses=1]
- %7 = add nsw i64 %storemerge49, 1 ; <i64> [#uses=2]
- %8 = icmp slt i64 %7, %ni ; <i1> [#uses=1]
- br i1 %8, label %bb.nph35, label %bb16.preheader
+bb6.loopexit2: ; preds = %bb4.us
+ br label %bb6
+
+bb6: ; preds = %bb6.loopexit2, %bb6.loopexit
+ %indvar.next18 = add i64 %indvar17, 1
+ %exitcond27 = icmp ne i64 %indvar.next18, %ni
+ br i1 %exitcond27, label %bb.nph35, label %bb16.preheader.loopexit

bb.nph50: ; preds = %entry
- %9 = icmp sgt i64 %nj, 0 ; <i1> [#uses=1]
- %10 = icmp sgt i64 %nk, 0 ; <i1> [#uses=1]
- br i1 %9, label %bb.nph35, label %bb16.preheader
+ %7 = icmp sgt i64 %nj, 0
+ %8 = icmp sgt i64 %nk, 0
+ br i1 %7, label %bb.nph35.preheader, label %bb16.preheader
+
+bb.nph35.preheader: ; preds = %bb.nph50
+ br label %bb.nph35

-bb16.preheader: ; preds = %bb.nph50, %bb6
+bb16.preheader.loopexit: ; preds = %bb6
+ br label %bb16.preheader
+
+bb16.preheader: ; preds = %bb16.preheader.loopexit, %bb.nph50
br i1 %0, label %bb.nph25, label %return

-bb.nph11: ; preds = %bb.nph25, %bb15
- %storemerge112 = phi i64 [ %17, %bb15 ], [ 0, %bb.nph25 ] ; <i64> [#uses=4]
- br i1 %20, label %bb.nph.us, label %bb13
+bb.nph11: ; preds = %bb.nph11.preheader, %bb15
+ %indvar4 = phi i64 [ 0, %bb.nph11.preheader ], [ %indvar.next5, %bb15 ]
+ br i1 %16, label %bb.nph.us.preheader, label %bb13.preheader
+
+bb.nph.us.preheader: ; preds = %bb.nph11
+ br label %bb.nph.us
+
+bb13.preheader: ; preds = %bb.nph11
+ br label %bb13

bb13.us: ; preds = %bb11.us
- store double %15, double* %scevgep54
- %11 = add nsw i64 %storemerge27.us, 1 ; <i64> [#uses=2]
- %exitcond52 = icmp eq i64 %11, %nl ; <i1> [#uses=1]
- br i1 %exitcond52, label %bb15, label %bb.nph.us
+ %.lcssa = phi double [ %13, %bb11.us ]
+ store double %.lcssa, double* %scevgep54
+ %9 = add nsw i64 %storemerge27.us, 1
+ %exitcond = icmp eq i64 %9, %nl
+ br i1 %exitcond, label %bb15.loopexit1, label %bb.nph.us

bb11.us: ; preds = %bb.nph.us, %bb11.us
- %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %15, %bb11.us ] ; <double> [#uses=1]
- %storemerge36.us = phi i64 [ 0, %bb.nph.us ], [ %16, %bb11.us ] ; <i64> [#uses=3]
- %scevgep = getelementptr [512 x [512 x double]]* @D, i64 0, i64 %storemerge36.us, i64 %storemerge27.us ; <double*> [#uses=1]
- %scevgep51 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %storemerge112, i64 %storemerge36.us ; <double*> [#uses=1]
- %12 = load double* %scevgep51, align 8 ; <double> [#uses=1]
- %13 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %14 = fmul double %12, %13 ; <double> [#uses=1]
- %15 = fadd double %.tmp.0.us, %14 ; <double> [#uses=2]
- %16 = add nsw i64 %storemerge36.us, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %16, %nj ; <i1> [#uses=1]
- br i1 %exitcond, label %bb13.us, label %bb11.us
-
-bb.nph.us: ; preds = %bb13.us, %bb.nph11
- %storemerge27.us = phi i64 [ %11, %bb13.us ], [ 0, %bb.nph11 ] ; <i64> [#uses=3]
- %scevgep54 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %storemerge112, i64 %storemerge27.us ; <double*> [#uses=2]
+ %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %13, %bb11.us ]
+ %storemerge36.us = phi i64 [ 0, %bb.nph.us ], [ %14, %bb11.us ]
+ %scevgep51 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %indvar4, i64 %storemerge36.us
+ %scevgep = getelementptr [512 x [512 x double]]* @D, i64 0, i64 %storemerge36.us, i64 %storemerge27.us
+ %10 = load double* %scevgep51, align 8
+ %11 = load double* %scevgep, align 8
+ %12 = fmul double %10, %11
+ %13 = fadd double %.tmp.0.us, %12
+ %14 = add nsw i64 %storemerge36.us, 1
+ %exitcond7 = icmp eq i64 %14, %nj
+ br i1 %exitcond7, label %bb13.us, label %bb11.us
+
+bb.nph.us: ; preds = %bb.nph.us.preheader, %bb13.us
+ %storemerge27.us = phi i64 [ %9, %bb13.us ], [ 0, %bb.nph.us.preheader ]
+ %scevgep54 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %indvar4, i64 %storemerge27.us
store double 0.000000e+00, double* %scevgep54, align 8
br label %bb11.us

-bb13: ; preds = %bb13, %bb.nph11
- %indvar = phi i64 [ %indvar.next, %bb13 ], [ 0, %bb.nph11 ] ; <i64> [#uses=2]
- %storemerge119 = phi i64 [ %storemerge119, %bb13 ], [ %storemerge112, %bb.nph11 ] ; <i64> [#uses=3]
- %tmp = shl i64 %storemerge119, 9 ; <i64> [#uses=1]
- %scevgep56.sum = add i64 %indvar, %tmp ; <i64> [#uses=1]
- %scevgep57 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 0, i64 %scevgep56.sum ; <double*> [#uses=1]
+bb13: ; preds = %bb13.preheader, %bb13
+ %indvar = phi i64 [ %indvar.next, %bb13 ], [ 0, %bb13.preheader ]
+ %scevgep57 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %indvar4, i64 %indvar
store double 0.000000e+00, double* %scevgep57, align 8
- %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=2]
- %exitcond55 = icmp eq i64 %indvar.next, %nl ; <i1> [#uses=1]
- br i1 %exitcond55, label %bb15, label %bb13
+ %indvar.next = add i64 %indvar, 1
+ %exitcond3 = icmp eq i64 %indvar.next, %nl
+ br i1 %exitcond3, label %bb15.loopexit, label %bb13
+
+bb15.loopexit: ; preds = %bb13
+ br label %bb15

-bb15: ; preds = %bb13, %bb13.us
- %storemerge124 = phi i64 [ %storemerge112, %bb13.us ], [ %storemerge119, %bb13 ] ; <i64> [#uses=1]
- %17 = add nsw i64 %storemerge124, 1 ; <i64> [#uses=2]
- %18 = icmp slt i64 %17, %ni ; <i1> [#uses=1]
- br i1 %18, label %bb.nph11, label %return
+bb15.loopexit1: ; preds = %bb13.us
+ br label %bb15
+
+bb15: ; preds = %bb15.loopexit1, %bb15.loopexit
+ %indvar.next5 = add i64 %indvar4, 1
+ %exitcond12 = icmp ne i64 %indvar.next5, %ni
+ br i1 %exitcond12, label %bb.nph11, label %return.loopexit

bb.nph25: ; preds = %bb16.preheader
- %19 = icmp sgt i64 %nl, 0 ; <i1> [#uses=1]
- %20 = icmp sgt i64 %nj, 0 ; <i1> [#uses=1]
- br i1 %19, label %bb.nph11, label %return
+ %15 = icmp sgt i64 %nl, 0
+ %16 = icmp sgt i64 %nj, 0
+ br i1 %15, label %bb.nph11.preheader, label %return
+
+bb.nph11.preheader: ; preds = %bb.nph25
+ br label %bb.nph11
+
+return.loopexit: ; preds = %bb15
+ br label %return

-return: ; preds = %bb.nph25, %bb15, %bb16.preheader, %entry
+return: ; preds = %return.loopexit, %bb.nph25, %bb16.preheader, %entry
ret void
}
; CHECK: for region: 'entry.split => return' in function 'scop_func':
diff --git a/test/polybench/linear-algebra/kernels/2mm/2mm_without_param.ll b/test/polybench/linear-algebra/kernels/2mm/2mm_without_param.ll
index b55039c..eef2b63 100644
--- a/test/polybench/linear-algebra/kernels/2mm/2mm_without_param.ll
+++ b/test/polybench/linear-algebra/kernels/2mm/2mm_without_param.ll
@@ -1,94 +1,101 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -analyze %s | FileCheck %s
-
+; RUN: opt %loadPolly %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/2mm/2mm_without_param.ll'
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 }
-@alpha1 = common global double 0.000000e+00 ; <double*> [#uses=1]
-@beta1 = common global double 0.000000e+00 ; <double*> [#uses=1]
-@alpha2 = common global double 0.000000e+00 ; <double*> [#uses=1]
-@beta2 = common global double 0.000000e+00 ; <double*> [#uses=1]
-@A = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=3]
-@B = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=3]
-@C = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=5]
-@D = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=3]
-@E = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=5]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@alpha1 = common global double 0.000000e+00
+@beta1 = common global double 0.000000e+00
+@alpha2 = common global double 0.000000e+00
+@beta2 = common global double 0.000000e+00
+@A = common global [512 x [512 x double]] zeroinitializer, align 32
+@B = common global [512 x [512 x double]] zeroinitializer, align 32
+@C = common global [512 x [512 x double]] zeroinitializer, align 32
+@D = common global [512 x [512 x double]] zeroinitializer, align 32
+@E = common global [512 x [512 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func() nounwind {
bb.nph50.bb.nph50.split_crit_edge:
br label %bb5.preheader

bb4.us: ; preds = %bb2.us
- store double %4, double* %scevgep61
- %0 = add nsw i64 %storemerge431.us, 1 ; <i64> [#uses=2]
- %exitcond59 = icmp eq i64 %0, 512 ; <i1> [#uses=1]
- br i1 %exitcond59, label %bb6, label %bb.nph27.us
+ %.lcssa9 = phi double [ %4, %bb2.us ]
+ store double %.lcssa9, double* %scevgep61
+ %0 = add nsw i64 %storemerge431.us, 1
+ %exitcond13 = icmp eq i64 %0, 512
+ br i1 %exitcond13, label %bb6, label %bb.nph27.us

bb2.us: ; preds = %bb.nph27.us, %bb2.us
- %.tmp.029.us = phi double [ 0.000000e+00, %bb.nph27.us ], [ %4, %bb2.us ] ; <double> [#uses=1]
- %storemerge526.us = phi i64 [ 0, %bb.nph27.us ], [ %5, %bb2.us ] ; <i64> [#uses=3]
- %scevgep57 = getelementptr [512 x [512 x double]]* @B, i64 0, i64 %storemerge526.us, i64 %storemerge431.us ; <double*> [#uses=1]
- %scevgep58 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %storemerge37, i64 %storemerge526.us ; <double*> [#uses=1]
- %1 = load double* %scevgep58, align 8 ; <double> [#uses=1]
- %2 = load double* %scevgep57, align 8 ; <double> [#uses=1]
- %3 = fmul double %1, %2 ; <double> [#uses=1]
- %4 = fadd double %.tmp.029.us, %3 ; <double> [#uses=2]
- %5 = add nsw i64 %storemerge526.us, 1 ; <i64> [#uses=2]
- %exitcond56 = icmp eq i64 %5, 512 ; <i1> [#uses=1]
- br i1 %exitcond56, label %bb4.us, label %bb2.us
+ %.tmp.029.us = phi double [ 0.000000e+00, %bb.nph27.us ], [ %4, %bb2.us ]
+ %storemerge526.us = phi i64 [ 0, %bb.nph27.us ], [ %5, %bb2.us ]
+ %scevgep58 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %storemerge37, i64 %storemerge526.us
+ %scevgep57 = getelementptr [512 x [512 x double]]* @B, i64 0, i64 %storemerge526.us, i64 %storemerge431.us
+ %1 = load double* %scevgep58, align 8
+ %2 = load double* %scevgep57, align 8
+ %3 = fmul double %1, %2
+ %4 = fadd double %.tmp.029.us, %3
+ %5 = add nsw i64 %storemerge526.us, 1
+ %exitcond10 = icmp eq i64 %5, 512
+ br i1 %exitcond10, label %bb4.us, label %bb2.us

bb.nph27.us: ; preds = %bb5.preheader, %bb4.us
- %storemerge431.us = phi i64 [ %0, %bb4.us ], [ 0, %bb5.preheader ] ; <i64> [#uses=3]
- %scevgep61 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %storemerge37, i64 %storemerge431.us ; <double*> [#uses=2]
+ %storemerge431.us = phi i64 [ %0, %bb4.us ], [ 0, %bb5.preheader ]
+ %scevgep61 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %storemerge37, i64 %storemerge431.us
store double 0.000000e+00, double* %scevgep61, align 8
br label %bb2.us

bb6: ; preds = %bb4.us
- %6 = add nsw i64 %storemerge37, 1 ; <i64> [#uses=2]
- %7 = icmp slt i64 %6, 512 ; <i1> [#uses=1]
- br i1 %7, label %bb5.preheader, label %bb14.preheader
+ %6 = add nsw i64 %storemerge37, 1
+ %exitcond16 = icmp ne i64 %6, 512
+ br i1 %exitcond16, label %bb5.preheader, label %bb14.preheader.preheader
+
+bb14.preheader.preheader: ; preds = %bb6
+ br label %bb14.preheader

bb5.preheader: ; preds = %bb6, %bb.nph50.bb.nph50.split_crit_edge
- %storemerge37 = phi i64 [ 0, %bb.nph50.bb.nph50.split_crit_edge ], [ %6, %bb6 ] ; <i64> [#uses=3]
+ %storemerge37 = phi i64 [ 0, %bb.nph50.bb.nph50.split_crit_edge ], [ %6, %bb6 ]
br label %bb.nph27.us

bb13.us: ; preds = %bb11.us
- store double %12, double* %scevgep54
- %8 = add nsw i64 %storemerge27.us, 1 ; <i64> [#uses=2]
- %exitcond52 = icmp eq i64 %8, 512 ; <i1> [#uses=1]
- br i1 %exitcond52, label %bb15, label %bb.nph.us
+ %.lcssa = phi double [ %11, %bb11.us ]
+ store double %.lcssa, double* %scevgep54
+ %7 = add nsw i64 %storemerge27.us, 1
+ %exitcond = icmp eq i64 %7, 512
+ br i1 %exitcond, label %bb15, label %bb.nph.us

bb11.us: ; preds = %bb.nph.us, %bb11.us
- %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %12, %bb11.us ] ; <double> [#uses=1]
- %storemerge36.us = phi i64 [ 0, %bb.nph.us ], [ %13, %bb11.us ] ; <i64> [#uses=3]
- %scevgep = getelementptr [512 x [512 x double]]* @D, i64 0, i64 %storemerge36.us, i64 %storemerge27.us ; <double*> [#uses=1]
- %scevgep51 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %storemerge112, i64 %storemerge36.us ; <double*> [#uses=1]
- %9 = load double* %scevgep51, align 8 ; <double> [#uses=1]
- %10 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %11 = fmul double %9, %10 ; <double> [#uses=1]
- %12 = fadd double %.tmp.0.us, %11 ; <double> [#uses=2]
- %13 = add nsw i64 %storemerge36.us, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %13, 512 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb13.us, label %bb11.us
+ %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %11, %bb11.us ]
+ %storemerge36.us = phi i64 [ 0, %bb.nph.us ], [ %12, %bb11.us ]
+ %scevgep51 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %storemerge112, i64 %storemerge36.us
+ %scevgep = getelementptr [512 x [512 x double]]* @D, i64 0, i64 %storemerge36.us, i64 %storemerge27.us
+ %8 = load double* %scevgep51, align 8
+ %9 = load double* %scevgep, align 8
+ %10 = fmul double %8, %9
+ %11 = fadd double %.tmp.0.us, %10
+ %12 = add nsw i64 %storemerge36.us, 1
+ %exitcond1 = icmp eq i64 %12, 512
+ br i1 %exitcond1, label %bb13.us, label %bb11.us

bb.nph.us: ; preds = %bb14.preheader, %bb13.us
- %storemerge27.us = phi i64 [ %8, %bb13.us ], [ 0, %bb14.preheader ] ; <i64> [#uses=3]
- %scevgep54 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %storemerge112, i64 %storemerge27.us ; <double*> [#uses=2]
+ %storemerge27.us = phi i64 [ %7, %bb13.us ], [ 0, %bb14.preheader ]
+ %scevgep54 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %storemerge112, i64 %storemerge27.us
store double 0.000000e+00, double* %scevgep54, align 8
br label %bb11.us

bb15: ; preds = %bb13.us
- %14 = add nsw i64 %storemerge112, 1 ; <i64> [#uses=2]
- %15 = icmp slt i64 %14, 512 ; <i1> [#uses=1]
- br i1 %15, label %bb14.preheader, label %return
+ %13 = add nsw i64 %storemerge112, 1
+ %exitcond6 = icmp ne i64 %13, 512
+ br i1 %exitcond6, label %bb14.preheader, label %return

-bb14.preheader: ; preds = %bb15, %bb6
- %storemerge112 = phi i64 [ %14, %bb15 ], [ 0, %bb6 ] ; <i64> [#uses=3]
+bb14.preheader: ; preds = %bb14.preheader.preheader, %bb15
+ %storemerge112 = phi i64 [ %13, %bb15 ], [ 0, %bb14.preheader.preheader ]
br label %bb.nph.us

return: ; preds = %bb15
ret void
}
-
; CHECK: Valid Region for Scop: bb5.preheader => return
diff --git a/test/polybench/linear-algebra/kernels/3mm/3mm_with_param.ll b/test/polybench/linear-algebra/kernels/3mm/3mm_with_param.ll
index e635079..2c2eb52 100644
--- a/test/polybench/linear-algebra/kernels/3mm/3mm_with_param.ll
+++ b/test/polybench/linear-algebra/kernels/3mm/3mm_with_param.ll
@@ -1,181 +1,213 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-cloog -analyze %s| FileCheck %s
+; RUN: opt %loadPolly %defaultOpts -polly-cloog -analyze %s| FileCheck %s
+; ModuleID = './linear-algebra/kernels/3mm/3mm_with_param.ll'
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 [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=2]
-@B = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=2]
-@C = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=2]
-@D = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=2]
-@E = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=4]
-@F = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=4]
-@G = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=5]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@A = common global [512 x [512 x double]] zeroinitializer, align 32
+@B = common global [512 x [512 x double]] zeroinitializer, align 32
+@C = common global [512 x [512 x double]] zeroinitializer, align 32
+@D = common global [512 x [512 x double]] zeroinitializer, align 32
+@E = common global [512 x [512 x double]] zeroinitializer, align 32
+@F = common global [512 x [512 x double]] zeroinitializer, align 32
+@G = common global [512 x [512 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func(i64 %ni, i64 %nj, i64 %nk, i64 %nl, i64 %nm) nounwind {
entry:
- %0 = icmp sgt i64 %ni, 0 ; <i1> [#uses=3]
+ %0 = icmp sgt i64 %ni, 0
br i1 %0, label %bb.nph76.bb.nph76.split_crit_edge, label %return

bb.nph62: ; preds = %bb.nph76.bb.nph76.split_crit_edge, %bb6
- %storemerge63 = phi i64 [ 0, %bb.nph76.bb.nph76.split_crit_edge ], [ %7, %bb6 ] ; <i64> [#uses=4]
- br i1 %9, label %bb.nph54.us, label %bb4
+ %indvar33 = phi i64 [ 0, %bb.nph76.bb.nph76.split_crit_edge ], [ %indvar.next34, %bb6 ]
+ br i1 %7, label %bb.nph54.us.preheader, label %bb4.preheader
+
+bb.nph54.us.preheader: ; preds = %bb.nph62
+ br label %bb.nph54.us
+
+bb4.preheader: ; preds = %bb.nph62
+ br label %bb4

bb4.us: ; preds = %bb2.us
- store double %5, double* %scevgep105
- %1 = add nsw i64 %storemerge758.us, 1 ; <i64> [#uses=2]
- %exitcond103 = icmp eq i64 %1, %ni ; <i1> [#uses=1]
- br i1 %exitcond103, label %bb6, label %bb.nph54.us
+ %.lcssa36 = phi double [ %5, %bb2.us ]
+ store double %.lcssa36, double* %scevgep105
+ %1 = add nsw i64 %storemerge758.us, 1
+ %exitcond40 = icmp eq i64 %1, %ni
+ br i1 %exitcond40, label %bb6.loopexit3, label %bb.nph54.us

bb2.us: ; preds = %bb.nph54.us, %bb2.us
- %.tmp.056.us = phi double [ 0.000000e+00, %bb.nph54.us ], [ %5, %bb2.us ] ; <double> [#uses=1]
- %storemerge853.us = phi i64 [ 0, %bb.nph54.us ], [ %6, %bb2.us ] ; <i64> [#uses=3]
- %scevgep101 = getelementptr [512 x [512 x double]]* @B, i64 0, i64 %storemerge853.us, i64 %storemerge758.us ; <double*> [#uses=1]
- %scevgep102 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %storemerge63, i64 %storemerge853.us ; <double*> [#uses=1]
- %2 = load double* %scevgep102, align 8 ; <double> [#uses=1]
- %3 = load double* %scevgep101, align 8 ; <double> [#uses=1]
- %4 = fmul double %2, %3 ; <double> [#uses=1]
- %5 = fadd double %.tmp.056.us, %4 ; <double> [#uses=2]
- %6 = add nsw i64 %storemerge853.us, 1 ; <i64> [#uses=2]
- %exitcond100 = icmp eq i64 %6, %nk ; <i1> [#uses=1]
- br i1 %exitcond100, label %bb4.us, label %bb2.us
-
-bb.nph54.us: ; preds = %bb4.us, %bb.nph62
- %storemerge758.us = phi i64 [ %1, %bb4.us ], [ 0, %bb.nph62 ] ; <i64> [#uses=3]
- %scevgep105 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %storemerge63, i64 %storemerge758.us ; <double*> [#uses=2]
+ %.tmp.056.us = phi double [ 0.000000e+00, %bb.nph54.us ], [ %5, %bb2.us ]
+ %storemerge853.us = phi i64 [ 0, %bb.nph54.us ], [ %6, %bb2.us ]
+ %scevgep102 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %indvar33, i64 %storemerge853.us
+ %scevgep101 = getelementptr [512 x [512 x double]]* @B, i64 0, i64 %storemerge853.us, i64 %storemerge758.us
+ %2 = load double* %scevgep102, align 8
+ %3 = load double* %scevgep101, align 8
+ %4 = fmul double %2, %3
+ %5 = fadd double %.tmp.056.us, %4
+ %6 = add nsw i64 %storemerge853.us, 1
+ %exitcond37 = icmp eq i64 %6, %nk
+ br i1 %exitcond37, label %bb4.us, label %bb2.us
+
+bb.nph54.us: ; preds = %bb.nph54.us.preheader, %bb4.us
+ %storemerge758.us = phi i64 [ %1, %bb4.us ], [ 0, %bb.nph54.us.preheader ]
+ %scevgep105 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %indvar33, i64 %storemerge758.us
store double 0.000000e+00, double* %scevgep105, align 8
br label %bb2.us

-bb4: ; preds = %bb4, %bb.nph62
- %indvar108 = phi i64 [ %indvar.next109, %bb4 ], [ 0, %bb.nph62 ] ; <i64> [#uses=2]
- %storemerge70 = phi i64 [ %storemerge70, %bb4 ], [ %storemerge63, %bb.nph62 ] ; <i64> [#uses=3]
- %tmp112 = shl i64 %storemerge70, 9 ; <i64> [#uses=1]
- %scevgep111.sum = add i64 %indvar108, %tmp112 ; <i64> [#uses=1]
- %scevgep113 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 0, i64 %scevgep111.sum ; <double*> [#uses=1]
+bb4: ; preds = %bb4.preheader, %bb4
+ %indvar108 = phi i64 [ %indvar.next109, %bb4 ], [ 0, %bb4.preheader ]
+ %scevgep113 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %indvar33, i64 %indvar108
store double 0.000000e+00, double* %scevgep113, align 8
- %indvar.next109 = add i64 %indvar108, 1 ; <i64> [#uses=2]
- %exitcond110 = icmp eq i64 %indvar.next109, %ni ; <i1> [#uses=1]
- br i1 %exitcond110, label %bb6, label %bb4
+ %indvar.next109 = add i64 %indvar108, 1
+ %exitcond32 = icmp eq i64 %indvar.next109, %ni
+ br i1 %exitcond32, label %bb6.loopexit, label %bb4

-bb6: ; preds = %bb4, %bb4.us
- %storemerge75 = phi i64 [ %storemerge63, %bb4.us ], [ %storemerge70, %bb4 ] ; <i64> [#uses=1]
- %7 = add nsw i64 %storemerge75, 1 ; <i64> [#uses=2]
- %8 = icmp slt i64 %7, %ni ; <i1> [#uses=1]
- br i1 %8, label %bb.nph62, label %bb16.preheader
+bb6.loopexit: ; preds = %bb4
+ br label %bb6
+
+bb6.loopexit3: ; preds = %bb4.us
+ br label %bb6
+
+bb6: ; preds = %bb6.loopexit3, %bb6.loopexit
+ %indvar.next34 = add i64 %indvar33, 1
+ %exitcond43 = icmp ne i64 %indvar.next34, %ni
+ br i1 %exitcond43, label %bb.nph62, label %bb16.preheader

bb.nph76.bb.nph76.split_crit_edge: ; preds = %entry
- %9 = icmp sgt i64 %nk, 0 ; <i1> [#uses=1]
+ %7 = icmp sgt i64 %nk, 0
br label %bb.nph62

bb16.preheader: ; preds = %bb6
br i1 %0, label %bb.nph52.bb.nph52.split_crit_edge, label %return

bb.nph38: ; preds = %bb.nph52.bb.nph52.split_crit_edge, %bb15
- %storemerge139 = phi i64 [ 0, %bb.nph52.bb.nph52.split_crit_edge ], [ %16, %bb15 ] ; <i64> [#uses=4]
- br i1 %18, label %bb.nph30.us, label %bb13
+ %indvar18 = phi i64 [ 0, %bb.nph52.bb.nph52.split_crit_edge ], [ %indvar.next19, %bb15 ]
+ br i1 %14, label %bb.nph30.us.preheader, label %bb13.preheader
+
+bb.nph30.us.preheader: ; preds = %bb.nph38
+ br label %bb.nph30.us
+
+bb13.preheader: ; preds = %bb.nph38
+ br label %bb13

bb13.us: ; preds = %bb11.us
- store double %14, double* %scevgep90
- %10 = add nsw i64 %storemerge534.us, 1 ; <i64> [#uses=2]
- %exitcond88 = icmp eq i64 %10, %ni ; <i1> [#uses=1]
- br i1 %exitcond88, label %bb15, label %bb.nph30.us
+ %.lcssa21 = phi double [ %12, %bb11.us ]
+ store double %.lcssa21, double* %scevgep90
+ %8 = add nsw i64 %storemerge534.us, 1
+ %exitcond25 = icmp eq i64 %8, %ni
+ br i1 %exitcond25, label %bb15.loopexit2, label %bb.nph30.us

bb11.us: ; preds = %bb.nph30.us, %bb11.us
- %.tmp.032.us = phi double [ 0.000000e+00, %bb.nph30.us ], [ %14, %bb11.us ] ; <double> [#uses=1]
- %storemerge629.us = phi i64 [ 0, %bb.nph30.us ], [ %15, %bb11.us ] ; <i64> [#uses=3]
- %scevgep86 = getelementptr [512 x [512 x double]]* @D, i64 0, i64 %storemerge629.us, i64 %storemerge534.us ; <double*> [#uses=1]
- %scevgep87 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %storemerge139, i64 %storemerge629.us ; <double*> [#uses=1]
- %11 = load double* %scevgep87, align 8 ; <double> [#uses=1]
- %12 = load double* %scevgep86, align 8 ; <double> [#uses=1]
- %13 = fmul double %11, %12 ; <double> [#uses=1]
- %14 = fadd double %.tmp.032.us, %13 ; <double> [#uses=2]
- %15 = add nsw i64 %storemerge629.us, 1 ; <i64> [#uses=2]
- %exitcond85 = icmp eq i64 %15, %nk ; <i1> [#uses=1]
- br i1 %exitcond85, label %bb13.us, label %bb11.us
-
-bb.nph30.us: ; preds = %bb13.us, %bb.nph38
- %storemerge534.us = phi i64 [ %10, %bb13.us ], [ 0, %bb.nph38 ] ; <i64> [#uses=3]
- %scevgep90 = getelementptr [512 x [512 x double]]* @F, i64 0, i64 %storemerge139, i64 %storemerge534.us ; <double*> [#uses=2]
+ %.tmp.032.us = phi double [ 0.000000e+00, %bb.nph30.us ], [ %12, %bb11.us ]
+ %storemerge629.us = phi i64 [ 0, %bb.nph30.us ], [ %13, %bb11.us ]
+ %scevgep87 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %indvar18, i64 %storemerge629.us
+ %scevgep86 = getelementptr [512 x [512 x double]]* @D, i64 0, i64 %storemerge629.us, i64 %storemerge534.us
+ %9 = load double* %scevgep87, align 8
+ %10 = load double* %scevgep86, align 8
+ %11 = fmul double %9, %10
+ %12 = fadd double %.tmp.032.us, %11
+ %13 = add nsw i64 %storemerge629.us, 1
+ %exitcond22 = icmp eq i64 %13, %nk
+ br i1 %exitcond22, label %bb13.us, label %bb11.us
+
+bb.nph30.us: ; preds = %bb.nph30.us.preheader, %bb13.us
+ %storemerge534.us = phi i64 [ %8, %bb13.us ], [ 0, %bb.nph30.us.preheader ]
+ %scevgep90 = getelementptr [512 x [512 x double]]* @F, i64 0, i64 %indvar18, i64 %storemerge534.us
store double 0.000000e+00, double* %scevgep90, align 8
br label %bb11.us

-bb13: ; preds = %bb13, %bb.nph38
- %indvar93 = phi i64 [ %indvar.next94, %bb13 ], [ 0, %bb.nph38 ] ; <i64> [#uses=2]
- %storemerge146 = phi i64 [ %storemerge146, %bb13 ], [ %storemerge139, %bb.nph38 ] ; <i64> [#uses=3]
- %tmp97 = shl i64 %storemerge146, 9 ; <i64> [#uses=1]
- %scevgep96.sum = add i64 %indvar93, %tmp97 ; <i64> [#uses=1]
- %scevgep98 = getelementptr [512 x [512 x double]]* @F, i64 0, i64 0, i64 %scevgep96.sum ; <double*> [#uses=1]
+bb13: ; preds = %bb13.preheader, %bb13
+ %indvar93 = phi i64 [ %indvar.next94, %bb13 ], [ 0, %bb13.preheader ]
+ %scevgep98 = getelementptr [512 x [512 x double]]* @F, i64 0, i64 %indvar18, i64 %indvar93
store double 0.000000e+00, double* %scevgep98, align 8
- %indvar.next94 = add i64 %indvar93, 1 ; <i64> [#uses=2]
- %exitcond95 = icmp eq i64 %indvar.next94, %ni ; <i1> [#uses=1]
- br i1 %exitcond95, label %bb15, label %bb13
+ %indvar.next94 = add i64 %indvar93, 1
+ %exitcond17 = icmp eq i64 %indvar.next94, %ni
+ br i1 %exitcond17, label %bb15.loopexit, label %bb13

-bb15: ; preds = %bb13, %bb13.us
- %storemerge151 = phi i64 [ %storemerge139, %bb13.us ], [ %storemerge146, %bb13 ] ; <i64> [#uses=1]
- %16 = add nsw i64 %storemerge151, 1 ; <i64> [#uses=2]
- %17 = icmp slt i64 %16, %ni ; <i1> [#uses=1]
- br i1 %17, label %bb.nph38, label %bb25.preheader
+bb15.loopexit: ; preds = %bb13
+ br label %bb15
+
+bb15.loopexit2: ; preds = %bb13.us
+ br label %bb15
+
+bb15: ; preds = %bb15.loopexit2, %bb15.loopexit
+ %indvar.next19 = add i64 %indvar18, 1
+ %exitcond28 = icmp ne i64 %indvar.next19, %ni
+ br i1 %exitcond28, label %bb.nph38, label %bb25.preheader

bb.nph52.bb.nph52.split_crit_edge: ; preds = %bb16.preheader
- %18 = icmp sgt i64 %nk, 0 ; <i1> [#uses=1]
+ %14 = icmp sgt i64 %nk, 0
br label %bb.nph38

bb25.preheader: ; preds = %bb15
br i1 %0, label %bb.nph28.bb.nph28.split_crit_edge, label %return

bb.nph14: ; preds = %bb.nph28.bb.nph28.split_crit_edge, %bb24
- %storemerge215 = phi i64 [ 0, %bb.nph28.bb.nph28.split_crit_edge ], [ %25, %bb24 ] ; <i64> [#uses=4]
- br i1 %27, label %bb.nph.us, label %bb22
+ %indvar5 = phi i64 [ 0, %bb.nph28.bb.nph28.split_crit_edge ], [ %indvar.next6, %bb24 ]
+ br i1 %21, label %bb.nph.us.preheader, label %bb22.preheader
+
+bb.nph.us.preheader: ; preds = %bb.nph14
+ br label %bb.nph.us
+
+bb22.preheader: ; preds = %bb.nph14
+ br label %bb22

bb22.us: ; preds = %bb20.us
- store double %23, double* %scevgep80
- %19 = add nsw i64 %storemerge310.us, 1 ; <i64> [#uses=2]
- %exitcond78 = icmp eq i64 %19, %ni ; <i1> [#uses=1]
- br i1 %exitcond78, label %bb24, label %bb.nph.us
+ %.lcssa = phi double [ %19, %bb20.us ]
+ store double %.lcssa, double* %scevgep80
+ %15 = add nsw i64 %storemerge310.us, 1
+ %exitcond = icmp eq i64 %15, %ni
+ br i1 %exitcond, label %bb24.loopexit1, label %bb.nph.us

bb20.us: ; preds = %bb.nph.us, %bb20.us
- %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %23, %bb20.us ] ; <double> [#uses=1]
- %storemerge49.us = phi i64 [ 0, %bb.nph.us ], [ %24, %bb20.us ] ; <i64> [#uses=3]
- %scevgep = getelementptr [512 x [512 x double]]* @F, i64 0, i64 %storemerge49.us, i64 %storemerge310.us ; <double*> [#uses=1]
- %scevgep77 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %storemerge215, i64 %storemerge49.us ; <double*> [#uses=1]
- %20 = load double* %scevgep77, align 8 ; <double> [#uses=1]
- %21 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %22 = fmul double %20, %21 ; <double> [#uses=1]
- %23 = fadd double %.tmp.0.us, %22 ; <double> [#uses=2]
- %24 = add nsw i64 %storemerge49.us, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %24, %nk ; <i1> [#uses=1]
- br i1 %exitcond, label %bb22.us, label %bb20.us
-
-bb.nph.us: ; preds = %bb22.us, %bb.nph14
- %storemerge310.us = phi i64 [ %19, %bb22.us ], [ 0, %bb.nph14 ] ; <i64> [#uses=3]
- %scevgep80 = getelementptr [512 x [512 x double]]* @G, i64 0, i64 %storemerge215, i64 %storemerge310.us ; <double*> [#uses=2]
+ %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %19, %bb20.us ]
+ %storemerge49.us = phi i64 [ 0, %bb.nph.us ], [ %20, %bb20.us ]
+ %scevgep77 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %indvar5, i64 %storemerge49.us
+ %scevgep = getelementptr [512 x [512 x double]]* @F, i64 0, i64 %storemerge49.us, i64 %storemerge310.us
+ %16 = load double* %scevgep77, align 8
+ %17 = load double* %scevgep, align 8
+ %18 = fmul double %16, %17
+ %19 = fadd double %.tmp.0.us, %18
+ %20 = add nsw i64 %storemerge49.us, 1
+ %exitcond8 = icmp eq i64 %20, %nk
+ br i1 %exitcond8, label %bb22.us, label %bb20.us
+
+bb.nph.us: ; preds = %bb.nph.us.preheader, %bb22.us
+ %storemerge310.us = phi i64 [ %15, %bb22.us ], [ 0, %bb.nph.us.preheader ]
+ %scevgep80 = getelementptr [512 x [512 x double]]* @G, i64 0, i64 %indvar5, i64 %storemerge310.us
store double 0.000000e+00, double* %scevgep80, align 8
br label %bb20.us

-bb22: ; preds = %bb22, %bb.nph14
- %indvar = phi i64 [ %indvar.next, %bb22 ], [ 0, %bb.nph14 ] ; <i64> [#uses=2]
- %storemerge222 = phi i64 [ %storemerge222, %bb22 ], [ %storemerge215, %bb.nph14 ] ; <i64> [#uses=3]
- %tmp = shl i64 %storemerge222, 9 ; <i64> [#uses=1]
- %scevgep82.sum = add i64 %indvar, %tmp ; <i64> [#uses=1]
- %scevgep83 = getelementptr [512 x [512 x double]]* @G, i64 0, i64 0, i64 %scevgep82.sum ; <double*> [#uses=1]
+bb22: ; preds = %bb22.preheader, %bb22
+ %indvar = phi i64 [ %indvar.next, %bb22 ], [ 0, %bb22.preheader ]
+ %scevgep83 = getelementptr [512 x [512 x double]]* @G, i64 0, i64 %indvar5, i64 %indvar
store double 0.000000e+00, double* %scevgep83, align 8
- %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=2]
- %exitcond81 = icmp eq i64 %indvar.next, %ni ; <i1> [#uses=1]
- br i1 %exitcond81, label %bb24, label %bb22
+ %indvar.next = add i64 %indvar, 1
+ %exitcond4 = icmp eq i64 %indvar.next, %ni
+ br i1 %exitcond4, label %bb24.loopexit, label %bb22
+
+bb24.loopexit: ; preds = %bb22
+ br label %bb24

-bb24: ; preds = %bb22, %bb22.us
- %storemerge227 = phi i64 [ %storemerge215, %bb22.us ], [ %storemerge222, %bb22 ] ; <i64> [#uses=1]
- %25 = add nsw i64 %storemerge227, 1 ; <i64> [#uses=2]
- %26 = icmp slt i64 %25, %ni ; <i1> [#uses=1]
- br i1 %26, label %bb.nph14, label %return
+bb24.loopexit1: ; preds = %bb22.us
+ br label %bb24
+
+bb24: ; preds = %bb24.loopexit1, %bb24.loopexit
+ %indvar.next6 = add i64 %indvar5, 1
+ %exitcond13 = icmp ne i64 %indvar.next6, %ni
+ br i1 %exitcond13, label %bb.nph14, label %return.loopexit

bb.nph28.bb.nph28.split_crit_edge: ; preds = %bb25.preheader
- %27 = icmp sgt i64 %nk, 0 ; <i1> [#uses=1]
+ %21 = icmp sgt i64 %nk, 0
br label %bb.nph14

-return: ; preds = %bb24, %bb25.preheader, %bb16.preheader, %entry
+return.loopexit: ; preds = %bb24
+ br label %return
+
+return: ; preds = %return.loopexit, %bb25.preheader, %bb16.preheader, %entry
ret void
}
-
; CHECK: for region: 'entry.split => return' in function 'scop_func':
-
diff --git a/test/polybench/linear-algebra/kernels/3mm/3mm_without_param.ll b/test/polybench/linear-algebra/kernels/3mm/3mm_without_param.ll
index ed27db3..25902dd 100644
--- a/test/polybench/linear-algebra/kernels/3mm/3mm_without_param.ll
+++ b/test/polybench/linear-algebra/kernels/3mm/3mm_without_param.ll
@@ -1,126 +1,137 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; RUN: opt %loadPolly %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/3mm/3mm_without_param.ll'
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 [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=2]
-@B = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=2]
-@C = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=2]
-@D = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=2]
-@E = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=3]
-@F = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=3]
-@G = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=4]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@A = common global [512 x [512 x double]] zeroinitializer, align 32
+@B = common global [512 x [512 x double]] zeroinitializer, align 32
+@C = common global [512 x [512 x double]] zeroinitializer, align 32
+@D = common global [512 x [512 x double]] zeroinitializer, align 32
+@E = common global [512 x [512 x double]] zeroinitializer, align 32
+@F = common global [512 x [512 x double]] zeroinitializer, align 32
+@G = common global [512 x [512 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func() nounwind {
bb.nph76.bb.nph76.split_crit_edge:
br label %bb5.preheader

bb4.us: ; preds = %bb2.us
- store double %4, double* %scevgep94
- %0 = add nsw i64 %storemerge758.us, 1 ; <i64> [#uses=2]
- %exitcond92 = icmp eq i64 %0, 512 ; <i1> [#uses=1]
- br i1 %exitcond92, label %bb6, label %bb.nph54.us
+ %.lcssa19 = phi double [ %4, %bb2.us ]
+ store double %.lcssa19, double* %scevgep94
+ %0 = add nsw i64 %storemerge758.us, 1
+ %exitcond23 = icmp eq i64 %0, 512
+ br i1 %exitcond23, label %bb6, label %bb.nph54.us

bb2.us: ; preds = %bb.nph54.us, %bb2.us
- %.tmp.056.us = phi double [ 0.000000e+00, %bb.nph54.us ], [ %4, %bb2.us ] ; <double> [#uses=1]
- %storemerge853.us = phi i64 [ 0, %bb.nph54.us ], [ %5, %bb2.us ] ; <i64> [#uses=3]
- %scevgep90 = getelementptr [512 x [512 x double]]* @B, i64 0, i64 %storemerge853.us, i64 %storemerge758.us ; <double*> [#uses=1]
- %scevgep91 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %storemerge63, i64 %storemerge853.us ; <double*> [#uses=1]
- %1 = load double* %scevgep91, align 8 ; <double> [#uses=1]
- %2 = load double* %scevgep90, align 8 ; <double> [#uses=1]
- %3 = fmul double %1, %2 ; <double> [#uses=1]
- %4 = fadd double %.tmp.056.us, %3 ; <double> [#uses=2]
- %5 = add nsw i64 %storemerge853.us, 1 ; <i64> [#uses=2]
- %exitcond89 = icmp eq i64 %5, 512 ; <i1> [#uses=1]
- br i1 %exitcond89, label %bb4.us, label %bb2.us
+ %.tmp.056.us = phi double [ 0.000000e+00, %bb.nph54.us ], [ %4, %bb2.us ]
+ %storemerge853.us = phi i64 [ 0, %bb.nph54.us ], [ %5, %bb2.us ]
+ %scevgep91 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %storemerge63, i64 %storemerge853.us
+ %scevgep90 = getelementptr [512 x [512 x double]]* @B, i64 0, i64 %storemerge853.us, i64 %storemerge758.us
+ %1 = load double* %scevgep91, align 8
+ %2 = load double* %scevgep90, align 8
+ %3 = fmul double %1, %2
+ %4 = fadd double %.tmp.056.us, %3
+ %5 = add nsw i64 %storemerge853.us, 1
+ %exitcond20 = icmp eq i64 %5, 512
+ br i1 %exitcond20, label %bb4.us, label %bb2.us

bb.nph54.us: ; preds = %bb5.preheader, %bb4.us
- %storemerge758.us = phi i64 [ %0, %bb4.us ], [ 0, %bb5.preheader ] ; <i64> [#uses=3]
- %scevgep94 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %storemerge63, i64 %storemerge758.us ; <double*> [#uses=2]
+ %storemerge758.us = phi i64 [ %0, %bb4.us ], [ 0, %bb5.preheader ]
+ %scevgep94 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %storemerge63, i64 %storemerge758.us
store double 0.000000e+00, double* %scevgep94, align 8
br label %bb2.us

bb6: ; preds = %bb4.us
- %6 = add nsw i64 %storemerge63, 1 ; <i64> [#uses=2]
- %7 = icmp slt i64 %6, 512 ; <i1> [#uses=1]
- br i1 %7, label %bb5.preheader, label %bb14.preheader
+ %6 = add nsw i64 %storemerge63, 1
+ %exitcond26 = icmp ne i64 %6, 512
+ br i1 %exitcond26, label %bb5.preheader, label %bb14.preheader.preheader
+
+bb14.preheader.preheader: ; preds = %bb6
+ br label %bb14.preheader

bb5.preheader: ; preds = %bb6, %bb.nph76.bb.nph76.split_crit_edge
- %storemerge63 = phi i64 [ 0, %bb.nph76.bb.nph76.split_crit_edge ], [ %6, %bb6 ] ; <i64> [#uses=3]
+ %storemerge63 = phi i64 [ 0, %bb.nph76.bb.nph76.split_crit_edge ], [ %6, %bb6 ]
br label %bb.nph54.us

bb13.us: ; preds = %bb11.us
- store double %12, double* %scevgep87
- %8 = add nsw i64 %storemerge534.us, 1 ; <i64> [#uses=2]
- %exitcond85 = icmp eq i64 %8, 512 ; <i1> [#uses=1]
- br i1 %exitcond85, label %bb15, label %bb.nph30.us
+ %.lcssa9 = phi double [ %11, %bb11.us ]
+ store double %.lcssa9, double* %scevgep87
+ %7 = add nsw i64 %storemerge534.us, 1
+ %exitcond13 = icmp eq i64 %7, 512
+ br i1 %exitcond13, label %bb15, label %bb.nph30.us

bb11.us: ; preds = %bb.nph30.us, %bb11.us
- %.tmp.032.us = phi double [ 0.000000e+00, %bb.nph30.us ], [ %12, %bb11.us ] ; <double> [#uses=1]
- %storemerge629.us = phi i64 [ 0, %bb.nph30.us ], [ %13, %bb11.us ] ; <i64> [#uses=3]
- %scevgep83 = getelementptr [512 x [512 x double]]* @D, i64 0, i64 %storemerge629.us, i64 %storemerge534.us ; <double*> [#uses=1]
- %scevgep84 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %storemerge139, i64 %storemerge629.us ; <double*> [#uses=1]
- %9 = load double* %scevgep84, align 8 ; <double> [#uses=1]
- %10 = load double* %scevgep83, align 8 ; <double> [#uses=1]
- %11 = fmul double %9, %10 ; <double> [#uses=1]
- %12 = fadd double %.tmp.032.us, %11 ; <double> [#uses=2]
- %13 = add nsw i64 %storemerge629.us, 1 ; <i64> [#uses=2]
- %exitcond82 = icmp eq i64 %13, 512 ; <i1> [#uses=1]
- br i1 %exitcond82, label %bb13.us, label %bb11.us
+ %.tmp.032.us = phi double [ 0.000000e+00, %bb.nph30.us ], [ %11, %bb11.us ]
+ %storemerge629.us = phi i64 [ 0, %bb.nph30.us ], [ %12, %bb11.us ]
+ %scevgep84 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %storemerge139, i64 %storemerge629.us
+ %scevgep83 = getelementptr [512 x [512 x double]]* @D, i64 0, i64 %storemerge629.us, i64 %storemerge534.us
+ %8 = load double* %scevgep84, align 8
+ %9 = load double* %scevgep83, align 8
+ %10 = fmul double %8, %9
+ %11 = fadd double %.tmp.032.us, %10
+ %12 = add nsw i64 %storemerge629.us, 1
+ %exitcond10 = icmp eq i64 %12, 512
+ br i1 %exitcond10, label %bb13.us, label %bb11.us

bb.nph30.us: ; preds = %bb14.preheader, %bb13.us
- %storemerge534.us = phi i64 [ %8, %bb13.us ], [ 0, %bb14.preheader ] ; <i64> [#uses=3]
- %scevgep87 = getelementptr [512 x [512 x double]]* @F, i64 0, i64 %storemerge139, i64 %storemerge534.us ; <double*> [#uses=2]
+ %storemerge534.us = phi i64 [ %7, %bb13.us ], [ 0, %bb14.preheader ]
+ %scevgep87 = getelementptr [512 x [512 x double]]* @F, i64 0, i64 %storemerge139, i64 %storemerge534.us
store double 0.000000e+00, double* %scevgep87, align 8
br label %bb11.us

bb15: ; preds = %bb13.us
- %14 = add nsw i64 %storemerge139, 1 ; <i64> [#uses=2]
- %15 = icmp slt i64 %14, 512 ; <i1> [#uses=1]
- br i1 %15, label %bb14.preheader, label %bb23.preheader
+ %13 = add nsw i64 %storemerge139, 1
+ %exitcond16 = icmp ne i64 %13, 512
+ br i1 %exitcond16, label %bb14.preheader, label %bb23.preheader.preheader

-bb14.preheader: ; preds = %bb15, %bb6
- %storemerge139 = phi i64 [ %14, %bb15 ], [ 0, %bb6 ] ; <i64> [#uses=3]
+bb23.preheader.preheader: ; preds = %bb15
+ br label %bb23.preheader
+
+bb14.preheader: ; preds = %bb14.preheader.preheader, %bb15
+ %storemerge139 = phi i64 [ %13, %bb15 ], [ 0, %bb14.preheader.preheader ]
br label %bb.nph30.us

bb22.us: ; preds = %bb20.us
- store double %20, double* %scevgep80
- %16 = add nsw i64 %storemerge310.us, 1 ; <i64> [#uses=2]
- %exitcond78 = icmp eq i64 %16, 512 ; <i1> [#uses=1]
- br i1 %exitcond78, label %bb24, label %bb.nph.us
+ %.lcssa = phi double [ %18, %bb20.us ]
+ store double %.lcssa, double* %scevgep80
+ %14 = add nsw i64 %storemerge310.us, 1
+ %exitcond = icmp eq i64 %14, 512
+ br i1 %exitcond, label %bb24, label %bb.nph.us

bb20.us: ; preds = %bb.nph.us, %bb20.us
- %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %20, %bb20.us ] ; <double> [#uses=1]
- %storemerge49.us = phi i64 [ 0, %bb.nph.us ], [ %21, %bb20.us ] ; <i64> [#uses=3]
- %scevgep = getelementptr [512 x [512 x double]]* @F, i64 0, i64 %storemerge49.us, i64 %storemerge310.us ; <double*> [#uses=1]
- %scevgep77 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %storemerge215, i64 %storemerge49.us ; <double*> [#uses=1]
- %17 = load double* %scevgep77, align 8 ; <double> [#uses=1]
- %18 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %19 = fmul double %17, %18 ; <double> [#uses=1]
- %20 = fadd double %.tmp.0.us, %19 ; <double> [#uses=2]
- %21 = add nsw i64 %storemerge49.us, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %21, 512 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb22.us, label %bb20.us
+ %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %18, %bb20.us ]
+ %storemerge49.us = phi i64 [ 0, %bb.nph.us ], [ %19, %bb20.us ]
+ %scevgep77 = getelementptr [512 x [512 x double]]* @E, i64 0, i64 %storemerge215, i64 %storemerge49.us
+ %scevgep = getelementptr [512 x [512 x double]]* @F, i64 0, i64 %storemerge49.us, i64 %storemerge310.us
+ %15 = load double* %scevgep77, align 8
+ %16 = load double* %scevgep, align 8
+ %17 = fmul double %15, %16
+ %18 = fadd double %.tmp.0.us, %17
+ %19 = add nsw i64 %storemerge49.us, 1
+ %exitcond1 = icmp eq i64 %19, 512
+ br i1 %exitcond1, label %bb22.us, label %bb20.us

bb.nph.us: ; preds = %bb23.preheader, %bb22.us
- %storemerge310.us = phi i64 [ %16, %bb22.us ], [ 0, %bb23.preheader ] ; <i64> [#uses=3]
- %scevgep80 = getelementptr [512 x [512 x double]]* @G, i64 0, i64 %storemerge215, i64 %storemerge310.us ; <double*> [#uses=2]
+ %storemerge310.us = phi i64 [ %14, %bb22.us ], [ 0, %bb23.preheader ]
+ %scevgep80 = getelementptr [512 x [512 x double]]* @G, i64 0, i64 %storemerge215, i64 %storemerge310.us
store double 0.000000e+00, double* %scevgep80, align 8
br label %bb20.us

bb24: ; preds = %bb22.us
- %22 = add nsw i64 %storemerge215, 1 ; <i64> [#uses=2]
- %23 = icmp slt i64 %22, 512 ; <i1> [#uses=1]
- br i1 %23, label %bb23.preheader, label %return
+ %20 = add nsw i64 %storemerge215, 1
+ %exitcond6 = icmp ne i64 %20, 512
+ br i1 %exitcond6, label %bb23.preheader, label %return

-bb23.preheader: ; preds = %bb24, %bb15
- %storemerge215 = phi i64 [ %22, %bb24 ], [ 0, %bb15 ] ; <i64> [#uses=3]
+bb23.preheader: ; preds = %bb23.preheader.preheader, %bb24
+ %storemerge215 = phi i64 [ %20, %bb24 ], [ 0, %bb23.preheader.preheader ]
br label %bb.nph.us

return: ; preds = %bb24
ret void
}
-
; CHECK: Valid Region for Scop: bb5.preheader => return
-
diff --git a/test/polybench/linear-algebra/kernels/atax/atax_with_param.ll b/test/polybench/linear-algebra/kernels/atax/atax_with_param.ll
index 7282311..72c7900 100644
--- a/test/polybench/linear-algebra/kernels/atax/atax_with_param.ll
+++ b/test/polybench/linear-algebra/kernels/atax/atax_with_param.ll
@@ -1,76 +1,91 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-cloog -analyze %s | FileCheck %s
-
+; RUN: opt %loadPolly %defaultOpts -polly-cloog -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/atax/atax_with_param.ll'
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 }
-@x = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=4]
-@A = common global [8000 x [8000 x double]] zeroinitializer, align 32 ; <[8000 x [8000 x double]]*> [#uses=6]
-@y = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=6]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@tmp = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=2]
+
+@x = common global [8000 x double] zeroinitializer, align 32
+@A = common global [8000 x [8000 x double]] zeroinitializer, align 32
+@y = common global [8000 x double] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@tmp = common global [8000 x double] zeroinitializer, align 32
+
define void @scop_func(i64 %nx, i64 %ny) nounwind {
entry:
- %0 = icmp sgt i64 %nx, 0 ; <i1> [#uses=1]
- br i1 %0, label %bb, label %bb10.preheader
+ %0 = icmp sgt i64 %nx, 0
+ br i1 %0, label %bb.preheader, label %bb10.preheader
+
+bb.preheader: ; preds = %entry
+ br label %bb

-bb: ; preds = %bb, %entry
- %storemerge15 = phi i64 [ %1, %bb ], [ 0, %entry ] ; <i64> [#uses=2]
- %scevgep26 = getelementptr [8000 x double]* @y, i64 0, i64 %storemerge15 ; <double*> [#uses=1]
+bb: ; preds = %bb.preheader, %bb
+ %storemerge15 = phi i64 [ %1, %bb ], [ 0, %bb.preheader ]
+ %scevgep26 = getelementptr [8000 x double]* @y, i64 0, i64 %storemerge15
store double 0.000000e+00, double* %scevgep26, align 8
- %1 = add nsw i64 %storemerge15, 1 ; <i64> [#uses=2]
- %exitcond25 = icmp eq i64 %1, %nx ; <i1> [#uses=1]
- br i1 %exitcond25, label %bb10.preheader, label %bb
+ %1 = add nsw i64 %storemerge15, 1
+ %exitcond10 = icmp eq i64 %1, %nx
+ br i1 %exitcond10, label %bb10.preheader.loopexit, label %bb

-bb10.preheader: ; preds = %bb, %entry
- %2 = icmp sgt i64 %ny, 0 ; <i1> [#uses=1]
- br i1 %2, label %bb.nph, label %return
+bb10.preheader.loopexit: ; preds = %bb
+ br label %bb10.preheader

-bb.nph: ; preds = %bb9, %bb10.preheader
- %storemerge17 = phi i64 [ %13, %bb9 ], [ 0, %bb10.preheader ] ; <i64> [#uses=4]
- %scevgep24 = getelementptr [8000 x double]* @tmp, i64 0, i64 %storemerge17 ; <double*> [#uses=2]
+bb10.preheader: ; preds = %bb10.preheader.loopexit, %entry
+ %2 = icmp sgt i64 %ny, 0
+ br i1 %2, label %bb.nph.preheader, label %return
+
+bb.nph.preheader: ; preds = %bb10.preheader
+ br label %bb.nph
+
+bb.nph: ; preds = %bb.nph.preheader, %bb9
+ %storemerge17 = phi i64 [ %13, %bb9 ], [ 0, %bb.nph.preheader ]
+ %scevgep24 = getelementptr [8000 x double]* @tmp, i64 0, i64 %storemerge17
store double 0.000000e+00, double* %scevgep24, align 8
br label %bb4

bb4: ; preds = %bb4, %bb.nph
- %.tmp.0 = phi double [ 0.000000e+00, %bb.nph ], [ %6, %bb4 ] ; <double> [#uses=1]
- %storemerge24 = phi i64 [ 0, %bb.nph ], [ %7, %bb4 ] ; <i64> [#uses=3]
- %scevgep17 = getelementptr [8000 x [8000 x double]]* @A, i64 0, i64 %storemerge17, i64 %storemerge24 ; <double*> [#uses=1]
- %scevgep = getelementptr [8000 x double]* @x, i64 0, i64 %storemerge24 ; <double*> [#uses=1]
- %3 = load double* %scevgep17, align 8 ; <double> [#uses=1]
- %4 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %5 = fmul double %3, %4 ; <double> [#uses=1]
- %6 = fadd double %.tmp.0, %5 ; <double> [#uses=3]
- %7 = add nsw i64 %storemerge24, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %7, %ny ; <i1> [#uses=1]
- br i1 %exitcond, label %bb8.loopexit, label %bb4
+ %.tmp.0 = phi double [ 0.000000e+00, %bb.nph ], [ %6, %bb4 ]
+ %storemerge24 = phi i64 [ 0, %bb.nph ], [ %7, %bb4 ]
+ %scevgep17 = getelementptr [8000 x [8000 x double]]* @A, i64 0, i64 %storemerge17, i64 %storemerge24
+ %scevgep = getelementptr [8000 x double]* @x, i64 0, i64 %storemerge24
+ %3 = load double* %scevgep17, align 8
+ %4 = load double* %scevgep, align 8
+ %5 = fmul double %3, %4
+ %6 = fadd double %.tmp.0, %5
+ %7 = add nsw i64 %storemerge24, 1
+ %exitcond1 = icmp eq i64 %7, %ny
+ br i1 %exitcond1, label %bb8.loopexit, label %bb4

bb7: ; preds = %bb8.loopexit, %bb7
- %storemerge35 = phi i64 [ %12, %bb7 ], [ 0, %bb8.loopexit ] ; <i64> [#uses=3]
- %scevgep19 = getelementptr [8000 x [8000 x double]]* @A, i64 0, i64 %storemerge17, i64 %storemerge35 ; <double*> [#uses=1]
- %scevgep20 = getelementptr [8000 x double]* @y, i64 0, i64 %storemerge35 ; <double*> [#uses=2]
- %8 = load double* %scevgep20, align 8 ; <double> [#uses=1]
- %9 = load double* %scevgep19, align 8 ; <double> [#uses=1]
- %10 = fmul double %9, %6 ; <double> [#uses=1]
- %11 = fadd double %8, %10 ; <double> [#uses=1]
+ %storemerge35 = phi i64 [ %12, %bb7 ], [ 0, %bb8.loopexit ]
+ %scevgep19 = getelementptr [8000 x [8000 x double]]* @A, i64 0, i64 %storemerge17, i64 %storemerge35
+ %scevgep20 = getelementptr [8000 x double]* @y, i64 0, i64 %storemerge35
+ %8 = load double* %scevgep20, align 8
+ %9 = load double* %scevgep19, align 8
+ %10 = fmul double %9, %.lcssa
+ %11 = fadd double %8, %10
store double %11, double* %scevgep20, align 8
- %12 = add nsw i64 %storemerge35, 1 ; <i64> [#uses=2]
- %exitcond18 = icmp eq i64 %12, %ny ; <i1> [#uses=1]
- br i1 %exitcond18, label %bb9, label %bb7
+ %12 = add nsw i64 %storemerge35, 1
+ %exitcond = icmp eq i64 %12, %ny
+ br i1 %exitcond, label %bb9, label %bb7

bb8.loopexit: ; preds = %bb4
- store double %6, double* %scevgep24
+ %.lcssa = phi double [ %6, %bb4 ]
+ store double %.lcssa, double* %scevgep24
br label %bb7

bb9: ; preds = %bb7
- %13 = add nsw i64 %storemerge17, 1 ; <i64> [#uses=2]
- %exitcond21 = icmp eq i64 %13, %ny ; <i1> [#uses=1]
- br i1 %exitcond21, label %return, label %bb.nph
+ %13 = add nsw i64 %storemerge17, 1
+ %exitcond6 = icmp eq i64 %13, %ny
+ br i1 %exitcond6, label %return.loopexit, label %bb.nph

-return: ; preds = %bb9, %bb10.preheader
+return.loopexit: ; preds = %bb9
+ br label %return
+
+return: ; preds = %return.loopexit, %bb10.preheader
ret void
}
-
-; CHECK: Printing analysis 'Execute Cloog code generation' for region: 'bb10.preheader => return' in function 'scop_func':
+; CHECK: for region: 'entry.split => return' in function 'scop_func':
; CHECK-NEXT: scop_func():
diff --git a/test/polybench/linear-algebra/kernels/atax/atax_without_param.ll b/test/polybench/linear-algebra/kernels/atax/atax_without_param.ll
index 0069ee4..c493a9e 100644
--- a/test/polybench/linear-algebra/kernels/atax/atax_without_param.ll
+++ b/test/polybench/linear-algebra/kernels/atax/atax_without_param.ll
@@ -1,71 +1,77 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-cloog -analyze %s | FileCheck %s
+; RUN: opt %loadPolly %defaultOpts -polly-cloog -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/atax/atax_without_param.ll'
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 }
-@x = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=4]
-@A = common global [8000 x [8000 x double]] zeroinitializer, align 32 ; <[8000 x [8000 x double]]*> [#uses=6]
-@y = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=6]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@tmp = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=2]
+
+@x = common global [8000 x double] zeroinitializer, align 32
+@A = common global [8000 x [8000 x double]] zeroinitializer, align 32
+@y = common global [8000 x double] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@tmp = common global [8000 x double] zeroinitializer, align 32
+
define void @scop_func() nounwind {
bb.nph16:
br label %bb

bb: ; preds = %bb, %bb.nph16
- %storemerge15 = phi i64 [ 0, %bb.nph16 ], [ %0, %bb ] ; <i64> [#uses=2]
- %scevgep26 = getelementptr [8000 x double]* @y, i64 0, i64 %storemerge15 ; <double*> [#uses=1]
+ %storemerge15 = phi i64 [ 0, %bb.nph16 ], [ %0, %bb ]
+ %scevgep26 = getelementptr [8000 x double]* @y, i64 0, i64 %storemerge15
store double 0.000000e+00, double* %scevgep26, align 8
- %0 = add nsw i64 %storemerge15, 1 ; <i64> [#uses=2]
- %exitcond25 = icmp eq i64 %0, 8000 ; <i1> [#uses=1]
- br i1 %exitcond25, label %bb.nph, label %bb
+ %0 = add nsw i64 %storemerge15, 1
+ %exitcond10 = icmp eq i64 %0, 8000
+ br i1 %exitcond10, label %bb.nph.preheader, label %bb

-bb.nph: ; preds = %bb9, %bb
- %storemerge17 = phi i64 [ %11, %bb9 ], [ 0, %bb ] ; <i64> [#uses=4]
- %scevgep24 = getelementptr [8000 x double]* @tmp, i64 0, i64 %storemerge17 ; <double*> [#uses=2]
+bb.nph.preheader: ; preds = %bb
+ br label %bb.nph
+
+bb.nph: ; preds = %bb.nph.preheader, %bb9
+ %storemerge17 = phi i64 [ %11, %bb9 ], [ 0, %bb.nph.preheader ]
+ %scevgep24 = getelementptr [8000 x double]* @tmp, i64 0, i64 %storemerge17
store double 0.000000e+00, double* %scevgep24, align 8
br label %bb4

bb4: ; preds = %bb4, %bb.nph
- %.tmp.0 = phi double [ 0.000000e+00, %bb.nph ], [ %4, %bb4 ] ; <double> [#uses=1]
- %storemerge24 = phi i64 [ 0, %bb.nph ], [ %5, %bb4 ] ; <i64> [#uses=3]
- %scevgep17 = getelementptr [8000 x [8000 x double]]* @A, i64 0, i64 %storemerge17, i64 %storemerge24 ; <double*> [#uses=1]
- %scevgep = getelementptr [8000 x double]* @x, i64 0, i64 %storemerge24 ; <double*> [#uses=1]
- %1 = load double* %scevgep17, align 8 ; <double> [#uses=1]
- %2 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %3 = fmul double %1, %2 ; <double> [#uses=1]
- %4 = fadd double %.tmp.0, %3 ; <double> [#uses=3]
- %5 = add nsw i64 %storemerge24, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %5, 8000 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb8.loopexit, label %bb4
+ %.tmp.0 = phi double [ 0.000000e+00, %bb.nph ], [ %4, %bb4 ]
+ %storemerge24 = phi i64 [ 0, %bb.nph ], [ %5, %bb4 ]
+ %scevgep17 = getelementptr [8000 x [8000 x double]]* @A, i64 0, i64 %storemerge17, i64 %storemerge24
+ %scevgep = getelementptr [8000 x double]* @x, i64 0, i64 %storemerge24
+ %1 = load double* %scevgep17, align 8
+ %2 = load double* %scevgep, align 8
+ %3 = fmul double %1, %2
+ %4 = fadd double %.tmp.0, %3
+ %5 = add nsw i64 %storemerge24, 1
+ %exitcond1 = icmp eq i64 %5, 8000
+ br i1 %exitcond1, label %bb8.loopexit, label %bb4

bb7: ; preds = %bb8.loopexit, %bb7
- %storemerge35 = phi i64 [ %10, %bb7 ], [ 0, %bb8.loopexit ] ; <i64> [#uses=3]
- %scevgep19 = getelementptr [8000 x [8000 x double]]* @A, i64 0, i64 %storemerge17, i64 %storemerge35 ; <double*> [#uses=1]
- %scevgep20 = getelementptr [8000 x double]* @y, i64 0, i64 %storemerge35 ; <double*> [#uses=2]
- %6 = load double* %scevgep20, align 8 ; <double> [#uses=1]
- %7 = load double* %scevgep19, align 8 ; <double> [#uses=1]
- %8 = fmul double %7, %4 ; <double> [#uses=1]
- %9 = fadd double %6, %8 ; <double> [#uses=1]
+ %storemerge35 = phi i64 [ %10, %bb7 ], [ 0, %bb8.loopexit ]
+ %scevgep19 = getelementptr [8000 x [8000 x double]]* @A, i64 0, i64 %storemerge17, i64 %storemerge35
+ %scevgep20 = getelementptr [8000 x double]* @y, i64 0, i64 %storemerge35
+ %6 = load double* %scevgep20, align 8
+ %7 = load double* %scevgep19, align 8
+ %8 = fmul double %7, %.lcssa
+ %9 = fadd double %6, %8
store double %9, double* %scevgep20, align 8
- %10 = add nsw i64 %storemerge35, 1 ; <i64> [#uses=2]
- %exitcond18 = icmp eq i64 %10, 8000 ; <i1> [#uses=1]
- br i1 %exitcond18, label %bb9, label %bb7
+ %10 = add nsw i64 %storemerge35, 1
+ %exitcond = icmp eq i64 %10, 8000
+ br i1 %exitcond, label %bb9, label %bb7

bb8.loopexit: ; preds = %bb4
- store double %4, double* %scevgep24
+ %.lcssa = phi double [ %4, %bb4 ]
+ store double %.lcssa, double* %scevgep24
br label %bb7

bb9: ; preds = %bb7
- %11 = add nsw i64 %storemerge17, 1 ; <i64> [#uses=2]
- %exitcond21 = icmp eq i64 %11, 8000 ; <i1> [#uses=1]
- br i1 %exitcond21, label %return, label %bb.nph
+ %11 = add nsw i64 %storemerge17, 1
+ %exitcond6 = icmp eq i64 %11, 8000
+ br i1 %exitcond6, label %return, label %bb.nph

return: ; preds = %bb9
ret void
}
-
-; CHECK: Printing analysis 'Execute Cloog code generation' for region: 'bb.nph => return' in function 'scop_func':
+; CHECK: for region: 'bb => return' in function 'scop_func':
; CHECK-NEXT: scop_func():
-
diff --git a/test/polybench/linear-algebra/kernels/bicg/bicg_with_param.ll b/test/polybench/linear-algebra/kernels/bicg/bicg_with_param.ll
index 51a93ce..3ccd572 100644
--- a/test/polybench/linear-algebra/kernels/bicg/bicg_with_param.ll
+++ b/test/polybench/linear-algebra/kernels/bicg/bicg_with_param.ll
@@ -1,79 +1,101 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-cloog -analyze %s | FileCheck %s
+; RUN: opt %loadPolly %defaultOpts -polly-cloog -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/bicg/bicg_with_param.ll'
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 }
-@r = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=4]
-@p = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=4]
-@A = common global [8000 x [8000 x double]] zeroinitializer, align 32 ; <[8000 x [8000 x double]]*> [#uses=4]
-@s = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=6]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=8]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@q = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=5]
+
+@r = common global [8000 x double] zeroinitializer, align 32
+@p = common global [8000 x double] zeroinitializer, align 32
+@A = common global [8000 x [8000 x double]] zeroinitializer, align 32
+@s = common global [8000 x double] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@q = common global [8000 x double] zeroinitializer, align 32
+
define void @scop_func(i64 %nx, i64 %ny) nounwind {
entry:
- %0 = icmp sgt i64 %ny, 0 ; <i1> [#uses=2]
- br i1 %0, label %bb, label %bb7.preheader
+ %0 = icmp sgt i64 %ny, 0
+ br i1 %0, label %bb.preheader, label %bb7.preheader

-bb: ; preds = %bb, %entry
- %storemerge9 = phi i64 [ %1, %bb ], [ 0, %entry ] ; <i64> [#uses=2]
- %scevgep20 = getelementptr [8000 x double]* @s, i64 0, i64 %storemerge9 ; <double*> [#uses=1]
+bb.preheader: ; preds = %entry
+ br label %bb
+
+bb: ; preds = %bb.preheader, %bb
+ %storemerge9 = phi i64 [ %1, %bb ], [ 0, %bb.preheader ]
+ %scevgep20 = getelementptr [8000 x double]* @s, i64 0, i64 %storemerge9
store double 0.000000e+00, double* %scevgep20, align 8
- %1 = add nsw i64 %storemerge9, 1 ; <i64> [#uses=2]
- %exitcond19 = icmp eq i64 %1, %ny ; <i1> [#uses=1]
- br i1 %exitcond19, label %bb7.preheader, label %bb
+ %1 = add nsw i64 %storemerge9, 1
+ %exitcond11 = icmp eq i64 %1, %ny
+ br i1 %exitcond11, label %bb7.preheader.loopexit, label %bb
+
+bb7.preheader.loopexit: ; preds = %bb
+ br label %bb7.preheader

-bb7.preheader: ; preds = %bb, %entry
- %2 = icmp sgt i64 %nx, 0 ; <i1> [#uses=1]
+bb7.preheader: ; preds = %bb7.preheader.loopexit, %entry
+ %2 = icmp sgt i64 %nx, 0
br i1 %2, label %bb.nph8, label %return

bb.nph8: ; preds = %bb7.preheader
- br i1 %0, label %bb.nph.us, label %bb6
+ br i1 %0, label %bb.nph.us.preheader, label %bb6.preheader
+
+bb.nph.us.preheader: ; preds = %bb.nph8
+ br label %bb.nph.us
+
+bb6.preheader: ; preds = %bb.nph8
+ br label %bb6

bb6.us: ; preds = %bb4.us
- store double %10, double* %scevgep15
- %3 = add nsw i64 %storemerge14.us, 1 ; <i64> [#uses=2]
- %exitcond13 = icmp eq i64 %3, %nx ; <i1> [#uses=1]
- br i1 %exitcond13, label %return, label %bb.nph.us
+ %.lcssa = phi double [ %10, %bb4.us ]
+ store double %.lcssa, double* %scevgep15
+ %3 = add nsw i64 %storemerge14.us, 1
+ %exitcond = icmp eq i64 %3, %nx
+ br i1 %exitcond, label %return.loopexit1, label %bb.nph.us

bb4.us: ; preds = %bb.nph.us, %bb4.us
- %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %10, %bb4.us ] ; <double> [#uses=1]
- %storemerge23.us = phi i64 [ 0, %bb.nph.us ], [ %11, %bb4.us ] ; <i64> [#uses=4]
- %scevgep11 = getelementptr [8000 x [8000 x double]]* @A, i64 0, i64 %storemerge14.us, i64 %storemerge23.us ; <double*> [#uses=1]
- %scevgep = getelementptr [8000 x double]* @p, i64 0, i64 %storemerge23.us ; <double*> [#uses=1]
- %scevgep12 = getelementptr [8000 x double]* @s, i64 0, i64 %storemerge23.us ; <double*> [#uses=2]
- %4 = load double* %scevgep12, align 8 ; <double> [#uses=1]
- %5 = load double* %scevgep11, align 8 ; <double> [#uses=2]
- %6 = fmul double %12, %5 ; <double> [#uses=1]
- %7 = fadd double %4, %6 ; <double> [#uses=1]
+ %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %10, %bb4.us ]
+ %storemerge23.us = phi i64 [ 0, %bb.nph.us ], [ %11, %bb4.us ]
+ %scevgep11 = getelementptr [8000 x [8000 x double]]* @A, i64 0, i64 %storemerge14.us, i64 %storemerge23.us
+ %scevgep12 = getelementptr [8000 x double]* @s, i64 0, i64 %storemerge23.us
+ %scevgep = getelementptr [8000 x double]* @p, i64 0, i64 %storemerge23.us
+ %4 = load double* %scevgep12, align 8
+ %5 = load double* %scevgep11, align 8
+ %6 = fmul double %12, %5
+ %7 = fadd double %4, %6
store double %7, double* %scevgep12, align 8
- %8 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %9 = fmul double %5, %8 ; <double> [#uses=1]
- %10 = fadd double %.tmp.0.us, %9 ; <double> [#uses=2]
- %11 = add nsw i64 %storemerge23.us, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %11, %ny ; <i1> [#uses=1]
- br i1 %exitcond, label %bb6.us, label %bb4.us
-
-bb.nph.us: ; preds = %bb6.us, %bb.nph8
- %storemerge14.us = phi i64 [ %3, %bb6.us ], [ 0, %bb.nph8 ] ; <i64> [#uses=4]
- %scevgep15 = getelementptr [8000 x double]* @q, i64 0, i64 %storemerge14.us ; <double*> [#uses=2]
+ %8 = load double* %scevgep, align 8
+ %9 = fmul double %5, %8
+ %10 = fadd double %.tmp.0.us, %9
+ %11 = add nsw i64 %storemerge23.us, 1
+ %exitcond4 = icmp eq i64 %11, %ny
+ br i1 %exitcond4, label %bb6.us, label %bb4.us
+
+bb.nph.us: ; preds = %bb.nph.us.preheader, %bb6.us
+ %storemerge14.us = phi i64 [ %3, %bb6.us ], [ 0, %bb.nph.us.preheader ]
+ %scevgep16 = getelementptr [8000 x double]* @r, i64 0, i64 %storemerge14.us
+ %scevgep15 = getelementptr [8000 x double]* @q, i64 0, i64 %storemerge14.us
store double 0.000000e+00, double* %scevgep15, align 8
- %scevgep16 = getelementptr [8000 x double]* @r, i64 0, i64 %storemerge14.us ; <double*> [#uses=1]
- %12 = load double* %scevgep16, align 8 ; <double> [#uses=1]
+ %12 = load double* %scevgep16, align 8
br label %bb4.us

-bb6: ; preds = %bb6, %bb.nph8
- %indvar = phi i64 [ %indvar.next, %bb6 ], [ 0, %bb.nph8 ] ; <i64> [#uses=2]
- %scevgep18 = getelementptr [8000 x double]* @q, i64 0, i64 %indvar ; <double*> [#uses=1]
+bb6: ; preds = %bb6.preheader, %bb6
+ %indvar = phi i64 [ %indvar.next, %bb6 ], [ 0, %bb6.preheader ]
+ %scevgep18 = getelementptr [8000 x double]* @q, i64 0, i64 %indvar
store double 0.000000e+00, double* %scevgep18, align 8
- %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=2]
- %exitcond17 = icmp eq i64 %indvar.next, %nx ; <i1> [#uses=1]
- br i1 %exitcond17, label %return, label %bb6
+ %indvar.next = add i64 %indvar, 1
+ %exitcond2 = icmp eq i64 %indvar.next, %nx
+ br i1 %exitcond2, label %return.loopexit, label %bb6
+
+return.loopexit: ; preds = %bb6
+ br label %return

-return: ; preds = %bb6, %bb6.us, %bb7.preheader
+return.loopexit1: ; preds = %bb6.us
+ br label %return
+
+return: ; preds = %return.loopexit1, %return.loopexit, %bb7.preheader
ret void
}
-
-; CHECK: Printing analysis 'Execute Cloog code generation' for region: 'bb.nph.us => return' in function 'scop_func':
+; CHECK: for region: 'entry.split => return' in function 'scop_func':
; CHECK-NEXT: scop_func():

diff --git a/test/polybench/linear-algebra/kernels/bicg/bicg_without_param.ll b/test/polybench/linear-algebra/kernels/bicg/bicg_without_param.ll
index 4fcd3e6..d414d1f 100644
--- a/test/polybench/linear-algebra/kernels/bicg/bicg_without_param.ll
+++ b/test/polybench/linear-algebra/kernels/bicg/bicg_without_param.ll
@@ -1,64 +1,69 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-cloog -analyze %s | FileCheck %s
-
+; RUN: opt %loadPolly %defaultOpts -polly-cloog -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/bicg/bicg_without_param.ll'
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 }
-@r = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=4]
-@p = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=4]
-@A = common global [8000 x [8000 x double]] zeroinitializer, align 32 ; <[8000 x [8000 x double]]*> [#uses=4]
-@s = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=6]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=8]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@q = common global [8000 x double] zeroinitializer, align 32 ; <[8000 x double]*> [#uses=4]
+
+@r = common global [8000 x double] zeroinitializer, align 32
+@p = common global [8000 x double] zeroinitializer, align 32
+@A = common global [8000 x [8000 x double]] zeroinitializer, align 32
+@s = common global [8000 x double] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@q = common global [8000 x double] zeroinitializer, align 32
+
define void @scop_func() nounwind {
bb.nph10:
br label %bb

bb: ; preds = %bb, %bb.nph10
- %storemerge9 = phi i64 [ 0, %bb.nph10 ], [ %0, %bb ] ; <i64> [#uses=2]
- %scevgep18 = getelementptr [8000 x double]* @s, i64 0, i64 %storemerge9 ; <double*> [#uses=1]
+ %storemerge9 = phi i64 [ 0, %bb.nph10 ], [ %0, %bb ]
+ %scevgep18 = getelementptr [8000 x double]* @s, i64 0, i64 %storemerge9
store double 0.000000e+00, double* %scevgep18, align 8
- %0 = add nsw i64 %storemerge9, 1 ; <i64> [#uses=2]
- %exitcond17 = icmp eq i64 %0, 8000 ; <i1> [#uses=1]
- br i1 %exitcond17, label %bb.nph.us, label %bb
+ %0 = add nsw i64 %storemerge9, 1
+ %exitcond8 = icmp eq i64 %0, 8000
+ br i1 %exitcond8, label %bb.nph.us.preheader, label %bb
+
+bb.nph.us.preheader: ; preds = %bb
+ br label %bb.nph.us

bb6.us: ; preds = %bb4.us
- store double %8, double* %scevgep15
- %1 = add nsw i64 %storemerge14.us, 1 ; <i64> [#uses=2]
- %exitcond13 = icmp eq i64 %1, 8000 ; <i1> [#uses=1]
- br i1 %exitcond13, label %return, label %bb.nph.us
+ %.lcssa = phi double [ %8, %bb4.us ]
+ store double %.lcssa, double* %scevgep15
+ %1 = add nsw i64 %storemerge14.us, 1
+ %exitcond = icmp eq i64 %1, 8000
+ br i1 %exitcond, label %return, label %bb.nph.us

bb4.us: ; preds = %bb.nph.us, %bb4.us
- %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %8, %bb4.us ] ; <double> [#uses=1]
- %storemerge23.us = phi i64 [ 0, %bb.nph.us ], [ %9, %bb4.us ] ; <i64> [#uses=4]
- %scevgep11 = getelementptr [8000 x [8000 x double]]* @A, i64 0, i64 %storemerge14.us, i64 %storemerge23.us ; <double*> [#uses=1]
- %scevgep = getelementptr [8000 x double]* @p, i64 0, i64 %storemerge23.us ; <double*> [#uses=1]
- %scevgep12 = getelementptr [8000 x double]* @s, i64 0, i64 %storemerge23.us ; <double*> [#uses=2]
- %2 = load double* %scevgep12, align 8 ; <double> [#uses=1]
- %3 = load double* %scevgep11, align 8 ; <double> [#uses=2]
- %4 = fmul double %10, %3 ; <double> [#uses=1]
- %5 = fadd double %2, %4 ; <double> [#uses=1]
+ %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %8, %bb4.us ]
+ %storemerge23.us = phi i64 [ 0, %bb.nph.us ], [ %9, %bb4.us ]
+ %scevgep11 = getelementptr [8000 x [8000 x double]]* @A, i64 0, i64 %storemerge14.us, i64 %storemerge23.us
+ %scevgep12 = getelementptr [8000 x double]* @s, i64 0, i64 %storemerge23.us
+ %scevgep = getelementptr [8000 x double]* @p, i64 0, i64 %storemerge23.us
+ %2 = load double* %scevgep12, align 8
+ %3 = load double* %scevgep11, align 8
+ %4 = fmul double %10, %3
+ %5 = fadd double %2, %4
store double %5, double* %scevgep12, align 8
- %6 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %7 = fmul double %3, %6 ; <double> [#uses=1]
- %8 = fadd double %.tmp.0.us, %7 ; <double> [#uses=2]
- %9 = add nsw i64 %storemerge23.us, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %9, 8000 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb6.us, label %bb4.us
+ %6 = load double* %scevgep, align 8
+ %7 = fmul double %3, %6
+ %8 = fadd double %.tmp.0.us, %7
+ %9 = add nsw i64 %storemerge23.us, 1
+ %exitcond1 = icmp eq i64 %9, 8000
+ br i1 %exitcond1, label %bb6.us, label %bb4.us

-bb.nph.us: ; preds = %bb6.us, %bb
- %storemerge14.us = phi i64 [ %1, %bb6.us ], [ 0, %bb ] ; <i64> [#uses=4]
- %scevgep15 = getelementptr [8000 x double]* @q, i64 0, i64 %storemerge14.us ; <double*> [#uses=2]
+bb.nph.us: ; preds = %bb.nph.us.preheader, %bb6.us
+ %storemerge14.us = phi i64 [ %1, %bb6.us ], [ 0, %bb.nph.us.preheader ]
+ %scevgep16 = getelementptr [8000 x double]* @r, i64 0, i64 %storemerge14.us
+ %scevgep15 = getelementptr [8000 x double]* @q, i64 0, i64 %storemerge14.us
store double 0.000000e+00, double* %scevgep15, align 8
- %scevgep16 = getelementptr [8000 x double]* @r, i64 0, i64 %storemerge14.us ; <double*> [#uses=1]
- %10 = load double* %scevgep16, align 8 ; <double> [#uses=1]
+ %10 = load double* %scevgep16, align 8
br label %bb4.us

return: ; preds = %bb6.us
ret void
}
-
-; CHECK: Printing analysis 'Execute Cloog code generation' for region: 'bb.nph.us => return' in function 'scop_func':
+; CHECK: for region: 'bb => return' in function 'scop_func':
; CHECK-NEXT: scop_func():
-
diff --git a/test/polybench/linear-algebra/kernels/doitgen/doitgen_with_param.ll b/test/polybench/linear-algebra/kernels/doitgen/doitgen_with_param.ll
index ea6b4c2..d7e6c06 100644
--- a/test/polybench/linear-algebra/kernels/doitgen/doitgen_with_param.ll
+++ b/test/polybench/linear-algebra/kernels/doitgen/doitgen_with_param.ll
@@ -1,81 +1,104 @@
-; RUN: opt %loadPolly -correlated-propagation %polybenchOpts %defaultOpts -polly-cloog -analyze %s | FileCheck %s
+; RUN: opt %loadPolly -correlated-propagation %defaultOpts -polly-cloog -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/doitgen/doitgen_with_param.ll'
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 [128 x [128 x [128 x double]]] zeroinitializer, align 32 ; <[128 x [128 x [128 x double]]]*> [#uses=8]
-@C4 = common global [128 x [128 x double]] zeroinitializer, align 32 ; <[128 x [128 x double]]*> [#uses=4]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@sum = common global [128 x [128 x [128 x double]]] zeroinitializer, align 32 ; <[128 x [128 x [128 x double]]]*> [#uses=4]
+
+@A = common global [128 x [128 x [128 x double]]] zeroinitializer, align 32
+@C4 = common global [128 x [128 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@sum = common global [128 x [128 x [128 x double]]] zeroinitializer, align 32
+
define void @scop_func(i64 %nr, i64 %nq, i64 %np) nounwind {
entry:
- %0 = icmp sgt i64 %nr, 0 ; <i1> [#uses=1]
+ %0 = icmp sgt i64 %nr, 0
br i1 %0, label %bb.nph50, label %return

bb5.us: ; preds = %bb3.us
- store double %5, double* %scevgep54
- %1 = add nsw i64 %storemerge26.us, 1 ; <i64> [#uses=2]
- %exitcond52 = icmp eq i64 %1, %np ; <i1> [#uses=1]
- br i1 %exitcond52, label %bb9.loopexit, label %bb.nph.us
+ %.lcssa = phi double [ %5, %bb3.us ]
+ store double %.lcssa, double* %scevgep54
+ %1 = add nsw i64 %storemerge26.us, 1
+ %exitcond = icmp eq i64 %1, %np
+ br i1 %exitcond, label %bb9.loopexit, label %bb.nph.us

bb3.us: ; preds = %bb.nph.us, %bb3.us
- %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %5, %bb3.us ] ; <double> [#uses=1]
- %storemerge45.us = phi i64 [ 0, %bb.nph.us ], [ %6, %bb3.us ] ; <i64> [#uses=3]
- %scevgep = getelementptr [128 x [128 x double]]* @C4, i64 0, i64 %storemerge45.us, i64 %storemerge26.us ; <double*> [#uses=1]
- %scevgep51 = getelementptr [128 x [128 x [128 x double]]]* @A, i64 0, i64 %storemerge43, i64 %storemerge113, i64 %storemerge45.us ; <double*> [#uses=1]
- %2 = load double* %scevgep51, align 8 ; <double> [#uses=1]
- %3 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %4 = fmul double %2, %3 ; <double> [#uses=1]
- %5 = fadd double %.tmp.0.us, %4 ; <double> [#uses=2]
- %6 = add nsw i64 %storemerge45.us, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %6, %np ; <i1> [#uses=1]
- br i1 %exitcond, label %bb5.us, label %bb3.us
-
-bb.nph.us: ; preds = %bb6.preheader, %bb5.us
- %storemerge26.us = phi i64 [ %1, %bb5.us ], [ 0, %bb6.preheader ] ; <i64> [#uses=3]
- %scevgep54 = getelementptr [128 x [128 x [128 x double]]]* @sum, i64 0, i64 %storemerge43, i64 %storemerge113, i64 %storemerge26.us ; <double*> [#uses=2]
+ %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %5, %bb3.us ]
+ %storemerge45.us = phi i64 [ 0, %bb.nph.us ], [ %6, %bb3.us ]
+ %scevgep = getelementptr [128 x [128 x double]]* @C4, i64 0, i64 %storemerge45.us, i64 %storemerge26.us
+ %scevgep51 = getelementptr [128 x [128 x [128 x double]]]* @A, i64 0, i64 %storemerge43, i64 %storemerge113, i64 %storemerge45.us
+ %2 = load double* %scevgep51, align 8
+ %3 = load double* %scevgep, align 8
+ %4 = fmul double %2, %3
+ %5 = fadd double %.tmp.0.us, %4
+ %6 = add nsw i64 %storemerge45.us, 1
+ %exitcond1 = icmp eq i64 %6, %np
+ br i1 %exitcond1, label %bb5.us, label %bb3.us
+
+bb.nph.us: ; preds = %bb.nph.us.preheader, %bb5.us
+ %storemerge26.us = phi i64 [ %1, %bb5.us ], [ 0, %bb.nph.us.preheader ]
+ %scevgep54 = getelementptr [128 x [128 x [128 x double]]]* @sum, i64 0, i64 %storemerge43, i64 %storemerge113, i64 %storemerge26.us
store double 0.000000e+00, double* %scevgep54, align 8
br label %bb3.us

-bb8: ; preds = %bb9.loopexit, %bb8
- %storemerge311 = phi i64 [ %8, %bb8 ], [ 0, %bb9.loopexit ] ; <i64> [#uses=3]
- %scevgep61 = getelementptr [128 x [128 x [128 x double]]]* @A, i64 0, i64 %storemerge43, i64 %storemerge113, i64 %storemerge311 ; <double*> [#uses=1]
- %scevgep62 = getelementptr [128 x [128 x [128 x double]]]* @sum, i64 0, i64 %storemerge43, i64 %storemerge113, i64 %storemerge311 ; <double*> [#uses=1]
- %7 = load double* %scevgep62, align 8 ; <double> [#uses=1]
+bb8: ; preds = %bb8.preheader, %bb8
+ %storemerge311 = phi i64 [ %8, %bb8 ], [ 0, %bb8.preheader ]
+ %scevgep62 = getelementptr [128 x [128 x [128 x double]]]* @sum, i64 0, i64 %storemerge43, i64 %storemerge113, i64 %storemerge311
+ %scevgep61 = getelementptr [128 x [128 x [128 x double]]]* @A, i64 0, i64 %storemerge43, i64 %storemerge113, i64 %storemerge311
+ %7 = load double* %scevgep62, align 8
store double %7, double* %scevgep61, align 8
- %8 = add nsw i64 %storemerge311, 1 ; <i64> [#uses=2]
- %exitcond60 = icmp eq i64 %8, %np ; <i1> [#uses=1]
- br i1 %exitcond60, label %bb10, label %bb8
+ %8 = add nsw i64 %storemerge311, 1
+ %exitcond6 = icmp eq i64 %8, %np
+ br i1 %exitcond6, label %bb10.loopexit, label %bb8

bb9.loopexit: ; preds = %bb5.us
- br i1 %14, label %bb8, label %bb10
+ br i1 %14, label %bb8.preheader, label %bb10
+
+bb8.preheader: ; preds = %bb9.loopexit
+ br label %bb8
+
+bb10.loopexit: ; preds = %bb8
+ br label %bb10

-bb10: ; preds = %bb6.preheader, %bb9.loopexit, %bb8
- %storemerge12566 = phi i64 [ %storemerge113, %bb9.loopexit ], [ %storemerge113, %bb8 ], [ %storemerge113, %bb6.preheader ] ; <i64> [#uses=1]
- %storemerge4464 = phi i64 [ %storemerge43, %bb9.loopexit ], [ %storemerge43, %bb8 ], [ %storemerge43, %bb6.preheader ] ; <i64> [#uses=2]
- %9 = add nsw i64 %storemerge12566, 1 ; <i64> [#uses=2]
- %10 = icmp slt i64 %9, %nq ; <i1> [#uses=1]
- br i1 %10, label %bb6.preheader, label %bb12
+bb10: ; preds = %bb10.loopexit, %bb6.preheader, %bb9.loopexit
+ %storemerge12566 = phi i64 [ %storemerge113, %bb9.loopexit ], [ %storemerge113, %bb6.preheader ], [ %storemerge113, %bb10.loopexit ]
+ %storemerge4464 = phi i64 [ %storemerge43, %bb9.loopexit ], [ %storemerge43, %bb6.preheader ], [ %storemerge43, %bb10.loopexit ]
+ %9 = add nsw i64 %storemerge12566, 1
+ %10 = icmp slt i64 %9, %nq
+ br i1 %10, label %bb6.preheader.backedge, label %bb12

-bb6.preheader: ; preds = %bb.nph50, %bb12, %bb10
- %storemerge43 = phi i64 [ %storemerge4464, %bb10 ], [ %11, %bb12 ], [ 0, %bb.nph50 ] ; <i64> [#uses=7]
- %storemerge113 = phi i64 [ %9, %bb10 ], [ 0, %bb.nph50 ], [ 0, %bb12 ] ; <i64> [#uses=7]
- br i1 %14, label %bb.nph.us, label %bb10
+bb6.preheader.backedge: ; preds = %bb10, %bb12
+ %storemerge43.be = phi i64 [ %storemerge4464, %bb10 ], [ %11, %bb12 ]
+ %storemerge113.be = phi i64 [ %9, %bb10 ], [ 0, %bb12 ]
+ br label %bb6.preheader
+
+bb6.preheader: ; preds = %bb6.preheader.backedge, %bb6.preheader.preheader
+ %storemerge43 = phi i64 [ 0, %bb6.preheader.preheader ], [ %storemerge43.be, %bb6.preheader.backedge ]
+ %storemerge113 = phi i64 [ 0, %bb6.preheader.preheader ], [ %storemerge113.be, %bb6.preheader.backedge ]
+ br i1 %14, label %bb.nph.us.preheader, label %bb10
+
+bb.nph.us.preheader: ; preds = %bb6.preheader
+ br label %bb.nph.us

bb12: ; preds = %bb10
- %11 = add nsw i64 %storemerge4464, 1 ; <i64> [#uses=2]
- %12 = icmp slt i64 %11, %nr ; <i1> [#uses=1]
- br i1 %12, label %bb6.preheader, label %return
+ %11 = add nsw i64 %storemerge4464, 1
+ %12 = icmp slt i64 %11, %nr
+ br i1 %12, label %bb6.preheader.backedge, label %return.loopexit

bb.nph50: ; preds = %entry
- %13 = icmp sgt i64 %nq, 0 ; <i1> [#uses=1]
- %14 = icmp sgt i64 %np, 0 ; <i1> [#uses=2]
- br i1 %13, label %bb6.preheader, label %return
+ %13 = icmp sgt i64 %nq, 0
+ %14 = icmp sgt i64 %np, 0
+ br i1 %13, label %bb6.preheader.preheader, label %return
+
+bb6.preheader.preheader: ; preds = %bb.nph50
+ br label %bb6.preheader

-return: ; preds = %bb.nph50, %bb12, %entry
+return.loopexit: ; preds = %bb12
+ br label %return
+
+return: ; preds = %return.loopexit, %bb.nph50, %entry
ret void
}
-
; CHECK: for region: 'entry.split => return' in function 'scop_func':
-
diff --git a/test/polybench/linear-algebra/kernels/doitgen/doitgen_without_param.ll b/test/polybench/linear-algebra/kernels/doitgen/doitgen_without_param.ll
index 9d7b58e..19247e9 100644
--- a/test/polybench/linear-algebra/kernels/doitgen/doitgen_without_param.ll
+++ b/test/polybench/linear-algebra/kernels/doitgen/doitgen_without_param.ll
@@ -1,75 +1,79 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -analyze %s | FileCheck %s
-
+; RUN: opt %loadPolly %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/doitgen/doitgen_without_param.ll'
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 [128 x [128 x [128 x double]]] zeroinitializer, align 32 ; <[128 x [128 x [128 x double]]]*> [#uses=8]
-@C4 = common global [128 x [128 x double]] zeroinitializer, align 32 ; <[128 x [128 x double]]*> [#uses=4]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@sum = common global [128 x [128 x [128 x double]]] zeroinitializer, align 32 ; <[128 x [128 x [128 x double]]]*> [#uses=4]
+
+@A = common global [128 x [128 x [128 x double]]] zeroinitializer, align 32
+@C4 = common global [128 x [128 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@sum = common global [128 x [128 x [128 x double]]] zeroinitializer, align 32
+
define void @scop_func() nounwind {
bb.nph50.bb.nph50.split_crit_edge:
br label %bb11.preheader

bb5.us: ; preds = %bb3.us
- store double %4, double* %scevgep54
- %0 = add nsw i64 %storemerge26.us, 1 ; <i64> [#uses=2]
- %exitcond52 = icmp eq i64 %0, 128 ; <i1> [#uses=1]
- br i1 %exitcond52, label %bb8, label %bb.nph.us
+ %.lcssa = phi double [ %4, %bb3.us ]
+ store double %.lcssa, double* %scevgep54
+ %0 = add nsw i64 %storemerge26.us, 1
+ %exitcond = icmp eq i64 %0, 128
+ br i1 %exitcond, label %bb8.loopexit, label %bb.nph.us

bb3.us: ; preds = %bb.nph.us, %bb3.us
- %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %4, %bb3.us ] ; <double> [#uses=1]
- %storemerge45.us = phi i64 [ 0, %bb.nph.us ], [ %5, %bb3.us ] ; <i64> [#uses=3]
- %scevgep = getelementptr [128 x [128 x double]]* @C4, i64 0, i64 %storemerge45.us, i64 %storemerge26.us ; <double*> [#uses=1]
- %scevgep51 = getelementptr [128 x [128 x [128 x double]]]* @A, i64 0, i64 %storemerge30, i64 %storemerge113, i64 %storemerge45.us ; <double*> [#uses=1]
- %1 = load double* %scevgep51, align 8 ; <double> [#uses=1]
- %2 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %3 = fmul double %1, %2 ; <double> [#uses=1]
- %4 = fadd double %.tmp.0.us, %3 ; <double> [#uses=2]
- %5 = add nsw i64 %storemerge45.us, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %5, 128 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb5.us, label %bb3.us
+ %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %4, %bb3.us ]
+ %storemerge45.us = phi i64 [ 0, %bb.nph.us ], [ %5, %bb3.us ]
+ %scevgep51 = getelementptr [128 x [128 x [128 x double]]]* @A, i64 0, i64 %storemerge30, i64 %storemerge113, i64 %storemerge45.us
+ %scevgep = getelementptr [128 x [128 x double]]* @C4, i64 0, i64 %storemerge45.us, i64 %storemerge26.us
+ %1 = load double* %scevgep51, align 8
+ %2 = load double* %scevgep, align 8
+ %3 = fmul double %1, %2
+ %4 = fadd double %.tmp.0.us, %3
+ %5 = add nsw i64 %storemerge45.us, 1
+ %exitcond1 = icmp eq i64 %5, 128
+ br i1 %exitcond1, label %bb5.us, label %bb3.us

bb.nph.us: ; preds = %bb6.preheader, %bb5.us
- %storemerge26.us = phi i64 [ %0, %bb5.us ], [ 0, %bb6.preheader ] ; <i64> [#uses=3]
- %scevgep54 = getelementptr [128 x [128 x [128 x double]]]* @sum, i64 0, i64 %storemerge30, i64 %storemerge113, i64 %storemerge26.us ; <double*> [#uses=2]
+ %storemerge26.us = phi i64 [ %0, %bb5.us ], [ 0, %bb6.preheader ]
+ %scevgep54 = getelementptr [128 x [128 x [128 x double]]]* @sum, i64 0, i64 %storemerge30, i64 %storemerge113, i64 %storemerge26.us
store double 0.000000e+00, double* %scevgep54, align 8
br label %bb3.us

-bb8: ; preds = %bb8, %bb5.us
- %storemerge311 = phi i64 [ %7, %bb8 ], [ 0, %bb5.us ] ; <i64> [#uses=3]
- %scevgep56 = getelementptr [128 x [128 x [128 x double]]]* @A, i64 0, i64 %storemerge30, i64 %storemerge113, i64 %storemerge311 ; <double*> [#uses=1]
- %scevgep57 = getelementptr [128 x [128 x [128 x double]]]* @sum, i64 0, i64 %storemerge30, i64 %storemerge113, i64 %storemerge311 ; <double*> [#uses=1]
- %6 = load double* %scevgep57, align 8 ; <double> [#uses=1]
+bb8.loopexit: ; preds = %bb5.us
+ br label %bb8
+
+bb8: ; preds = %bb8.loopexit, %bb8
+ %storemerge311 = phi i64 [ %7, %bb8 ], [ 0, %bb8.loopexit ]
+ %scevgep57 = getelementptr [128 x [128 x [128 x double]]]* @sum, i64 0, i64 %storemerge30, i64 %storemerge113, i64 %storemerge311
+ %scevgep56 = getelementptr [128 x [128 x [128 x double]]]* @A, i64 0, i64 %storemerge30, i64 %storemerge113, i64 %storemerge311
+ %6 = load double* %scevgep57, align 8
store double %6, double* %scevgep56, align 8
- %7 = add nsw i64 %storemerge311, 1 ; <i64> [#uses=2]
- %exitcond55 = icmp eq i64 %7, 128 ; <i1> [#uses=1]
- br i1 %exitcond55, label %bb10, label %bb8
+ %7 = add nsw i64 %storemerge311, 1
+ %exitcond6 = icmp eq i64 %7, 128
+ br i1 %exitcond6, label %bb10, label %bb8

bb10: ; preds = %bb8
- %8 = add nsw i64 %storemerge113, 1 ; <i64> [#uses=2]
- %9 = icmp slt i64 %8, 128 ; <i1> [#uses=1]
- br i1 %9, label %bb6.preheader, label %bb12
+ %8 = add nsw i64 %storemerge113, 1
+ %exitcond9 = icmp ne i64 %8, 128
+ br i1 %exitcond9, label %bb6.preheader, label %bb12

bb6.preheader: ; preds = %bb11.preheader, %bb10
- %storemerge113 = phi i64 [ %8, %bb10 ], [ 0, %bb11.preheader ] ; <i64> [#uses=5]
+ %storemerge113 = phi i64 [ %8, %bb10 ], [ 0, %bb11.preheader ]
br label %bb.nph.us

bb12: ; preds = %bb10
- %10 = add nsw i64 %storemerge30, 1 ; <i64> [#uses=2]
- %11 = icmp slt i64 %10, 128 ; <i1> [#uses=1]
- br i1 %11, label %bb11.preheader, label %return
+ %9 = add nsw i64 %storemerge30, 1
+ %exitcond14 = icmp ne i64 %9, 128
+ br i1 %exitcond14, label %bb11.preheader, label %return

bb11.preheader: ; preds = %bb12, %bb.nph50.bb.nph50.split_crit_edge
- %storemerge30 = phi i64 [ 0, %bb.nph50.bb.nph50.split_crit_edge ], [ %10, %bb12 ] ; <i64> [#uses=5]
+ %storemerge30 = phi i64 [ 0, %bb.nph50.bb.nph50.split_crit_edge ], [ %9, %bb12 ]
br label %bb6.preheader

return: ; preds = %bb12
ret void
}
-
-; CHECK: Valid Region for Scop: bb.nph.us => bb8.loopexit
-
-
+; CHECK: Valid Region for Scop: bb11.preheader => return
diff --git a/test/polybench/linear-algebra/kernels/gemm/gemm_with_param.ll b/test/polybench/linear-algebra/kernels/gemm/gemm_with_param.ll
index 50c5354..11e7b58 100644
--- a/test/polybench/linear-algebra/kernels/gemm/gemm_with_param.ll
+++ b/test/polybench/linear-algebra/kernels/gemm/gemm_with_param.ll
@@ -1,80 +1,98 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -polly-cloog -analyze %s | FileCheck %s
+; RUN: opt %loadPolly %defaultOpts -polly-detect -polly-cloog -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/gemm/gemm_with_param.ll'
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 }
-@alpha = common global double 0.000000e+00 ; <double*> [#uses=3]
-@beta = common global double 0.000000e+00 ; <double*> [#uses=3]
-@A = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=4]
-@B = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=4]
-@C = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=7]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@alpha = common global double 0.000000e+00
+@beta = common global double 0.000000e+00
+@A = common global [512 x [512 x double]] zeroinitializer, align 32
+@B = common global [512 x [512 x double]] zeroinitializer, align 32
+@C = common global [512 x [512 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func(i64 %ni, i64 %nj, i64 %nk) nounwind {
entry:
- %0 = icmp sgt i64 %ni, 0 ; <i1> [#uses=1]
+ %0 = icmp sgt i64 %ni, 0
br i1 %0, label %bb.nph26, label %return

-bb.nph8: ; preds = %bb.nph26, %bb6
- %storemerge9 = phi i64 [ %12, %bb6 ], [ 0, %bb.nph26 ] ; <i64> [#uses=4]
- br i1 %16, label %bb.nph.us, label %bb4
+bb.nph8: ; preds = %bb.nph8.preheader, %bb6
+ %indvar3 = phi i64 [ 0, %bb.nph8.preheader ], [ %indvar.next4, %bb6 ]
+ br i1 %14, label %bb.nph.us.preheader, label %bb4.preheader
+
+bb.nph.us.preheader: ; preds = %bb.nph8
+ br label %bb.nph.us
+
+bb4.preheader: ; preds = %bb.nph8
+ br label %bb4

bb4.us: ; preds = %bb2.us
- store double %6, double* %scevgep30
- %1 = add nsw i64 %storemerge14.us, 1 ; <i64> [#uses=2]
- %exitcond28 = icmp eq i64 %1, %nj ; <i1> [#uses=1]
- br i1 %exitcond28, label %bb6, label %bb.nph.us
+ %.lcssa = phi double [ %6, %bb2.us ]
+ store double %.lcssa, double* %scevgep30
+ %1 = add nsw i64 %storemerge14.us, 1
+ %exitcond = icmp eq i64 %1, %nj
+ br i1 %exitcond, label %bb6.loopexit1, label %bb.nph.us

bb2.us: ; preds = %bb.nph.us, %bb2.us
- %.tmp.0.us = phi double [ %9, %bb.nph.us ], [ %6, %bb2.us ] ; <double> [#uses=1]
- %storemerge23.us = phi i64 [ 0, %bb.nph.us ], [ %7, %bb2.us ] ; <i64> [#uses=3]
- %scevgep = getelementptr [512 x [512 x double]]* @B, i64 0, i64 %storemerge23.us, i64 %storemerge14.us ; <double*> [#uses=1]
- %scevgep27 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %storemerge9, i64 %storemerge23.us ; <double*> [#uses=1]
- %2 = load double* %scevgep27, align 8 ; <double> [#uses=1]
- %3 = fmul double %2, %17 ; <double> [#uses=1]
- %4 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %5 = fmul double %3, %4 ; <double> [#uses=1]
- %6 = fadd double %.tmp.0.us, %5 ; <double> [#uses=2]
- %7 = add nsw i64 %storemerge23.us, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %7, %nk ; <i1> [#uses=1]
- br i1 %exitcond, label %bb4.us, label %bb2.us
-
-bb.nph.us: ; preds = %bb4.us, %bb.nph8
- %storemerge14.us = phi i64 [ %1, %bb4.us ], [ 0, %bb.nph8 ] ; <i64> [#uses=3]
- %scevgep30 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %storemerge9, i64 %storemerge14.us ; <double*> [#uses=3]
- %8 = load double* %scevgep30, align 8 ; <double> [#uses=1]
- %9 = fmul double %8, %15 ; <double> [#uses=2]
+ %.tmp.0.us = phi double [ %9, %bb.nph.us ], [ %6, %bb2.us ]
+ %storemerge23.us = phi i64 [ 0, %bb.nph.us ], [ %7, %bb2.us ]
+ %scevgep27 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %indvar3, i64 %storemerge23.us
+ %scevgep = getelementptr [512 x [512 x double]]* @B, i64 0, i64 %storemerge23.us, i64 %storemerge14.us
+ %2 = load double* %scevgep27, align 8
+ %3 = fmul double %2, %15
+ %4 = load double* %scevgep, align 8
+ %5 = fmul double %3, %4
+ %6 = fadd double %.tmp.0.us, %5
+ %7 = add nsw i64 %storemerge23.us, 1
+ %exitcond6 = icmp eq i64 %7, %nk
+ br i1 %exitcond6, label %bb4.us, label %bb2.us
+
+bb.nph.us: ; preds = %bb.nph.us.preheader, %bb4.us
+ %storemerge14.us = phi i64 [ %1, %bb4.us ], [ 0, %bb.nph.us.preheader ]
+ %scevgep30 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %indvar3, i64 %storemerge14.us
+ %8 = load double* %scevgep30, align 8
+ %9 = fmul double %8, %13
store double %9, double* %scevgep30, align 8
br label %bb2.us

-bb4: ; preds = %bb4, %bb.nph8
- %indvar = phi i64 [ %indvar.next, %bb4 ], [ 0, %bb.nph8 ] ; <i64> [#uses=2]
- %storemerge19 = phi i64 [ %storemerge19, %bb4 ], [ %storemerge9, %bb.nph8 ] ; <i64> [#uses=3]
- %tmp34 = shl i64 %storemerge19, 9 ; <i64> [#uses=1]
- %scevgep32.sum = add i64 %indvar, %tmp34 ; <i64> [#uses=1]
- %scevgep35 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 0, i64 %scevgep32.sum ; <double*> [#uses=2]
- %10 = load double* %scevgep35, align 8 ; <double> [#uses=1]
- %11 = fmul double %10, %15 ; <double> [#uses=1]
+bb4: ; preds = %bb4.preheader, %bb4
+ %indvar = phi i64 [ %indvar.next, %bb4 ], [ 0, %bb4.preheader ]
+ %scevgep35 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %indvar3, i64 %indvar
+ %10 = load double* %scevgep35, align 8
+ %11 = fmul double %10, %13
store double %11, double* %scevgep35, align 8
- %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=2]
- %exitcond31 = icmp eq i64 %indvar.next, %nj ; <i1> [#uses=1]
- br i1 %exitcond31, label %bb6, label %bb4
+ %indvar.next = add i64 %indvar, 1
+ %exitcond2 = icmp eq i64 %indvar.next, %nj
+ br i1 %exitcond2, label %bb6.loopexit, label %bb4

-bb6: ; preds = %bb4, %bb4.us
- %storemerge25 = phi i64 [ %storemerge9, %bb4.us ], [ %storemerge19, %bb4 ] ; <i64> [#uses=1]
- %12 = add nsw i64 %storemerge25, 1 ; <i64> [#uses=2]
- %13 = icmp slt i64 %12, %ni ; <i1> [#uses=1]
- br i1 %13, label %bb.nph8, label %return
+bb6.loopexit: ; preds = %bb4
+ br label %bb6
+
+bb6.loopexit1: ; preds = %bb4.us
+ br label %bb6
+
+bb6: ; preds = %bb6.loopexit1, %bb6.loopexit
+ %indvar.next4 = add i64 %indvar3, 1
+ %exitcond11 = icmp ne i64 %indvar.next4, %ni
+ br i1 %exitcond11, label %bb.nph8, label %return.loopexit

bb.nph26: ; preds = %entry
- %14 = icmp sgt i64 %nj, 0 ; <i1> [#uses=1]
- %15 = load double* @beta, align 8 ; <double> [#uses=2]
- %16 = icmp sgt i64 %nk, 0 ; <i1> [#uses=1]
- %17 = load double* @alpha, align 8 ; <double> [#uses=1]
- br i1 %14, label %bb.nph8, label %return
+ %12 = icmp sgt i64 %nj, 0
+ %13 = load double* @beta, align 8
+ %14 = icmp sgt i64 %nk, 0
+ %15 = load double* @alpha, align 8
+ br i1 %12, label %bb.nph8.preheader, label %return
+
+bb.nph8.preheader: ; preds = %bb.nph26
+ br label %bb.nph8

-return: ; preds = %bb.nph26, %bb6, %entry
+return.loopexit: ; preds = %bb6
+ br label %return
+
+return: ; preds = %return.loopexit, %bb.nph26, %entry
ret void
}
-
; CHECK: for region: 'entry.split => return' in function 'scop_func':
diff --git a/test/polybench/linear-algebra/kernels/gemm/gemm_without_param.ll b/test/polybench/linear-algebra/kernels/gemm/gemm_without_param.ll
index 1881709..b7b125e 100644
--- a/test/polybench/linear-algebra/kernels/gemm/gemm_without_param.ll
+++ b/test/polybench/linear-algebra/kernels/gemm/gemm_without_param.ll
@@ -1,62 +1,64 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -analyze %s | FileCheck %s
-
+; RUN: opt %loadPolly %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/gemm/gemm_without_param.ll'
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 }
-@alpha = common global double 0.000000e+00 ; <double*> [#uses=3]
-@beta = common global double 0.000000e+00 ; <double*> [#uses=3]
-@A = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=4]
-@B = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=4]
-@C = common global [512 x [512 x double]] zeroinitializer, align 32 ; <[512 x [512 x double]]*> [#uses=6]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@alpha = common global double 0.000000e+00
+@beta = common global double 0.000000e+00
+@A = common global [512 x [512 x double]] zeroinitializer, align 32
+@B = common global [512 x [512 x double]] zeroinitializer, align 32
+@C = common global [512 x [512 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func() nounwind {
bb.nph26.bb.nph26.split_crit_edge:
- %0 = load double* @beta, align 8 ; <double> [#uses=1]
- %1 = load double* @alpha, align 8 ; <double> [#uses=1]
+ %0 = load double* @beta, align 8
+ %1 = load double* @alpha, align 8
br label %bb5.preheader

bb4.us: ; preds = %bb2.us
- store double %7, double* %scevgep30
- %2 = add nsw i64 %storemerge14.us, 1 ; <i64> [#uses=2]
- %exitcond28 = icmp eq i64 %2, 512 ; <i1> [#uses=1]
- br i1 %exitcond28, label %bb6, label %bb.nph.us
+ %.lcssa = phi double [ %7, %bb2.us ]
+ store double %.lcssa, double* %scevgep30
+ %2 = add nsw i64 %storemerge14.us, 1
+ %exitcond = icmp eq i64 %2, 512
+ br i1 %exitcond, label %bb6, label %bb.nph.us

bb2.us: ; preds = %bb.nph.us, %bb2.us
- %.tmp.0.us = phi double [ %10, %bb.nph.us ], [ %7, %bb2.us ] ; <double> [#uses=1]
- %storemerge23.us = phi i64 [ 0, %bb.nph.us ], [ %8, %bb2.us ] ; <i64> [#uses=3]
- %scevgep = getelementptr [512 x [512 x double]]* @B, i64 0, i64 %storemerge23.us, i64 %storemerge14.us ; <double*> [#uses=1]
- %scevgep27 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %storemerge9, i64 %storemerge23.us ; <double*> [#uses=1]
- %3 = load double* %scevgep27, align 8 ; <double> [#uses=1]
- %4 = fmul double %3, %1 ; <double> [#uses=1]
- %5 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %6 = fmul double %4, %5 ; <double> [#uses=1]
- %7 = fadd double %.tmp.0.us, %6 ; <double> [#uses=2]
- %8 = add nsw i64 %storemerge23.us, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %8, 512 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb4.us, label %bb2.us
+ %.tmp.0.us = phi double [ %10, %bb.nph.us ], [ %7, %bb2.us ]
+ %storemerge23.us = phi i64 [ 0, %bb.nph.us ], [ %8, %bb2.us ]
+ %scevgep27 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %storemerge9, i64 %storemerge23.us
+ %scevgep = getelementptr [512 x [512 x double]]* @B, i64 0, i64 %storemerge23.us, i64 %storemerge14.us
+ %3 = load double* %scevgep27, align 8
+ %4 = fmul double %3, %1
+ %5 = load double* %scevgep, align 8
+ %6 = fmul double %4, %5
+ %7 = fadd double %.tmp.0.us, %6
+ %8 = add nsw i64 %storemerge23.us, 1
+ %exitcond1 = icmp eq i64 %8, 512
+ br i1 %exitcond1, label %bb4.us, label %bb2.us

bb.nph.us: ; preds = %bb5.preheader, %bb4.us
- %storemerge14.us = phi i64 [ %2, %bb4.us ], [ 0, %bb5.preheader ] ; <i64> [#uses=3]
- %scevgep30 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %storemerge9, i64 %storemerge14.us ; <double*> [#uses=3]
- %9 = load double* %scevgep30, align 8 ; <double> [#uses=1]
- %10 = fmul double %9, %0 ; <double> [#uses=2]
+ %storemerge14.us = phi i64 [ %2, %bb4.us ], [ 0, %bb5.preheader ]
+ %scevgep30 = getelementptr [512 x [512 x double]]* @C, i64 0, i64 %storemerge9, i64 %storemerge14.us
+ %9 = load double* %scevgep30, align 8
+ %10 = fmul double %9, %0
store double %10, double* %scevgep30, align 8
br label %bb2.us

bb6: ; preds = %bb4.us
- %11 = add nsw i64 %storemerge9, 1 ; <i64> [#uses=2]
- %12 = icmp slt i64 %11, 512 ; <i1> [#uses=1]
- br i1 %12, label %bb5.preheader, label %return
+ %11 = add nsw i64 %storemerge9, 1
+ %exitcond6 = icmp ne i64 %11, 512
+ br i1 %exitcond6, label %bb5.preheader, label %return

bb5.preheader: ; preds = %bb6, %bb.nph26.bb.nph26.split_crit_edge
- %storemerge9 = phi i64 [ 0, %bb.nph26.bb.nph26.split_crit_edge ], [ %11, %bb6 ] ; <i64> [#uses=3]
+ %storemerge9 = phi i64 [ 0, %bb.nph26.bb.nph26.split_crit_edge ], [ %11, %bb6 ]
br label %bb.nph.us

return: ; preds = %bb6
ret void
}
-
; CHECK: Valid Region for Scop: bb5.preheader => return
-
diff --git a/test/polybench/linear-algebra/kernels/gemver/gemver_with_param.ll b/test/polybench/linear-algebra/kernels/gemver/gemver_with_param.ll
index 1559f0c..50bc163 100644
--- a/test/polybench/linear-algebra/kernels/gemver/gemver_with_param.ll
+++ b/test/polybench/linear-algebra/kernels/gemver/gemver_with_param.ll
@@ -1,141 +1,154 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -polly-cloog -analyze %s | FileCheck %s
-
+; RUN: opt %loadPolly %defaultOpts -polly-detect -polly-cloog -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/gemver/gemver_with_param.ll'
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 }
-@alpha = common global double 0.000000e+00 ; <double*> [#uses=3]
-@beta = common global double 0.000000e+00 ; <double*> [#uses=3]
-@u1 = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=3]
-@u2 = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=3]
-@v1 = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=3]
-@v2 = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=3]
-@y = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=3]
-@z = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=3]
-@x = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=5]
-@w = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=5]
-@A = common global [4000 x [4000 x double]] zeroinitializer, align 32 ; <[4000 x [4000 x double]]*> [#uses=5]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@B = common global [4000 x [4000 x double]] zeroinitializer, align 32 ; <[4000 x [4000 x double]]*> [#uses=0]
+
+@alpha = common global double 0.000000e+00
+@beta = common global double 0.000000e+00
+@u1 = common global [4000 x double] zeroinitializer, align 32
+@u2 = common global [4000 x double] zeroinitializer, align 32
+@v1 = common global [4000 x double] zeroinitializer, align 32
+@v2 = common global [4000 x double] zeroinitializer, align 32
+@y = common global [4000 x double] zeroinitializer, align 32
+@z = common global [4000 x double] zeroinitializer, align 32
+@x = common global [4000 x double] zeroinitializer, align 32
+@w = common global [4000 x double] zeroinitializer, align 32
+@A = common global [4000 x [4000 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@B = common global [4000 x [4000 x double]] zeroinitializer, align 32
+
define void @scop_func(i64 %n) nounwind {
entry:
- %0 = icmp sgt i64 %n, 0 ; <i1> [#uses=4]
- br i1 %0, label %bb.nph40, label %return
-
-bb.nph40: ; preds = %bb3, %entry
- %i.041 = phi i64 [ %11, %bb3 ], [ 0, %entry ] ; <i64> [#uses=4]
- %scevgep67 = getelementptr [4000 x double]* @u2, i64 0, i64 %i.041 ; <double*> [#uses=1]
- %scevgep66 = getelementptr [4000 x double]* @u1, i64 0, i64 %i.041 ; <double*> [#uses=1]
- %1 = load double* %scevgep66, align 8 ; <double> [#uses=1]
- %2 = load double* %scevgep67, align 8 ; <double> [#uses=1]
+ %0 = icmp sgt i64 %n, 0
+ br i1 %0, label %bb.nph40.preheader, label %return
+
+bb.nph40.preheader: ; preds = %entry
+ br label %bb.nph40
+
+bb.nph40: ; preds = %bb.nph40.preheader, %bb3
+ %i.041 = phi i64 [ %11, %bb3 ], [ 0, %bb.nph40.preheader ]
+ %scevgep66 = getelementptr [4000 x double]* @u1, i64 0, i64 %i.041
+ %scevgep67 = getelementptr [4000 x double]* @u2, i64 0, i64 %i.041
+ %1 = load double* %scevgep66, align 8
+ %2 = load double* %scevgep67, align 8
br label %bb1

bb1: ; preds = %bb1, %bb.nph40
- %j.039 = phi i64 [ 0, %bb.nph40 ], [ %10, %bb1 ] ; <i64> [#uses=4]
- %scevgep63 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %i.041, i64 %j.039 ; <double*> [#uses=2]
- %scevgep61 = getelementptr [4000 x double]* @v1, i64 0, i64 %j.039 ; <double*> [#uses=1]
- %scevgep62 = getelementptr [4000 x double]* @v2, i64 0, i64 %j.039 ; <double*> [#uses=1]
- %3 = load double* %scevgep63, align 8 ; <double> [#uses=1]
- %4 = load double* %scevgep61, align 8 ; <double> [#uses=1]
- %5 = fmul double %1, %4 ; <double> [#uses=1]
- %6 = fadd double %3, %5 ; <double> [#uses=1]
- %7 = load double* %scevgep62, align 8 ; <double> [#uses=1]
- %8 = fmul double %2, %7 ; <double> [#uses=1]
- %9 = fadd double %6, %8 ; <double> [#uses=1]
+ %j.039 = phi i64 [ 0, %bb.nph40 ], [ %10, %bb1 ]
+ %scevgep63 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %i.041, i64 %j.039
+ %scevgep62 = getelementptr [4000 x double]* @v2, i64 0, i64 %j.039
+ %scevgep61 = getelementptr [4000 x double]* @v1, i64 0, i64 %j.039
+ %3 = load double* %scevgep63, align 8
+ %4 = load double* %scevgep61, align 8
+ %5 = fmul double %1, %4
+ %6 = fadd double %3, %5
+ %7 = load double* %scevgep62, align 8
+ %8 = fmul double %2, %7
+ %9 = fadd double %6, %8
store double %9, double* %scevgep63, align 8
- %10 = add nsw i64 %j.039, 1 ; <i64> [#uses=2]
- %exitcond60 = icmp eq i64 %10, %n ; <i1> [#uses=1]
- br i1 %exitcond60, label %bb3, label %bb1
+ %10 = add nsw i64 %j.039, 1
+ %exitcond16 = icmp eq i64 %10, %n
+ br i1 %exitcond16, label %bb3, label %bb1

bb3: ; preds = %bb1
- %11 = add nsw i64 %i.041, 1 ; <i64> [#uses=2]
- %exitcond64 = icmp eq i64 %11, %n ; <i1> [#uses=1]
- br i1 %exitcond64, label %bb10.preheader, label %bb.nph40
+ %11 = add nsw i64 %i.041, 1
+ %exitcond20 = icmp eq i64 %11, %n
+ br i1 %exitcond20, label %bb10.preheader, label %bb.nph40

bb10.preheader: ; preds = %bb3
br i1 %0, label %bb.nph38.bb.nph38.split_crit_edge, label %return

bb.nph30: ; preds = %bb.nph38.bb.nph38.split_crit_edge, %bb9
- %i.134 = phi i64 [ 0, %bb.nph38.bb.nph38.split_crit_edge ], [ %18, %bb9 ] ; <i64> [#uses=3]
- %scevgep59 = getelementptr [4000 x double]* @x, i64 0, i64 %i.134 ; <double*> [#uses=2]
- %.promoted31 = load double* %scevgep59 ; <double> [#uses=1]
+ %i.134 = phi i64 [ 0, %bb.nph38.bb.nph38.split_crit_edge ], [ %18, %bb9 ]
+ %scevgep59 = getelementptr [4000 x double]* @x, i64 0, i64 %i.134
+ %.promoted31 = load double* %scevgep59
br label %bb7

bb7: ; preds = %bb7, %bb.nph30
- %.tmp.032 = phi double [ %.promoted31, %bb.nph30 ], [ %16, %bb7 ] ; <double> [#uses=1]
- %j.129 = phi i64 [ 0, %bb.nph30 ], [ %17, %bb7 ] ; <i64> [#uses=3]
- %scevgep56 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %j.129, i64 %i.134 ; <double*> [#uses=1]
- %scevgep55 = getelementptr [4000 x double]* @y, i64 0, i64 %j.129 ; <double*> [#uses=1]
- %12 = load double* %scevgep56, align 8 ; <double> [#uses=1]
- %13 = fmul double %12, %19 ; <double> [#uses=1]
- %14 = load double* %scevgep55, align 8 ; <double> [#uses=1]
- %15 = fmul double %13, %14 ; <double> [#uses=1]
- %16 = fadd double %.tmp.032, %15 ; <double> [#uses=2]
- %17 = add nsw i64 %j.129, 1 ; <i64> [#uses=2]
- %exitcond54 = icmp eq i64 %17, %n ; <i1> [#uses=1]
- br i1 %exitcond54, label %bb9, label %bb7
+ %.tmp.032 = phi double [ %.promoted31, %bb.nph30 ], [ %16, %bb7 ]
+ %j.129 = phi i64 [ 0, %bb.nph30 ], [ %17, %bb7 ]
+ %scevgep56 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %j.129, i64 %i.134
+ %scevgep55 = getelementptr [4000 x double]* @y, i64 0, i64 %j.129
+ %12 = load double* %scevgep56, align 8
+ %13 = fmul double %12, %19
+ %14 = load double* %scevgep55, align 8
+ %15 = fmul double %13, %14
+ %16 = fadd double %.tmp.032, %15
+ %17 = add nsw i64 %j.129, 1
+ %exitcond10 = icmp eq i64 %17, %n
+ br i1 %exitcond10, label %bb9, label %bb7

bb9: ; preds = %bb7
- store double %16, double* %scevgep59
- %18 = add nsw i64 %i.134, 1 ; <i64> [#uses=2]
- %exitcond57 = icmp eq i64 %18, %n ; <i1> [#uses=1]
- br i1 %exitcond57, label %bb13.preheader, label %bb.nph30
+ %.lcssa9 = phi double [ %16, %bb7 ]
+ store double %.lcssa9, double* %scevgep59
+ %18 = add nsw i64 %i.134, 1
+ %exitcond13 = icmp eq i64 %18, %n
+ br i1 %exitcond13, label %bb13.preheader, label %bb.nph30

bb.nph38.bb.nph38.split_crit_edge: ; preds = %bb10.preheader
- %19 = load double* @beta, align 8 ; <double> [#uses=1]
+ %19 = load double* @beta, align 8
br label %bb.nph30

bb13.preheader: ; preds = %bb9
- br i1 %0, label %bb12, label %return
-
-bb12: ; preds = %bb12, %bb13.preheader
- %i.227 = phi i64 [ %23, %bb12 ], [ 0, %bb13.preheader ] ; <i64> [#uses=3]
- %scevgep51 = getelementptr [4000 x double]* @x, i64 0, i64 %i.227 ; <double*> [#uses=2]
- %scevgep52 = getelementptr [4000 x double]* @z, i64 0, i64 %i.227 ; <double*> [#uses=1]
- %20 = load double* %scevgep51, align 8 ; <double> [#uses=1]
- %21 = load double* %scevgep52, align 8 ; <double> [#uses=1]
- %22 = fadd double %20, %21 ; <double> [#uses=1]
+ br i1 %0, label %bb12.preheader, label %return
+
+bb12.preheader: ; preds = %bb13.preheader
+ br label %bb12
+
+bb12: ; preds = %bb12.preheader, %bb12
+ %i.227 = phi i64 [ %23, %bb12 ], [ 0, %bb12.preheader ]
+ %scevgep52 = getelementptr [4000 x double]* @z, i64 0, i64 %i.227
+ %scevgep51 = getelementptr [4000 x double]* @x, i64 0, i64 %i.227
+ %20 = load double* %scevgep51, align 8
+ %21 = load double* %scevgep52, align 8
+ %22 = fadd double %20, %21
store double %22, double* %scevgep51, align 8
- %23 = add nsw i64 %i.227, 1 ; <i64> [#uses=2]
- %exitcond50 = icmp eq i64 %23, %n ; <i1> [#uses=1]
- br i1 %exitcond50, label %bb19.preheader, label %bb12
+ %23 = add nsw i64 %i.227, 1
+ %exitcond6 = icmp eq i64 %23, %n
+ br i1 %exitcond6, label %bb19.preheader, label %bb12

bb19.preheader: ; preds = %bb12
br i1 %0, label %bb.nph26.bb.nph26.split_crit_edge, label %return

bb.nph: ; preds = %bb.nph26.bb.nph26.split_crit_edge, %bb18
- %i.322 = phi i64 [ 0, %bb.nph26.bb.nph26.split_crit_edge ], [ %30, %bb18 ] ; <i64> [#uses=3]
- %scevgep49 = getelementptr [4000 x double]* @w, i64 0, i64 %i.322 ; <double*> [#uses=2]
- %.promoted = load double* %scevgep49 ; <double> [#uses=1]
+ %i.322 = phi i64 [ 0, %bb.nph26.bb.nph26.split_crit_edge ], [ %30, %bb18 ]
+ %scevgep49 = getelementptr [4000 x double]* @w, i64 0, i64 %i.322
+ %.promoted = load double* %scevgep49
br label %bb16

bb16: ; preds = %bb16, %bb.nph
- %.tmp.0 = phi double [ %.promoted, %bb.nph ], [ %28, %bb16 ] ; <double> [#uses=1]
- %j.221 = phi i64 [ 0, %bb.nph ], [ %29, %bb16 ] ; <i64> [#uses=3]
- %scevgep46 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %i.322, i64 %j.221 ; <double*> [#uses=1]
- %scevgep = getelementptr [4000 x double]* @x, i64 0, i64 %j.221 ; <double*> [#uses=1]
- %24 = load double* %scevgep46, align 8 ; <double> [#uses=1]
- %25 = fmul double %24, %31 ; <double> [#uses=1]
- %26 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %27 = fmul double %25, %26 ; <double> [#uses=1]
- %28 = fadd double %.tmp.0, %27 ; <double> [#uses=2]
- %29 = add nsw i64 %j.221, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %29, %n ; <i1> [#uses=1]
- br i1 %exitcond, label %bb18, label %bb16
+ %.tmp.0 = phi double [ %.promoted, %bb.nph ], [ %28, %bb16 ]
+ %j.221 = phi i64 [ 0, %bb.nph ], [ %29, %bb16 ]
+ %scevgep46 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %i.322, i64 %j.221
+ %scevgep = getelementptr [4000 x double]* @x, i64 0, i64 %j.221
+ %24 = load double* %scevgep46, align 8
+ %25 = fmul double %24, %31
+ %26 = load double* %scevgep, align 8
+ %27 = fmul double %25, %26
+ %28 = fadd double %.tmp.0, %27
+ %29 = add nsw i64 %j.221, 1
+ %exitcond1 = icmp eq i64 %29, %n
+ br i1 %exitcond1, label %bb18, label %bb16

bb18: ; preds = %bb16
- store double %28, double* %scevgep49
- %30 = add nsw i64 %i.322, 1 ; <i64> [#uses=2]
- %exitcond47 = icmp eq i64 %30, %n ; <i1> [#uses=1]
- br i1 %exitcond47, label %return, label %bb.nph
+ %.lcssa = phi double [ %28, %bb16 ]
+ store double %.lcssa, double* %scevgep49
+ %30 = add nsw i64 %i.322, 1
+ %exitcond = icmp eq i64 %30, %n
+ br i1 %exitcond, label %return.loopexit, label %bb.nph

bb.nph26.bb.nph26.split_crit_edge: ; preds = %bb19.preheader
- %31 = load double* @alpha, align 8 ; <double> [#uses=1]
+ %31 = load double* @alpha, align 8
br label %bb.nph

-return: ; preds = %bb18, %bb19.preheader, %bb13.preheader, %bb10.preheader, %entry
+return.loopexit: ; preds = %bb18
+ br label %return
+
+return: ; preds = %return.loopexit, %bb19.preheader, %bb13.preheader, %bb10.preheader, %entry
ret void
}
-
; CHECK: for region: 'entry.split => return' in function 'scop_func':
diff --git a/test/polybench/linear-algebra/kernels/gemver/gemver_without_param.ll b/test/polybench/linear-algebra/kernels/gemver/gemver_without_param.ll
index 0874714..1802b51 100644
--- a/test/polybench/linear-algebra/kernels/gemver/gemver_without_param.ll
+++ b/test/polybench/linear-algebra/kernels/gemver/gemver_without_param.ll
@@ -1,130 +1,138 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -polly-cloog -analyze %s | FileCheck %s
+; RUN: opt %loadPolly %defaultOpts -polly-detect -polly-cloog -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/gemver/gemver_without_param.ll'
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 }
-@alpha = common global double 0.000000e+00 ; <double*> [#uses=3]
-@beta = common global double 0.000000e+00 ; <double*> [#uses=3]
-@u1 = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=3]
-@u2 = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=3]
-@v1 = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=3]
-@v2 = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=3]
-@y = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=3]
-@z = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=3]
-@x = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=5]
-@w = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=5]
-@A = common global [4000 x [4000 x double]] zeroinitializer, align 32 ; <[4000 x [4000 x double]]*> [#uses=5]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@B = common global [4000 x [4000 x double]] zeroinitializer, align 32 ; <[4000 x [4000 x double]]*> [#uses=0]
+
+@alpha = common global double 0.000000e+00
+@beta = common global double 0.000000e+00
+@u1 = common global [4000 x double] zeroinitializer, align 32
+@u2 = common global [4000 x double] zeroinitializer, align 32
+@v1 = common global [4000 x double] zeroinitializer, align 32
+@v2 = common global [4000 x double] zeroinitializer, align 32
+@y = common global [4000 x double] zeroinitializer, align 32
+@z = common global [4000 x double] zeroinitializer, align 32
+@x = common global [4000 x double] zeroinitializer, align 32
+@w = common global [4000 x double] zeroinitializer, align 32
+@A = common global [4000 x [4000 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@B = common global [4000 x [4000 x double]] zeroinitializer, align 32
+
define void @scop_func() nounwind {
bb.nph31.bb.nph31.split_crit_edge:
br label %bb.nph26

bb.nph26: ; preds = %bb3, %bb.nph31.bb.nph31.split_crit_edge
- %storemerge27 = phi i64 [ 0, %bb.nph31.bb.nph31.split_crit_edge ], [ %10, %bb3 ] ; <i64> [#uses=4]
- %scevgep53 = getelementptr [4000 x double]* @u2, i64 0, i64 %storemerge27 ; <double*> [#uses=1]
- %scevgep52 = getelementptr [4000 x double]* @u1, i64 0, i64 %storemerge27 ; <double*> [#uses=1]
- %0 = load double* %scevgep52, align 8 ; <double> [#uses=1]
- %1 = load double* %scevgep53, align 8 ; <double> [#uses=1]
+ %storemerge27 = phi i64 [ 0, %bb.nph31.bb.nph31.split_crit_edge ], [ %10, %bb3 ]
+ %scevgep52 = getelementptr [4000 x double]* @u1, i64 0, i64 %storemerge27
+ %scevgep53 = getelementptr [4000 x double]* @u2, i64 0, i64 %storemerge27
+ %0 = load double* %scevgep52, align 8
+ %1 = load double* %scevgep53, align 8
br label %bb1

bb1: ; preds = %bb1, %bb.nph26
- %storemerge625 = phi i64 [ 0, %bb.nph26 ], [ %9, %bb1 ] ; <i64> [#uses=4]
- %scevgep47 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %storemerge27, i64 %storemerge625 ; <double*> [#uses=2]
- %scevgep48 = getelementptr [4000 x double]* @v1, i64 0, i64 %storemerge625 ; <double*> [#uses=1]
- %scevgep49 = getelementptr [4000 x double]* @v2, i64 0, i64 %storemerge625 ; <double*> [#uses=1]
- %2 = load double* %scevgep47, align 8 ; <double> [#uses=1]
- %3 = load double* %scevgep48, align 8 ; <double> [#uses=1]
- %4 = fmul double %0, %3 ; <double> [#uses=1]
- %5 = fadd double %2, %4 ; <double> [#uses=1]
- %6 = load double* %scevgep49, align 8 ; <double> [#uses=1]
- %7 = fmul double %1, %6 ; <double> [#uses=1]
- %8 = fadd double %5, %7 ; <double> [#uses=1]
+ %storemerge625 = phi i64 [ 0, %bb.nph26 ], [ %9, %bb1 ]
+ %scevgep47 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %storemerge27, i64 %storemerge625
+ %scevgep49 = getelementptr [4000 x double]* @v2, i64 0, i64 %storemerge625
+ %scevgep48 = getelementptr [4000 x double]* @v1, i64 0, i64 %storemerge625
+ %2 = load double* %scevgep47, align 8
+ %3 = load double* %scevgep48, align 8
+ %4 = fmul double %0, %3
+ %5 = fadd double %2, %4
+ %6 = load double* %scevgep49, align 8
+ %7 = fmul double %1, %6
+ %8 = fadd double %5, %7
store double %8, double* %scevgep47, align 8
- %9 = add nsw i64 %storemerge625, 1 ; <i64> [#uses=2]
- %exitcond46 = icmp eq i64 %9, 4000 ; <i1> [#uses=1]
- br i1 %exitcond46, label %bb3, label %bb1
+ %9 = add nsw i64 %storemerge625, 1
+ %exitcond16 = icmp eq i64 %9, 4000
+ br i1 %exitcond16, label %bb3, label %bb1

bb3: ; preds = %bb1
- %10 = add nsw i64 %storemerge27, 1 ; <i64> [#uses=2]
- %exitcond50 = icmp eq i64 %10, 4000 ; <i1> [#uses=1]
- br i1 %exitcond50, label %bb.nph24.bb.nph24.split_crit_edge, label %bb.nph26
+ %10 = add nsw i64 %storemerge27, 1
+ %exitcond20 = icmp eq i64 %10, 4000
+ br i1 %exitcond20, label %bb.nph24.bb.nph24.split_crit_edge, label %bb.nph26

bb.nph16: ; preds = %bb.nph24.bb.nph24.split_crit_edge, %bb9
- %storemerge120 = phi i64 [ 0, %bb.nph24.bb.nph24.split_crit_edge ], [ %17, %bb9 ] ; <i64> [#uses=3]
- %scevgep45 = getelementptr [4000 x double]* @x, i64 0, i64 %storemerge120 ; <double*> [#uses=2]
- %.promoted17 = load double* %scevgep45 ; <double> [#uses=1]
+ %storemerge120 = phi i64 [ 0, %bb.nph24.bb.nph24.split_crit_edge ], [ %17, %bb9 ]
+ %scevgep45 = getelementptr [4000 x double]* @x, i64 0, i64 %storemerge120
+ %.promoted17 = load double* %scevgep45
br label %bb7

bb7: ; preds = %bb7, %bb.nph16
- %.tmp.018 = phi double [ %.promoted17, %bb.nph16 ], [ %15, %bb7 ] ; <double> [#uses=1]
- %storemerge515 = phi i64 [ 0, %bb.nph16 ], [ %16, %bb7 ] ; <i64> [#uses=3]
- %scevgep42 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %storemerge515, i64 %storemerge120 ; <double*> [#uses=1]
- %scevgep41 = getelementptr [4000 x double]* @y, i64 0, i64 %storemerge515 ; <double*> [#uses=1]
- %11 = load double* %scevgep42, align 8 ; <double> [#uses=1]
- %12 = fmul double %11, %18 ; <double> [#uses=1]
- %13 = load double* %scevgep41, align 8 ; <double> [#uses=1]
- %14 = fmul double %12, %13 ; <double> [#uses=1]
- %15 = fadd double %.tmp.018, %14 ; <double> [#uses=2]
- %16 = add nsw i64 %storemerge515, 1 ; <i64> [#uses=2]
- %exitcond40 = icmp eq i64 %16, 4000 ; <i1> [#uses=1]
- br i1 %exitcond40, label %bb9, label %bb7
+ %.tmp.018 = phi double [ %.promoted17, %bb.nph16 ], [ %15, %bb7 ]
+ %storemerge515 = phi i64 [ 0, %bb.nph16 ], [ %16, %bb7 ]
+ %scevgep42 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %storemerge515, i64 %storemerge120
+ %scevgep41 = getelementptr [4000 x double]* @y, i64 0, i64 %storemerge515
+ %11 = load double* %scevgep42, align 8
+ %12 = fmul double %11, %18
+ %13 = load double* %scevgep41, align 8
+ %14 = fmul double %12, %13
+ %15 = fadd double %.tmp.018, %14
+ %16 = add nsw i64 %storemerge515, 1
+ %exitcond10 = icmp eq i64 %16, 4000
+ br i1 %exitcond10, label %bb9, label %bb7

bb9: ; preds = %bb7
- store double %15, double* %scevgep45
- %17 = add nsw i64 %storemerge120, 1 ; <i64> [#uses=2]
- %exitcond43 = icmp eq i64 %17, 4000 ; <i1> [#uses=1]
- br i1 %exitcond43, label %bb12, label %bb.nph16
+ %.lcssa9 = phi double [ %15, %bb7 ]
+ store double %.lcssa9, double* %scevgep45
+ %17 = add nsw i64 %storemerge120, 1
+ %exitcond13 = icmp eq i64 %17, 4000
+ br i1 %exitcond13, label %bb12.preheader, label %bb.nph16
+
+bb12.preheader: ; preds = %bb9
+ br label %bb12

bb.nph24.bb.nph24.split_crit_edge: ; preds = %bb3
- %18 = load double* @beta, align 8 ; <double> [#uses=1]
+ %18 = load double* @beta, align 8
br label %bb.nph16

-bb12: ; preds = %bb12, %bb9
- %storemerge213 = phi i64 [ %22, %bb12 ], [ 0, %bb9 ] ; <i64> [#uses=3]
- %scevgep37 = getelementptr [4000 x double]* @z, i64 0, i64 %storemerge213 ; <double*> [#uses=1]
- %scevgep38 = getelementptr [4000 x double]* @x, i64 0, i64 %storemerge213 ; <double*> [#uses=2]
- %19 = load double* %scevgep38, align 8 ; <double> [#uses=1]
- %20 = load double* %scevgep37, align 8 ; <double> [#uses=1]
- %21 = fadd double %19, %20 ; <double> [#uses=1]
+bb12: ; preds = %bb12.preheader, %bb12
+ %storemerge213 = phi i64 [ %22, %bb12 ], [ 0, %bb12.preheader ]
+ %scevgep38 = getelementptr [4000 x double]* @x, i64 0, i64 %storemerge213
+ %scevgep37 = getelementptr [4000 x double]* @z, i64 0, i64 %storemerge213
+ %19 = load double* %scevgep38, align 8
+ %20 = load double* %scevgep37, align 8
+ %21 = fadd double %19, %20
store double %21, double* %scevgep38, align 8
- %22 = add nsw i64 %storemerge213, 1 ; <i64> [#uses=2]
- %exitcond36 = icmp eq i64 %22, 4000 ; <i1> [#uses=1]
- br i1 %exitcond36, label %bb.nph12.bb.nph12.split_crit_edge, label %bb12
+ %22 = add nsw i64 %storemerge213, 1
+ %exitcond6 = icmp eq i64 %22, 4000
+ br i1 %exitcond6, label %bb.nph12.bb.nph12.split_crit_edge, label %bb12

bb.nph: ; preds = %bb.nph12.bb.nph12.split_crit_edge, %bb18
- %storemerge38 = phi i64 [ 0, %bb.nph12.bb.nph12.split_crit_edge ], [ %29, %bb18 ] ; <i64> [#uses=3]
- %scevgep35 = getelementptr [4000 x double]* @w, i64 0, i64 %storemerge38 ; <double*> [#uses=2]
- %.promoted = load double* %scevgep35 ; <double> [#uses=1]
+ %storemerge38 = phi i64 [ 0, %bb.nph12.bb.nph12.split_crit_edge ], [ %29, %bb18 ]
+ %scevgep35 = getelementptr [4000 x double]* @w, i64 0, i64 %storemerge38
+ %.promoted = load double* %scevgep35
br label %bb16

bb16: ; preds = %bb16, %bb.nph
- %.tmp.0 = phi double [ %.promoted, %bb.nph ], [ %27, %bb16 ] ; <double> [#uses=1]
- %storemerge47 = phi i64 [ 0, %bb.nph ], [ %28, %bb16 ] ; <i64> [#uses=3]
- %scevgep32 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %storemerge38, i64 %storemerge47 ; <double*> [#uses=1]
- %scevgep = getelementptr [4000 x double]* @x, i64 0, i64 %storemerge47 ; <double*> [#uses=1]
- %23 = load double* %scevgep32, align 8 ; <double> [#uses=1]
- %24 = fmul double %23, %30 ; <double> [#uses=1]
- %25 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %26 = fmul double %24, %25 ; <double> [#uses=1]
- %27 = fadd double %.tmp.0, %26 ; <double> [#uses=2]
- %28 = add nsw i64 %storemerge47, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %28, 4000 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb18, label %bb16
+ %.tmp.0 = phi double [ %.promoted, %bb.nph ], [ %27, %bb16 ]
+ %storemerge47 = phi i64 [ 0, %bb.nph ], [ %28, %bb16 ]
+ %scevgep32 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %storemerge38, i64 %storemerge47
+ %scevgep = getelementptr [4000 x double]* @x, i64 0, i64 %storemerge47
+ %23 = load double* %scevgep32, align 8
+ %24 = fmul double %23, %30
+ %25 = load double* %scevgep, align 8
+ %26 = fmul double %24, %25
+ %27 = fadd double %.tmp.0, %26
+ %28 = add nsw i64 %storemerge47, 1
+ %exitcond1 = icmp eq i64 %28, 4000
+ br i1 %exitcond1, label %bb18, label %bb16

bb18: ; preds = %bb16
- store double %27, double* %scevgep35
- %29 = add nsw i64 %storemerge38, 1 ; <i64> [#uses=2]
- %exitcond33 = icmp eq i64 %29, 4000 ; <i1> [#uses=1]
- br i1 %exitcond33, label %return, label %bb.nph
+ %.lcssa = phi double [ %27, %bb16 ]
+ store double %.lcssa, double* %scevgep35
+ %29 = add nsw i64 %storemerge38, 1
+ %exitcond = icmp eq i64 %29, 4000
+ br i1 %exitcond, label %return, label %bb.nph

bb.nph12.bb.nph12.split_crit_edge: ; preds = %bb12
- %30 = load double* @alpha, align 8 ; <double> [#uses=1]
+ %30 = load double* @alpha, align 8
br label %bb.nph

return: ; preds = %bb18
ret void
}
-
; CHECK: for region: 'bb.nph26 => return' in function 'scop_func':
diff --git a/test/polybench/linear-algebra/kernels/gesummv/gesummv_with_param.ll b/test/polybench/linear-algebra/kernels/gesummv/gesummv_with_param.ll
index 86ef5d7..d143b3c 100644
--- a/test/polybench/linear-algebra/kernels/gesummv/gesummv_with_param.ll
+++ b/test/polybench/linear-algebra/kernels/gesummv/gesummv_with_param.ll
@@ -1,68 +1,73 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-cloog -analyze %s | FileCheck %s
-
+; RUN: opt %loadPolly %defaultOpts -polly-cloog -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/gesummv/gesummv_with_param.ll'
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 }
-@alpha = common global double 0.000000e+00 ; <double*> [#uses=3]
-@beta = common global double 0.000000e+00 ; <double*> [#uses=3]
-@x = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=4]
-@A = common global [4000 x [4000 x double]] zeroinitializer, align 32 ; <[4000 x [4000 x double]]*> [#uses=4]
-@y = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=4]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@tmp = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=2]
-@B = common global [4000 x [4000 x double]] zeroinitializer, align 32 ; <[4000 x [4000 x double]]*> [#uses=2]
+
+@alpha = common global double 0.000000e+00
+@beta = common global double 0.000000e+00
+@x = common global [4000 x double] zeroinitializer, align 32
+@A = common global [4000 x [4000 x double]] zeroinitializer, align 32
+@y = common global [4000 x double] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@tmp = common global [4000 x double] zeroinitializer, align 32
+@B = common global [4000 x [4000 x double]] zeroinitializer, align 32
+
define void @scop_func(i64 %n) nounwind {
entry:
- %0 = icmp sgt i64 %n, 0 ; <i1> [#uses=1]
+ %0 = icmp sgt i64 %n, 0
br i1 %0, label %bb.nph10.split.us, label %return

bb.nph10.split.us: ; preds = %entry
- %1 = load double* @alpha, align 8 ; <double> [#uses=1]
- %2 = load double* @beta, align 8 ; <double> [#uses=1]
+ %1 = load double* @alpha, align 8
+ %2 = load double* @beta, align 8
br label %bb.nph.us

bb3.us: ; preds = %bb1.us
- store double %10, double* %scevgep17
- %3 = fmul double %10, %1 ; <double> [#uses=1]
- %4 = fmul double %13, %2 ; <double> [#uses=1]
- %5 = fadd double %3, %4 ; <double> [#uses=1]
+ %.lcssa1 = phi double [ %13, %bb1.us ]
+ %.lcssa = phi double [ %10, %bb1.us ]
+ store double %.lcssa, double* %scevgep17
+ %3 = fmul double %.lcssa, %1
+ %4 = fmul double %.lcssa1, %2
+ %5 = fadd double %3, %4
store double %5, double* %scevgep18, align 8
- %6 = add nsw i64 %storemerge6.us, 1 ; <i64> [#uses=2]
- %exitcond14 = icmp eq i64 %6, %n ; <i1> [#uses=1]
- br i1 %exitcond14, label %return, label %bb.nph.us
+ %6 = add nsw i64 %storemerge6.us, 1
+ %exitcond = icmp eq i64 %6, %n
+ br i1 %exitcond, label %return.loopexit, label %bb.nph.us

bb1.us: ; preds = %bb.nph.us, %bb1.us
- %.tmp3.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %13, %bb1.us ] ; <double> [#uses=1]
- %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %10, %bb1.us ] ; <double> [#uses=1]
- %storemerge12.us = phi i64 [ 0, %bb.nph.us ], [ %14, %bb1.us ] ; <i64> [#uses=4]
- %scevgep13 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %storemerge6.us, i64 %storemerge12.us ; <double*> [#uses=1]
- %scevgep = getelementptr [4000 x [4000 x double]]* @B, i64 0, i64 %storemerge6.us, i64 %storemerge12.us ; <double*> [#uses=1]
- %scevgep12 = getelementptr [4000 x double]* @x, i64 0, i64 %storemerge12.us ; <double*> [#uses=1]
- %7 = load double* %scevgep13, align 8 ; <double> [#uses=1]
- %8 = load double* %scevgep12, align 8 ; <double> [#uses=2]
- %9 = fmul double %7, %8 ; <double> [#uses=1]
- %10 = fadd double %9, %.tmp.0.us ; <double> [#uses=3]
- %11 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %12 = fmul double %11, %8 ; <double> [#uses=1]
- %13 = fadd double %12, %.tmp3.0.us ; <double> [#uses=2]
- %14 = add nsw i64 %storemerge12.us, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %14, %n ; <i1> [#uses=1]
- br i1 %exitcond, label %bb3.us, label %bb1.us
+ %.tmp3.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %13, %bb1.us ]
+ %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %10, %bb1.us ]
+ %storemerge12.us = phi i64 [ 0, %bb.nph.us ], [ %14, %bb1.us ]
+ %scevgep13 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %storemerge6.us, i64 %storemerge12.us
+ %scevgep = getelementptr [4000 x [4000 x double]]* @B, i64 0, i64 %storemerge6.us, i64 %storemerge12.us
+ %scevgep12 = getelementptr [4000 x double]* @x, i64 0, i64 %storemerge12.us
+ %7 = load double* %scevgep13, align 8
+ %8 = load double* %scevgep12, align 8
+ %9 = fmul double %7, %8
+ %10 = fadd double %9, %.tmp.0.us
+ %11 = load double* %scevgep, align 8
+ %12 = fmul double %11, %8
+ %13 = fadd double %12, %.tmp3.0.us
+ %14 = add nsw i64 %storemerge12.us, 1
+ %exitcond2 = icmp eq i64 %14, %n
+ br i1 %exitcond2, label %bb3.us, label %bb1.us

bb.nph.us: ; preds = %bb3.us, %bb.nph10.split.us
- %storemerge6.us = phi i64 [ 0, %bb.nph10.split.us ], [ %6, %bb3.us ] ; <i64> [#uses=5]
- %scevgep17 = getelementptr [4000 x double]* @tmp, i64 0, i64 %storemerge6.us ; <double*> [#uses=2]
- %scevgep18 = getelementptr [4000 x double]* @y, i64 0, i64 %storemerge6.us ; <double*> [#uses=2]
+ %storemerge6.us = phi i64 [ 0, %bb.nph10.split.us ], [ %6, %bb3.us ]
+ %scevgep18 = getelementptr [4000 x double]* @y, i64 0, i64 %storemerge6.us
+ %scevgep17 = getelementptr [4000 x double]* @tmp, i64 0, i64 %storemerge6.us
store double 0.000000e+00, double* %scevgep17, align 8
store double 0.000000e+00, double* %scevgep18, align 8
br label %bb1.us

-return: ; preds = %bb3.us, %entry
+return.loopexit: ; preds = %bb3.us
+ br label %return
+
+return: ; preds = %return.loopexit, %entry
ret void
}
-
; CHECK: for region: 'entry.split => return' in function 'scop_func':
-
-
diff --git a/test/polybench/linear-algebra/kernels/gesummv/gesummv_without_param.ll b/test/polybench/linear-algebra/kernels/gesummv/gesummv_without_param.ll
index efe7bca..95430e2 100644
--- a/test/polybench/linear-algebra/kernels/gesummv/gesummv_without_param.ll
+++ b/test/polybench/linear-algebra/kernels/gesummv/gesummv_without_param.ll
@@ -1,56 +1,61 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -analyze %s | FileCheck %s
-
+; RUN: opt %loadPolly %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/kernels/gesummv/gesummv_without_param.ll'
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 }
-@alpha = common global double 0.000000e+00 ; <double*> [#uses=3]
-@beta = common global double 0.000000e+00 ; <double*> [#uses=3]
-@x = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=4]
-@A = common global [4000 x [4000 x double]] zeroinitializer, align 32 ; <[4000 x [4000 x double]]*> [#uses=4]
-@y = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=4]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@tmp = common global [4000 x double] zeroinitializer, align 32 ; <[4000 x double]*> [#uses=2]
-@B = common global [4000 x [4000 x double]] zeroinitializer, align 32 ; <[4000 x [4000 x double]]*> [#uses=2]
+
+@alpha = common global double 0.000000e+00
+@beta = common global double 0.000000e+00
+@x = common global [4000 x double] zeroinitializer, align 32
+@A = common global [4000 x [4000 x double]] zeroinitializer, align 32
+@y = common global [4000 x double] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@tmp = common global [4000 x double] zeroinitializer, align 32
+@B = common global [4000 x [4000 x double]] zeroinitializer, align 32
+
define void @scop_func() nounwind {
bb.nph10.split.us:
- %0 = load double* @alpha, align 8 ; <double> [#uses=1]
- %1 = load double* @beta, align 8 ; <double> [#uses=1]
+ %0 = load double* @alpha, align 8
+ %1 = load double* @beta, align 8
br label %bb.nph.us

bb3.us: ; preds = %bb1.us
- store double %9, double* %scevgep17
- %2 = fmul double %9, %0 ; <double> [#uses=1]
- %3 = fmul double %12, %1 ; <double> [#uses=1]
- %4 = fadd double %2, %3 ; <double> [#uses=1]
+ %.lcssa1 = phi double [ %12, %bb1.us ]
+ %.lcssa = phi double [ %9, %bb1.us ]
+ store double %.lcssa, double* %scevgep17
+ %2 = fmul double %.lcssa, %0
+ %3 = fmul double %.lcssa1, %1
+ %4 = fadd double %2, %3
store double %4, double* %scevgep18, align 8
- %5 = add nsw i64 %storemerge6.us, 1 ; <i64> [#uses=2]
- %exitcond14 = icmp eq i64 %5, 4000 ; <i1> [#uses=1]
- br i1 %exitcond14, label %return, label %bb.nph.us
+ %5 = add nsw i64 %storemerge6.us, 1
+ %exitcond = icmp eq i64 %5, 4000
+ br i1 %exitcond, label %return, label %bb.nph.us

bb1.us: ; preds = %bb.nph.us, %bb1.us
- %.tmp3.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %12, %bb1.us ] ; <double> [#uses=1]
- %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %9, %bb1.us ] ; <double> [#uses=1]
- %storemerge12.us = phi i64 [ 0, %bb.nph.us ], [ %13, %bb1.us ] ; <i64> [#uses=4]
- %scevgep13 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %storemerge6.us, i64 %storemerge12.us ; <double*> [#uses=1]
- %scevgep = getelementptr [4000 x [4000 x double]]* @B, i64 0, i64 %storemerge6.us, i64 %storemerge12.us ; <double*> [#uses=1]
- %scevgep12 = getelementptr [4000 x double]* @x, i64 0, i64 %storemerge12.us ; <double*> [#uses=1]
- %6 = load double* %scevgep13, align 8 ; <double> [#uses=1]
- %7 = load double* %scevgep12, align 8 ; <double> [#uses=2]
- %8 = fmul double %6, %7 ; <double> [#uses=1]
- %9 = fadd double %8, %.tmp.0.us ; <double> [#uses=3]
- %10 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %11 = fmul double %10, %7 ; <double> [#uses=1]
- %12 = fadd double %11, %.tmp3.0.us ; <double> [#uses=2]
- %13 = add nsw i64 %storemerge12.us, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %13, 4000 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb3.us, label %bb1.us
+ %.tmp3.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %12, %bb1.us ]
+ %.tmp.0.us = phi double [ 0.000000e+00, %bb.nph.us ], [ %9, %bb1.us ]
+ %storemerge12.us = phi i64 [ 0, %bb.nph.us ], [ %13, %bb1.us ]
+ %scevgep13 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %storemerge6.us, i64 %storemerge12.us
+ %scevgep = getelementptr [4000 x [4000 x double]]* @B, i64 0, i64 %storemerge6.us, i64 %storemerge12.us
+ %scevgep12 = getelementptr [4000 x double]* @x, i64 0, i64 %storemerge12.us
+ %6 = load double* %scevgep13, align 8
+ %7 = load double* %scevgep12, align 8
+ %8 = fmul double %6, %7
+ %9 = fadd double %8, %.tmp.0.us
+ %10 = load double* %scevgep, align 8
+ %11 = fmul double %10, %7
+ %12 = fadd double %11, %.tmp3.0.us
+ %13 = add nsw i64 %storemerge12.us, 1
+ %exitcond2 = icmp eq i64 %13, 4000
+ br i1 %exitcond2, label %bb3.us, label %bb1.us

bb.nph.us: ; preds = %bb3.us, %bb.nph10.split.us
- %storemerge6.us = phi i64 [ 0, %bb.nph10.split.us ], [ %5, %bb3.us ] ; <i64> [#uses=5]
- %scevgep17 = getelementptr [4000 x double]* @tmp, i64 0, i64 %storemerge6.us ; <double*> [#uses=2]
- %scevgep18 = getelementptr [4000 x double]* @y, i64 0, i64 %storemerge6.us ; <double*> [#uses=2]
+ %storemerge6.us = phi i64 [ 0, %bb.nph10.split.us ], [ %5, %bb3.us ]
+ %scevgep18 = getelementptr [4000 x double]* @y, i64 0, i64 %storemerge6.us
+ %scevgep17 = getelementptr [4000 x double]* @tmp, i64 0, i64 %storemerge6.us
store double 0.000000e+00, double* %scevgep17, align 8
store double 0.000000e+00, double* %scevgep18, align 8
br label %bb1.us
@@ -58,6 +63,4 @@ bb.nph.us: ; preds = %bb3.us, %bb.nph10.s
return: ; preds = %bb3.us
ret void
}
-
; CHECK: Valid Region for Scop: bb.nph.us => return
-
diff --git a/test/polybench/linear-algebra/solvers/gramschmidt/gramschmidt_with_param.ll b/test/polybench/linear-algebra/solvers/gramschmidt/gramschmidt_with_param.ll
index 9d77983..8831505 100644
--- a/test/polybench/linear-algebra/solvers/gramschmidt/gramschmidt_with_param.ll
+++ b/test/polybench/linear-algebra/solvers/gramschmidt/gramschmidt_with_param.ll
@@ -1,7 +1,6 @@
; RUN: opt %loadPolly %defaultOpts -polly-prepare -polly-cloog -analyze %s | FileCheck %s
-; Non affine branch instruction in BB: %bb1
-; Loop %bb46: backedge-taken count is (0 smax %m) not supported
; XFAIL: *
+; ModuleID = './linear-algebra/solvers/gramschmidt/gramschmidt_with_param.ll'
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"

@@ -12,29 +11,29 @@ target triple = "x86_64-pc-linux-gnu"

define void @scop_func(i64 %m, i64 %n) nounwind {
bb:
+ %tmp3 = icmp sgt i64 %m, 0
+ %smax4 = select i1 %tmp3, i64 %m, i64 0
%tmp = icmp sgt i64 %m, 0
%smax = select i1 %tmp, i64 %m, i64 0
- %tmp1 = icmp sgt i64 %m, 0
- %smax2 = select i1 %tmp1, i64 %m, i64 0
- %tmp6 = icmp sgt i64 %m, 0
- %smax7 = select i1 %tmp6, i64 %m, i64 0
- %tmp13 = icmp sgt i64 %m, 0
- %smax14 = select i1 %tmp13, i64 %m, i64 0
- %tmp20 = add i64 %n, -1
- %tmp32 = icmp sgt i64 %n, 0
- %smax33 = select i1 %tmp32, i64 %n, i64 0
+ %tmp12 = icmp sgt i64 %m, 0
+ %smax13 = select i1 %tmp12, i64 %m, i64 0
+ %tmp25 = icmp sgt i64 %m, 0
+ %smax26 = select i1 %tmp25, i64 %m, i64 0
+ %tmp40 = add i64 %n, -1
+ %tmp60 = icmp sgt i64 %n, 0
+ %smax61 = select i1 %tmp60, i64 %n, i64 0
br label %bb1

bb1: ; preds = %bb58, %bb
%tmp2 = phi i64 [ 0, %bb ], [ %tmp59, %bb58 ]
- %tmp35 = mul i64 %tmp2, 513
- %tmp36 = add i64 %tmp35, 1
- %tmp39 = add i64 %tmp2, 1
- %tmp43 = mul i64 %tmp2, -1
- %tmp22 = add i64 %tmp20, %tmp43
- %scevgep50 = getelementptr [512 x [512 x double]]* @R, i64 0, i64 0, i64 %tmp35
- %exitcond34 = icmp ne i64 %tmp2, %smax33
- br i1 %exitcond34, label %bb3, label %bb60
+ %tmp63 = mul i64 %tmp2, 513
+ %tmp64 = add i64 %tmp63, 1
+ %tmp67 = add i64 %tmp2, 1
+ %tmp71 = mul i64 %tmp2, -1
+ %tmp45 = add i64 %tmp40, %tmp71
+ %scevgep50 = getelementptr [512 x [512 x double]]* @R, i64 0, i64 0, i64 %tmp63
+ %exitcond62 = icmp ne i64 %tmp2, %smax61
+ br i1 %exitcond62, label %bb3, label %bb60

bb3: ; preds = %bb1
store double 0.000000e+00, double* @nrm, align 8
@@ -43,8 +42,8 @@ bb3: ; preds = %bb1
bb4: ; preds = %bb12, %bb3
%i.0 = phi i64 [ 0, %bb3 ], [ %tmp14, %bb12 ]
%scevgep = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %i.0, i64 %tmp2
- %exitcond = icmp ne i64 %i.0, %smax
- br i1 %exitcond, label %bb5, label %bb15
+ %exitcond5 = icmp ne i64 %i.0, %smax4
+ br i1 %exitcond5, label %bb5, label %bb15

bb5: ; preds = %bb4
%tmp7 = load double* %scevgep
@@ -69,8 +68,8 @@ bb18: ; preds = %bb25, %bb15
%i.1 = phi i64 [ 0, %bb15 ], [ %tmp26, %bb25 ]
%scevgep5 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %i.1, i64 %tmp2
%scevgep4 = getelementptr [512 x [512 x double]]* @Q, i64 0, i64 %i.1, i64 %tmp2
- %exitcond3 = icmp ne i64 %i.1, %smax2
- br i1 %exitcond3, label %bb19, label %bb27
+ %exitcond = icmp ne i64 %i.1, %smax
+ br i1 %exitcond, label %bb19, label %bb27

bb19: ; preds = %bb18
%tmp21 = load double* %scevgep5
@@ -88,11 +87,11 @@ bb27: ; preds = %bb18

bb28: ; preds = %bb56, %bb27
%indvar = phi i64 [ %indvar.next, %bb56 ], [ 0, %bb27 ]
- %tmp37 = add i64 %tmp36, %indvar
- %scevgep31 = getelementptr [512 x [512 x double]]* @R, i64 0, i64 0, i64 %tmp37
- %tmp40 = add i64 %tmp39, %indvar
- %exitcond23 = icmp ne i64 %indvar, %tmp22
- br i1 %exitcond23, label %bb29, label %bb57
+ %tmp65 = add i64 %tmp64, %indvar
+ %scevgep31 = getelementptr [512 x [512 x double]]* @R, i64 0, i64 0, i64 %tmp65
+ %tmp68 = add i64 %tmp67, %indvar
+ %exitcond46 = icmp ne i64 %indvar, %tmp45
+ br i1 %exitcond46, label %bb29, label %bb57

bb29: ; preds = %bb28
store double 0.000000e+00, double* %scevgep31
@@ -100,10 +99,10 @@ bb29: ; preds = %bb28

bb30: ; preds = %bb43, %bb29
%i.2 = phi i64 [ 0, %bb29 ], [ %tmp44, %bb43 ]
- %scevgep11 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %i.2, i64 %tmp40
+ %scevgep11 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %i.2, i64 %tmp68
%scevgep12 = getelementptr [512 x [512 x double]]* @Q, i64 0, i64 %i.2, i64 %tmp2
- %exitcond8 = icmp ne i64 %i.2, %smax7
- br i1 %exitcond8, label %bb31, label %bb45
+ %exitcond14 = icmp ne i64 %i.2, %smax13
+ br i1 %exitcond14, label %bb31, label %bb45

bb31: ; preds = %bb30
%tmp33 = load double* %scevgep12
@@ -123,10 +122,10 @@ bb45: ; preds = %bb30

bb46: ; preds = %bb53, %bb45
%i.3 = phi i64 [ 0, %bb45 ], [ %tmp54, %bb53 ]
- %scevgep18 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %i.3, i64 %tmp40
+ %scevgep18 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %i.3, i64 %tmp68
%scevgep19 = getelementptr [512 x [512 x double]]* @Q, i64 0, i64 %i.3, i64 %tmp2
- %exitcond15 = icmp ne i64 %i.3, %smax14
- br i1 %exitcond15, label %bb47, label %bb55
+ %exitcond27 = icmp ne i64 %i.3, %smax26
+ br i1 %exitcond27, label %bb47, label %bb55

bb47: ; preds = %bb46
%tmp48 = load double* %scevgep18
diff --git a/test/polybench/linear-algebra/solvers/gramschmidt/gramschmidt_without_param.ll b/test/polybench/linear-algebra/solvers/gramschmidt/gramschmidt_without_param.ll
index 52b26e7..84d1079 100644
--- a/test/polybench/linear-algebra/solvers/gramschmidt/gramschmidt_without_param.ll
+++ b/test/polybench/linear-algebra/solvers/gramschmidt/gramschmidt_without_param.ll
@@ -1,5 +1,5 @@
; RUN: opt %loadPolly %defaultOpts -polly-prepare -polly-cloog -analyze %s | FileCheck %s
-; ModuleID = 'gramschmidt_without_param.ll'
+; ModuleID = './linear-algebra/solvers/gramschmidt/gramschmidt_without_param.ll'
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"

@@ -14,14 +14,14 @@ bb:

bb1: ; preds = %bb51, %bb
%tmp2 = phi i64 [ 0, %bb ], [ %tmp52, %bb51 ]
- %tmp = mul i64 %tmp2, 513
- %tmp25 = add i64 %tmp, 1
- %tmp28 = add i64 %tmp2, 1
- %tmp32 = mul i64 %tmp2, -1
- %tmp14 = add i64 %tmp32, 511
- %scevgep39 = getelementptr [512 x [512 x double]]* @R, i64 0, i64 0, i64 %tmp
- %exitcond24 = icmp ne i64 %tmp2, 512
- br i1 %exitcond24, label %bb3, label %bb53
+ %tmp49 = mul i64 %tmp2, 513
+ %tmp50 = add i64 %tmp49, 1
+ %tmp53 = add i64 %tmp2, 1
+ %tmp57 = mul i64 %tmp2, -1
+ %tmp28 = add i64 %tmp57, 511
+ %scevgep39 = getelementptr [512 x [512 x double]]* @R, i64 0, i64 0, i64 %tmp49
+ %exitcond48 = icmp ne i64 %tmp2, 512
+ br i1 %exitcond48, label %bb3, label %bb53

bb3: ; preds = %bb1
store double 0.000000e+00, double* @nrm, align 8
@@ -30,8 +30,8 @@ bb3: ; preds = %bb1
bb4: ; preds = %bb11, %bb3
%i.0 = phi i64 [ 0, %bb3 ], [ %tmp12, %bb11 ]
%scevgep = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %i.0, i64 %tmp2
- %exitcond = icmp ne i64 %i.0, 512
- br i1 %exitcond, label %bb5, label %bb13
+ %exitcond2 = icmp ne i64 %i.0, 512
+ br i1 %exitcond2, label %bb5, label %bb13

bb5: ; preds = %bb4
%tmp6 = load double* %scevgep
@@ -56,8 +56,8 @@ bb17: ; preds = %bb22, %bb13
%i.1 = phi i64 [ 0, %bb13 ], [ %tmp23, %bb22 ]
%scevgep3 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %i.1, i64 %tmp2
%scevgep2 = getelementptr [512 x [512 x double]]* @Q, i64 0, i64 %i.1, i64 %tmp2
- %exitcond1 = icmp ne i64 %i.1, 512
- br i1 %exitcond1, label %bb18, label %bb24
+ %exitcond = icmp ne i64 %i.1, 512
+ br i1 %exitcond, label %bb18, label %bb24

bb18: ; preds = %bb17
%tmp19 = load double* %scevgep3
@@ -75,11 +75,11 @@ bb24: ; preds = %bb17

bb25: ; preds = %bb49, %bb24
%indvar = phi i64 [ %indvar.next, %bb49 ], [ 0, %bb24 ]
- %tmp26 = add i64 %tmp25, %indvar
- %scevgep23 = getelementptr [512 x [512 x double]]* @R, i64 0, i64 0, i64 %tmp26
- %tmp29 = add i64 %tmp28, %indvar
- %exitcond15 = icmp ne i64 %indvar, %tmp14
- br i1 %exitcond15, label %bb26, label %bb50
+ %tmp51 = add i64 %tmp50, %indvar
+ %scevgep23 = getelementptr [512 x [512 x double]]* @R, i64 0, i64 0, i64 %tmp51
+ %tmp54 = add i64 %tmp53, %indvar
+ %exitcond29 = icmp ne i64 %indvar, %tmp28
+ br i1 %exitcond29, label %bb26, label %bb50

bb26: ; preds = %bb25
store double 0.000000e+00, double* %scevgep23
@@ -87,10 +87,10 @@ bb26: ; preds = %bb25

bb27: ; preds = %bb36, %bb26
%i.2 = phi i64 [ 0, %bb26 ], [ %tmp37, %bb36 ]
- %scevgep6 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %i.2, i64 %tmp29
+ %scevgep6 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %i.2, i64 %tmp54
%scevgep7 = getelementptr [512 x [512 x double]]* @Q, i64 0, i64 %i.2, i64 %tmp2
- %exitcond4 = icmp ne i64 %i.2, 512
- br i1 %exitcond4, label %bb28, label %bb38
+ %exitcond9 = icmp ne i64 %i.2, 512
+ br i1 %exitcond9, label %bb28, label %bb38

bb28: ; preds = %bb27
%tmp30 = load double* %scevgep7
@@ -110,10 +110,10 @@ bb38: ; preds = %bb27

bb39: ; preds = %bb46, %bb38
%i.3 = phi i64 [ 0, %bb38 ], [ %tmp47, %bb46 ]
- %scevgep11 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %i.3, i64 %tmp29
+ %scevgep11 = getelementptr [512 x [512 x double]]* @A, i64 0, i64 %i.3, i64 %tmp54
%scevgep12 = getelementptr [512 x [512 x double]]* @Q, i64 0, i64 %i.3, i64 %tmp2
- %exitcond8 = icmp ne i64 %i.3, 512
- br i1 %exitcond8, label %bb40, label %bb48
+ %exitcond16 = icmp ne i64 %i.3, 512
+ br i1 %exitcond16, label %bb40, label %bb48

bb40: ; preds = %bb39
%tmp41 = load double* %scevgep11
@@ -159,6 +159,4 @@ bb:
declare void @init_array(...)

declare void @print_array(i32, i8**)
-
; CHECK: for region: 'bb1 => bb53' in function 'scop_func':
-
diff --git a/test/polybench/linear-algebra/solvers/lu/lu_with_param.ll b/test/polybench/linear-algebra/solvers/lu/lu_with_param.ll
index 307bcd6..fa9e616 100644
--- a/test/polybench/linear-algebra/solvers/lu/lu_with_param.ll
+++ b/test/polybench/linear-algebra/solvers/lu/lu_with_param.ll
@@ -1,77 +1,94 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; RUN: opt %loadPolly %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/solvers/lu/lu_with_param.ll'
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 [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=14]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@A = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func(i64 %n) nounwind {
entry:
- %0 = icmp sgt i64 %n, 0 ; <i1> [#uses=1]
+ %0 = icmp sgt i64 %n, 0
br i1 %0, label %bb.nph28, label %return

-bb1: ; preds = %bb2.preheader, %bb1
- %indvar = phi i64 [ %indvar.next, %bb1 ], [ 0, %bb2.preheader ] ; <i64> [#uses=2]
- %tmp66 = add i64 %tmp60, %indvar ; <i64> [#uses=1]
- %scevgep = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 0, i64 %tmp66 ; <double*> [#uses=2]
- %1 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %2 = load double* %scevgep69, align 8 ; <double> [#uses=1]
- %3 = fdiv double %1, %2 ; <double> [#uses=1]
+bb1: ; preds = %bb1.preheader, %bb1
+ %indvar = phi i64 [ %indvar.next, %bb1 ], [ 0, %bb1.preheader ]
+ %tmp27 = add i64 %tmp26, %indvar
+ %scevgep = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 0, i64 %tmp27
+ %1 = load double* %scevgep, align 8
+ %2 = load double* %scevgep69, align 8
+ %3 = fdiv double %1, %2
store double %3, double* %scevgep, align 8
- %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %indvar.next, %tmp30 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb8.loopexit, label %bb1
+ %indvar.next = add i64 %indvar, 1
+ %exitcond20 = icmp eq i64 %indvar.next, %tmp1
+ br i1 %exitcond20, label %bb8.loopexit, label %bb1

bb5: ; preds = %bb6.preheader, %bb5
- %indvar34 = phi i64 [ %indvar.next35, %bb5 ], [ 0, %bb6.preheader ] ; <i64> [#uses=2]
- %tmp61 = add i64 %tmp60, %indvar34 ; <i64> [#uses=2]
- %scevgep45 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp57, i64 %tmp61 ; <double*> [#uses=2]
- %scevgep46 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 0, i64 %tmp61 ; <double*> [#uses=1]
- %4 = load double* %scevgep45, align 8 ; <double> [#uses=1]
- %5 = load double* %scevgep55, align 8 ; <double> [#uses=1]
- %6 = load double* %scevgep46, align 8 ; <double> [#uses=1]
- %7 = fmul double %5, %6 ; <double> [#uses=1]
- %8 = fsub double %4, %7 ; <double> [#uses=1]
+ %indvar34 = phi i64 [ %indvar.next35, %bb5 ], [ 0, %bb6.preheader ]
+ %tmp34 = add i64 %tmp26, %indvar34
+ %scevgep45 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp32, i64 %tmp34
+ %scevgep46 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 0, i64 %tmp34
+ %4 = load double* %scevgep45, align 8
+ %5 = load double* %scevgep55, align 8
+ %6 = load double* %scevgep46, align 8
+ %7 = fmul double %5, %6
+ %8 = fsub double %4, %7
store double %8, double* %scevgep45, align 8
- %indvar.next35 = add i64 %indvar34, 1 ; <i64> [#uses=2]
- %exitcond38 = icmp eq i64 %indvar.next35, %tmp30 ; <i1> [#uses=1]
- br i1 %exitcond38, label %bb8.loopexit4, label %bb5
+ %indvar.next35 = add i64 %indvar34, 1
+ %exitcond2 = icmp eq i64 %indvar.next35, %tmp1
+ br i1 %exitcond2, label %bb8.loopexit4, label %bb5

bb8.loopexit: ; preds = %bb1
- br i1 %9, label %bb6.preheader, label %bb9
+ br i1 %10, label %bb6.preheader.preheader, label %bb9
+
+bb6.preheader.preheader: ; preds = %bb8.loopexit
+ br label %bb6.preheader

bb8.loopexit4: ; preds = %bb5
- %exitcond49 = icmp eq i64 %tmp57, %tmp30 ; <i1> [#uses=1]
- br i1 %exitcond49, label %bb9, label %bb6.preheader
+ %exitcond11 = icmp eq i64 %tmp57, %tmp1
+ br i1 %exitcond11, label %bb9.loopexit, label %bb6.preheader

-bb6.preheader: ; preds = %bb8.loopexit4, %bb8.loopexit
- %indvar39 = phi i64 [ %tmp57, %bb8.loopexit4 ], [ 0, %bb8.loopexit ] ; <i64> [#uses=1]
- %tmp57 = add i64 %indvar39, 1 ; <i64> [#uses=4]
- %scevgep55 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp57, i64 %tmp58 ; <double*> [#uses=1]
+bb6.preheader: ; preds = %bb6.preheader.preheader, %bb8.loopexit4
+ %indvar39 = phi i64 [ %tmp57, %bb8.loopexit4 ], [ 0, %bb6.preheader.preheader ]
+ %tmp32 = add i64 %indvar39, 1
+ %scevgep55 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp32, i64 %tmp25
+ %tmp57 = add i64 %indvar39, 1
br label %bb5

-bb9: ; preds = %bb2.preheader, %bb8.loopexit4, %bb8.loopexit
- %exitcond56 = icmp eq i64 %storemerge15, %n ; <i1> [#uses=1]
- br i1 %exitcond56, label %return, label %bb2.preheader
+bb9.loopexit: ; preds = %bb8.loopexit4
+ br label %bb9
+
+bb9: ; preds = %bb9.loopexit, %bb2.preheader, %bb8.loopexit
+ %exitcond = icmp eq i64 %9, %n
+ br i1 %exitcond, label %return.loopexit, label %bb2.preheader

bb.nph28: ; preds = %entry
- %tmp29 = add i64 %n, -1 ; <i64> [#uses=1]
+ %tmp29 = add i64 %n, -1
br label %bb2.preheader

bb2.preheader: ; preds = %bb.nph28, %bb9
- %storemerge17 = phi i64 [ 0, %bb.nph28 ], [ %storemerge15, %bb9 ] ; <i64> [#uses=3]
- %tmp58 = mul i64 %storemerge17, 1025 ; <i64> [#uses=3]
- %tmp60 = add i64 %tmp58, 1 ; <i64> [#uses=2]
- %tmp30 = sub i64 %tmp29, %storemerge17 ; <i64> [#uses=3]
- %storemerge15 = add i64 %storemerge17, 1 ; <i64> [#uses=3]
- %scevgep69 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 0, i64 %tmp58 ; <double*> [#uses=1]
- %9 = icmp slt i64 %storemerge15, %n ; <i1> [#uses=2]
- br i1 %9, label %bb1, label %bb9
-
-return: ; preds = %bb9, %entry
+ %storemerge17 = phi i64 [ 0, %bb.nph28 ], [ %9, %bb9 ]
+ %tmp25 = mul i64 %storemerge17, 1025
+ %tmp26 = add i64 %tmp25, 1
+ %tmp30 = mul i64 %storemerge17, -1
+ %tmp1 = add i64 %tmp29, %tmp30
+ %storemerge15 = add i64 %storemerge17, 1
+ %scevgep69 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 0, i64 %tmp25
+ %9 = add i64 %storemerge17, 1
+ %10 = icmp slt i64 %storemerge15, %n
+ br i1 %10, label %bb1.preheader, label %bb9
+
+bb1.preheader: ; preds = %bb2.preheader
+ br label %bb1
+
+return.loopexit: ; preds = %bb9
+ br label %return
+
+return: ; preds = %return.loopexit, %entry
ret void
}
-
; CHECK: Valid Region for Scop: entry.split => return
-
diff --git a/test/polybench/linear-algebra/solvers/lu/lu_without_param.ll b/test/polybench/linear-algebra/solvers/lu/lu_without_param.ll
index 3bdbfaf..29188e6 100644
--- a/test/polybench/linear-algebra/solvers/lu/lu_without_param.ll
+++ b/test/polybench/linear-algebra/solvers/lu/lu_without_param.ll
@@ -1,73 +1,86 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -analyze %s | FileCheck %s
-
+; RUN: opt %loadPolly %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/solvers/lu/lu_without_param.ll'
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 [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=14]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@A = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func() nounwind {
bb.nph28:
br label %bb2.preheader

-bb1: ; preds = %bb2.preheader, %bb1
- %indvar = phi i64 [ %indvar.next, %bb1 ], [ 0, %bb2.preheader ] ; <i64> [#uses=2]
- %tmp65 = add i64 %tmp59, %indvar ; <i64> [#uses=1]
- %scevgep = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 0, i64 %tmp65 ; <double*> [#uses=2]
- %0 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %1 = load double* %scevgep68, align 8 ; <double> [#uses=1]
- %2 = fdiv double %0, %1 ; <double> [#uses=1]
+bb1: ; preds = %bb1.preheader, %bb1
+ %indvar = phi i64 [ %indvar.next, %bb1 ], [ 0, %bb1.preheader ]
+ %tmp27 = add i64 %tmp26, %indvar
+ %scevgep = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 0, i64 %tmp27
+ %0 = load double* %scevgep, align 8
+ %1 = load double* %scevgep68, align 8
+ %2 = fdiv double %0, %1
store double %2, double* %scevgep, align 8
- %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %indvar.next, %tmp29 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb8.loopexit, label %bb1
+ %indvar.next = add i64 %indvar, 1
+ %exitcond20 = icmp eq i64 %indvar.next, %tmp1
+ br i1 %exitcond20, label %bb8.loopexit, label %bb1

bb5: ; preds = %bb6.preheader, %bb5
- %indvar33 = phi i64 [ %indvar.next34, %bb5 ], [ 0, %bb6.preheader ] ; <i64> [#uses=2]
- %tmp60 = add i64 %tmp59, %indvar33 ; <i64> [#uses=2]
- %scevgep44 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp56, i64 %tmp60 ; <double*> [#uses=2]
- %scevgep45 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 0, i64 %tmp60 ; <double*> [#uses=1]
- %3 = load double* %scevgep44, align 8 ; <double> [#uses=1]
- %4 = load double* %scevgep54, align 8 ; <double> [#uses=1]
- %5 = load double* %scevgep45, align 8 ; <double> [#uses=1]
- %6 = fmul double %4, %5 ; <double> [#uses=1]
- %7 = fsub double %3, %6 ; <double> [#uses=1]
+ %indvar33 = phi i64 [ %indvar.next34, %bb5 ], [ 0, %bb6.preheader ]
+ %tmp33 = add i64 %tmp26, %indvar33
+ %scevgep44 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp31, i64 %tmp33
+ %scevgep45 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 0, i64 %tmp33
+ %3 = load double* %scevgep44, align 8
+ %4 = load double* %scevgep54, align 8
+ %5 = load double* %scevgep45, align 8
+ %6 = fmul double %4, %5
+ %7 = fsub double %3, %6
store double %7, double* %scevgep44, align 8
- %indvar.next34 = add i64 %indvar33, 1 ; <i64> [#uses=2]
- %exitcond37 = icmp eq i64 %indvar.next34, %tmp29 ; <i1> [#uses=1]
- br i1 %exitcond37, label %bb8.loopexit4, label %bb5
+ %indvar.next34 = add i64 %indvar33, 1
+ %exitcond2 = icmp eq i64 %indvar.next34, %tmp1
+ br i1 %exitcond2, label %bb8.loopexit4, label %bb5

bb8.loopexit: ; preds = %bb1
- br i1 %8, label %bb6.preheader, label %bb9
+ br i1 %9, label %bb6.preheader.preheader, label %bb9
+
+bb6.preheader.preheader: ; preds = %bb8.loopexit
+ br label %bb6.preheader

bb8.loopexit4: ; preds = %bb5
- %exitcond48 = icmp eq i64 %tmp56, %tmp29 ; <i1> [#uses=1]
- br i1 %exitcond48, label %bb9, label %bb6.preheader
+ %exitcond11 = icmp eq i64 %tmp56, %tmp1
+ br i1 %exitcond11, label %bb9.loopexit, label %bb6.preheader

-bb6.preheader: ; preds = %bb8.loopexit4, %bb8.loopexit
- %indvar38 = phi i64 [ %tmp56, %bb8.loopexit4 ], [ 0, %bb8.loopexit ] ; <i64> [#uses=1]
- %tmp56 = add i64 %indvar38, 1 ; <i64> [#uses=4]
- %scevgep54 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp56, i64 %tmp57 ; <double*> [#uses=1]
+bb6.preheader: ; preds = %bb6.preheader.preheader, %bb8.loopexit4
+ %indvar38 = phi i64 [ %tmp56, %bb8.loopexit4 ], [ 0, %bb6.preheader.preheader ]
+ %tmp31 = add i64 %indvar38, 1
+ %scevgep54 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp31, i64 %tmp25
+ %tmp56 = add i64 %indvar38, 1
br label %bb5

-bb9: ; preds = %bb2.preheader, %bb8.loopexit4, %bb8.loopexit
- %exitcond55 = icmp eq i64 %storemerge15, 1024 ; <i1> [#uses=1]
- br i1 %exitcond55, label %return, label %bb2.preheader
+bb9.loopexit: ; preds = %bb8.loopexit4
+ br label %bb9
+
+bb9: ; preds = %bb9.loopexit, %bb2.preheader, %bb8.loopexit
+ %exitcond = icmp eq i64 %8, 1024
+ br i1 %exitcond, label %return, label %bb2.preheader

bb2.preheader: ; preds = %bb9, %bb.nph28
- %storemerge17 = phi i64 [ 0, %bb.nph28 ], [ %storemerge15, %bb9 ] ; <i64> [#uses=3]
- %tmp57 = mul i64 %storemerge17, 1025 ; <i64> [#uses=3]
- %tmp59 = add i64 %tmp57, 1 ; <i64> [#uses=2]
- %tmp29 = sub i64 1023, %storemerge17 ; <i64> [#uses=3]
- %storemerge15 = add i64 %storemerge17, 1 ; <i64> [#uses=3]
- %scevgep68 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 0, i64 %tmp57 ; <double*> [#uses=1]
- %8 = icmp slt i64 %storemerge15, 1024 ; <i1> [#uses=2]
- br i1 %8, label %bb1, label %bb9
+ %storemerge17 = phi i64 [ 0, %bb.nph28 ], [ %8, %bb9 ]
+ %tmp25 = mul i64 %storemerge17, 1025
+ %tmp26 = add i64 %tmp25, 1
+ %tmp29 = mul i64 %storemerge17, -1
+ %tmp1 = add i64 %tmp29, 1023
+ %storemerge15 = add i64 %storemerge17, 1
+ %scevgep68 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 0, i64 %tmp25
+ %8 = add i64 %storemerge17, 1
+ %9 = icmp slt i64 %storemerge15, 1024
+ br i1 %9, label %bb1.preheader, label %bb9
+
+bb1.preheader: ; preds = %bb2.preheader
+ br label %bb1

return: ; preds = %bb9
ret void
}
-
; CHECK: Valid Region for Scop: bb2.preheader => return
-
diff --git a/test/polybench/linear-algebra/solvers/ludcmp/ludcmp_with_param.ll b/test/polybench/linear-algebra/solvers/ludcmp/ludcmp_with_param.ll
index 412de4f..ef2e03e 100644
--- a/test/polybench/linear-algebra/solvers/ludcmp/ludcmp_with_param.ll
+++ b/test/polybench/linear-algebra/solvers/ludcmp/ludcmp_with_param.ll
@@ -1,254 +1,299 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-analyze-ir -print-top-scop-only -analyze %s | FileCheck %s
+; RUN: opt %loadPolly %defaultOpts -polly-analyze-ir -print-top-scop-only -analyze %s | FileCheck %s
; XFAIL: *
-; Non affine branch instruction
+; ModuleID = './linear-algebra/solvers/ludcmp/ludcmp_with_param.ll'
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 }
-@x = common global [1025 x double] zeroinitializer, align 32 ; <[1025 x double]*> [#uses=7]
-@b = common global [1025 x double] zeroinitializer, align 32 ; <[1025 x double]*> [#uses=4]
-@a = common global [1025 x [1025 x double]] zeroinitializer, align 32 ; <[1025 x [1025 x double]]*> [#uses=17]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@w = common global double 0.000000e+00 ; <double*> [#uses=4]
-@y = common global [1025 x double] zeroinitializer, align 32 ; <[1025 x double]*> [#uses=5]
+
+@x = common global [1025 x double] zeroinitializer, align 32
+@b = common global [1025 x double] zeroinitializer, align 32
+@a = common global [1025 x [1025 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@w = common global double 0.000000e+00
+@y = common global [1025 x double] zeroinitializer, align 32
+
define void @scop_func(i64 %n) nounwind {
entry:
store double 1.000000e+00, double* getelementptr inbounds ([1025 x double]* @b, i64 0, i64 0), align 32
- %0 = icmp sgt i64 %n, 0 ; <i1> [#uses=1]
+ %0 = icmp sgt i64 %n, 0
br i1 %0, label %bb.nph81, label %bb14

bb.nph43: ; preds = %bb5.preheader
- %1 = icmp sgt i64 %storemerge60, 0 ; <i1> [#uses=1]
- %2 = getelementptr inbounds [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge60, i64 %storemerge60 ; <double*> [#uses=2]
- %tmp144 = add i64 %storemerge60, 2 ; <i64> [#uses=2]
- br i1 %1, label %bb.nph43.split.us, label %bb4
+ %1 = icmp sgt i64 %storemerge60, 0
+ br i1 %1, label %bb.nph43.split.us, label %bb4.preheader
+
+bb4.preheader: ; preds = %bb.nph43
+ br label %bb4

bb.nph43.split.us: ; preds = %bb.nph43
- %tmp147 = mul i64 %storemerge60, 1026 ; <i64> [#uses=1]
br label %bb.nph35.us

bb4.us: ; preds = %bb2.us
- %3 = load double* %2, align 8 ; <double> [#uses=1]
- %4 = fdiv double %10, %3 ; <double> [#uses=1]
- store double %4, double* %scevgep148, align 8
- %5 = icmp sgt i64 %storemerge5.us, %n ; <i1> [#uses=1]
- br i1 %5, label %bb11.loopexit, label %bb.nph35.us
+ %.lcssa63 = phi double [ %9, %bb2.us ]
+ %2 = load double* %scevgep110, align 8
+ %3 = fdiv double %.lcssa63, %2
+ store double %3, double* %scevgep148, align 8
+ %4 = icmp sgt i64 %storemerge5.us, %n
+ br i1 %4, label %bb11.loopexit.loopexit1, label %bb.nph35.us

bb2.us: ; preds = %bb.nph35.us, %bb2.us
- %6 = phi double [ %12, %bb.nph35.us ], [ %10, %bb2.us ] ; <double> [#uses=1]
- %storemerge834.us = phi i64 [ 0, %bb.nph35.us ], [ %11, %bb2.us ] ; <i64> [#uses=3]
- %scevgep141 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp142, i64 %storemerge834.us ; <double*> [#uses=1]
- %scevgep136 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge834.us, i64 %storemerge60 ; <double*> [#uses=1]
- %7 = load double* %scevgep141, align 8 ; <double> [#uses=1]
- %8 = load double* %scevgep136, align 8 ; <double> [#uses=1]
- %9 = fmul double %7, %8 ; <double> [#uses=1]
- %10 = fsub double %6, %9 ; <double> [#uses=3]
- %11 = add nsw i64 %storemerge834.us, 1 ; <i64> [#uses=2]
- %exitcond135 = icmp eq i64 %11, %storemerge60 ; <i1> [#uses=1]
- br i1 %exitcond135, label %bb4.us, label %bb2.us
+ %5 = phi double [ %11, %bb.nph35.us ], [ %9, %bb2.us ]
+ %storemerge834.us = phi i64 [ 0, %bb.nph35.us ], [ %10, %bb2.us ]
+ %scevgep141 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp96, i64 %storemerge834.us
+ %scevgep136 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge834.us, i64 %storemerge60
+ %6 = load double* %scevgep141, align 8
+ %7 = load double* %scevgep136, align 8
+ %8 = fmul double %6, %7
+ %9 = fsub double %5, %8
+ %10 = add nsw i64 %storemerge834.us, 1
+ %exitcond64 = icmp eq i64 %10, %storemerge60
+ br i1 %exitcond64, label %bb4.us, label %bb2.us

bb.nph35.us: ; preds = %bb4.us, %bb.nph43.split.us
- %indvar137 = phi i64 [ %tmp146, %bb4.us ], [ 0, %bb.nph43.split.us ] ; <i64> [#uses=3]
- %tmp142 = add i64 %storemerge538, %indvar137 ; <i64> [#uses=1]
- %storemerge5.us = add i64 %tmp144, %indvar137 ; <i64> [#uses=1]
- %tmp146 = add i64 %indvar137, 1 ; <i64> [#uses=2]
- %scevgep148 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp146, i64 %tmp147 ; <double*> [#uses=2]
- %12 = load double* %scevgep148, align 8 ; <double> [#uses=1]
+ %indvar137 = phi i64 [ %tmp146, %bb4.us ], [ 0, %bb.nph43.split.us ]
+ %storemerge5.us = add i64 %tmp, %indvar137
+ %tmp93 = add i64 %indvar137, 1
+ %scevgep148 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp93, i64 %tmp87
+ %tmp96 = add i64 %storemerge538, %indvar137
+ %tmp146 = add i64 %indvar137, 1
+ %11 = load double* %scevgep148, align 8
br label %bb2.us

-bb4: ; preds = %bb4, %bb.nph43
- %indvar152 = phi i64 [ %indvar.next153, %bb4 ], [ 0, %bb.nph43 ] ; <i64> [#uses=3]
- %storemerge62 = phi i64 [ %storemerge62, %bb4 ], [ %storemerge60, %bb.nph43 ] ; <i64> [#uses=3]
- %tmp155 = add i64 %storemerge538, %indvar152 ; <i64> [#uses=1]
- %storemerge5 = add i64 %tmp144, %indvar152 ; <i64> [#uses=1]
- %scevgep157 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp155, i64 %storemerge62 ; <double*> [#uses=2]
- %13 = load double* %scevgep157, align 8 ; <double> [#uses=2]
- %14 = load double* %2, align 8 ; <double> [#uses=1]
- %15 = fdiv double %13, %14 ; <double> [#uses=1]
- store double %15, double* %scevgep157, align 8
- %16 = icmp sgt i64 %storemerge5, %n ; <i1> [#uses=1]
- %indvar.next153 = add i64 %indvar152, 1 ; <i64> [#uses=1]
- br i1 %16, label %bb11.loopexit, label %bb4
+bb4: ; preds = %bb4.preheader, %bb4
+ %indvar152 = phi i64 [ %indvar.next153, %bb4 ], [ 0, %bb4.preheader ]
+ %tmp99 = add i64 %indvar152, 1
+ %scevgep157 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp99, i64 %tmp87
+ %storemerge5 = add i64 %tmp, %indvar152
+ %12 = load double* %scevgep157, align 8
+ %13 = load double* %scevgep110, align 8
+ %14 = fdiv double %12, %13
+ store double %14, double* %scevgep157, align 8
+ %15 = icmp sgt i64 %storemerge5, %n
+ %indvar.next153 = add i64 %indvar152, 1
+ br i1 %15, label %bb11.loopexit.loopexit, label %bb4

bb.nph56: ; preds = %bb11.loopexit
- %17 = icmp slt i64 %storemerge72, 0 ; <i1> [#uses=1]
- %tmp = add i64 %storemerge72, 2 ; <i64> [#uses=2]
- %tmp125 = mul i64 %storemerge72, 1026 ; <i64> [#uses=1]
- %tmp126182 = or i64 %tmp125, 1 ; <i64> [#uses=2]
- br i1 %17, label %bb10.us, label %bb.nph47
-
-bb10.us: ; preds = %bb10.us, %bb.nph56
- %indvar122 = phi i64 [ %indvar.next123, %bb10.us ], [ 0, %bb.nph56 ] ; <i64> [#uses=4]
- %storemerge6.us = add i64 %tmp, %indvar122 ; <i64> [#uses=1]
- %tmp127 = add i64 %tmp126182, %indvar122 ; <i64> [#uses=1]
- %scevgep128 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 1, i64 %tmp127 ; <double*> [#uses=1]
- %tmp130 = add i64 %storemerge651, %indvar122 ; <i64> [#uses=1]
- %tmp132 = mul i64 %storemerge651, 1025 ; <i64> [#uses=1]
- %scevgep131.sum = add i64 %tmp130, %tmp132 ; <i64> [#uses=1]
- %scevgep133 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 0, i64 %scevgep131.sum ; <double*> [#uses=1]
- %18 = load double* %scevgep133, align 8 ; <double> [#uses=2]
- store double %18, double* %scevgep128, align 8
- %19 = icmp sgt i64 %storemerge6.us, %n ; <i1> [#uses=1]
- %indvar.next123 = add i64 %indvar122, 1 ; <i64> [#uses=1]
- br i1 %19, label %bb13.loopexit, label %bb10.us
-
-bb.nph47: ; preds = %bb10, %bb.nph56
- %indvar162 = phi i64 [ %indvar.next163, %bb10 ], [ 0, %bb.nph56 ] ; <i64> [#uses=4]
- %tmp170 = add i64 %storemerge651, %indvar162 ; <i64> [#uses=2]
- %storemerge6 = add i64 %tmp, %indvar162 ; <i64> [#uses=1]
- %tmp176 = add i64 %tmp126182, %indvar162 ; <i64> [#uses=1]
- %scevgep177 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 1, i64 %tmp176 ; <double*> [#uses=1]
- %tmp179 = mul i64 %storemerge651, 1025 ; <i64> [#uses=1]
- %scevgep178.sum = add i64 %tmp170, %tmp179 ; <i64> [#uses=1]
- %scevgep180 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 0, i64 %scevgep178.sum ; <double*> [#uses=1]
- %20 = load double* %scevgep180, align 8 ; <double> [#uses=1]
+ br i1 false, label %bb10.us.preheader, label %bb.nph47.preheader
+
+bb10.us.preheader: ; preds = %bb.nph56
+ br label %bb10.us
+
+bb.nph47.preheader: ; preds = %bb.nph56
+ br label %bb.nph47
+
+bb10.us: ; preds = %bb10.us.preheader, %bb10.us
+ %indvar122 = phi i64 [ %indvar.next123, %bb10.us ], [ 0, %bb10.us.preheader ]
+ %storemerge6.us = add i64 %tmp, %indvar122
+ %tmp89 = add i64 %tmp88, %indvar122
+ %scevgep128 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 1, i64 %tmp89
+ %16 = load double* %scevgep128, align 8
+ store double %16, double* %scevgep128, align 8
+ %17 = icmp sgt i64 %storemerge6.us, %n
+ %indvar.next123 = add i64 %indvar122, 1
+ br i1 %17, label %bb13.loopexit.loopexit2, label %bb10.us
+
+bb.nph47: ; preds = %bb.nph47.preheader, %bb10
+ %indvar162 = phi i64 [ %indvar.next163, %bb10 ], [ 0, %bb.nph47.preheader ]
+ %storemerge6 = add i64 %tmp, %indvar162
+ %tmp104 = add i64 %tmp88, %indvar162
+ %scevgep180 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 1, i64 %tmp104
+ %tmp107 = add i64 %storemerge538, %indvar162
+ %18 = load double* %scevgep180, align 8
br label %bb8

bb8: ; preds = %bb8, %bb.nph47
- %w.tmp.048 = phi double [ %20, %bb.nph47 ], [ %24, %bb8 ] ; <double> [#uses=1]
- %storemerge746 = phi i64 [ 0, %bb.nph47 ], [ %25, %bb8 ] ; <i64> [#uses=3]
- %scevgep166 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge746, i64 %tmp170 ; <double*> [#uses=1]
- %scevgep167 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge651, i64 %storemerge746 ; <double*> [#uses=1]
- %21 = load double* %scevgep167, align 8 ; <double> [#uses=1]
- %22 = load double* %scevgep166, align 8 ; <double> [#uses=1]
- %23 = fmul double %21, %22 ; <double> [#uses=1]
- %24 = fsub double %w.tmp.048, %23 ; <double> [#uses=3]
- %25 = add nsw i64 %storemerge746, 1 ; <i64> [#uses=2]
- %26 = icmp sgt i64 %25, %storemerge72 ; <i1> [#uses=1]
- br i1 %26, label %bb10, label %bb8
+ %w.tmp.048 = phi double [ %18, %bb.nph47 ], [ %22, %bb8 ]
+ %storemerge746 = phi i64 [ 0, %bb.nph47 ], [ %23, %bb8 ]
+ %scevgep166 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge746, i64 %tmp107
+ %scevgep167 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge538, i64 %storemerge746
+ %19 = load double* %scevgep167, align 8
+ %20 = load double* %scevgep166, align 8
+ %21 = fmul double %19, %20
+ %22 = fsub double %w.tmp.048, %21
+ %23 = add nsw i64 %storemerge746, 1
+ %exitcond = icmp eq i64 %23, %smax
+ br i1 %exitcond, label %bb10, label %bb8

bb10: ; preds = %bb8
- store double %24, double* %scevgep177, align 8
- %27 = icmp sgt i64 %storemerge6, %n ; <i1> [#uses=1]
- %indvar.next163 = add i64 %indvar162, 1 ; <i64> [#uses=1]
- br i1 %27, label %bb13.loopexit, label %bb.nph47
-
-bb11.loopexit: ; preds = %bb5.preheader, %bb4, %bb4.us
- %w.tmp.082 = phi double [ %w.tmp.1, %bb5.preheader ], [ %10, %bb4.us ], [ %13, %bb4 ] ; <double> [#uses=1]
- %storemerge72 = phi i64 [ %storemerge60, %bb5.preheader ], [ %storemerge60, %bb4.us ], [ %storemerge62, %bb4 ] ; <i64> [#uses=5]
- %storemerge651 = add i64 %storemerge72, 1 ; <i64> [#uses=8]
- %28 = icmp sgt i64 %storemerge651, %n ; <i1> [#uses=1]
- br i1 %28, label %bb13.loopexit, label %bb.nph56
-
-bb13.loopexit: ; preds = %bb11.loopexit, %bb10, %bb10.us
- %w.tmp.2 = phi double [ %w.tmp.082, %bb11.loopexit ], [ %18, %bb10.us ], [ %24, %bb10 ] ; <double> [#uses=2]
- %29 = icmp slt i64 %storemerge651, %n ; <i1> [#uses=1]
- br i1 %29, label %bb5.preheader, label %bb13.bb14_crit_edge
+ %.lcssa40 = phi double [ %22, %bb8 ]
+ store double %.lcssa40, double* %scevgep180, align 8
+ %24 = icmp sgt i64 %storemerge6, %n
+ %indvar.next163 = add i64 %indvar162, 1
+ br i1 %24, label %bb13.loopexit.loopexit, label %bb.nph47
+
+bb11.loopexit.loopexit: ; preds = %bb4
+ %.lcssa57 = phi double [ %12, %bb4 ]
+ br label %bb11.loopexit
+
+bb11.loopexit.loopexit1: ; preds = %bb4.us
+ %.lcssa63.lcssa = phi double [ %.lcssa63, %bb4.us ]
+ br label %bb11.loopexit
+
+bb11.loopexit: ; preds = %bb11.loopexit.loopexit1, %bb11.loopexit.loopexit, %bb5.preheader
+ %w.tmp.082 = phi double [ %w.tmp.1, %bb5.preheader ], [ %.lcssa57, %bb11.loopexit.loopexit ], [ %.lcssa63.lcssa, %bb11.loopexit.loopexit1 ]
+ %25 = icmp sgt i64 %storemerge538, %n
+ br i1 %25, label %bb13.loopexit, label %bb.nph56
+
+bb13.loopexit.loopexit: ; preds = %bb10
+ %.lcssa40.lcssa = phi double [ %.lcssa40, %bb10 ]
+ br label %bb13.loopexit
+
+bb13.loopexit.loopexit2: ; preds = %bb10.us
+ %.lcssa77 = phi double [ %16, %bb10.us ]
+ br label %bb13.loopexit
+
+bb13.loopexit: ; preds = %bb13.loopexit.loopexit2, %bb13.loopexit.loopexit, %bb11.loopexit
+ %w.tmp.2 = phi double [ %w.tmp.082, %bb11.loopexit ], [ %.lcssa40.lcssa, %bb13.loopexit.loopexit ], [ %.lcssa77, %bb13.loopexit.loopexit2 ]
+ %indvar.next42 = add i64 %storemerge60, 1
+ %exitcond84 = icmp ne i64 %indvar.next42, %n
+ br i1 %exitcond84, label %bb5.preheader, label %bb13.bb14_crit_edge

bb13.bb14_crit_edge: ; preds = %bb13.loopexit
- store double %w.tmp.2, double* @w
+ %w.tmp.2.lcssa = phi double [ %w.tmp.2, %bb13.loopexit ]
+ store double %w.tmp.2.lcssa, double* @w
br label %bb14

bb.nph81: ; preds = %entry
- %w.promoted = load double* @w ; <double> [#uses=1]
+ %w.promoted = load double* @w
br label %bb5.preheader

bb5.preheader: ; preds = %bb.nph81, %bb13.loopexit
- %w.tmp.1 = phi double [ %w.promoted, %bb.nph81 ], [ %w.tmp.2, %bb13.loopexit ] ; <double> [#uses=1]
- %storemerge60 = phi i64 [ 0, %bb.nph81 ], [ %storemerge651, %bb13.loopexit ] ; <i64> [#uses=11]
- %storemerge538 = add i64 %storemerge60, 1 ; <i64> [#uses=3]
- %30 = icmp sgt i64 %storemerge538, %n ; <i1> [#uses=1]
- br i1 %30, label %bb11.loopexit, label %bb.nph43
+ %storemerge60 = phi i64 [ 0, %bb.nph81 ], [ %indvar.next42, %bb13.loopexit ]
+ %w.tmp.1 = phi double [ %w.promoted, %bb.nph81 ], [ %w.tmp.2, %bb13.loopexit ]
+ %tmp = add i64 %storemerge60, 2
+ %tmp87 = mul i64 %storemerge60, 1026
+ %tmp88 = add i64 %tmp87, 1
+ %storemerge538 = add i64 %storemerge60, 1
+ %scevgep110 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 0, i64 %tmp87
+ %tmp44 = icmp sgt i64 %storemerge538, 1
+ %smax = select i1 %tmp44, i64 %storemerge538, i64 1
+ %26 = icmp sgt i64 %storemerge538, %n
+ br i1 %26, label %bb11.loopexit, label %bb.nph43

bb14: ; preds = %bb13.bb14_crit_edge, %entry
store double 1.000000e+00, double* getelementptr inbounds ([1025 x double]* @y, i64 0, i64 0), align 32
- %31 = icmp slt i64 %n, 1 ; <i1> [#uses=1]
- br i1 %31, label %bb20, label %bb15
-
-bb15: ; preds = %bb18, %bb14
- %indvar111 = phi i64 [ %storemerge126, %bb18 ], [ 0, %bb14 ] ; <i64> [#uses=2]
- %storemerge126 = add i64 %indvar111, 1 ; <i64> [#uses=6]
- %tmp117 = add i64 %indvar111, 2 ; <i64> [#uses=1]
- %scevgep118 = getelementptr [1025 x double]* @y, i64 0, i64 %storemerge126 ; <double*> [#uses=1]
- %scevgep119 = getelementptr [1025 x double]* @b, i64 0, i64 %storemerge126 ; <double*> [#uses=1]
- %32 = load double* %scevgep119, align 8 ; <double> [#uses=2]
- %33 = icmp sgt i64 %storemerge126, 0 ; <i1> [#uses=1]
- br i1 %33, label %bb16, label %bb18
-
-bb16: ; preds = %bb16, %bb15
- %34 = phi double [ %32, %bb15 ], [ %38, %bb16 ] ; <double> [#uses=1]
- %storemerge423 = phi i64 [ 0, %bb15 ], [ %39, %bb16 ] ; <i64> [#uses=3]
- %scevgep114 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge126, i64 %storemerge423 ; <double*> [#uses=1]
- %scevgep113 = getelementptr [1025 x double]* @y, i64 0, i64 %storemerge423 ; <double*> [#uses=1]
- %35 = load double* %scevgep114, align 8 ; <double> [#uses=1]
- %36 = load double* %scevgep113, align 8 ; <double> [#uses=1]
- %37 = fmul double %35, %36 ; <double> [#uses=1]
- %38 = fsub double %34, %37 ; <double> [#uses=2]
- %39 = add nsw i64 %storemerge423, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %39, %storemerge126 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb18, label %bb16
-
-bb18: ; preds = %bb16, %bb15
- %w.tmp.032 = phi double [ %32, %bb15 ], [ %38, %bb16 ] ; <double> [#uses=2]
+ %27 = icmp slt i64 %n, 1
+ br i1 %27, label %bb20, label %bb15.preheader
+
+bb15.preheader: ; preds = %bb14
+ br label %bb15
+
+bb15: ; preds = %bb15.preheader, %bb18
+ %indvar111 = phi i64 [ %28, %bb18 ], [ 0, %bb15.preheader ]
+ %storemerge126 = add i64 %indvar111, 1
+ %tmp117 = add i64 %indvar111, 2
+ %scevgep119 = getelementptr [1025 x double]* @b, i64 0, i64 %storemerge126
+ %scevgep118 = getelementptr [1025 x double]* @y, i64 0, i64 %storemerge126
+ %28 = add i64 %indvar111, 1
+ %29 = load double* %scevgep119, align 8
+ %30 = icmp sgt i64 %storemerge126, 0
+ br i1 %30, label %bb16.preheader, label %bb18
+
+bb16.preheader: ; preds = %bb15
+ br label %bb16
+
+bb16: ; preds = %bb16.preheader, %bb16
+ %31 = phi double [ %35, %bb16 ], [ %29, %bb16.preheader ]
+ %storemerge423 = phi i64 [ %36, %bb16 ], [ 0, %bb16.preheader ]
+ %scevgep114 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge126, i64 %storemerge423
+ %scevgep113 = getelementptr [1025 x double]* @y, i64 0, i64 %storemerge423
+ %32 = load double* %scevgep114, align 8
+ %33 = load double* %scevgep113, align 8
+ %34 = fmul double %32, %33
+ %35 = fsub double %31, %34
+ %36 = add nsw i64 %storemerge423, 1
+ %exitcond4 = icmp eq i64 %36, %storemerge126
+ br i1 %exitcond4, label %bb18.loopexit, label %bb16
+
+bb18.loopexit: ; preds = %bb16
+ %.lcssa = phi double [ %35, %bb16 ]
+ br label %bb18
+
+bb18: ; preds = %bb18.loopexit, %bb15
+ %w.tmp.032 = phi double [ %29, %bb15 ], [ %.lcssa, %bb18.loopexit ]
store double %w.tmp.032, double* %scevgep118, align 8
- %40 = icmp sgt i64 %tmp117, %n ; <i1> [#uses=1]
- br i1 %40, label %bb19.bb20_crit_edge, label %bb15
+ %37 = icmp sgt i64 %tmp117, %n
+ br i1 %37, label %bb19.bb20_crit_edge, label %bb15

bb19.bb20_crit_edge: ; preds = %bb18
- store double %w.tmp.032, double* @w
+ %w.tmp.032.lcssa = phi double [ %w.tmp.032, %bb18 ]
+ store double %w.tmp.032.lcssa, double* @w
br label %bb20

bb20: ; preds = %bb19.bb20_crit_edge, %bb14
- %41 = getelementptr inbounds [1025 x double]* @y, i64 0, i64 %n ; <double*> [#uses=1]
- %42 = load double* %41, align 8 ; <double> [#uses=1]
- %43 = getelementptr inbounds [1025 x [1025 x double]]* @a, i64 0, i64 %n, i64 %n ; <double*> [#uses=1]
- %44 = load double* %43, align 8 ; <double> [#uses=1]
- %45 = fdiv double %42, %44 ; <double> [#uses=1]
- %46 = getelementptr inbounds [1025 x double]* @x, i64 0, i64 %n ; <double*> [#uses=1]
- store double %45, double* %46, align 8
- %47 = add nsw i64 %n, -1 ; <i64> [#uses=3]
- %48 = icmp slt i64 %47, 0 ; <i1> [#uses=1]
- br i1 %48, label %return, label %bb.nph19
+ %38 = getelementptr inbounds [1025 x double]* @y, i64 0, i64 %n
+ %39 = load double* %38, align 8
+ %40 = getelementptr inbounds [1025 x [1025 x double]]* @a, i64 0, i64 %n, i64 %n
+ %41 = load double* %40, align 8
+ %42 = fdiv double %39, %41
+ %43 = getelementptr inbounds [1025 x double]* @x, i64 0, i64 %n
+ store double %42, double* %43, align 8
+ %44 = add nsw i64 %n, -1
+ %45 = icmp slt i64 %44, 0
+ br i1 %45, label %return, label %bb.nph19

bb.nph19: ; preds = %bb20
- %tmp86 = mul i64 %n, 1026 ; <i64> [#uses=2]
- %tmp90 = add i64 %n, 1 ; <i64> [#uses=1]
- %tmp94 = add i64 %tmp86, -1 ; <i64> [#uses=1]
+ %tmp86 = mul i64 %n, 1026
+ %tmp90 = add i64 %n, 1
+ %tmp94 = add i64 %tmp86, -1
+ %tmp34 = add i64 %n, -1
br label %bb21

bb21: ; preds = %bb24, %bb.nph19
- %storemerge211 = phi i64 [ 0, %bb.nph19 ], [ %tmp109, %bb24 ] ; <i64> [#uses=5]
- %tmp93 = mul i64 %storemerge211, -1026 ; <i64> [#uses=2]
- %tmp95 = add i64 %tmp94, %tmp93 ; <i64> [#uses=1]
- %scevgep96 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 -1, i64 %tmp95 ; <double*> [#uses=1]
- %tmp98 = sub i64 %47, %storemerge211 ; <i64> [#uses=2]
- %scevgep99 = getelementptr [1025 x double]* @x, i64 0, i64 %tmp98 ; <double*> [#uses=1]
- %scevgep100 = getelementptr [1025 x double]* @y, i64 0, i64 %tmp98 ; <double*> [#uses=1]
- %tmp101 = add i64 %tmp86, %tmp93 ; <i64> [#uses=1]
- %tmp104 = sub i64 %tmp90, %storemerge211 ; <i64> [#uses=1]
- %tmp106 = sub i64 %n, %storemerge211 ; <i64> [#uses=2]
- %tmp109 = add i64 %storemerge211, 1 ; <i64> [#uses=2]
- %49 = load double* %scevgep100, align 8 ; <double> [#uses=2]
- %50 = icmp sgt i64 %tmp106, %n ; <i1> [#uses=1]
- br i1 %50, label %bb24, label %bb22
-
-bb22: ; preds = %bb22, %bb21
- %indvar = phi i64 [ %indvar.next, %bb22 ], [ 0, %bb21 ] ; <i64> [#uses=4]
- %w.tmp.0 = phi double [ %54, %bb22 ], [ %49, %bb21 ] ; <double> [#uses=1]
- %tmp102 = add i64 %tmp101, %indvar ; <i64> [#uses=1]
- %scevgep89 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 -1, i64 %tmp102 ; <double*> [#uses=1]
- %tmp107 = add i64 %tmp106, %indvar ; <i64> [#uses=1]
- %scevgep = getelementptr [1025 x double]* @x, i64 0, i64 %tmp107 ; <double*> [#uses=1]
- %51 = load double* %scevgep89, align 8 ; <double> [#uses=1]
- %52 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %53 = fmul double %51, %52 ; <double> [#uses=1]
- %54 = fsub double %w.tmp.0, %53 ; <double> [#uses=2]
- %tmp92 = add i64 %tmp104, %indvar ; <i64> [#uses=1]
- %55 = icmp sgt i64 %tmp92, %n ; <i1> [#uses=1]
- %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1]
- br i1 %55, label %bb24, label %bb22
-
-bb24: ; preds = %bb22, %bb21
- %w.tmp.021 = phi double [ %49, %bb21 ], [ %54, %bb22 ] ; <double> [#uses=2]
- %56 = load double* %scevgep96, align 8 ; <double> [#uses=1]
- %57 = fdiv double %w.tmp.021, %56 ; <double> [#uses=1]
- store double %57, double* %scevgep99, align 8
- %58 = icmp slt i64 %47, %tmp109 ; <i1> [#uses=1]
- br i1 %58, label %bb25.return_crit_edge, label %bb21
+ %storemerge211 = phi i64 [ 0, %bb.nph19 ], [ %46, %bb24 ]
+ %tmp23 = mul i64 %storemerge211, -1026
+ %tmp24 = add i64 %tmp86, %tmp23
+ %tmp27 = mul i64 %storemerge211, -1
+ %tmp106 = add i64 %n, %tmp27
+ %tmp31 = add i64 %tmp90, %tmp27
+ %tmp109 = add i64 %storemerge211, 1
+ %tmp35 = add i64 %tmp34, %tmp27
+ %scevgep100 = getelementptr [1025 x double]* @y, i64 0, i64 %tmp35
+ %scevgep99 = getelementptr [1025 x double]* @x, i64 0, i64 %tmp35
+ %tmp38 = add i64 %tmp94, %tmp23
+ %scevgep96 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 -1, i64 %tmp38
+ %46 = add i64 %storemerge211, 1
+ %47 = load double* %scevgep100, align 8
+ %48 = icmp sgt i64 %tmp106, %n
+ br i1 %48, label %bb24, label %bb22.preheader
+
+bb22.preheader: ; preds = %bb21
+ br label %bb22
+
+bb22: ; preds = %bb22.preheader, %bb22
+ %indvar = phi i64 [ %indvar.next, %bb22 ], [ 0, %bb22.preheader ]
+ %w.tmp.0 = phi double [ %52, %bb22 ], [ %47, %bb22.preheader ]
+ %tmp25 = add i64 %tmp24, %indvar
+ %scevgep89 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 -1, i64 %tmp25
+ %tmp29 = add i64 %tmp106, %indvar
+ %scevgep = getelementptr [1025 x double]* @x, i64 0, i64 %tmp29
+ %tmp92 = add i64 %tmp31, %indvar
+ %49 = load double* %scevgep89, align 8
+ %50 = load double* %scevgep, align 8
+ %51 = fmul double %49, %50
+ %52 = fsub double %w.tmp.0, %51
+ %53 = icmp sgt i64 %tmp92, %n
+ %indvar.next = add i64 %indvar, 1
+ br i1 %53, label %bb24.loopexit, label %bb22
+
+bb24.loopexit: ; preds = %bb22
+ %.lcssa12 = phi double [ %52, %bb22 ]
+ br label %bb24
+
+bb24: ; preds = %bb24.loopexit, %bb21
+ %w.tmp.021 = phi double [ %47, %bb21 ], [ %.lcssa12, %bb24.loopexit ]
+ %54 = load double* %scevgep96, align 8
+ %55 = fdiv double %w.tmp.021, %54
+ store double %55, double* %scevgep99, align 8
+ %56 = icmp slt i64 %44, %tmp109
+ br i1 %56, label %bb25.return_crit_edge, label %bb21

bb25.return_crit_edge: ; preds = %bb24
- store double %w.tmp.021, double* @w
+ %w.tmp.021.lcssa = phi double [ %w.tmp.021, %bb24 ]
+ store double %w.tmp.021.lcssa, double* @w
ret void

return: ; preds = %bb20
diff --git a/test/polybench/linear-algebra/solvers/ludcmp/ludcmp_without_param.ll b/test/polybench/linear-algebra/solvers/ludcmp/ludcmp_without_param.ll
index 990cfca..ab76fea 100644
--- a/test/polybench/linear-algebra/solvers/ludcmp/ludcmp_without_param.ll
+++ b/test/polybench/linear-algebra/solvers/ludcmp/ludcmp_without_param.ll
@@ -1,227 +1,246 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -polly-cloog -analyze %s | FileCheck %s
+; RUN: opt %loadPolly %defaultOpts -polly-detect -polly-cloog -analyze %s | FileCheck %s
+; ModuleID = './linear-algebra/solvers/ludcmp/ludcmp_without_param.ll'
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 }
-@x = common global [1025 x double] zeroinitializer, align 32 ; <[1025 x double]*> [#uses=7]
-@b = common global [1025 x double] zeroinitializer, align 32 ; <[1025 x double]*> [#uses=4]
-@a = common global [1025 x [1025 x double]] zeroinitializer, align 32 ; <[1025 x [1025 x double]]*> [#uses=17]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
-@w = common global double 0.000000e+00 ; <double*> [#uses=4]
-@y = common global [1025 x double] zeroinitializer, align 32 ; <[1025 x double]*> [#uses=5]
+
+@x = common global [1025 x double] zeroinitializer, align 32
+@b = common global [1025 x double] zeroinitializer, align 32
+@a = common global [1025 x [1025 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+@w = common global double 0.000000e+00
+@y = common global [1025 x double] zeroinitializer, align 32
+
define void @scop_func() nounwind {
bb.nph76:
store double 1.000000e+00, double* getelementptr inbounds ([1025 x double]* @b, i64 0, i64 0), align 32
- %w.promoted = load double* @w ; <double> [#uses=1]
+ %w.promoted = load double* @w
br label %bb5.preheader

bb.nph38: ; preds = %bb5.preheader
- %0 = icmp sgt i64 %storemerge55, 0 ; <i1> [#uses=1]
- %1 = getelementptr inbounds [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge55, i64 %storemerge55 ; <double*> [#uses=2]
- %tmp137 = add i64 %storemerge55, 2 ; <i64> [#uses=2]
- br i1 %0, label %bb.nph38.split.us, label %bb4
+ %0 = icmp sgt i64 %storemerge55, 0
+ br i1 %0, label %bb.nph38.split.us, label %bb4.preheader
+
+bb4.preheader: ; preds = %bb.nph38
+ br label %bb4

bb.nph38.split.us: ; preds = %bb.nph38
- %tmp140 = mul i64 %storemerge55, 1026 ; <i64> [#uses=1]
br label %bb.nph30.us

bb4.us: ; preds = %bb2.us
- %2 = load double* %1, align 8 ; <double> [#uses=1]
- %3 = fdiv double %9, %2 ; <double> [#uses=1]
- store double %3, double* %scevgep141, align 8
- %4 = icmp sgt i64 %storemerge5.us, 1024 ; <i1> [#uses=1]
- br i1 %4, label %bb11.loopexit, label %bb.nph30.us
+ %.lcssa62 = phi double [ %7, %bb2.us ]
+ %1 = load double* %scevgep109, align 8
+ %2 = fdiv double %.lcssa62, %1
+ store double %2, double* %scevgep141, align 8
+ %exitcond70 = icmp eq i64 %tmp139, %tmp46
+ br i1 %exitcond70, label %bb11.loopexit.loopexit1, label %bb.nph30.us

bb2.us: ; preds = %bb.nph30.us, %bb2.us
- %5 = phi double [ %11, %bb.nph30.us ], [ %9, %bb2.us ] ; <double> [#uses=1]
- %storemerge829.us = phi i64 [ 0, %bb.nph30.us ], [ %10, %bb2.us ] ; <i64> [#uses=3]
- %scevgep134 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp135, i64 %storemerge829.us ; <double*> [#uses=1]
- %scevgep129 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge829.us, i64 %storemerge55 ; <double*> [#uses=1]
- %6 = load double* %scevgep134, align 8 ; <double> [#uses=1]
- %7 = load double* %scevgep129, align 8 ; <double> [#uses=1]
- %8 = fmul double %6, %7 ; <double> [#uses=1]
- %9 = fsub double %5, %8 ; <double> [#uses=3]
- %10 = add nsw i64 %storemerge829.us, 1 ; <i64> [#uses=2]
- %exitcond128 = icmp eq i64 %10, %storemerge55 ; <i1> [#uses=1]
- br i1 %exitcond128, label %bb4.us, label %bb2.us
+ %3 = phi double [ %9, %bb.nph30.us ], [ %7, %bb2.us ]
+ %storemerge829.us = phi i64 [ 0, %bb.nph30.us ], [ %8, %bb2.us ]
+ %scevgep134 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp95, i64 %storemerge829.us
+ %scevgep129 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge829.us, i64 %storemerge55
+ %4 = load double* %scevgep134, align 8
+ %5 = load double* %scevgep129, align 8
+ %6 = fmul double %4, %5
+ %7 = fsub double %3, %6
+ %8 = add nsw i64 %storemerge829.us, 1
+ %exitcond63 = icmp eq i64 %8, %storemerge55
+ br i1 %exitcond63, label %bb4.us, label %bb2.us

bb.nph30.us: ; preds = %bb4.us, %bb.nph38.split.us
- %indvar130 = phi i64 [ %tmp139, %bb4.us ], [ 0, %bb.nph38.split.us ] ; <i64> [#uses=3]
- %tmp135 = add i64 %storemerge533, %indvar130 ; <i64> [#uses=1]
- %storemerge5.us = add i64 %tmp137, %indvar130 ; <i64> [#uses=1]
- %tmp139 = add i64 %indvar130, 1 ; <i64> [#uses=2]
- %scevgep141 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp139, i64 %tmp140 ; <double*> [#uses=2]
- %11 = load double* %scevgep141, align 8 ; <double> [#uses=1]
+ %indvar130 = phi i64 [ %tmp139, %bb4.us ], [ 0, %bb.nph38.split.us ]
+ %tmp92 = add i64 %indvar130, 1
+ %scevgep141 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp92, i64 %tmp86
+ %tmp95 = add i64 %storemerge533, %indvar130
+ %tmp139 = add i64 %indvar130, 1
+ %9 = load double* %scevgep141, align 8
br label %bb2.us

-bb4: ; preds = %bb4, %bb.nph38
- %indvar145 = phi i64 [ %indvar.next146, %bb4 ], [ 0, %bb.nph38 ] ; <i64> [#uses=3]
- %storemerge57 = phi i64 [ %storemerge57, %bb4 ], [ %storemerge55, %bb.nph38 ] ; <i64> [#uses=3]
- %tmp148 = add i64 %storemerge533, %indvar145 ; <i64> [#uses=1]
- %storemerge5 = add i64 %tmp137, %indvar145 ; <i64> [#uses=1]
- %scevgep150 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp148, i64 %storemerge57 ; <double*> [#uses=2]
- %12 = load double* %scevgep150, align 8 ; <double> [#uses=2]
- %13 = load double* %1, align 8 ; <double> [#uses=1]
- %14 = fdiv double %12, %13 ; <double> [#uses=1]
- store double %14, double* %scevgep150, align 8
- %15 = icmp sgt i64 %storemerge5, 1024 ; <i1> [#uses=1]
- %indvar.next146 = add i64 %indvar145, 1 ; <i64> [#uses=1]
- br i1 %15, label %bb11.loopexit, label %bb4
+bb4: ; preds = %bb4.preheader, %bb4
+ %indvar145 = phi i64 [ %indvar.next146, %bb4 ], [ 0, %bb4.preheader ]
+ %tmp99 = add i64 %indvar145, 1
+ %scevgep150 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp99, i64 %tmp86
+ %10 = load double* %scevgep150, align 8
+ %11 = load double* %scevgep109, align 8
+ %12 = fdiv double %10, %11
+ store double %12, double* %scevgep150, align 8
+ %indvar.next146 = add i64 %indvar145, 1
+ %exitcond58 = icmp eq i64 %indvar.next146, %tmp46
+ br i1 %exitcond58, label %bb11.loopexit.loopexit, label %bb4

bb.nph51: ; preds = %bb11.loopexit
- %16 = icmp slt i64 %storemerge67, 0 ; <i1> [#uses=1]
- %tmp116 = add i64 %storemerge67, 2 ; <i64> [#uses=2]
- %tmp118 = mul i64 %storemerge67, 1026 ; <i64> [#uses=1]
- %tmp119175 = or i64 %tmp118, 1 ; <i64> [#uses=2]
- br i1 %16, label %bb10.us, label %bb.nph42
-
-bb10.us: ; preds = %bb10.us, %bb.nph51
- %indvar114 = phi i64 [ %indvar.next115, %bb10.us ], [ 0, %bb.nph51 ] ; <i64> [#uses=4]
- %storemerge6.us = add i64 %tmp116, %indvar114 ; <i64> [#uses=1]
- %tmp120 = add i64 %tmp119175, %indvar114 ; <i64> [#uses=1]
- %scevgep121 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 1, i64 %tmp120 ; <double*> [#uses=1]
- %tmp123 = add i64 %storemerge646, %indvar114 ; <i64> [#uses=1]
- %tmp125 = mul i64 %storemerge646, 1025 ; <i64> [#uses=1]
- %scevgep124.sum = add i64 %tmp123, %tmp125 ; <i64> [#uses=1]
- %scevgep126 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 0, i64 %scevgep124.sum ; <double*> [#uses=1]
- %17 = load double* %scevgep126, align 8 ; <double> [#uses=2]
- store double %17, double* %scevgep121, align 8
- %18 = icmp sgt i64 %storemerge6.us, 1024 ; <i1> [#uses=1]
- %indvar.next115 = add i64 %indvar114, 1 ; <i64> [#uses=1]
- br i1 %18, label %bb13.loopexit, label %bb10.us
-
-bb.nph42: ; preds = %bb10, %bb.nph51
- %indvar155 = phi i64 [ %indvar.next156, %bb10 ], [ 0, %bb.nph51 ] ; <i64> [#uses=4]
- %tmp163 = add i64 %storemerge646, %indvar155 ; <i64> [#uses=2]
- %storemerge6 = add i64 %tmp116, %indvar155 ; <i64> [#uses=1]
- %tmp169 = add i64 %tmp119175, %indvar155 ; <i64> [#uses=1]
- %scevgep170 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 1, i64 %tmp169 ; <double*> [#uses=1]
- %tmp172 = mul i64 %storemerge646, 1025 ; <i64> [#uses=1]
- %scevgep171.sum = add i64 %tmp163, %tmp172 ; <i64> [#uses=1]
- %scevgep173 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 0, i64 %scevgep171.sum ; <double*> [#uses=1]
- %19 = load double* %scevgep173, align 8 ; <double> [#uses=1]
+ br i1 false, label %bb10.us.preheader, label %bb.nph42.preheader
+
+bb10.us.preheader: ; preds = %bb.nph51
+ br label %bb10.us
+
+bb.nph42.preheader: ; preds = %bb.nph51
+ br label %bb.nph42
+
+bb10.us: ; preds = %bb10.us.preheader, %bb10.us
+ %indvar114 = phi i64 [ %indvar.next115, %bb10.us ], [ 0, %bb10.us.preheader ]
+ %tmp88 = add i64 %tmp87, %indvar114
+ %scevgep121 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 1, i64 %tmp88
+ %13 = load double* %scevgep121, align 8
+ store double %13, double* %scevgep121, align 8
+ %indvar.next115 = add i64 %indvar114, 1
+ %exitcond80 = icmp eq i64 %indvar.next115, %tmp46
+ br i1 %exitcond80, label %bb13.loopexit.loopexit2, label %bb10.us
+
+bb.nph42: ; preds = %bb.nph42.preheader, %bb10
+ %indvar155 = phi i64 [ %indvar.next156, %bb10 ], [ 0, %bb.nph42.preheader ]
+ %tmp102 = add i64 %tmp87, %indvar155
+ %scevgep173 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 1, i64 %tmp102
+ %tmp104 = add i64 %storemerge533, %indvar155
+ %14 = load double* %scevgep173, align 8
br label %bb8

bb8: ; preds = %bb8, %bb.nph42
- %w.tmp.043 = phi double [ %19, %bb.nph42 ], [ %23, %bb8 ] ; <double> [#uses=1]
- %storemerge741 = phi i64 [ 0, %bb.nph42 ], [ %24, %bb8 ] ; <i64> [#uses=3]
- %scevgep159 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge741, i64 %tmp163 ; <double*> [#uses=1]
- %scevgep160 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge646, i64 %storemerge741 ; <double*> [#uses=1]
- %20 = load double* %scevgep160, align 8 ; <double> [#uses=1]
- %21 = load double* %scevgep159, align 8 ; <double> [#uses=1]
- %22 = fmul double %20, %21 ; <double> [#uses=1]
- %23 = fsub double %w.tmp.043, %22 ; <double> [#uses=3]
- %24 = add nsw i64 %storemerge741, 1 ; <i64> [#uses=2]
- %25 = icmp sgt i64 %24, %storemerge67 ; <i1> [#uses=1]
- br i1 %25, label %bb10, label %bb8
+ %w.tmp.043 = phi double [ %14, %bb.nph42 ], [ %18, %bb8 ]
+ %storemerge741 = phi i64 [ 0, %bb.nph42 ], [ %19, %bb8 ]
+ %scevgep159 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge741, i64 %tmp104
+ %scevgep160 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %storemerge533, i64 %storemerge741
+ %15 = load double* %scevgep160, align 8
+ %16 = load double* %scevgep159, align 8
+ %17 = fmul double %15, %16
+ %18 = fsub double %w.tmp.043, %17
+ %19 = add nsw i64 %storemerge741, 1
+ %exitcond41 = icmp eq i64 %19, %storemerge533
+ br i1 %exitcond41, label %bb10, label %bb8

bb10: ; preds = %bb8
- store double %23, double* %scevgep170, align 8
- %26 = icmp sgt i64 %storemerge6, 1024 ; <i1> [#uses=1]
- %indvar.next156 = add i64 %indvar155, 1 ; <i64> [#uses=1]
- br i1 %26, label %bb13.loopexit, label %bb.nph42
-
-bb11.loopexit: ; preds = %bb5.preheader, %bb4, %bb4.us
- %w.tmp.077 = phi double [ %w.tmp.1, %bb5.preheader ], [ %9, %bb4.us ], [ %12, %bb4 ] ; <double> [#uses=1]
- %storemerge67 = phi i64 [ %storemerge55, %bb5.preheader ], [ %storemerge55, %bb4.us ], [ %storemerge57, %bb4 ] ; <i64> [#uses=5]
- %storemerge646 = add i64 %storemerge67, 1 ; <i64> [#uses=8]
- %27 = icmp sgt i64 %storemerge646, 1024 ; <i1> [#uses=1]
- br i1 %27, label %bb13.loopexit, label %bb.nph51
-
-bb13.loopexit: ; preds = %bb11.loopexit, %bb10, %bb10.us
- %w.tmp.2 = phi double [ %w.tmp.077, %bb11.loopexit ], [ %17, %bb10.us ], [ %23, %bb10 ] ; <double> [#uses=2]
- %28 = icmp slt i64 %storemerge646, 1024 ; <i1> [#uses=1]
- br i1 %28, label %bb5.preheader, label %bb.nph25
+ %.lcssa37 = phi double [ %18, %bb8 ]
+ store double %.lcssa37, double* %scevgep173, align 8
+ %indvar.next156 = add i64 %indvar155, 1
+ %exitcond47 = icmp eq i64 %indvar.next156, %tmp46
+ br i1 %exitcond47, label %bb13.loopexit.loopexit, label %bb.nph42
+
+bb11.loopexit.loopexit: ; preds = %bb4
+ %.lcssa55 = phi double [ %10, %bb4 ]
+ br label %bb11.loopexit
+
+bb11.loopexit.loopexit1: ; preds = %bb4.us
+ %.lcssa62.lcssa = phi double [ %.lcssa62, %bb4.us ]
+ br label %bb11.loopexit
+
+bb11.loopexit: ; preds = %bb11.loopexit.loopexit1, %bb11.loopexit.loopexit, %bb5.preheader
+ %w.tmp.077 = phi double [ %w.tmp.1, %bb5.preheader ], [ %.lcssa55, %bb11.loopexit.loopexit ], [ %.lcssa62.lcssa, %bb11.loopexit.loopexit1 ]
+ br i1 false, label %bb13.loopexit, label %bb.nph51
+
+bb13.loopexit.loopexit: ; preds = %bb10
+ %.lcssa37.lcssa = phi double [ %.lcssa37, %bb10 ]
+ br label %bb13.loopexit
+
+bb13.loopexit.loopexit2: ; preds = %bb10.us
+ %.lcssa77 = phi double [ %13, %bb10.us ]
+ br label %bb13.loopexit
+
+bb13.loopexit: ; preds = %bb13.loopexit.loopexit2, %bb13.loopexit.loopexit, %bb11.loopexit
+ %w.tmp.2 = phi double [ %w.tmp.077, %bb11.loopexit ], [ %.lcssa37.lcssa, %bb13.loopexit.loopexit ], [ %.lcssa77, %bb13.loopexit.loopexit2 ]
+ %indvar.next39 = add i64 %storemerge55, 1
+ %exitcond85 = icmp ne i64 %indvar.next39, 1024
+ br i1 %exitcond85, label %bb5.preheader, label %bb.nph25

bb5.preheader: ; preds = %bb13.loopexit, %bb.nph76
- %w.tmp.1 = phi double [ %w.promoted, %bb.nph76 ], [ %w.tmp.2, %bb13.loopexit ] ; <double> [#uses=1]
- %storemerge55 = phi i64 [ 0, %bb.nph76 ], [ %storemerge646, %bb13.loopexit ] ; <i64> [#uses=11]
- %storemerge533 = add i64 %storemerge55, 1 ; <i64> [#uses=3]
- %29 = icmp sgt i64 %storemerge533, 1024 ; <i1> [#uses=1]
- br i1 %29, label %bb11.loopexit, label %bb.nph38
+ %storemerge55 = phi i64 [ %indvar.next39, %bb13.loopexit ], [ 0, %bb.nph76 ]
+ %w.tmp.1 = phi double [ %w.promoted, %bb.nph76 ], [ %w.tmp.2, %bb13.loopexit ]
+ %tmp86 = mul i64 %storemerge55, 1026
+ %tmp87 = add i64 %tmp86, 1
+ %tmp90 = mul i64 %storemerge55, -1
+ %tmp46 = add i64 %tmp90, 1024
+ %storemerge533 = add i64 %storemerge55, 1
+ %scevgep109 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 0, i64 %tmp86
+ br i1 false, label %bb11.loopexit, label %bb.nph38

bb.nph25: ; preds = %bb13.loopexit
- store double %w.tmp.2, double* @w
+ %w.tmp.2.lcssa = phi double [ %w.tmp.2, %bb13.loopexit ]
+ store double %w.tmp.2.lcssa, double* @w
store double 1.000000e+00, double* getelementptr inbounds ([1025 x double]* @y, i64 0, i64 0), align 32
br label %bb.nph19

bb.nph19: ; preds = %bb18, %bb.nph25
- %indvar102 = phi i64 [ 0, %bb.nph25 ], [ %tmp, %bb18 ] ; <i64> [#uses=1]
- %tmp = add i64 %indvar102, 1 ; <i64> [#uses=6]
- %scevgep110 = getelementptr [1025 x double]* @y, i64 0, i64 %tmp ; <double*> [#uses=1]
- %scevgep111 = getelementptr [1025 x double]* @b, i64 0, i64 %tmp ; <double*> [#uses=1]
- %30 = load double* %scevgep111, align 8 ; <double> [#uses=1]
+ %indvar102 = phi i64 [ 0, %bb.nph25 ], [ %tmp, %bb18 ]
+ %tmp29 = add i64 %indvar102, 1
+ %scevgep111 = getelementptr [1025 x double]* @b, i64 0, i64 %tmp29
+ %scevgep110 = getelementptr [1025 x double]* @y, i64 0, i64 %tmp29
+ %tmp = add i64 %indvar102, 1
+ %20 = load double* %scevgep111, align 8
br label %bb16

bb16: ; preds = %bb16, %bb.nph19
- %31 = phi double [ %30, %bb.nph19 ], [ %35, %bb16 ] ; <double> [#uses=1]
- %storemerge418 = phi i64 [ 0, %bb.nph19 ], [ %36, %bb16 ] ; <i64> [#uses=3]
- %scevgep106 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp, i64 %storemerge418 ; <double*> [#uses=1]
- %scevgep105 = getelementptr [1025 x double]* @y, i64 0, i64 %storemerge418 ; <double*> [#uses=1]
- %32 = load double* %scevgep106, align 8 ; <double> [#uses=1]
- %33 = load double* %scevgep105, align 8 ; <double> [#uses=1]
- %34 = fmul double %32, %33 ; <double> [#uses=1]
- %35 = fsub double %31, %34 ; <double> [#uses=3]
- %36 = add nsw i64 %storemerge418, 1 ; <i64> [#uses=2]
- %exitcond104 = icmp eq i64 %36, %tmp ; <i1> [#uses=1]
- br i1 %exitcond104, label %bb18, label %bb16
+ %21 = phi double [ %20, %bb.nph19 ], [ %25, %bb16 ]
+ %storemerge418 = phi i64 [ 0, %bb.nph19 ], [ %26, %bb16 ]
+ %scevgep106 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 %tmp29, i64 %storemerge418
+ %scevgep105 = getelementptr [1025 x double]* @y, i64 0, i64 %storemerge418
+ %22 = load double* %scevgep106, align 8
+ %23 = load double* %scevgep105, align 8
+ %24 = fmul double %22, %23
+ %25 = fsub double %21, %24
+ %26 = add nsw i64 %storemerge418, 1
+ %exitcond = icmp eq i64 %26, %tmp29
+ br i1 %exitcond, label %bb18, label %bb16

bb18: ; preds = %bb16
- store double %35, double* %scevgep110, align 8
- %exitcond107 = icmp eq i64 %tmp, 1024 ; <i1> [#uses=1]
- br i1 %exitcond107, label %bb.nph14, label %bb.nph19
+ %.lcssa28 = phi double [ %25, %bb16 ]
+ store double %.lcssa28, double* %scevgep110, align 8
+ %exitcond32 = icmp eq i64 %tmp, 1024
+ br i1 %exitcond32, label %bb.nph14, label %bb.nph19

bb.nph14: ; preds = %bb18
- store double %35, double* @w
- %37 = load double* getelementptr inbounds ([1025 x double]* @y, i64 0, i64 1024), align 32 ; <double> [#uses=1]
- %38 = load double* getelementptr inbounds ([1025 x [1025 x double]]* @a, i64 0, i64 1024, i64 1024), align 32 ; <double> [#uses=1]
- %39 = fdiv double %37, %38 ; <double> [#uses=1]
- store double %39, double* getelementptr inbounds ([1025 x double]* @x, i64 0, i64 1024), align 32
+ %.lcssa28.lcssa = phi double [ %.lcssa28, %bb18 ]
+ store double %.lcssa28.lcssa, double* @w
+ %27 = load double* getelementptr inbounds ([1025 x double]* @y, i64 0, i64 1024), align 32
+ %28 = load double* getelementptr inbounds ([1025 x [1025 x double]]* @a, i64 0, i64 1024, i64 1024), align 32
+ %29 = fdiv double %27, %28
+ store double %29, double* getelementptr inbounds ([1025 x double]* @x, i64 0, i64 1024), align 32
br label %bb.nph

bb.nph: ; preds = %bb24, %bb.nph14
- %storemerge210 = phi i64 [ 0, %bb.nph14 ], [ %48, %bb24 ] ; <i64> [#uses=5]
- %tmp86 = mul i64 %storemerge210, -1026 ; <i64> [#uses=2]
- %tmp87 = add i64 %tmp86, 1024 ; <i64> [#uses=1]
- %tmp91 = sub i64 1025, %storemerge210 ; <i64> [#uses=1]
- %tmp93 = sub i64 1024, %storemerge210 ; <i64> [#uses=1]
- %tmp96 = add i64 %tmp86, 1023 ; <i64> [#uses=1]
- %scevgep97 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 1023, i64 %tmp96 ; <double*> [#uses=1]
- %tmp98 = sub i64 1023, %storemerge210 ; <i64> [#uses=2]
- %scevgep99 = getelementptr [1025 x double]* @x, i64 0, i64 %tmp98 ; <double*> [#uses=1]
- %scevgep100 = getelementptr [1025 x double]* @y, i64 0, i64 %tmp98 ; <double*> [#uses=1]
- %40 = load double* %scevgep100, align 8 ; <double> [#uses=1]
+ %storemerge210 = phi i64 [ 0, %bb.nph14 ], [ %37, %bb24 ]
+ %tmp14 = mul i64 %storemerge210, -1026
+ %tmp15 = add i64 %tmp14, 1024
+ %tmp18 = mul i64 %storemerge210, -1
+ %tmp19 = add i64 %tmp18, 1024
+ %tmp3 = add i64 %storemerge210, 1
+ %tmp23 = add i64 %tmp18, 1023
+ %scevgep100 = getelementptr [1025 x double]* @y, i64 0, i64 %tmp23
+ %scevgep99 = getelementptr [1025 x double]* @x, i64 0, i64 %tmp23
+ %tmp26 = add i64 %tmp14, 1023
+ %scevgep97 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 1023, i64 %tmp26
+ %30 = load double* %scevgep100, align 8
br label %bb22

bb22: ; preds = %bb22, %bb.nph
- %indvar = phi i64 [ 0, %bb.nph ], [ %indvar.next, %bb22 ] ; <i64> [#uses=4]
- %w.tmp.0 = phi double [ %40, %bb.nph ], [ %44, %bb22 ] ; <double> [#uses=1]
- %tmp88 = add i64 %tmp87, %indvar ; <i64> [#uses=1]
- %scevgep83 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 1023, i64 %tmp88 ; <double*> [#uses=1]
- %tmp94 = add i64 %tmp93, %indvar ; <i64> [#uses=1]
- %scevgep = getelementptr [1025 x double]* @x, i64 0, i64 %tmp94 ; <double*> [#uses=1]
- %41 = load double* %scevgep83, align 8 ; <double> [#uses=1]
- %42 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %43 = fmul double %41, %42 ; <double> [#uses=1]
- %44 = fsub double %w.tmp.0, %43 ; <double> [#uses=3]
- %tmp85 = add i64 %tmp91, %indvar ; <i64> [#uses=1]
- %45 = icmp sgt i64 %tmp85, 1024 ; <i1> [#uses=1]
- %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1]
- br i1 %45, label %bb24, label %bb22
+ %indvar = phi i64 [ 0, %bb.nph ], [ %indvar.next, %bb22 ]
+ %w.tmp.0 = phi double [ %30, %bb.nph ], [ %34, %bb22 ]
+ %tmp16 = add i64 %tmp15, %indvar
+ %scevgep83 = getelementptr [1025 x [1025 x double]]* @a, i64 0, i64 1023, i64 %tmp16
+ %tmp20 = add i64 %tmp19, %indvar
+ %scevgep = getelementptr [1025 x double]* @x, i64 0, i64 %tmp20
+ %31 = load double* %scevgep83, align 8
+ %32 = load double* %scevgep, align 8
+ %33 = fmul double %31, %32
+ %34 = fsub double %w.tmp.0, %33
+ %indvar.next = add i64 %indvar, 1
+ %exitcond4 = icmp eq i64 %indvar.next, %tmp3
+ br i1 %exitcond4, label %bb24, label %bb22

bb24: ; preds = %bb22
- %46 = load double* %scevgep97, align 8 ; <double> [#uses=1]
- %47 = fdiv double %44, %46 ; <double> [#uses=1]
- store double %47, double* %scevgep99, align 8
- %48 = add nsw i64 %storemerge210, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %48, 1024 ; <i1> [#uses=1]
- br i1 %exitcond, label %return, label %bb.nph
+ %.lcssa = phi double [ %34, %bb22 ]
+ %35 = load double* %scevgep97, align 8
+ %36 = fdiv double %.lcssa, %35
+ store double %36, double* %scevgep99, align 8
+ %37 = add nsw i64 %storemerge210, 1
+ %exitcond13 = icmp eq i64 %37, 1024
+ br i1 %exitcond13, label %return, label %bb.nph

return: ; preds = %bb24
- store double %44, double* @w
+ %.lcssa.lcssa = phi double [ %.lcssa, %bb24 ]
+ store double %.lcssa.lcssa, double* @w
ret void
}
-
-; CHECK: Valid Region for Scop: bb.nph38 => return
-
+; CHECK: Valid Region for Scop: bb5.preheader => return
diff --git a/test/polybench/stencils/adi/adi_with_param.ll b/test/polybench/stencils/adi/adi_with_param.ll
index f5ea678..d37a08a 100644
--- a/test/polybench/stencils/adi/adi_with_param.ll
+++ b/test/polybench/stencils/adi/adi_with_param.ll
@@ -1,209 +1,249 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-analyze-ir -print-top-scop-only -analyze %s | FileCheck %s
-; Non Constant and non ICmpInst instruction
+; RUN: opt %loadPolly %defaultOpts -polly-analyze-ir -print-top-scop-only -analyze %s | FileCheck %s
; XFAIL: *
+; ModuleID = './stencils/adi/adi_with_param.ll'
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 }
-@X = common global [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=12]
-@A = common global [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=8]
-@B = common global [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=10]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@X = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@A = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@B = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func(i64 %n) nounwind {
bb.nph81:
- %0 = icmp sgt i64 %n, 0 ; <i1> [#uses=6]
- %1 = icmp sgt i64 %n, 1 ; <i1> [#uses=2]
- %2 = add nsw i64 %n, -2 ; <i64> [#uses=5]
- %3 = icmp sgt i64 %2, 0 ; <i1> [#uses=2]
- %4 = add nsw i64 %n, -3 ; <i64> [#uses=2]
- %tmp = add i64 %n, -1 ; <i64> [#uses=6]
+ %0 = icmp sgt i64 %n, 0
+ %1 = icmp sgt i64 %n, 1
+ %2 = add nsw i64 %n, -2
+ %3 = icmp sgt i64 %2, 0
+ %4 = add nsw i64 %n, -3
+ %tmp = add i64 %n, -1
br label %bb5.preheader

-bb.nph: ; preds = %bb.nph16, %bb4
- %storemerge112 = phi i64 [ %16, %bb4 ], [ 0, %bb.nph16 ] ; <i64> [#uses=6]
- %scevgep85.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge112, i64 0 ; <double*> [#uses=1]
- %.pre = load double* %scevgep85.phi.trans.insert, align 32 ; <double> [#uses=1]
- %scevgep86.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge112, i64 0 ; <double*> [#uses=1]
- %.pre149 = load double* %scevgep86.phi.trans.insert, align 32 ; <double> [#uses=1]
+bb.nph: ; preds = %bb.nph.preheader, %bb4
+ %storemerge112 = phi i64 [ %16, %bb4 ], [ 0, %bb.nph.preheader ]
+ %scevgep86.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge112, i64 0
+ %scevgep85.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge112, i64 0
+ %.pre = load double* %scevgep85.phi.trans.insert, align 32
+ %.pre149 = load double* %scevgep86.phi.trans.insert, align 32
br label %bb2

bb2: ; preds = %bb2, %bb.nph
- %5 = phi double [ %.pre149, %bb.nph ], [ %15, %bb2 ] ; <double> [#uses=2]
- %6 = phi double [ %.pre, %bb.nph ], [ %11, %bb2 ] ; <double> [#uses=1]
- %indvar = phi i64 [ 0, %bb.nph ], [ %tmp90, %bb2 ] ; <i64> [#uses=1]
- %tmp90 = add i64 %indvar, 1 ; <i64> [#uses=5]
- %scevgep84 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge112, i64 %tmp90 ; <double*> [#uses=2]
- %scevgep83 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %storemerge112, i64 %tmp90 ; <double*> [#uses=1]
- %scevgep = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge112, i64 %tmp90 ; <double*> [#uses=2]
- %7 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %8 = load double* %scevgep83, align 8 ; <double> [#uses=3]
- %9 = fmul double %6, %8 ; <double> [#uses=1]
- %10 = fdiv double %9, %5 ; <double> [#uses=1]
- %11 = fsub double %7, %10 ; <double> [#uses=2]
+ %5 = phi double [ %.pre149, %bb.nph ], [ %15, %bb2 ]
+ %6 = phi double [ %.pre, %bb.nph ], [ %11, %bb2 ]
+ %indvar = phi i64 [ 0, %bb.nph ], [ %tmp90, %bb2 ]
+ %tmp42 = add i64 %indvar, 1
+ %scevgep84 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge112, i64 %tmp42
+ %scevgep83 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %storemerge112, i64 %tmp42
+ %scevgep = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge112, i64 %tmp42
+ %tmp90 = add i64 %indvar, 1
+ %7 = load double* %scevgep, align 8
+ %8 = load double* %scevgep83, align 8
+ %9 = fmul double %6, %8
+ %10 = fdiv double %9, %5
+ %11 = fsub double %7, %10
store double %11, double* %scevgep, align 8
- %12 = load double* %scevgep84, align 8 ; <double> [#uses=1]
- %13 = fmul double %8, %8 ; <double> [#uses=1]
- %14 = fdiv double %13, %5 ; <double> [#uses=1]
- %15 = fsub double %12, %14 ; <double> [#uses=2]
+ %12 = load double* %scevgep84, align 8
+ %13 = fmul double %8, %8
+ %14 = fdiv double %13, %5
+ %15 = fsub double %12, %14
store double %15, double* %scevgep84, align 8
- %exitcond = icmp eq i64 %tmp90, %tmp ; <i1> [#uses=1]
- br i1 %exitcond, label %bb4, label %bb2
+ %exitcond37 = icmp eq i64 %tmp90, %tmp
+ br i1 %exitcond37, label %bb4, label %bb2

bb4: ; preds = %bb2
- %16 = add nsw i64 %storemerge112, 1 ; <i64> [#uses=2]
- %exitcond87 = icmp eq i64 %16, %n ; <i1> [#uses=1]
- br i1 %exitcond87, label %bb8.loopexit, label %bb.nph
+ %16 = add nsw i64 %storemerge112, 1
+ %exitcond = icmp eq i64 %16, %n
+ br i1 %exitcond, label %bb8.loopexit.loopexit, label %bb.nph

bb.nph16: ; preds = %bb5.preheader
- br i1 %1, label %bb.nph, label %bb8.loopexit
-
-bb7: ; preds = %bb8.loopexit, %bb7
- %storemerge217 = phi i64 [ %20, %bb7 ], [ 0, %bb8.loopexit ] ; <i64> [#uses=3]
- %scevgep95 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge217, i64 %tmp ; <double*> [#uses=2]
- %scevgep96 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge217, i64 %tmp ; <double*> [#uses=1]
- %17 = load double* %scevgep95, align 8 ; <double> [#uses=1]
- %18 = load double* %scevgep96, align 8 ; <double> [#uses=1]
- %19 = fdiv double %17, %18 ; <double> [#uses=1]
+ br i1 %1, label %bb.nph.preheader, label %bb8.loopexit
+
+bb.nph.preheader: ; preds = %bb.nph16
+ br label %bb.nph
+
+bb7: ; preds = %bb7.preheader, %bb7
+ %storemerge217 = phi i64 [ %20, %bb7 ], [ 0, %bb7.preheader ]
+ %scevgep96 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge217, i64 %tmp
+ %scevgep95 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge217, i64 %tmp
+ %17 = load double* %scevgep95, align 8
+ %18 = load double* %scevgep96, align 8
+ %19 = fdiv double %17, %18
store double %19, double* %scevgep95, align 8
- %20 = add nsw i64 %storemerge217, 1 ; <i64> [#uses=2]
- %exitcond94 = icmp eq i64 %20, %n ; <i1> [#uses=1]
- br i1 %exitcond94, label %bb14.loopexit, label %bb7
+ %20 = add nsw i64 %storemerge217, 1
+ %exitcond18 = icmp eq i64 %20, %n
+ br i1 %exitcond18, label %bb14.loopexit, label %bb7

-bb8.loopexit: ; preds = %bb.nph16, %bb4
- br i1 %0, label %bb7, label %bb20.loopexit
+bb8.loopexit.loopexit: ; preds = %bb4
+ br label %bb8.loopexit
+
+bb8.loopexit: ; preds = %bb8.loopexit.loopexit, %bb.nph16
+ br i1 %0, label %bb7.preheader, label %bb20.loopexit
+
+bb7.preheader: ; preds = %bb8.loopexit
+ br label %bb7

bb11: ; preds = %bb12.preheader, %bb11
- %storemerge920 = phi i64 [ %28, %bb11 ], [ 0, %bb12.preheader ] ; <i64> [#uses=3]
- %tmp107 = sub i64 %4, %storemerge920 ; <i64> [#uses=3]
- %scevgep104 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge323, i64 %tmp107 ; <double*> [#uses=1]
- %scevgep103 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %storemerge323, i64 %tmp107 ; <double*> [#uses=1]
- %scevgep102 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge323, i64 %tmp107 ; <double*> [#uses=1]
- %tmp111 = sub i64 %2, %storemerge920 ; <i64> [#uses=1]
- %scevgep100 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge323, i64 %tmp111 ; <double*> [#uses=2]
- %21 = load double* %scevgep100, align 8 ; <double> [#uses=1]
- %22 = load double* %scevgep102, align 8 ; <double> [#uses=1]
- %23 = load double* %scevgep103, align 8 ; <double> [#uses=1]
- %24 = fmul double %22, %23 ; <double> [#uses=1]
- %25 = fsub double %21, %24 ; <double> [#uses=1]
- %26 = load double* %scevgep104, align 8 ; <double> [#uses=1]
- %27 = fdiv double %25, %26 ; <double> [#uses=1]
+ %storemerge920 = phi i64 [ %28, %bb11 ], [ 0, %bb12.preheader ]
+ %tmp30 = mul i64 %storemerge920, -1
+ %tmp31 = add i64 %4, %tmp30
+ %scevgep104 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge323, i64 %tmp31
+ %scevgep103 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %storemerge323, i64 %tmp31
+ %scevgep102 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge323, i64 %tmp31
+ %tmp35 = add i64 %2, %tmp30
+ %scevgep100 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge323, i64 %tmp35
+ %21 = load double* %scevgep100, align 8
+ %22 = load double* %scevgep102, align 8
+ %23 = load double* %scevgep103, align 8
+ %24 = fmul double %22, %23
+ %25 = fsub double %21, %24
+ %26 = load double* %scevgep104, align 8
+ %27 = fdiv double %25, %26
store double %27, double* %scevgep100, align 8
- %28 = add nsw i64 %storemerge920, 1 ; <i64> [#uses=2]
- %exitcond97 = icmp eq i64 %28, %2 ; <i1> [#uses=1]
- br i1 %exitcond97, label %bb13, label %bb11
+ %28 = add nsw i64 %storemerge920, 1
+ %exitcond21 = icmp eq i64 %28, %2
+ br i1 %exitcond21, label %bb13, label %bb11

bb13: ; preds = %bb11
- %29 = add nsw i64 %storemerge323, 1 ; <i64> [#uses=2]
- %exitcond105 = icmp eq i64 %29, %n ; <i1> [#uses=1]
- br i1 %exitcond105, label %bb20.loopexit, label %bb12.preheader
+ %29 = add nsw i64 %storemerge323, 1
+ %exitcond29 = icmp eq i64 %29, %n
+ br i1 %exitcond29, label %bb20.loopexit.loopexit, label %bb12.preheader

bb14.loopexit: ; preds = %bb7
- %.not = xor i1 %0, true ; <i1> [#uses=1]
- %.not150 = xor i1 %3, true ; <i1> [#uses=1]
- %brmerge = or i1 %.not, %.not150 ; <i1> [#uses=1]
- br i1 %brmerge, label %bb20.loopexit, label %bb12.preheader
+ %.not = xor i1 %0, true
+ %.not150 = xor i1 %3, true
+ %brmerge = or i1 %.not, %.not150
+ br i1 %brmerge, label %bb20.loopexit, label %bb12.preheader.preheader
+
+bb12.preheader.preheader: ; preds = %bb14.loopexit
+ br label %bb12.preheader

-bb12.preheader: ; preds = %bb14.loopexit, %bb13
- %storemerge323 = phi i64 [ %29, %bb13 ], [ 0, %bb14.loopexit ] ; <i64> [#uses=5]
+bb12.preheader: ; preds = %bb12.preheader.preheader, %bb13
+ %storemerge323 = phi i64 [ %29, %bb13 ], [ 0, %bb12.preheader.preheader ]
br label %bb11

bb17: ; preds = %bb18.preheader, %bb17
- %storemerge828 = phi i64 [ %41, %bb17 ], [ 0, %bb18.preheader ] ; <i64> [#uses=6]
- %scevgep119 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %indvar114, i64 %storemerge828 ; <double*> [#uses=1]
- %scevgep118 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %indvar114, i64 %storemerge828 ; <double*> [#uses=1]
- %scevgep121 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp125, i64 %storemerge828 ; <double*> [#uses=2]
- %scevgep120 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp125, i64 %storemerge828 ; <double*> [#uses=1]
- %scevgep117 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp125, i64 %storemerge828 ; <double*> [#uses=2]
- %30 = load double* %scevgep117, align 8 ; <double> [#uses=1]
- %31 = load double* %scevgep118, align 8 ; <double> [#uses=1]
- %32 = load double* %scevgep120, align 8 ; <double> [#uses=3]
- %33 = fmul double %31, %32 ; <double> [#uses=1]
- %34 = load double* %scevgep119, align 8 ; <double> [#uses=2]
- %35 = fdiv double %33, %34 ; <double> [#uses=1]
- %36 = fsub double %30, %35 ; <double> [#uses=1]
+ %storemerge828 = phi i64 [ %41, %bb17 ], [ 0, %bb18.preheader ]
+ %scevgep119 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %indvar114, i64 %storemerge828
+ %scevgep118 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %indvar114, i64 %storemerge828
+ %scevgep121 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp11, i64 %storemerge828
+ %scevgep120 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp11, i64 %storemerge828
+ %scevgep117 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp11, i64 %storemerge828
+ %30 = load double* %scevgep117, align 8
+ %31 = load double* %scevgep118, align 8
+ %32 = load double* %scevgep120, align 8
+ %33 = fmul double %31, %32
+ %34 = load double* %scevgep119, align 8
+ %35 = fdiv double %33, %34
+ %36 = fsub double %30, %35
store double %36, double* %scevgep117, align 8
- %37 = load double* %scevgep121, align 8 ; <double> [#uses=1]
- %38 = fmul double %32, %32 ; <double> [#uses=1]
- %39 = fdiv double %38, %34 ; <double> [#uses=1]
- %40 = fsub double %37, %39 ; <double> [#uses=1]
+ %37 = load double* %scevgep121, align 8
+ %38 = fmul double %32, %32
+ %39 = fdiv double %38, %34
+ %40 = fsub double %37, %39
store double %40, double* %scevgep121, align 8
- %41 = add nsw i64 %storemerge828, 1 ; <i64> [#uses=2]
- %exitcond113 = icmp eq i64 %41, %n ; <i1> [#uses=1]
- br i1 %exitcond113, label %bb19, label %bb17
+ %41 = add nsw i64 %storemerge828, 1
+ %exitcond1 = icmp eq i64 %41, %n
+ br i1 %exitcond1, label %bb19, label %bb17

bb19: ; preds = %bb17
- %exitcond122 = icmp eq i64 %tmp125, %tmp ; <i1> [#uses=1]
- br i1 %exitcond122, label %bb23.loopexit, label %bb18.preheader
+ %tmp125 = add i64 %indvar114, 1
+ %exitcond8 = icmp eq i64 %tmp125, %tmp
+ br i1 %exitcond8, label %bb23.loopexit.loopexit, label %bb18.preheader

-bb20.loopexit: ; preds = %bb5.preheader, %bb14.loopexit, %bb13, %bb8.loopexit
+bb20.loopexit.loopexit: ; preds = %bb13
+ br label %bb20.loopexit
+
+bb20.loopexit: ; preds = %bb20.loopexit.loopexit, %bb5.preheader, %bb14.loopexit, %bb8.loopexit
br i1 %1, label %bb.nph34, label %bb23.loopexit

bb.nph34: ; preds = %bb20.loopexit
- br i1 %0, label %bb18.preheader, label %bb29.loopexit
+ br i1 %0, label %bb18.preheader.preheader, label %bb29.loopexit
+
+bb18.preheader.preheader: ; preds = %bb.nph34
+ br label %bb18.preheader

-bb18.preheader: ; preds = %bb.nph34, %bb19
- %indvar114 = phi i64 [ %tmp125, %bb19 ], [ 0, %bb.nph34 ] ; <i64> [#uses=3]
- %tmp125 = add i64 %indvar114, 1 ; <i64> [#uses=5]
+bb18.preheader: ; preds = %bb18.preheader.preheader, %bb19
+ %indvar114 = phi i64 [ %tmp125, %bb19 ], [ 0, %bb18.preheader.preheader ]
+ %tmp11 = add i64 %indvar114, 1
br label %bb17

-bb22: ; preds = %bb23.loopexit, %bb22
- %storemerge535 = phi i64 [ %45, %bb22 ], [ 0, %bb23.loopexit ] ; <i64> [#uses=3]
- %scevgep130 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp, i64 %storemerge535 ; <double*> [#uses=2]
- %scevgep131 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp, i64 %storemerge535 ; <double*> [#uses=1]
- %42 = load double* %scevgep130, align 8 ; <double> [#uses=1]
- %43 = load double* %scevgep131, align 8 ; <double> [#uses=1]
- %44 = fdiv double %42, %43 ; <double> [#uses=1]
+bb22: ; preds = %bb22.preheader, %bb22
+ %storemerge535 = phi i64 [ %45, %bb22 ], [ 0, %bb22.preheader ]
+ %scevgep131 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp, i64 %storemerge535
+ %scevgep130 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp, i64 %storemerge535
+ %42 = load double* %scevgep130, align 8
+ %43 = load double* %scevgep131, align 8
+ %44 = fdiv double %42, %43
store double %44, double* %scevgep130, align 8
- %45 = add nsw i64 %storemerge535, 1 ; <i64> [#uses=2]
- %exitcond129 = icmp eq i64 %45, %n ; <i1> [#uses=1]
- br i1 %exitcond129, label %bb29.loopexit, label %bb22
+ %45 = add nsw i64 %storemerge535, 1
+ %exitcond15 = icmp eq i64 %45, %n
+ br i1 %exitcond15, label %bb29.loopexit.loopexit, label %bb22
+
+bb23.loopexit.loopexit: ; preds = %bb19
+ br label %bb23.loopexit

-bb23.loopexit: ; preds = %bb20.loopexit, %bb19
- br i1 %0, label %bb22, label %bb29.loopexit
+bb23.loopexit: ; preds = %bb23.loopexit.loopexit, %bb20.loopexit
+ br i1 %0, label %bb22.preheader, label %bb29.loopexit
+
+bb22.preheader: ; preds = %bb23.loopexit
+ br label %bb22

bb26: ; preds = %bb27.preheader, %bb26
- %storemerge737 = phi i64 [ %53, %bb26 ], [ 0, %bb27.preheader ] ; <i64> [#uses=5]
- %scevgep138 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp142, i64 %storemerge737 ; <double*> [#uses=1]
- %scevgep137 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp142, i64 %storemerge737 ; <double*> [#uses=1]
- %scevgep139 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp145, i64 %storemerge737 ; <double*> [#uses=1]
- %scevgep135 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp145, i64 %storemerge737 ; <double*> [#uses=2]
- %46 = load double* %scevgep135, align 8 ; <double> [#uses=1]
- %47 = load double* %scevgep137, align 8 ; <double> [#uses=1]
- %48 = load double* %scevgep138, align 8 ; <double> [#uses=1]
- %49 = fmul double %47, %48 ; <double> [#uses=1]
- %50 = fsub double %46, %49 ; <double> [#uses=1]
- %51 = load double* %scevgep139, align 8 ; <double> [#uses=1]
- %52 = fdiv double %50, %51 ; <double> [#uses=1]
+ %storemerge737 = phi i64 [ %53, %bb26 ], [ 0, %bb27.preheader ]
+ %scevgep138 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp58, i64 %storemerge737
+ %scevgep137 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp58, i64 %storemerge737
+ %scevgep139 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp61, i64 %storemerge737
+ %scevgep135 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp61, i64 %storemerge737
+ %46 = load double* %scevgep135, align 8
+ %47 = load double* %scevgep137, align 8
+ %48 = load double* %scevgep138, align 8
+ %49 = fmul double %47, %48
+ %50 = fsub double %46, %49
+ %51 = load double* %scevgep139, align 8
+ %52 = fdiv double %50, %51
store double %52, double* %scevgep135, align 8
- %53 = add nsw i64 %storemerge737, 1 ; <i64> [#uses=2]
- %exitcond132 = icmp eq i64 %53, %n ; <i1> [#uses=1]
- br i1 %exitcond132, label %bb28, label %bb26
+ %53 = add nsw i64 %storemerge737, 1
+ %exitcond48 = icmp eq i64 %53, %n
+ br i1 %exitcond48, label %bb28, label %bb26

bb28: ; preds = %bb26
- %54 = add nsw i64 %storemerge640, 1 ; <i64> [#uses=2]
- %exitcond140 = icmp eq i64 %54, %2 ; <i1> [#uses=1]
- br i1 %exitcond140, label %bb30, label %bb27.preheader
-
-bb29.loopexit: ; preds = %bb23.loopexit, %bb22, %bb.nph34
- %.not151 = xor i1 %3, true ; <i1> [#uses=1]
- %.not152 = xor i1 %0, true ; <i1> [#uses=1]
- %brmerge153 = or i1 %.not151, %.not152 ; <i1> [#uses=1]
- br i1 %brmerge153, label %bb30, label %bb27.preheader
-
-bb27.preheader: ; preds = %bb29.loopexit, %bb28
- %storemerge640 = phi i64 [ %54, %bb28 ], [ 0, %bb29.loopexit ] ; <i64> [#uses=3]
- %tmp142 = sub i64 %4, %storemerge640 ; <i64> [#uses=2]
- %tmp145 = sub i64 %2, %storemerge640 ; <i64> [#uses=2]
+ %54 = add nsw i64 %storemerge640, 1
+ %exitcond56 = icmp eq i64 %54, %2
+ br i1 %exitcond56, label %bb30.loopexit, label %bb27.preheader
+
+bb29.loopexit.loopexit: ; preds = %bb22
+ br label %bb29.loopexit
+
+bb29.loopexit: ; preds = %bb29.loopexit.loopexit, %bb23.loopexit, %bb.nph34
+ %.not151 = xor i1 %3, true
+ %.not152 = xor i1 %0, true
+ %brmerge153 = or i1 %.not151, %.not152
+ br i1 %brmerge153, label %bb30, label %bb27.preheader.preheader
+
+bb27.preheader.preheader: ; preds = %bb29.loopexit
+ br label %bb27.preheader
+
+bb27.preheader: ; preds = %bb27.preheader.preheader, %bb28
+ %storemerge640 = phi i64 [ %54, %bb28 ], [ 0, %bb27.preheader.preheader ]
+ %tmp57 = mul i64 %storemerge640, -1
+ %tmp58 = add i64 %4, %tmp57
+ %tmp61 = add i64 %2, %tmp57
br label %bb26

-bb30: ; preds = %bb29.loopexit, %bb28
- %55 = add nsw i64 %storemerge46, 1 ; <i64> [#uses=2]
- %exitcond148 = icmp eq i64 %55, 10 ; <i1> [#uses=1]
- br i1 %exitcond148, label %return, label %bb5.preheader
+bb30.loopexit: ; preds = %bb28
+ br label %bb30
+
+bb30: ; preds = %bb30.loopexit, %bb29.loopexit
+ %55 = add nsw i64 %storemerge46, 1
+ %exitcond64 = icmp eq i64 %55, 10
+ br i1 %exitcond64, label %return, label %bb5.preheader

bb5.preheader: ; preds = %bb30, %bb.nph81
- %storemerge46 = phi i64 [ 0, %bb.nph81 ], [ %55, %bb30 ] ; <i64> [#uses=1]
+ %storemerge46 = phi i64 [ 0, %bb.nph81 ], [ %55, %bb30 ]
br i1 %0, label %bb.nph16, label %bb20.loopexit

return: ; preds = %bb30
diff --git a/test/polybench/stencils/adi/adi_without_param.ll b/test/polybench/stencils/adi/adi_without_param.ll
index 2ffba35..a6dd016 100644
--- a/test/polybench/stencils/adi/adi_without_param.ll
+++ b/test/polybench/stencils/adi/adi_without_param.ll
@@ -1,180 +1,200 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -analyze %s | FileCheck %s
-
+; RUN: opt %loadPolly %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; ModuleID = './stencils/adi/adi_without_param.ll'
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 }
-@X = common global [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=12]
-@A = common global [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=8]
-@B = common global [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=10]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@X = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@A = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@B = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func() nounwind {
bb.nph79:
br label %bb5.preheader

bb.nph: ; preds = %bb5.preheader, %bb4
- %storemerge112 = phi i64 [ %11, %bb4 ], [ 0, %bb5.preheader ] ; <i64> [#uses=6]
- %scevgep82.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge112, i64 0 ; <double*> [#uses=1]
- %.pre = load double* %scevgep82.phi.trans.insert, align 32 ; <double> [#uses=1]
- %scevgep83.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge112, i64 0 ; <double*> [#uses=1]
- %.pre143 = load double* %scevgep83.phi.trans.insert, align 32 ; <double> [#uses=1]
+ %storemerge112 = phi i64 [ %11, %bb4 ], [ 0, %bb5.preheader ]
+ %scevgep83.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge112, i64 0
+ %scevgep82.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge112, i64 0
+ %.pre = load double* %scevgep82.phi.trans.insert, align 32
+ %.pre143 = load double* %scevgep83.phi.trans.insert, align 32
br label %bb2

bb2: ; preds = %bb2, %bb.nph
- %0 = phi double [ %.pre143, %bb.nph ], [ %10, %bb2 ] ; <double> [#uses=2]
- %1 = phi double [ %.pre, %bb.nph ], [ %6, %bb2 ] ; <double> [#uses=1]
- %indvar = phi i64 [ 0, %bb.nph ], [ %tmp87, %bb2 ] ; <i64> [#uses=1]
- %tmp87 = add i64 %indvar, 1 ; <i64> [#uses=5]
- %scevgep81 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge112, i64 %tmp87 ; <double*> [#uses=2]
- %scevgep80 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %storemerge112, i64 %tmp87 ; <double*> [#uses=1]
- %scevgep = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge112, i64 %tmp87 ; <double*> [#uses=2]
- %2 = load double* %scevgep, align 8 ; <double> [#uses=1]
- %3 = load double* %scevgep80, align 8 ; <double> [#uses=3]
- %4 = fmul double %1, %3 ; <double> [#uses=1]
- %5 = fdiv double %4, %0 ; <double> [#uses=1]
- %6 = fsub double %2, %5 ; <double> [#uses=2]
+ %0 = phi double [ %.pre143, %bb.nph ], [ %10, %bb2 ]
+ %1 = phi double [ %.pre, %bb.nph ], [ %6, %bb2 ]
+ %indvar = phi i64 [ 0, %bb.nph ], [ %tmp87, %bb2 ]
+ %tmp5 = add i64 %indvar, 1
+ %scevgep81 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge112, i64 %tmp5
+ %scevgep80 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %storemerge112, i64 %tmp5
+ %scevgep = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge112, i64 %tmp5
+ %tmp87 = add i64 %indvar, 1
+ %2 = load double* %scevgep, align 8
+ %3 = load double* %scevgep80, align 8
+ %4 = fmul double %1, %3
+ %5 = fdiv double %4, %0
+ %6 = fsub double %2, %5
store double %6, double* %scevgep, align 8
- %7 = load double* %scevgep81, align 8 ; <double> [#uses=1]
- %8 = fmul double %3, %3 ; <double> [#uses=1]
- %9 = fdiv double %8, %0 ; <double> [#uses=1]
- %10 = fsub double %7, %9 ; <double> [#uses=2]
+ %7 = load double* %scevgep81, align 8
+ %8 = fmul double %3, %3
+ %9 = fdiv double %8, %0
+ %10 = fsub double %7, %9
store double %10, double* %scevgep81, align 8
- %exitcond = icmp eq i64 %tmp87, 1023 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb4, label %bb2
+ %exitcond1 = icmp eq i64 %tmp87, 1023
+ br i1 %exitcond1, label %bb4, label %bb2

bb4: ; preds = %bb2
- %11 = add nsw i64 %storemerge112, 1 ; <i64> [#uses=2]
- %exitcond84 = icmp eq i64 %11, 1024 ; <i1> [#uses=1]
- br i1 %exitcond84, label %bb7, label %bb.nph
-
-bb7: ; preds = %bb7, %bb4
- %storemerge217 = phi i64 [ %15, %bb7 ], [ 0, %bb4 ] ; <i64> [#uses=3]
- %scevgep92 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge217, i64 1023 ; <double*> [#uses=2]
- %scevgep93 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge217, i64 1023 ; <double*> [#uses=1]
- %12 = load double* %scevgep92, align 8 ; <double> [#uses=1]
- %13 = load double* %scevgep93, align 8 ; <double> [#uses=1]
- %14 = fdiv double %12, %13 ; <double> [#uses=1]
+ %11 = add nsw i64 %storemerge112, 1
+ %exitcond = icmp eq i64 %11, 1024
+ br i1 %exitcond, label %bb7.loopexit, label %bb.nph
+
+bb7.loopexit: ; preds = %bb4
+ br label %bb7
+
+bb7: ; preds = %bb7.loopexit, %bb7
+ %storemerge217 = phi i64 [ %15, %bb7 ], [ 0, %bb7.loopexit ]
+ %scevgep93 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge217, i64 1023
+ %scevgep92 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge217, i64 1023
+ %12 = load double* %scevgep92, align 8
+ %13 = load double* %scevgep93, align 8
+ %14 = fdiv double %12, %13
store double %14, double* %scevgep92, align 8
- %15 = add nsw i64 %storemerge217, 1 ; <i64> [#uses=2]
- %exitcond91 = icmp eq i64 %15, 1024 ; <i1> [#uses=1]
- br i1 %exitcond91, label %bb12.preheader, label %bb7
+ %15 = add nsw i64 %storemerge217, 1
+ %exitcond11 = icmp eq i64 %15, 1024
+ br i1 %exitcond11, label %bb12.preheader.loopexit, label %bb7

bb11: ; preds = %bb12.preheader, %bb11
- %storemerge920 = phi i64 [ %23, %bb11 ], [ 0, %bb12.preheader ] ; <i64> [#uses=3]
- %tmp103 = sub i64 1021, %storemerge920 ; <i64> [#uses=3]
- %scevgep100 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge323, i64 %tmp103 ; <double*> [#uses=1]
- %scevgep99 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %storemerge323, i64 %tmp103 ; <double*> [#uses=1]
- %scevgep98 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge323, i64 %tmp103 ; <double*> [#uses=1]
- %tmp107 = sub i64 1022, %storemerge920 ; <i64> [#uses=1]
- %scevgep96 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge323, i64 %tmp107 ; <double*> [#uses=2]
- %16 = load double* %scevgep96, align 8 ; <double> [#uses=1]
- %17 = load double* %scevgep98, align 8 ; <double> [#uses=1]
- %18 = load double* %scevgep99, align 8 ; <double> [#uses=1]
- %19 = fmul double %17, %18 ; <double> [#uses=1]
- %20 = fsub double %16, %19 ; <double> [#uses=1]
- %21 = load double* %scevgep100, align 8 ; <double> [#uses=1]
- %22 = fdiv double %20, %21 ; <double> [#uses=1]
+ %storemerge920 = phi i64 [ %23, %bb11 ], [ 0, %bb12.preheader ]
+ %tmp22 = mul i64 %storemerge920, -1
+ %tmp23 = add i64 %tmp22, 1021
+ %scevgep100 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge323, i64 %tmp23
+ %scevgep99 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %storemerge323, i64 %tmp23
+ %scevgep98 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge323, i64 %tmp23
+ %tmp27 = add i64 %tmp22, 1022
+ %scevgep96 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge323, i64 %tmp27
+ %16 = load double* %scevgep96, align 8
+ %17 = load double* %scevgep98, align 8
+ %18 = load double* %scevgep99, align 8
+ %19 = fmul double %17, %18
+ %20 = fsub double %16, %19
+ %21 = load double* %scevgep100, align 8
+ %22 = fdiv double %20, %21
store double %22, double* %scevgep96, align 8
- %23 = add nsw i64 %storemerge920, 1 ; <i64> [#uses=2]
- %exitcond94 = icmp eq i64 %23, 1022 ; <i1> [#uses=1]
- br i1 %exitcond94, label %bb13, label %bb11
+ %23 = add nsw i64 %storemerge920, 1
+ %exitcond14 = icmp eq i64 %23, 1022
+ br i1 %exitcond14, label %bb13, label %bb11

bb13: ; preds = %bb11
- %24 = add nsw i64 %storemerge323, 1 ; <i64> [#uses=2]
- %exitcond101 = icmp eq i64 %24, 1024 ; <i1> [#uses=1]
- br i1 %exitcond101, label %bb18.preheader, label %bb12.preheader
+ %24 = add nsw i64 %storemerge323, 1
+ %exitcond21 = icmp eq i64 %24, 1024
+ br i1 %exitcond21, label %bb18.preheader.loopexit, label %bb12.preheader
+
+bb12.preheader.loopexit: ; preds = %bb7
+ br label %bb12.preheader

-bb12.preheader: ; preds = %bb13, %bb7
- %storemerge323 = phi i64 [ %24, %bb13 ], [ 0, %bb7 ] ; <i64> [#uses=5]
+bb12.preheader: ; preds = %bb12.preheader.loopexit, %bb13
+ %storemerge323 = phi i64 [ %24, %bb13 ], [ 0, %bb12.preheader.loopexit ]
br label %bb11

bb17: ; preds = %bb18.preheader, %bb17
- %storemerge828 = phi i64 [ %36, %bb17 ], [ 0, %bb18.preheader ] ; <i64> [#uses=6]
- %scevgep114 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %indvar110, i64 %storemerge828 ; <double*> [#uses=1]
- %scevgep113 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %indvar110, i64 %storemerge828 ; <double*> [#uses=1]
- %scevgep116 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp120, i64 %storemerge828 ; <double*> [#uses=2]
- %scevgep115 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp120, i64 %storemerge828 ; <double*> [#uses=1]
- %scevgep112 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp120, i64 %storemerge828 ; <double*> [#uses=2]
- %25 = load double* %scevgep112, align 8 ; <double> [#uses=1]
- %26 = load double* %scevgep113, align 8 ; <double> [#uses=1]
- %27 = load double* %scevgep115, align 8 ; <double> [#uses=3]
- %28 = fmul double %26, %27 ; <double> [#uses=1]
- %29 = load double* %scevgep114, align 8 ; <double> [#uses=2]
- %30 = fdiv double %28, %29 ; <double> [#uses=1]
- %31 = fsub double %25, %30 ; <double> [#uses=1]
+ %storemerge828 = phi i64 [ %36, %bb17 ], [ 0, %bb18.preheader ]
+ %scevgep114 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %indvar110, i64 %storemerge828
+ %scevgep113 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %indvar110, i64 %storemerge828
+ %scevgep116 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp38, i64 %storemerge828
+ %scevgep115 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp38, i64 %storemerge828
+ %scevgep112 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp38, i64 %storemerge828
+ %25 = load double* %scevgep112, align 8
+ %26 = load double* %scevgep113, align 8
+ %27 = load double* %scevgep115, align 8
+ %28 = fmul double %26, %27
+ %29 = load double* %scevgep114, align 8
+ %30 = fdiv double %28, %29
+ %31 = fsub double %25, %30
store double %31, double* %scevgep112, align 8
- %32 = load double* %scevgep116, align 8 ; <double> [#uses=1]
- %33 = fmul double %27, %27 ; <double> [#uses=1]
- %34 = fdiv double %33, %29 ; <double> [#uses=1]
- %35 = fsub double %32, %34 ; <double> [#uses=1]
+ %32 = load double* %scevgep116, align 8
+ %33 = fmul double %27, %27
+ %34 = fdiv double %33, %29
+ %35 = fsub double %32, %34
store double %35, double* %scevgep116, align 8
- %36 = add nsw i64 %storemerge828, 1 ; <i64> [#uses=2]
- %exitcond109 = icmp eq i64 %36, 1024 ; <i1> [#uses=1]
- br i1 %exitcond109, label %bb19, label %bb17
+ %36 = add nsw i64 %storemerge828, 1
+ %exitcond29 = icmp eq i64 %36, 1024
+ br i1 %exitcond29, label %bb19, label %bb17

bb19: ; preds = %bb17
- %exitcond117 = icmp eq i64 %tmp120, 1023 ; <i1> [#uses=1]
- br i1 %exitcond117, label %bb22, label %bb18.preheader
+ %tmp120 = add i64 %indvar110, 1
+ %exitcond35 = icmp eq i64 %tmp120, 1023
+ br i1 %exitcond35, label %bb22.loopexit, label %bb18.preheader

-bb18.preheader: ; preds = %bb19, %bb13
- %indvar110 = phi i64 [ %tmp120, %bb19 ], [ 0, %bb13 ] ; <i64> [#uses=3]
- %tmp120 = add i64 %indvar110, 1 ; <i64> [#uses=5]
+bb18.preheader.loopexit: ; preds = %bb13
+ br label %bb18.preheader
+
+bb18.preheader: ; preds = %bb18.preheader.loopexit, %bb19
+ %indvar110 = phi i64 [ %tmp120, %bb19 ], [ 0, %bb18.preheader.loopexit ]
+ %tmp38 = add i64 %indvar110, 1
br label %bb17

-bb22: ; preds = %bb22, %bb19
- %storemerge535 = phi i64 [ %40, %bb22 ], [ 0, %bb19 ] ; <i64> [#uses=3]
- %scevgep125 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 1023, i64 %storemerge535 ; <double*> [#uses=2]
- %scevgep126 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 1023, i64 %storemerge535 ; <double*> [#uses=1]
- %37 = load double* %scevgep125, align 8 ; <double> [#uses=1]
- %38 = load double* %scevgep126, align 8 ; <double> [#uses=1]
- %39 = fdiv double %37, %38 ; <double> [#uses=1]
+bb22.loopexit: ; preds = %bb19
+ br label %bb22
+
+bb22: ; preds = %bb22.loopexit, %bb22
+ %storemerge535 = phi i64 [ %40, %bb22 ], [ 0, %bb22.loopexit ]
+ %scevgep126 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 1023, i64 %storemerge535
+ %scevgep125 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 1023, i64 %storemerge535
+ %37 = load double* %scevgep125, align 8
+ %38 = load double* %scevgep126, align 8
+ %39 = fdiv double %37, %38
store double %39, double* %scevgep125, align 8
- %40 = add nsw i64 %storemerge535, 1 ; <i64> [#uses=2]
- %exitcond124 = icmp eq i64 %40, 1024 ; <i1> [#uses=1]
- br i1 %exitcond124, label %bb27.preheader, label %bb22
+ %40 = add nsw i64 %storemerge535, 1
+ %exitcond42 = icmp eq i64 %40, 1024
+ br i1 %exitcond42, label %bb27.preheader.loopexit, label %bb22

bb26: ; preds = %bb27.preheader, %bb26
- %storemerge737 = phi i64 [ %48, %bb26 ], [ 0, %bb27.preheader ] ; <i64> [#uses=5]
- %scevgep132 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp136, i64 %storemerge737 ; <double*> [#uses=1]
- %scevgep131 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp136, i64 %storemerge737 ; <double*> [#uses=1]
- %scevgep133 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp139, i64 %storemerge737 ; <double*> [#uses=1]
- %scevgep129 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp139, i64 %storemerge737 ; <double*> [#uses=2]
- %41 = load double* %scevgep129, align 8 ; <double> [#uses=1]
- %42 = load double* %scevgep131, align 8 ; <double> [#uses=1]
- %43 = load double* %scevgep132, align 8 ; <double> [#uses=1]
- %44 = fmul double %42, %43 ; <double> [#uses=1]
- %45 = fsub double %41, %44 ; <double> [#uses=1]
- %46 = load double* %scevgep133, align 8 ; <double> [#uses=1]
- %47 = fdiv double %45, %46 ; <double> [#uses=1]
+ %storemerge737 = phi i64 [ %48, %bb26 ], [ 0, %bb27.preheader ]
+ %scevgep132 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp54, i64 %storemerge737
+ %scevgep131 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp54, i64 %storemerge737
+ %scevgep133 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp57, i64 %storemerge737
+ %scevgep129 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp57, i64 %storemerge737
+ %41 = load double* %scevgep129, align 8
+ %42 = load double* %scevgep131, align 8
+ %43 = load double* %scevgep132, align 8
+ %44 = fmul double %42, %43
+ %45 = fsub double %41, %44
+ %46 = load double* %scevgep133, align 8
+ %47 = fdiv double %45, %46
store double %47, double* %scevgep129, align 8
- %48 = add nsw i64 %storemerge737, 1 ; <i64> [#uses=2]
- %exitcond127 = icmp eq i64 %48, 1024 ; <i1> [#uses=1]
- br i1 %exitcond127, label %bb28, label %bb26
+ %48 = add nsw i64 %storemerge737, 1
+ %exitcond45 = icmp eq i64 %48, 1024
+ br i1 %exitcond45, label %bb28, label %bb26

bb28: ; preds = %bb26
- %49 = add nsw i64 %storemerge639, 1 ; <i64> [#uses=2]
- %exitcond134 = icmp eq i64 %49, 1022 ; <i1> [#uses=1]
- br i1 %exitcond134, label %bb30, label %bb27.preheader
-
-bb27.preheader: ; preds = %bb28, %bb22
- %storemerge639 = phi i64 [ %49, %bb28 ], [ 0, %bb22 ] ; <i64> [#uses=3]
- %tmp136 = sub i64 1021, %storemerge639 ; <i64> [#uses=2]
- %tmp139 = sub i64 1022, %storemerge639 ; <i64> [#uses=2]
+ %49 = add nsw i64 %storemerge639, 1
+ %exitcond52 = icmp eq i64 %49, 1022
+ br i1 %exitcond52, label %bb30, label %bb27.preheader
+
+bb27.preheader.loopexit: ; preds = %bb22
+ br label %bb27.preheader
+
+bb27.preheader: ; preds = %bb27.preheader.loopexit, %bb28
+ %storemerge639 = phi i64 [ %49, %bb28 ], [ 0, %bb27.preheader.loopexit ]
+ %tmp53 = mul i64 %storemerge639, -1
+ %tmp54 = add i64 %tmp53, 1021
+ %tmp57 = add i64 %tmp53, 1022
br label %bb26

bb30: ; preds = %bb28
- %50 = add nsw i64 %storemerge44, 1 ; <i64> [#uses=2]
- %exitcond142 = icmp eq i64 %50, 10 ; <i1> [#uses=1]
- br i1 %exitcond142, label %return, label %bb5.preheader
+ %50 = add nsw i64 %storemerge44, 1
+ %exitcond60 = icmp eq i64 %50, 10
+ br i1 %exitcond60, label %return, label %bb5.preheader

bb5.preheader: ; preds = %bb30, %bb.nph79
- %storemerge44 = phi i64 [ 0, %bb.nph79 ], [ %50, %bb30 ] ; <i64> [#uses=1]
+ %storemerge44 = phi i64 [ 0, %bb.nph79 ], [ %50, %bb30 ]
br label %bb.nph

return: ; preds = %bb30
ret void
}
-
; CHECK: Valid Region for Scop: bb5.preheader => return
-
diff --git a/test/polybench/stencils/jacobi-2d-imper/jacobi-2d-imper_with_param.ll b/test/polybench/stencils/jacobi-2d-imper/jacobi-2d-imper_with_param.ll
index 7f046de..fea93ec 100644
--- a/test/polybench/stencils/jacobi-2d-imper/jacobi-2d-imper_with_param.ll
+++ b/test/polybench/stencils/jacobi-2d-imper/jacobi-2d-imper_with_param.ll
@@ -1,92 +1,106 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; RUN: opt %loadPolly %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; ModuleID = './stencils/jacobi-2d-imper/jacobi-2d-imper_with_param.ll'
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 [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=10]
-@B = common global [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=4]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@A = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@B = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func(i64 %n) nounwind {
bb.nph35:
- %0 = add nsw i64 %n, -1 ; <i64> [#uses=1]
- %1 = icmp sgt i64 %0, 2 ; <i1> [#uses=2]
- %tmp = add i64 %n, -3 ; <i64> [#uses=4]
+ %0 = add nsw i64 %n, -1
+ %1 = icmp sgt i64 %0, 2
+ %tmp = add i64 %n, -3
br label %bb5.preheader

-bb.nph: ; preds = %bb5.preheader, %bb4
- %indvar36 = phi i64 [ %tmp50, %bb4 ], [ 0, %bb5.preheader ] ; <i64> [#uses=3]
- %tmp50 = add i64 %indvar36, 1 ; <i64> [#uses=3]
- %tmp53 = add i64 %indvar36, 3 ; <i64> [#uses=1]
- %tmp55 = add i64 %indvar36, 2 ; <i64> [#uses=4]
- %scevgep40.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp55, i64 2 ; <double*> [#uses=1]
- %.pre = load double* %scevgep40.phi.trans.insert, align 16 ; <double> [#uses=1]
+bb.nph: ; preds = %bb.nph.preheader, %bb4
+ %indvar36 = phi i64 [ %tmp50, %bb4 ], [ 0, %bb.nph.preheader ]
+ %tmp13 = add i64 %indvar36, 1
+ %tmp16 = add i64 %indvar36, 3
+ %tmp18 = add i64 %indvar36, 2
+ %scevgep40.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp18, i64 2
+ %.pre = load double* %scevgep40.phi.trans.insert, align 16
br label %bb2

bb2: ; preds = %bb2, %bb.nph
- %2 = phi double [ %.pre, %bb.nph ], [ %5, %bb2 ] ; <double> [#uses=1]
- %indvar = phi i64 [ 0, %bb.nph ], [ %tmp58, %bb2 ] ; <i64> [#uses=3]
- %tmp51 = add i64 %indvar, 2 ; <i64> [#uses=3]
- %scevgep44 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp50, i64 %tmp51 ; <double*> [#uses=1]
- %scevgep42 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp53, i64 %tmp51 ; <double*> [#uses=1]
- %tmp56 = add i64 %indvar, 3 ; <i64> [#uses=1]
- %scevgep48 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp55, i64 %tmp56 ; <double*> [#uses=1]
- %tmp58 = add i64 %indvar, 1 ; <i64> [#uses=3]
- %scevgep46 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp55, i64 %tmp58 ; <double*> [#uses=1]
- %scevgep = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp55, i64 %tmp51 ; <double*> [#uses=1]
- %3 = load double* %scevgep46, align 8 ; <double> [#uses=1]
- %4 = fadd double %2, %3 ; <double> [#uses=1]
- %5 = load double* %scevgep48, align 8 ; <double> [#uses=2]
- %6 = fadd double %4, %5 ; <double> [#uses=1]
- %7 = load double* %scevgep42, align 8 ; <double> [#uses=1]
- %8 = fadd double %6, %7 ; <double> [#uses=1]
- %9 = load double* %scevgep44, align 8 ; <double> [#uses=1]
- %10 = fadd double %8, %9 ; <double> [#uses=1]
- %11 = fmul double %10, 2.000000e-01 ; <double> [#uses=1]
+ %2 = phi double [ %.pre, %bb.nph ], [ %5, %bb2 ]
+ %indvar = phi i64 [ 0, %bb.nph ], [ %tmp58, %bb2 ]
+ %tmp14 = add i64 %indvar, 2
+ %scevgep44 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp13, i64 %tmp14
+ %scevgep42 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp16, i64 %tmp14
+ %scevgep = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp18, i64 %tmp14
+ %tmp20 = add i64 %indvar, 3
+ %scevgep48 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp18, i64 %tmp20
+ %tmp22 = add i64 %indvar, 1
+ %scevgep46 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp18, i64 %tmp22
+ %tmp58 = add i64 %indvar, 1
+ %3 = load double* %scevgep46, align 8
+ %4 = fadd double %2, %3
+ %5 = load double* %scevgep48, align 8
+ %6 = fadd double %4, %5
+ %7 = load double* %scevgep42, align 8
+ %8 = fadd double %6, %7
+ %9 = load double* %scevgep44, align 8
+ %10 = fadd double %8, %9
+ %11 = fmul double %10, 2.000000e-01
store double %11, double* %scevgep, align 8
- %exitcond = icmp eq i64 %tmp58, %tmp ; <i1> [#uses=1]
- br i1 %exitcond, label %bb4, label %bb2
+ %exitcond1 = icmp eq i64 %tmp58, %tmp
+ br i1 %exitcond1, label %bb4, label %bb2

bb4: ; preds = %bb2
- %exitcond49 = icmp eq i64 %tmp50, %tmp ; <i1> [#uses=1]
- br i1 %exitcond49, label %bb11.loopexit, label %bb.nph
+ %tmp50 = add i64 %indvar36, 1
+ %exitcond = icmp eq i64 %tmp50, %tmp
+ br i1 %exitcond, label %bb11.loopexit, label %bb.nph

bb8: ; preds = %bb9.preheader, %bb8
- %indvar62 = phi i64 [ %indvar.next63, %bb8 ], [ 0, %bb9.preheader ] ; <i64> [#uses=2]
- %tmp73 = add i64 %indvar62, 2 ; <i64> [#uses=2]
- %scevgep70 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp72, i64 %tmp73 ; <double*> [#uses=1]
- %scevgep69 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp72, i64 %tmp73 ; <double*> [#uses=1]
- %12 = load double* %scevgep70, align 8 ; <double> [#uses=1]
+ %indvar62 = phi i64 [ %indvar.next63, %bb8 ], [ 0, %bb9.preheader ]
+ %tmp32 = add i64 %indvar62, 2
+ %scevgep70 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp31, i64 %tmp32
+ %scevgep69 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp31, i64 %tmp32
+ %12 = load double* %scevgep70, align 8
store double %12, double* %scevgep69, align 8
- %indvar.next63 = add i64 %indvar62, 1 ; <i64> [#uses=2]
- %exitcond64 = icmp eq i64 %indvar.next63, %tmp ; <i1> [#uses=1]
- br i1 %exitcond64, label %bb10, label %bb8
+ %indvar.next63 = add i64 %indvar62, 1
+ %exitcond25 = icmp eq i64 %indvar.next63, %tmp
+ br i1 %exitcond25, label %bb10, label %bb8

bb10: ; preds = %bb8
- %indvar.next66 = add i64 %indvar65, 1 ; <i64> [#uses=2]
- %exitcond71 = icmp eq i64 %indvar.next66, %tmp ; <i1> [#uses=1]
- br i1 %exitcond71, label %bb12, label %bb9.preheader
+ %indvar.next66 = add i64 %indvar65, 1
+ %exitcond30 = icmp eq i64 %indvar.next66, %tmp
+ br i1 %exitcond30, label %bb12.loopexit, label %bb9.preheader

bb11.loopexit: ; preds = %bb4
- br i1 %1, label %bb9.preheader, label %bb12
+ br i1 %1, label %bb9.preheader.preheader, label %bb12
+
+bb9.preheader.preheader: ; preds = %bb11.loopexit
+ br label %bb9.preheader

-bb9.preheader: ; preds = %bb11.loopexit, %bb10
- %indvar65 = phi i64 [ %indvar.next66, %bb10 ], [ 0, %bb11.loopexit ] ; <i64> [#uses=2]
- %tmp72 = add i64 %indvar65, 2 ; <i64> [#uses=2]
+bb9.preheader: ; preds = %bb9.preheader.preheader, %bb10
+ %indvar65 = phi i64 [ %indvar.next66, %bb10 ], [ 0, %bb9.preheader.preheader ]
+ %tmp31 = add i64 %indvar65, 2
br label %bb8

-bb12: ; preds = %bb5.preheader, %bb11.loopexit, %bb10
- %13 = add nsw i64 %storemerge20, 1 ; <i64> [#uses=2]
- %exitcond76 = icmp eq i64 %13, 20 ; <i1> [#uses=1]
- br i1 %exitcond76, label %return, label %bb5.preheader
+bb12.loopexit: ; preds = %bb10
+ br label %bb12
+
+bb12: ; preds = %bb12.loopexit, %bb5.preheader, %bb11.loopexit
+ %13 = add nsw i64 %storemerge20, 1
+ %exitcond35 = icmp eq i64 %13, 20
+ br i1 %exitcond35, label %return, label %bb5.preheader

bb5.preheader: ; preds = %bb12, %bb.nph35
- %storemerge20 = phi i64 [ 0, %bb.nph35 ], [ %13, %bb12 ] ; <i64> [#uses=1]
- br i1 %1, label %bb.nph, label %bb12
+ %storemerge20 = phi i64 [ 0, %bb.nph35 ], [ %13, %bb12 ]
+ br i1 %1, label %bb.nph.preheader, label %bb12
+
+bb.nph.preheader: ; preds = %bb5.preheader
+ br label %bb.nph

return: ; preds = %bb12
ret void
}
-
-; CHECK: Valid Region for Scop: bb.nph => bb11.loopexit
+; CHECK: Valid Region for Scop: bb5.preheader => return

diff --git a/test/polybench/stencils/jacobi-2d-imper/jacobi-2d-imper_without_param.ll b/test/polybench/stencils/jacobi-2d-imper/jacobi-2d-imper_without_param.ll
index 336b4e7..6d4f359 100644
--- a/test/polybench/stencils/jacobi-2d-imper/jacobi-2d-imper_without_param.ll
+++ b/test/polybench/stencils/jacobi-2d-imper/jacobi-2d-imper_without_param.ll
@@ -1,86 +1,93 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -analyze %s | FileCheck %s
-
+; RUN: opt %loadPolly %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; ModuleID = './stencils/jacobi-2d-imper/jacobi-2d-imper_without_param.ll'
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 [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=10]
-@B = common global [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=4]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@A = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@B = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func() nounwind {
bb.nph35:
br label %bb5.preheader

bb.nph: ; preds = %bb5.preheader, %bb4
- %indvar36 = phi i64 [ %tmp49, %bb4 ], [ 0, %bb5.preheader ] ; <i64> [#uses=3]
- %tmp49 = add i64 %indvar36, 1 ; <i64> [#uses=3]
- %tmp52 = add i64 %indvar36, 3 ; <i64> [#uses=1]
- %tmp54 = add i64 %indvar36, 2 ; <i64> [#uses=4]
- %scevgep39.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp54, i64 2 ; <double*> [#uses=1]
- %.pre = load double* %scevgep39.phi.trans.insert, align 16 ; <double> [#uses=1]
+ %indvar36 = phi i64 [ %tmp49, %bb4 ], [ 0, %bb5.preheader ]
+ %tmp12 = add i64 %indvar36, 1
+ %tmp15 = add i64 %indvar36, 3
+ %tmp17 = add i64 %indvar36, 2
+ %scevgep39.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp17, i64 2
+ %.pre = load double* %scevgep39.phi.trans.insert, align 16
br label %bb2

bb2: ; preds = %bb2, %bb.nph
- %0 = phi double [ %.pre, %bb.nph ], [ %3, %bb2 ] ; <double> [#uses=1]
- %indvar = phi i64 [ 0, %bb.nph ], [ %tmp57, %bb2 ] ; <i64> [#uses=3]
- %tmp50 = add i64 %indvar, 2 ; <i64> [#uses=3]
- %scevgep43 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp49, i64 %tmp50 ; <double*> [#uses=1]
- %scevgep41 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp52, i64 %tmp50 ; <double*> [#uses=1]
- %tmp55 = add i64 %indvar, 3 ; <i64> [#uses=1]
- %scevgep47 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp54, i64 %tmp55 ; <double*> [#uses=1]
- %tmp57 = add i64 %indvar, 1 ; <i64> [#uses=3]
- %scevgep45 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp54, i64 %tmp57 ; <double*> [#uses=1]
- %scevgep = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp54, i64 %tmp50 ; <double*> [#uses=1]
- %1 = load double* %scevgep45, align 8 ; <double> [#uses=1]
- %2 = fadd double %0, %1 ; <double> [#uses=1]
- %3 = load double* %scevgep47, align 8 ; <double> [#uses=2]
- %4 = fadd double %2, %3 ; <double> [#uses=1]
- %5 = load double* %scevgep41, align 8 ; <double> [#uses=1]
- %6 = fadd double %4, %5 ; <double> [#uses=1]
- %7 = load double* %scevgep43, align 8 ; <double> [#uses=1]
- %8 = fadd double %6, %7 ; <double> [#uses=1]
- %9 = fmul double %8, 2.000000e-01 ; <double> [#uses=1]
+ %0 = phi double [ %.pre, %bb.nph ], [ %3, %bb2 ]
+ %indvar = phi i64 [ 0, %bb.nph ], [ %tmp57, %bb2 ]
+ %tmp13 = add i64 %indvar, 2
+ %scevgep43 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp12, i64 %tmp13
+ %scevgep41 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp15, i64 %tmp13
+ %scevgep = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp17, i64 %tmp13
+ %tmp19 = add i64 %indvar, 3
+ %scevgep47 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp17, i64 %tmp19
+ %tmp21 = add i64 %indvar, 1
+ %scevgep45 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp17, i64 %tmp21
+ %tmp57 = add i64 %indvar, 1
+ %1 = load double* %scevgep45, align 8
+ %2 = fadd double %0, %1
+ %3 = load double* %scevgep47, align 8
+ %4 = fadd double %2, %3
+ %5 = load double* %scevgep41, align 8
+ %6 = fadd double %4, %5
+ %7 = load double* %scevgep43, align 8
+ %8 = fadd double %6, %7
+ %9 = fmul double %8, 2.000000e-01
store double %9, double* %scevgep, align 8
- %exitcond = icmp eq i64 %tmp57, 1021 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb4, label %bb2
+ %exitcond1 = icmp eq i64 %tmp57, 1021
+ br i1 %exitcond1, label %bb4, label %bb2

bb4: ; preds = %bb2
- %exitcond48 = icmp eq i64 %tmp49, 1021 ; <i1> [#uses=1]
- br i1 %exitcond48, label %bb9.preheader, label %bb.nph
+ %tmp49 = add i64 %indvar36, 1
+ %exitcond = icmp eq i64 %tmp49, 1021
+ br i1 %exitcond, label %bb9.preheader.loopexit, label %bb.nph

bb8: ; preds = %bb9.preheader, %bb8
- %indvar61 = phi i64 [ %indvar.next62, %bb8 ], [ 0, %bb9.preheader ] ; <i64> [#uses=2]
- %tmp71 = add i64 %indvar61, 2 ; <i64> [#uses=2]
- %scevgep68 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp70, i64 %tmp71 ; <double*> [#uses=1]
- %scevgep67 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp70, i64 %tmp71 ; <double*> [#uses=1]
- %10 = load double* %scevgep68, align 8 ; <double> [#uses=1]
+ %indvar61 = phi i64 [ %indvar.next62, %bb8 ], [ 0, %bb9.preheader ]
+ %tmp30 = add i64 %indvar61, 2
+ %scevgep68 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp29, i64 %tmp30
+ %scevgep67 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp29, i64 %tmp30
+ %10 = load double* %scevgep68, align 8
store double %10, double* %scevgep67, align 8
- %indvar.next62 = add i64 %indvar61, 1 ; <i64> [#uses=2]
- %exitcond63 = icmp eq i64 %indvar.next62, 1021 ; <i1> [#uses=1]
- br i1 %exitcond63, label %bb10, label %bb8
+ %indvar.next62 = add i64 %indvar61, 1
+ %exitcond24 = icmp eq i64 %indvar.next62, 1021
+ br i1 %exitcond24, label %bb10, label %bb8

bb10: ; preds = %bb8
- %indvar.next65 = add i64 %indvar64, 1 ; <i64> [#uses=2]
- %exitcond69 = icmp eq i64 %indvar.next65, 1021 ; <i1> [#uses=1]
- br i1 %exitcond69, label %bb12, label %bb9.preheader
+ %indvar.next65 = add i64 %indvar64, 1
+ %exitcond28 = icmp eq i64 %indvar.next65, 1021
+ br i1 %exitcond28, label %bb12, label %bb9.preheader
+
+bb9.preheader.loopexit: ; preds = %bb4
+ br label %bb9.preheader

-bb9.preheader: ; preds = %bb10, %bb4
- %indvar64 = phi i64 [ %indvar.next65, %bb10 ], [ 0, %bb4 ] ; <i64> [#uses=2]
- %tmp70 = add i64 %indvar64, 2 ; <i64> [#uses=2]
+bb9.preheader: ; preds = %bb9.preheader.loopexit, %bb10
+ %indvar64 = phi i64 [ %indvar.next65, %bb10 ], [ 0, %bb9.preheader.loopexit ]
+ %tmp29 = add i64 %indvar64, 2
br label %bb8

bb12: ; preds = %bb10
- %11 = add nsw i64 %storemerge20, 1 ; <i64> [#uses=2]
- %exitcond74 = icmp eq i64 %11, 20 ; <i1> [#uses=1]
- br i1 %exitcond74, label %return, label %bb5.preheader
+ %11 = add nsw i64 %storemerge20, 1
+ %exitcond33 = icmp eq i64 %11, 20
+ br i1 %exitcond33, label %return, label %bb5.preheader

bb5.preheader: ; preds = %bb12, %bb.nph35
- %storemerge20 = phi i64 [ 0, %bb.nph35 ], [ %11, %bb12 ] ; <i64> [#uses=1]
+ %storemerge20 = phi i64 [ 0, %bb.nph35 ], [ %11, %bb12 ]
br label %bb.nph

return: ; preds = %bb12
ret void
}
-
-; CHECK: Valid Region for Scop: bb.nph => bb9.preheader.loopexit
+; CHECK: Valid Region for Scop: bb5.preheader => return
diff --git a/test/polybench/stencils/seidel/seidel_with_param.ll b/test/polybench/stencils/seidel/seidel_with_param.ll
index 69e4556..4c45833 100644
--- a/test/polybench/stencils/seidel/seidel_with_param.ll
+++ b/test/polybench/stencils/seidel/seidel_with_param.ll
@@ -1,78 +1,96 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-analyze-ir -print-top-scop-only -analyze %s | FileCheck %s
-; Unknown failure reason.
+; RUN: opt %loadPolly %defaultOpts -polly-analyze-ir -print-top-scop-only -analyze %s | FileCheck %s
; XFAIL: *
+; ModuleID = './stencils/seidel/seidel_with_param.ll'
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 [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=24]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@A = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func(i64 %n) nounwind {
bb.nph20:
- %0 = add nsw i64 %n, -2 ; <i64> [#uses=3]
- %1 = icmp slt i64 %0, 1 ; <i1> [#uses=2]
- br i1 %1, label %return, label %bb.nph8
+ %0 = add nsw i64 %n, -2
+ %1 = icmp slt i64 %0, 1
+ br i1 %1, label %return, label %bb.nph8.preheader
+
+bb.nph8.preheader: ; preds = %bb.nph20
+ br label %bb.nph8

-bb.nph: ; preds = %bb.nph8, %bb4
- %indvar21 = phi i64 [ %tmp39, %bb4 ], [ 0, %bb.nph8 ] ; <i64> [#uses=5]
- %tmp39 = add i64 %indvar21, 1 ; <i64> [#uses=5]
- %tmp43 = add i64 %indvar21, 2 ; <i64> [#uses=4]
- %scevgep26.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %indvar21, i64 1 ; <double*> [#uses=1]
- %.pre = load double* %scevgep26.phi.trans.insert, align 8 ; <double> [#uses=1]
- %scevgep25.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp39, i64 1 ; <double*> [#uses=1]
- %.pre47 = load double* %scevgep25.phi.trans.insert, align 8 ; <double> [#uses=1]
- %scevgep.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp43, i64 1 ; <double*> [#uses=1]
- %.pre48 = load double* %scevgep.phi.trans.insert, align 8 ; <double> [#uses=1]
- %scevgep30.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp39, i64 0 ; <double*> [#uses=1]
- %.pre49 = load double* %scevgep30.phi.trans.insert, align 32 ; <double> [#uses=1]
+bb.nph: ; preds = %bb.nph.preheader, %bb4
+ %indvar21 = phi i64 [ %tmp39, %bb4 ], [ 0, %bb.nph.preheader ]
+ %tmp5 = add i64 %indvar21, 1
+ %tmp43 = add i64 %indvar21, 2
+ %scevgep26.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %indvar21, i64 1
+ %scevgep.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp43, i64 1
+ %scevgep30.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp5, i64 0
+ %scevgep25.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp5, i64 1
+ %tmp39 = add i64 %indvar21, 1
+ %.pre = load double* %scevgep26.phi.trans.insert, align 8
+ %.pre47 = load double* %scevgep25.phi.trans.insert, align 8
+ %.pre48 = load double* %scevgep.phi.trans.insert, align 8
+ %.pre49 = load double* %scevgep30.phi.trans.insert, align 32
br label %bb2

bb2: ; preds = %bb2, %bb.nph
- %2 = phi double [ %.pre49, %bb.nph ], [ %19, %bb2 ] ; <double> [#uses=1]
- %3 = phi double [ %.pre48, %bb.nph ], [ %17, %bb2 ] ; <double> [#uses=1]
- %4 = phi double [ %.pre47, %bb.nph ], [ %12, %bb2 ] ; <double> [#uses=1]
- %5 = phi double [ %.pre, %bb.nph ], [ %8, %bb2 ] ; <double> [#uses=1]
- %indvar = phi i64 [ 0, %bb.nph ], [ %tmp37, %bb2 ] ; <i64> [#uses=4]
- %tmp34 = add i64 %indvar, 2 ; <i64> [#uses=4]
- %scevgep29 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %indvar21, i64 %tmp34 ; <double*> [#uses=1]
- %scevgep27 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %indvar21, i64 %indvar ; <double*> [#uses=1]
- %tmp37 = add i64 %indvar, 1 ; <i64> [#uses=2]
- %scevgep31 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp39, i64 %tmp34 ; <double*> [#uses=1]
- %scevgep25 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp39, i64 %tmp37 ; <double*> [#uses=1]
- %scevgep33 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp43, i64 %tmp34 ; <double*> [#uses=1]
- %scevgep32 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp43, i64 %indvar ; <double*> [#uses=1]
- %6 = load double* %scevgep27, align 8 ; <double> [#uses=1]
- %7 = fadd double %6, %5 ; <double> [#uses=1]
- %8 = load double* %scevgep29, align 8 ; <double> [#uses=2]
- %9 = fadd double %7, %8 ; <double> [#uses=1]
- %10 = fadd double %9, %2 ; <double> [#uses=1]
- %11 = fadd double %10, %4 ; <double> [#uses=1]
- %12 = load double* %scevgep31, align 8 ; <double> [#uses=2]
- %13 = fadd double %11, %12 ; <double> [#uses=1]
- %14 = load double* %scevgep32, align 8 ; <double> [#uses=1]
- %15 = fadd double %13, %14 ; <double> [#uses=1]
- %16 = fadd double %15, %3 ; <double> [#uses=1]
- %17 = load double* %scevgep33, align 8 ; <double> [#uses=2]
- %18 = fadd double %16, %17 ; <double> [#uses=1]
- %19 = fdiv double %18, 9.000000e+00 ; <double> [#uses=2]
+ %2 = phi double [ %.pre49, %bb.nph ], [ %19, %bb2 ]
+ %3 = phi double [ %.pre48, %bb.nph ], [ %17, %bb2 ]
+ %4 = phi double [ %.pre47, %bb.nph ], [ %12, %bb2 ]
+ %5 = phi double [ %.pre, %bb.nph ], [ %8, %bb2 ]
+ %indvar = phi i64 [ 0, %bb.nph ], [ %tmp37, %bb2 ]
+ %tmp4 = add i64 %indvar, 2
+ %scevgep29 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %indvar21, i64 %tmp4
+ %scevgep27 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %indvar21, i64 %indvar
+ %scevgep31 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp5, i64 %tmp4
+ %tmp6 = add i64 %indvar, 1
+ %scevgep25 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp5, i64 %tmp6
+ %scevgep33 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp43, i64 %tmp4
+ %scevgep32 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp43, i64 %indvar
+ %tmp34 = add i64 %indvar, 2
+ %tmp37 = add i64 %indvar, 1
+ %6 = load double* %scevgep27, align 8
+ %7 = fadd double %6, %5
+ %8 = load double* %scevgep29, align 8
+ %9 = fadd double %7, %8
+ %10 = fadd double %9, %2
+ %11 = fadd double %10, %4
+ %12 = load double* %scevgep31, align 8
+ %13 = fadd double %11, %12
+ %14 = load double* %scevgep32, align 8
+ %15 = fadd double %13, %14
+ %16 = fadd double %15, %3
+ %17 = load double* %scevgep33, align 8
+ %18 = fadd double %16, %17
+ %19 = fdiv double %18, 9.000000e+00
store double %19, double* %scevgep25, align 8
- %20 = icmp slt i64 %0, %tmp34 ; <i1> [#uses=1]
+ %20 = icmp slt i64 %0, %tmp34
br i1 %20, label %bb4, label %bb2

bb4: ; preds = %bb2
- %21 = icmp slt i64 %0, %tmp43 ; <i1> [#uses=1]
- br i1 %21, label %bb6, label %bb.nph
+ %21 = icmp slt i64 %0, %tmp43
+ br i1 %21, label %bb6.loopexit, label %bb.nph
+
+bb.nph8: ; preds = %bb.nph8.preheader, %bb6
+ %storemerge9 = phi i64 [ %22, %bb6 ], [ 0, %bb.nph8.preheader ]
+ br i1 %1, label %bb6, label %bb.nph.preheader
+
+bb.nph.preheader: ; preds = %bb.nph8
+ br label %bb.nph
+
+bb6.loopexit: ; preds = %bb4
+ br label %bb6

-bb.nph8: ; preds = %bb6, %bb.nph20
- %storemerge9 = phi i64 [ %22, %bb6 ], [ 0, %bb.nph20 ] ; <i64> [#uses=1]
- br i1 %1, label %bb6, label %bb.nph
+bb6: ; preds = %bb6.loopexit, %bb.nph8
+ %22 = add nsw i64 %storemerge9, 1
+ %exitcond8 = icmp eq i64 %22, 20
+ br i1 %exitcond8, label %return.loopexit, label %bb.nph8

-bb6: ; preds = %bb.nph8, %bb4
- %22 = add nsw i64 %storemerge9, 1 ; <i64> [#uses=2]
- %exitcond = icmp eq i64 %22, 20 ; <i1> [#uses=1]
- br i1 %exitcond, label %return, label %bb.nph8
+return.loopexit: ; preds = %bb6
+ br label %return

-return: ; preds = %bb6, %bb.nph20
+return: ; preds = %return.loopexit, %bb.nph20
ret void
}
diff --git a/test/polybench/stencils/seidel/seidel_without_param.ll b/test/polybench/stencils/seidel/seidel_without_param.ll
index 8e32c1b..1a13b33 100644
--- a/test/polybench/stencils/seidel/seidel_without_param.ll
+++ b/test/polybench/stencils/seidel/seidel_without_param.ll
@@ -1,79 +1,81 @@
-; RUN: opt %loadPolly %polybenchOpts %defaultOpts -polly-detect -analyze %s | FileCheck %s
-
+; RUN: opt %loadPolly %defaultOpts -polly-detect -analyze %s | FileCheck %s
+; ModuleID = './stencils/seidel/seidel_without_param.ll'
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 [1024 x [1024 x double]] zeroinitializer, align 32 ; <[1024 x [1024 x double]]*> [#uses=24]
-@stderr = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=6]
-@.str = private constant [8 x i8] c"%0.2lf \00", align 1 ; <[8 x i8]*> [#uses=1]
+
+@A = common global [1024 x [1024 x double]] zeroinitializer, align 32
+@stderr = external global %struct._IO_FILE*
+@.str = private constant [8 x i8] c"%0.2lf \00", align 1
+
define void @scop_func() nounwind {
bb.nph20.bb.nph20.split_crit_edge:
br label %bb5.preheader

bb.nph: ; preds = %bb5.preheader, %bb4
- %indvar21 = phi i64 [ %tmp40, %bb4 ], [ 0, %bb5.preheader ] ; <i64> [#uses=5]
- %tmp40 = add i64 %indvar21, 1 ; <i64> [#uses=6]
- %tmp44 = add i64 %indvar21, 2 ; <i64> [#uses=3]
- %scevgep26.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %indvar21, i64 1 ; <double*> [#uses=1]
- %.pre = load double* %scevgep26.phi.trans.insert, align 8 ; <double> [#uses=1]
- %scevgep25.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp40, i64 1 ; <double*> [#uses=1]
- %.pre49 = load double* %scevgep25.phi.trans.insert, align 8 ; <double> [#uses=1]
- %scevgep.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp44, i64 1 ; <double*> [#uses=1]
- %.pre50 = load double* %scevgep.phi.trans.insert, align 8 ; <double> [#uses=1]
- %scevgep30.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp40, i64 0 ; <double*> [#uses=1]
- %.pre51 = load double* %scevgep30.phi.trans.insert, align 32 ; <double> [#uses=1]
+ %indvar21 = phi i64 [ %tmp40, %bb4 ], [ 0, %bb5.preheader ]
+ %tmp6 = add i64 %indvar21, 1
+ %tmp8 = add i64 %indvar21, 2
+ %scevgep26.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %indvar21, i64 1
+ %scevgep.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp8, i64 1
+ %scevgep30.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp6, i64 0
+ %scevgep25.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp6, i64 1
+ %tmp40 = add i64 %indvar21, 1
+ %.pre = load double* %scevgep26.phi.trans.insert, align 8
+ %.pre49 = load double* %scevgep25.phi.trans.insert, align 8
+ %.pre50 = load double* %scevgep.phi.trans.insert, align 8
+ %.pre51 = load double* %scevgep30.phi.trans.insert, align 32
br label %bb2

bb2: ; preds = %bb2, %bb.nph
- %0 = phi double [ %.pre51, %bb.nph ], [ %17, %bb2 ] ; <double> [#uses=1]
- %1 = phi double [ %.pre50, %bb.nph ], [ %15, %bb2 ] ; <double> [#uses=1]
- %2 = phi double [ %.pre49, %bb.nph ], [ %10, %bb2 ] ; <double> [#uses=1]
- %3 = phi double [ %.pre, %bb.nph ], [ %6, %bb2 ] ; <double> [#uses=1]
- %indvar = phi i64 [ 0, %bb.nph ], [ %tmp38, %bb2 ] ; <i64> [#uses=4]
- %tmp35 = add i64 %indvar, 2 ; <i64> [#uses=3]
- %scevgep29 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %indvar21, i64 %tmp35 ; <double*> [#uses=1]
- %scevgep27 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %indvar21, i64 %indvar ; <double*> [#uses=1]
- %tmp38 = add i64 %indvar, 1 ; <i64> [#uses=3]
- %scevgep31 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp40, i64 %tmp35 ; <double*> [#uses=1]
- %scevgep25 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp40, i64 %tmp38 ; <double*> [#uses=1]
- %scevgep33 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp44, i64 %tmp35 ; <double*> [#uses=1]
- %scevgep32 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp44, i64 %indvar ; <double*> [#uses=1]
- %4 = load double* %scevgep27, align 8 ; <double> [#uses=1]
- %5 = fadd double %4, %3 ; <double> [#uses=1]
- %6 = load double* %scevgep29, align 8 ; <double> [#uses=2]
- %7 = fadd double %5, %6 ; <double> [#uses=1]
- %8 = fadd double %7, %0 ; <double> [#uses=1]
- %9 = fadd double %8, %2 ; <double> [#uses=1]
- %10 = load double* %scevgep31, align 8 ; <double> [#uses=2]
- %11 = fadd double %9, %10 ; <double> [#uses=1]
- %12 = load double* %scevgep32, align 8 ; <double> [#uses=1]
- %13 = fadd double %11, %12 ; <double> [#uses=1]
- %14 = fadd double %13, %1 ; <double> [#uses=1]
- %15 = load double* %scevgep33, align 8 ; <double> [#uses=2]
- %16 = fadd double %14, %15 ; <double> [#uses=1]
- %17 = fdiv double %16, 9.000000e+00 ; <double> [#uses=2]
+ %0 = phi double [ %.pre51, %bb.nph ], [ %17, %bb2 ]
+ %1 = phi double [ %.pre50, %bb.nph ], [ %15, %bb2 ]
+ %2 = phi double [ %.pre49, %bb.nph ], [ %10, %bb2 ]
+ %3 = phi double [ %.pre, %bb.nph ], [ %6, %bb2 ]
+ %indvar = phi i64 [ 0, %bb.nph ], [ %tmp38, %bb2 ]
+ %tmp5 = add i64 %indvar, 2
+ %scevgep29 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %indvar21, i64 %tmp5
+ %scevgep27 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %indvar21, i64 %indvar
+ %scevgep31 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp6, i64 %tmp5
+ %tmp7 = add i64 %indvar, 1
+ %scevgep25 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp6, i64 %tmp7
+ %scevgep33 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp8, i64 %tmp5
+ %scevgep32 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp8, i64 %indvar
+ %tmp38 = add i64 %indvar, 1
+ %4 = load double* %scevgep27, align 8
+ %5 = fadd double %4, %3
+ %6 = load double* %scevgep29, align 8
+ %7 = fadd double %5, %6
+ %8 = fadd double %7, %0
+ %9 = fadd double %8, %2
+ %10 = load double* %scevgep31, align 8
+ %11 = fadd double %9, %10
+ %12 = load double* %scevgep32, align 8
+ %13 = fadd double %11, %12
+ %14 = fadd double %13, %1
+ %15 = load double* %scevgep33, align 8
+ %16 = fadd double %14, %15
+ %17 = fdiv double %16, 9.000000e+00
store double %17, double* %scevgep25, align 8
- %exitcond = icmp eq i64 %tmp38, 1022 ; <i1> [#uses=1]
- br i1 %exitcond, label %bb4, label %bb2
+ %exitcond1 = icmp eq i64 %tmp38, 1022
+ br i1 %exitcond1, label %bb4, label %bb2

bb4: ; preds = %bb2
- %exitcond34 = icmp eq i64 %tmp40, 1022 ; <i1> [#uses=1]
- br i1 %exitcond34, label %bb6, label %bb.nph
+ %exitcond = icmp eq i64 %tmp40, 1022
+ br i1 %exitcond, label %bb6, label %bb.nph

bb6: ; preds = %bb4
- %18 = add nsw i64 %storemerge9, 1 ; <i64> [#uses=2]
- %exitcond48 = icmp eq i64 %18, 20 ; <i1> [#uses=1]
- br i1 %exitcond48, label %return, label %bb5.preheader
+ %18 = add nsw i64 %storemerge9, 1
+ %exitcond9 = icmp eq i64 %18, 20
+ br i1 %exitcond9, label %return, label %bb5.preheader

bb5.preheader: ; preds = %bb6, %bb.nph20.bb.nph20.split_crit_edge
- %storemerge9 = phi i64 [ 0, %bb.nph20.bb.nph20.split_crit_edge ], [ %18, %bb6 ] ; <i64> [#uses=1]
+ %storemerge9 = phi i64 [ 0, %bb.nph20.bb.nph20.split_crit_edge ], [ %18, %bb6 ]
br label %bb.nph

return: ; preds = %bb6
ret void
}
-
; CHECK: Valid Region for Scop: bb5.preheader => return
-
-

Reply all
Reply to author
Forward
0 new messages