summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--polly/lib/Analysis/ScopInfo.cpp7
-rw-r--r--polly/test/Isl/Ast/simple-run-time-condition.ll4
-rw-r--r--polly/test/ScopInfo/assume_gep_bounds_2.ll3
-rw-r--r--polly/test/ScopInfo/assume_gep_bounds_many.ll771
-rw-r--r--polly/test/ScopInfo/remarks.ll2
-rw-r--r--polly/test/ScopInfo/user_provided_non_dominating_assumptions.ll3
6 files changed, 786 insertions, 4 deletions
diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp
index 3dfc6b50fa6..5cc84e09683 100644
--- a/polly/lib/Analysis/ScopInfo.cpp
+++ b/polly/lib/Analysis/ScopInfo.cpp
@@ -137,6 +137,11 @@ static cl::opt<bool> UnprofitableScalarAccs(
cl::desc("Count statements with scalar accesses as not optimizable"),
cl::Hidden, cl::init(true), cl::cat(PollyCategory));
+static cl::opt<bool> PollyPreciseInbounds(
+ "polly-precise-inbounds",
+ cl::desc("Take more precise inbounds assumptions (do not scale well)"),
+ cl::Hidden, cl::init(false), cl::cat(PollyCategory));
+
//===----------------------------------------------------------------------===//
// Create a sequence of two schedules. Either argument may be null and is
@@ -703,6 +708,8 @@ void MemoryAccess::assumeNoOutOfBound() {
const auto &Loc = getAccessInstruction()
? getAccessInstruction()->getDebugLoc()
: DebugLoc();
+ if (!PollyPreciseInbounds)
+ Outside = isl_set_gist(Outside, isl_set_params(Statement->getDomain()));
Statement->getParent()->recordAssumption(INBOUNDS, Outside, Loc,
AS_ASSUMPTION);
isl_space_free(Space);
diff --git a/polly/test/Isl/Ast/simple-run-time-condition.ll b/polly/test/Isl/Ast/simple-run-time-condition.ll
index 46b929266af..b02db7b1d3a 100644
--- a/polly/test/Isl/Ast/simple-run-time-condition.ll
+++ b/polly/test/Isl/Ast/simple-run-time-condition.ll
@@ -1,4 +1,6 @@
-; RUN: opt %loadPolly -polly-ast -analyze < %s | FileCheck %s
+; RUN: opt %loadPolly -polly-ast -analyze -polly-precise-inbounds < %s \
+; RUN: | FileCheck %s
+
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
; void foo(long n, long m, int o, double A[n][m], long p, long q) {
diff --git a/polly/test/ScopInfo/assume_gep_bounds_2.ll b/polly/test/ScopInfo/assume_gep_bounds_2.ll
index f872a7f251e..d364211bc54 100644
--- a/polly/test/ScopInfo/assume_gep_bounds_2.ll
+++ b/polly/test/ScopInfo/assume_gep_bounds_2.ll
@@ -1,4 +1,5 @@
-; RUN: opt %loadPolly -basicaa -polly-scops -analyze < %s | FileCheck %s
+; RUN: opt %loadPolly -basicaa -polly-scops -analyze < %s \
+; RUN: -polly-precise-inbounds | FileCheck %s
;
; void foo(float A[restrict][20], float B[restrict][20], long n, long m,
; long p) {
diff --git a/polly/test/ScopInfo/assume_gep_bounds_many.ll b/polly/test/ScopInfo/assume_gep_bounds_many.ll
new file mode 100644
index 00000000000..39e63b77c33
--- /dev/null
+++ b/polly/test/ScopInfo/assume_gep_bounds_many.ll
@@ -0,0 +1,771 @@
+; RUN: opt %loadPolly -analyze -polly-scops -polly-ignore-aliasing \
+; RUN: < %s | FileCheck %s
+
+; CHECK: Assumed Context:
+; CHECK-NEXT: [n1_a, n1_b, n1_c, n1_d, n2_a, n2_b, n2_c, n2_d, n3_a, n3_b, n3_c, n3_d, n4_a, n4_b, n4_c, n4_d, n5_a, n5_b, n5_c, n5_d, n6_a, n6_b, n6_c, n6_d, n7_a, n7_b, n7_c, n7_d, n8_a, n8_b, n8_c, n8_d, n9_a, n9_b, n9_c, n9_d, p1_b, p1_c, p1_d, p2_b, p2_c, p2_d, p3_b, p3_c, p3_d, p4_b, p4_c, p4_d, p5_b, p5_c, p5_d, p6_b, p6_c, p6_d, p7_b, p7_c, p7_d, p8_b, p8_c, p8_d, p9_b, p9_c, p9_d] -> { : p1_b >= n1_b and p1_c >= n1_c and p1_d >= n1_d and p2_b >= n2_b and p2_c >= n2_c and p2_d >= n2_d and p3_b >= n3_b and p3_c >= n3_c and p3_d >= n3_d and p4_b >= n4_b and p4_c >= n4_c and p4_d >= n4_d and p5_b >= n5_b and p5_c >= n5_c and p5_d >= n5_d and p6_b >= n6_b and p6_c >= n6_c and p6_d >= n6_d and p7_b >= n7_b and p7_c >= n7_c and p7_d >= n7_d and p8_b >= n8_b and p8_c >= n8_c and p8_d >= n8_d and p9_b >= n9_b and p9_c >= n9_c and p9_d >= n9_d }
+; CHECK-NEXT: Invalid Context:
+; CHECK-NEXT: [n1_a, n1_b, n1_c, n1_d, n2_a, n2_b, n2_c, n2_d, n3_a, n3_b, n3_c, n3_d, n4_a, n4_b, n4_c, n4_d, n5_a, n5_b, n5_c, n5_d, n6_a, n6_b, n6_c, n6_d, n7_a, n7_b, n7_c, n7_d, n8_a, n8_b, n8_c, n8_d, n9_a, n9_b, n9_c, n9_d, p1_b, p1_c, p1_d, p2_b, p2_c, p2_d, p3_b, p3_c, p3_d, p4_b, p4_c, p4_d, p5_b, p5_c, p5_d, p6_b, p6_c, p6_d, p7_b, p7_c, p7_d, p8_b, p8_c, p8_d, p9_b, p9_c, p9_d] -> { : 1 = 0 }
+
+
+;
+; void foo(long n1_a, long n1_b, long n1_c, long n1_d, long n2_a, long n2_b,
+; long n2_c, long n2_d, long n3_a, long n3_b, long n3_c, long n3_d,
+; long n4_a, long n4_b, long n4_c, long n4_d, long n5_a, long n5_b,
+; long n5_c, long n5_d, long n6_a, long n6_b, long n6_c, long n6_d,
+; long n7_a, long n7_b, long n7_c, long n7_d, long n8_a, long n8_b,
+; long n8_c, long n8_d, long n9_a, long n9_b, long n9_c, long n9_d,
+; long p1_b, long p1_c, long p1_d, long p2_b, long p2_c, long p2_d,
+; long p3_b, long p3_c, long p3_d, long p4_b, long p4_c, long p4_d,
+; long p5_b, long p5_c, long p5_d, long p6_b, long p6_c, long p6_d,
+; long p7_b, long p7_c, long p7_d, long p8_b, long p8_c, long p8_d,
+; long p9_b, long p9_c, long p9_d, float A_1[][p1_b][p1_c][p1_d],
+; float A_2[][p2_b][p2_c][p2_d], float A_3[][p3_b][p3_c][p3_d],
+; float A_4[][p4_b][p4_c][p4_d], float A_5[][p5_b][p5_c][p5_d],
+; float A_6[][p6_b][p6_c][p6_d], float A_7[][p7_b][p7_c][p7_d],
+; float A_8[][p8_b][p8_c][p8_d], float A_9[][p9_b][p9_c][p9_d]) {
+; for (long i = 0; i < n1_a; i++)
+; for (long j = 0; j < n1_b; j++)
+; for (long k = 0; k < n1_c; k++)
+; for (long l = 0; l < n1_d; l++)
+; A_1[i][j][k][l] += i + j + k + l;
+; for (long i = 0; i < n2_a; i++)
+; for (long j = 0; j < n2_b; j++)
+; for (long k = 0; k < n2_c; k++)
+; for (long l = 0; l < n2_d; l++)
+; A_2[i][j][k][l] += i + j + k + l;
+; for (long i = 0; i < n3_a; i++)
+; for (long j = 0; j < n3_b; j++)
+; for (long k = 0; k < n3_c; k++)
+; for (long l = 0; l < n3_d; l++)
+; A_3[i][j][k][l] += i + j + k + l;
+; for (long i = 0; i < n4_a; i++)
+; for (long j = 0; j < n4_b; j++)
+; for (long k = 0; k < n4_c; k++)
+; for (long l = 0; l < n4_d; l++)
+; A_4[i][j][k][l] += i + j + k + l;
+; for (long i = 0; i < n5_a; i++)
+; for (long j = 0; j < n5_b; j++)
+; for (long k = 0; k < n5_c; k++)
+; for (long l = 0; l < n5_d; l++)
+; A_5[i][j][k][l] += i + j + k + l;
+; for (long i = 0; i < n6_a; i++)
+; for (long j = 0; j < n6_b; j++)
+; for (long k = 0; k < n6_c; k++)
+; for (long l = 0; l < n6_d; l++)
+; A_6[i][j][k][l] += i + j + k + l;
+; for (long i = 0; i < n7_a; i++)
+; for (long j = 0; j < n7_b; j++)
+; for (long k = 0; k < n7_c; k++)
+; for (long l = 0; l < n7_d; l++)
+; A_7[i][j][k][l] += i + j + k + l;
+; for (long i = 0; i < n8_a; i++)
+; for (long j = 0; j < n8_b; j++)
+; for (long k = 0; k < n8_c; k++)
+; for (long l = 0; l < n8_d; l++)
+; A_8[i][j][k][l] += i + j + k + l;
+; for (long i = 0; i < n9_a; i++)
+; for (long j = 0; j < n9_b; j++)
+; for (long k = 0; k < n9_c; k++)
+; for (long l = 0; l < n9_d; l++)
+; A_9[i][j][k][l] += i + j + k + l;
+; }
+;
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+define void @foo(i64 %n1_a, i64 %n1_b, i64 %n1_c, i64 %n1_d, i64 %n2_a, i64 %n2_b, i64 %n2_c, i64 %n2_d, i64 %n3_a, i64 %n3_b, i64 %n3_c, i64 %n3_d, i64 %n4_a, i64 %n4_b, i64 %n4_c, i64 %n4_d, i64 %n5_a, i64 %n5_b, i64 %n5_c, i64 %n5_d, i64 %n6_a, i64 %n6_b, i64 %n6_c, i64 %n6_d, i64 %n7_a, i64 %n7_b, i64 %n7_c, i64 %n7_d, i64 %n8_a, i64 %n8_b, i64 %n8_c, i64 %n8_d, i64 %n9_a, i64 %n9_b, i64 %n9_c, i64 %n9_d, i64 %p1_b, i64 %p1_c, i64 %p1_d, i64 %p2_b, i64 %p2_c, i64 %p2_d, i64 %p3_b, i64 %p3_c, i64 %p3_d, i64 %p4_b, i64 %p4_c, i64 %p4_d, i64 %p5_b, i64 %p5_c, i64 %p5_d, i64 %p6_b, i64 %p6_c, i64 %p6_d, i64 %p7_b, i64 %p7_c, i64 %p7_d, i64 %p8_b, i64 %p8_c, i64 %p8_d, i64 %p9_b, i64 %p9_c, i64 %p9_d, float* %A_1, float* %A_2, float* %A_3, float* %A_4, float* %A_5, float* %A_6, float* %A_7, float* %A_8, float* %A_9) {
+bb:
+ br label %bb1
+
+bb1: ; preds = %bb37, %bb
+ %i.0 = phi i64 [ 0, %bb ], [ %tmp38, %bb37 ]
+ %tmp = icmp slt i64 %i.0, %n1_a
+ br i1 %tmp, label %bb2, label %bb39
+
+bb2: ; preds = %bb1
+ br label %bb3
+
+bb3: ; preds = %bb34, %bb2
+ %j.0 = phi i64 [ 0, %bb2 ], [ %tmp35, %bb34 ]
+ %tmp4 = icmp slt i64 %j.0, %n1_b
+ br i1 %tmp4, label %bb5, label %bb36
+
+bb5: ; preds = %bb3
+ br label %bb6
+
+bb6: ; preds = %bb31, %bb5
+ %k.0 = phi i64 [ 0, %bb5 ], [ %tmp32, %bb31 ]
+ %tmp7 = icmp slt i64 %k.0, %n1_c
+ br i1 %tmp7, label %bb8, label %bb33
+
+bb8: ; preds = %bb6
+ br label %bb9
+
+bb9: ; preds = %bb28, %bb8
+ %l.0 = phi i64 [ 0, %bb8 ], [ %tmp29, %bb28 ]
+ %tmp10 = icmp slt i64 %l.0, %n1_d
+ br i1 %tmp10, label %bb11, label %bb30
+
+bb11: ; preds = %bb9
+ %tmp12 = add nuw nsw i64 %i.0, %j.0
+ %tmp13 = add nsw i64 %tmp12, %k.0
+ %tmp14 = add nsw i64 %tmp13, %l.0
+ %tmp15 = sitofp i64 %tmp14 to float
+ %tmp16 = mul nuw i64 %p1_b, %p1_c
+ %tmp17 = mul nuw i64 %tmp16, %p1_d
+ %tmp18 = mul nsw i64 %i.0, %tmp17
+ %tmp19 = getelementptr inbounds float, float* %A_1, i64 %tmp18
+ %tmp20 = mul nuw i64 %p1_c, %p1_d
+ %tmp21 = mul nsw i64 %j.0, %tmp20
+ %tmp22 = getelementptr inbounds float, float* %tmp19, i64 %tmp21
+ %tmp23 = mul nsw i64 %k.0, %p1_d
+ %tmp24 = getelementptr inbounds float, float* %tmp22, i64 %tmp23
+ %tmp25 = getelementptr inbounds float, float* %tmp24, i64 %l.0
+ %tmp26 = load float, float* %tmp25, align 4
+ %tmp27 = fadd float %tmp26, %tmp15
+ store float %tmp27, float* %tmp25, align 4
+ br label %bb28
+
+bb28: ; preds = %bb11
+ %tmp29 = add nuw nsw i64 %l.0, 1
+ br label %bb9
+
+bb30: ; preds = %bb9
+ br label %bb31
+
+bb31: ; preds = %bb30
+ %tmp32 = add nuw nsw i64 %k.0, 1
+ br label %bb6
+
+bb33: ; preds = %bb6
+ br label %bb34
+
+bb34: ; preds = %bb33
+ %tmp35 = add nuw nsw i64 %j.0, 1
+ br label %bb3
+
+bb36: ; preds = %bb3
+ br label %bb37
+
+bb37: ; preds = %bb36
+ %tmp38 = add nuw nsw i64 %i.0, 1
+ br label %bb1
+
+bb39: ; preds = %bb1
+ br label %bb40
+
+bb40: ; preds = %bb77, %bb39
+ %i1.0 = phi i64 [ 0, %bb39 ], [ %tmp78, %bb77 ]
+ %tmp41 = icmp slt i64 %i1.0, %n2_a
+ br i1 %tmp41, label %bb42, label %bb79
+
+bb42: ; preds = %bb40
+ br label %bb43
+
+bb43: ; preds = %bb74, %bb42
+ %j2.0 = phi i64 [ 0, %bb42 ], [ %tmp75, %bb74 ]
+ %tmp44 = icmp slt i64 %j2.0, %n2_b
+ br i1 %tmp44, label %bb45, label %bb76
+
+bb45: ; preds = %bb43
+ br label %bb46
+
+bb46: ; preds = %bb71, %bb45
+ %k3.0 = phi i64 [ 0, %bb45 ], [ %tmp72, %bb71 ]
+ %tmp47 = icmp slt i64 %k3.0, %n2_c
+ br i1 %tmp47, label %bb48, label %bb73
+
+bb48: ; preds = %bb46
+ br label %bb49
+
+bb49: ; preds = %bb68, %bb48
+ %l4.0 = phi i64 [ 0, %bb48 ], [ %tmp69, %bb68 ]
+ %tmp50 = icmp slt i64 %l4.0, %n2_d
+ br i1 %tmp50, label %bb51, label %bb70
+
+bb51: ; preds = %bb49
+ %tmp52 = add nuw nsw i64 %i1.0, %j2.0
+ %tmp53 = add nsw i64 %tmp52, %k3.0
+ %tmp54 = add nsw i64 %tmp53, %l4.0
+ %tmp55 = sitofp i64 %tmp54 to float
+ %tmp56 = mul nuw i64 %p2_b, %p2_c
+ %tmp57 = mul nuw i64 %tmp56, %p2_d
+ %tmp58 = mul nsw i64 %i1.0, %tmp57
+ %tmp59 = getelementptr inbounds float, float* %A_2, i64 %tmp58
+ %tmp60 = mul nuw i64 %p2_c, %p2_d
+ %tmp61 = mul nsw i64 %j2.0, %tmp60
+ %tmp62 = getelementptr inbounds float, float* %tmp59, i64 %tmp61
+ %tmp63 = mul nsw i64 %k3.0, %p2_d
+ %tmp64 = getelementptr inbounds float, float* %tmp62, i64 %tmp63
+ %tmp65 = getelementptr inbounds float, float* %tmp64, i64 %l4.0
+ %tmp66 = load float, float* %tmp65, align 4
+ %tmp67 = fadd float %tmp66, %tmp55
+ store float %tmp67, float* %tmp65, align 4
+ br label %bb68
+
+bb68: ; preds = %bb51
+ %tmp69 = add nuw nsw i64 %l4.0, 1
+ br label %bb49
+
+bb70: ; preds = %bb49
+ br label %bb71
+
+bb71: ; preds = %bb70
+ %tmp72 = add nuw nsw i64 %k3.0, 1
+ br label %bb46
+
+bb73: ; preds = %bb46
+ br label %bb74
+
+bb74: ; preds = %bb73
+ %tmp75 = add nuw nsw i64 %j2.0, 1
+ br label %bb43
+
+bb76: ; preds = %bb43
+ br label %bb77
+
+bb77: ; preds = %bb76
+ %tmp78 = add nuw nsw i64 %i1.0, 1
+ br label %bb40
+
+bb79: ; preds = %bb40
+ br label %bb80
+
+bb80: ; preds = %bb117, %bb79
+ %i5.0 = phi i64 [ 0, %bb79 ], [ %tmp118, %bb117 ]
+ %tmp81 = icmp slt i64 %i5.0, %n3_a
+ br i1 %tmp81, label %bb82, label %bb119
+
+bb82: ; preds = %bb80
+ br label %bb83
+
+bb83: ; preds = %bb114, %bb82
+ %j6.0 = phi i64 [ 0, %bb82 ], [ %tmp115, %bb114 ]
+ %tmp84 = icmp slt i64 %j6.0, %n3_b
+ br i1 %tmp84, label %bb85, label %bb116
+
+bb85: ; preds = %bb83
+ br label %bb86
+
+bb86: ; preds = %bb111, %bb85
+ %k7.0 = phi i64 [ 0, %bb85 ], [ %tmp112, %bb111 ]
+ %tmp87 = icmp slt i64 %k7.0, %n3_c
+ br i1 %tmp87, label %bb88, label %bb113
+
+bb88: ; preds = %bb86
+ br label %bb89
+
+bb89: ; preds = %bb108, %bb88
+ %l8.0 = phi i64 [ 0, %bb88 ], [ %tmp109, %bb108 ]
+ %tmp90 = icmp slt i64 %l8.0, %n3_d
+ br i1 %tmp90, label %bb91, label %bb110
+
+bb91: ; preds = %bb89
+ %tmp92 = add nuw nsw i64 %i5.0, %j6.0
+ %tmp93 = add nsw i64 %tmp92, %k7.0
+ %tmp94 = add nsw i64 %tmp93, %l8.0
+ %tmp95 = sitofp i64 %tmp94 to float
+ %tmp96 = mul nuw i64 %p3_b, %p3_c
+ %tmp97 = mul nuw i64 %tmp96, %p3_d
+ %tmp98 = mul nsw i64 %i5.0, %tmp97
+ %tmp99 = getelementptr inbounds float, float* %A_3, i64 %tmp98
+ %tmp100 = mul nuw i64 %p3_c, %p3_d
+ %tmp101 = mul nsw i64 %j6.0, %tmp100
+ %tmp102 = getelementptr inbounds float, float* %tmp99, i64 %tmp101
+ %tmp103 = mul nsw i64 %k7.0, %p3_d
+ %tmp104 = getelementptr inbounds float, float* %tmp102, i64 %tmp103
+ %tmp105 = getelementptr inbounds float, float* %tmp104, i64 %l8.0
+ %tmp106 = load float, float* %tmp105, align 4
+ %tmp107 = fadd float %tmp106, %tmp95
+ store float %tmp107, float* %tmp105, align 4
+ br label %bb108
+
+bb108: ; preds = %bb91
+ %tmp109 = add nuw nsw i64 %l8.0, 1
+ br label %bb89
+
+bb110: ; preds = %bb89
+ br label %bb111
+
+bb111: ; preds = %bb110
+ %tmp112 = add nuw nsw i64 %k7.0, 1
+ br label %bb86
+
+bb113: ; preds = %bb86
+ br label %bb114
+
+bb114: ; preds = %bb113
+ %tmp115 = add nuw nsw i64 %j6.0, 1
+ br label %bb83
+
+bb116: ; preds = %bb83
+ br label %bb117
+
+bb117: ; preds = %bb116
+ %tmp118 = add nuw nsw i64 %i5.0, 1
+ br label %bb80
+
+bb119: ; preds = %bb80
+ br label %bb120
+
+bb120: ; preds = %bb157, %bb119
+ %i9.0 = phi i64 [ 0, %bb119 ], [ %tmp158, %bb157 ]
+ %tmp121 = icmp slt i64 %i9.0, %n4_a
+ br i1 %tmp121, label %bb122, label %bb159
+
+bb122: ; preds = %bb120
+ br label %bb123
+
+bb123: ; preds = %bb154, %bb122
+ %j10.0 = phi i64 [ 0, %bb122 ], [ %tmp155, %bb154 ]
+ %tmp124 = icmp slt i64 %j10.0, %n4_b
+ br i1 %tmp124, label %bb125, label %bb156
+
+bb125: ; preds = %bb123
+ br label %bb126
+
+bb126: ; preds = %bb151, %bb125
+ %k11.0 = phi i64 [ 0, %bb125 ], [ %tmp152, %bb151 ]
+ %tmp127 = icmp slt i64 %k11.0, %n4_c
+ br i1 %tmp127, label %bb128, label %bb153
+
+bb128: ; preds = %bb126
+ br label %bb129
+
+bb129: ; preds = %bb148, %bb128
+ %l12.0 = phi i64 [ 0, %bb128 ], [ %tmp149, %bb148 ]
+ %tmp130 = icmp slt i64 %l12.0, %n4_d
+ br i1 %tmp130, label %bb131, label %bb150
+
+bb131: ; preds = %bb129
+ %tmp132 = add nuw nsw i64 %i9.0, %j10.0
+ %tmp133 = add nsw i64 %tmp132, %k11.0
+ %tmp134 = add nsw i64 %tmp133, %l12.0
+ %tmp135 = sitofp i64 %tmp134 to float
+ %tmp136 = mul nuw i64 %p4_b, %p4_c
+ %tmp137 = mul nuw i64 %tmp136, %p4_d
+ %tmp138 = mul nsw i64 %i9.0, %tmp137
+ %tmp139 = getelementptr inbounds float, float* %A_4, i64 %tmp138
+ %tmp140 = mul nuw i64 %p4_c, %p4_d
+ %tmp141 = mul nsw i64 %j10.0, %tmp140
+ %tmp142 = getelementptr inbounds float, float* %tmp139, i64 %tmp141
+ %tmp143 = mul nsw i64 %k11.0, %p4_d
+ %tmp144 = getelementptr inbounds float, float* %tmp142, i64 %tmp143
+ %tmp145 = getelementptr inbounds float, float* %tmp144, i64 %l12.0
+ %tmp146 = load float, float* %tmp145, align 4
+ %tmp147 = fadd float %tmp146, %tmp135
+ store float %tmp147, float* %tmp145, align 4
+ br label %bb148
+
+bb148: ; preds = %bb131
+ %tmp149 = add nuw nsw i64 %l12.0, 1
+ br label %bb129
+
+bb150: ; preds = %bb129
+ br label %bb151
+
+bb151: ; preds = %bb150
+ %tmp152 = add nuw nsw i64 %k11.0, 1
+ br label %bb126
+
+bb153: ; preds = %bb126
+ br label %bb154
+
+bb154: ; preds = %bb153
+ %tmp155 = add nuw nsw i64 %j10.0, 1
+ br label %bb123
+
+bb156: ; preds = %bb123
+ br label %bb157
+
+bb157: ; preds = %bb156
+ %tmp158 = add nuw nsw i64 %i9.0, 1
+ br label %bb120
+
+bb159: ; preds = %bb120
+ br label %bb160
+
+bb160: ; preds = %bb197, %bb159
+ %i13.0 = phi i64 [ 0, %bb159 ], [ %tmp198, %bb197 ]
+ %tmp161 = icmp slt i64 %i13.0, %n5_a
+ br i1 %tmp161, label %bb162, label %bb199
+
+bb162: ; preds = %bb160
+ br label %bb163
+
+bb163: ; preds = %bb194, %bb162
+ %j14.0 = phi i64 [ 0, %bb162 ], [ %tmp195, %bb194 ]
+ %tmp164 = icmp slt i64 %j14.0, %n5_b
+ br i1 %tmp164, label %bb165, label %bb196
+
+bb165: ; preds = %bb163
+ br label %bb166
+
+bb166: ; preds = %bb191, %bb165
+ %k15.0 = phi i64 [ 0, %bb165 ], [ %tmp192, %bb191 ]
+ %tmp167 = icmp slt i64 %k15.0, %n5_c
+ br i1 %tmp167, label %bb168, label %bb193
+
+bb168: ; preds = %bb166
+ br label %bb169
+
+bb169: ; preds = %bb188, %bb168
+ %l16.0 = phi i64 [ 0, %bb168 ], [ %tmp189, %bb188 ]
+ %tmp170 = icmp slt i64 %l16.0, %n5_d
+ br i1 %tmp170, label %bb171, label %bb190
+
+bb171: ; preds = %bb169
+ %tmp172 = add nuw nsw i64 %i13.0, %j14.0
+ %tmp173 = add nsw i64 %tmp172, %k15.0
+ %tmp174 = add nsw i64 %tmp173, %l16.0
+ %tmp175 = sitofp i64 %tmp174 to float
+ %tmp176 = mul nuw i64 %p5_b, %p5_c
+ %tmp177 = mul nuw i64 %tmp176, %p5_d
+ %tmp178 = mul nsw i64 %i13.0, %tmp177
+ %tmp179 = getelementptr inbounds float, float* %A_5, i64 %tmp178
+ %tmp180 = mul nuw i64 %p5_c, %p5_d
+ %tmp181 = mul nsw i64 %j14.0, %tmp180
+ %tmp182 = getelementptr inbounds float, float* %tmp179, i64 %tmp181
+ %tmp183 = mul nsw i64 %k15.0, %p5_d
+ %tmp184 = getelementptr inbounds float, float* %tmp182, i64 %tmp183
+ %tmp185 = getelementptr inbounds float, float* %tmp184, i64 %l16.0
+ %tmp186 = load float, float* %tmp185, align 4
+ %tmp187 = fadd float %tmp186, %tmp175
+ store float %tmp187, float* %tmp185, align 4
+ br label %bb188
+
+bb188: ; preds = %bb171
+ %tmp189 = add nuw nsw i64 %l16.0, 1
+ br label %bb169
+
+bb190: ; preds = %bb169
+ br label %bb191
+
+bb191: ; preds = %bb190
+ %tmp192 = add nuw nsw i64 %k15.0, 1
+ br label %bb166
+
+bb193: ; preds = %bb166
+ br label %bb194
+
+bb194: ; preds = %bb193
+ %tmp195 = add nuw nsw i64 %j14.0, 1
+ br label %bb163
+
+bb196: ; preds = %bb163
+ br label %bb197
+
+bb197: ; preds = %bb196
+ %tmp198 = add nuw nsw i64 %i13.0, 1
+ br label %bb160
+
+bb199: ; preds = %bb160
+ br label %bb200
+
+bb200: ; preds = %bb237, %bb199
+ %i17.0 = phi i64 [ 0, %bb199 ], [ %tmp238, %bb237 ]
+ %tmp201 = icmp slt i64 %i17.0, %n6_a
+ br i1 %tmp201, label %bb202, label %bb239
+
+bb202: ; preds = %bb200
+ br label %bb203
+
+bb203: ; preds = %bb234, %bb202
+ %j18.0 = phi i64 [ 0, %bb202 ], [ %tmp235, %bb234 ]
+ %tmp204 = icmp slt i64 %j18.0, %n6_b
+ br i1 %tmp204, label %bb205, label %bb236
+
+bb205: ; preds = %bb203
+ br label %bb206
+
+bb206: ; preds = %bb231, %bb205
+ %k19.0 = phi i64 [ 0, %bb205 ], [ %tmp232, %bb231 ]
+ %tmp207 = icmp slt i64 %k19.0, %n6_c
+ br i1 %tmp207, label %bb208, label %bb233
+
+bb208: ; preds = %bb206
+ br label %bb209
+
+bb209: ; preds = %bb228, %bb208
+ %l20.0 = phi i64 [ 0, %bb208 ], [ %tmp229, %bb228 ]
+ %tmp210 = icmp slt i64 %l20.0, %n6_d
+ br i1 %tmp210, label %bb211, label %bb230
+
+bb211: ; preds = %bb209
+ %tmp212 = add nuw nsw i64 %i17.0, %j18.0
+ %tmp213 = add nsw i64 %tmp212, %k19.0
+ %tmp214 = add nsw i64 %tmp213, %l20.0
+ %tmp215 = sitofp i64 %tmp214 to float
+ %tmp216 = mul nuw i64 %p6_b, %p6_c
+ %tmp217 = mul nuw i64 %tmp216, %p6_d
+ %tmp218 = mul nsw i64 %i17.0, %tmp217
+ %tmp219 = getelementptr inbounds float, float* %A_6, i64 %tmp218
+ %tmp220 = mul nuw i64 %p6_c, %p6_d
+ %tmp221 = mul nsw i64 %j18.0, %tmp220
+ %tmp222 = getelementptr inbounds float, float* %tmp219, i64 %tmp221
+ %tmp223 = mul nsw i64 %k19.0, %p6_d
+ %tmp224 = getelementptr inbounds float, float* %tmp222, i64 %tmp223
+ %tmp225 = getelementptr inbounds float, float* %tmp224, i64 %l20.0
+ %tmp226 = load float, float* %tmp225, align 4
+ %tmp227 = fadd float %tmp226, %tmp215
+ store float %tmp227, float* %tmp225, align 4
+ br label %bb228
+
+bb228: ; preds = %bb211
+ %tmp229 = add nuw nsw i64 %l20.0, 1
+ br label %bb209
+
+bb230: ; preds = %bb209
+ br label %bb231
+
+bb231: ; preds = %bb230
+ %tmp232 = add nuw nsw i64 %k19.0, 1
+ br label %bb206
+
+bb233: ; preds = %bb206
+ br label %bb234
+
+bb234: ; preds = %bb233
+ %tmp235 = add nuw nsw i64 %j18.0, 1
+ br label %bb203
+
+bb236: ; preds = %bb203
+ br label %bb237
+
+bb237: ; preds = %bb236
+ %tmp238 = add nuw nsw i64 %i17.0, 1
+ br label %bb200
+
+bb239: ; preds = %bb200
+ br label %bb240
+
+bb240: ; preds = %bb277, %bb239
+ %i21.0 = phi i64 [ 0, %bb239 ], [ %tmp278, %bb277 ]
+ %tmp241 = icmp slt i64 %i21.0, %n7_a
+ br i1 %tmp241, label %bb242, label %bb279
+
+bb242: ; preds = %bb240
+ br label %bb243
+
+bb243: ; preds = %bb274, %bb242
+ %j22.0 = phi i64 [ 0, %bb242 ], [ %tmp275, %bb274 ]
+ %tmp244 = icmp slt i64 %j22.0, %n7_b
+ br i1 %tmp244, label %bb245, label %bb276
+
+bb245: ; preds = %bb243
+ br label %bb246
+
+bb246: ; preds = %bb271, %bb245
+ %k23.0 = phi i64 [ 0, %bb245 ], [ %tmp272, %bb271 ]
+ %tmp247 = icmp slt i64 %k23.0, %n7_c
+ br i1 %tmp247, label %bb248, label %bb273
+
+bb248: ; preds = %bb246
+ br label %bb249
+
+bb249: ; preds = %bb268, %bb248
+ %l24.0 = phi i64 [ 0, %bb248 ], [ %tmp269, %bb268 ]
+ %tmp250 = icmp slt i64 %l24.0, %n7_d
+ br i1 %tmp250, label %bb251, label %bb270
+
+bb251: ; preds = %bb249
+ %tmp252 = add nuw nsw i64 %i21.0, %j22.0
+ %tmp253 = add nsw i64 %tmp252, %k23.0
+ %tmp254 = add nsw i64 %tmp253, %l24.0
+ %tmp255 = sitofp i64 %tmp254 to float
+ %tmp256 = mul nuw i64 %p7_b, %p7_c
+ %tmp257 = mul nuw i64 %tmp256, %p7_d
+ %tmp258 = mul nsw i64 %i21.0, %tmp257
+ %tmp259 = getelementptr inbounds float, float* %A_7, i64 %tmp258
+ %tmp260 = mul nuw i64 %p7_c, %p7_d
+ %tmp261 = mul nsw i64 %j22.0, %tmp260
+ %tmp262 = getelementptr inbounds float, float* %tmp259, i64 %tmp261
+ %tmp263 = mul nsw i64 %k23.0, %p7_d
+ %tmp264 = getelementptr inbounds float, float* %tmp262, i64 %tmp263
+ %tmp265 = getelementptr inbounds float, float* %tmp264, i64 %l24.0
+ %tmp266 = load float, float* %tmp265, align 4
+ %tmp267 = fadd float %tmp266, %tmp255
+ store float %tmp267, float* %tmp265, align 4
+ br label %bb268
+
+bb268: ; preds = %bb251
+ %tmp269 = add nuw nsw i64 %l24.0, 1
+ br label %bb249
+
+bb270: ; preds = %bb249
+ br label %bb271
+
+bb271: ; preds = %bb270
+ %tmp272 = add nuw nsw i64 %k23.0, 1
+ br label %bb246
+
+bb273: ; preds = %bb246
+ br label %bb274
+
+bb274: ; preds = %bb273
+ %tmp275 = add nuw nsw i64 %j22.0, 1
+ br label %bb243
+
+bb276: ; preds = %bb243
+ br label %bb277
+
+bb277: ; preds = %bb276
+ %tmp278 = add nuw nsw i64 %i21.0, 1
+ br label %bb240
+
+bb279: ; preds = %bb240
+ br label %bb280
+
+bb280: ; preds = %bb317, %bb279
+ %i25.0 = phi i64 [ 0, %bb279 ], [ %tmp318, %bb317 ]
+ %tmp281 = icmp slt i64 %i25.0, %n8_a
+ br i1 %tmp281, label %bb282, label %bb319
+
+bb282: ; preds = %bb280
+ br label %bb283
+
+bb283: ; preds = %bb314, %bb282
+ %j26.0 = phi i64 [ 0, %bb282 ], [ %tmp315, %bb314 ]
+ %tmp284 = icmp slt i64 %j26.0, %n8_b
+ br i1 %tmp284, label %bb285, label %bb316
+
+bb285: ; preds = %bb283
+ br label %bb286
+
+bb286: ; preds = %bb311, %bb285
+ %k27.0 = phi i64 [ 0, %bb285 ], [ %tmp312, %bb311 ]
+ %tmp287 = icmp slt i64 %k27.0, %n8_c
+ br i1 %tmp287, label %bb288, label %bb313
+
+bb288: ; preds = %bb286
+ br label %bb289
+
+bb289: ; preds = %bb308, %bb288
+ %l28.0 = phi i64 [ 0, %bb288 ], [ %tmp309, %bb308 ]
+ %tmp290 = icmp slt i64 %l28.0, %n8_d
+ br i1 %tmp290, label %bb291, label %bb310
+
+bb291: ; preds = %bb289
+ %tmp292 = add nuw nsw i64 %i25.0, %j26.0
+ %tmp293 = add nsw i64 %tmp292, %k27.0
+ %tmp294 = add nsw i64 %tmp293, %l28.0
+ %tmp295 = sitofp i64 %tmp294 to float
+ %tmp296 = mul nuw i64 %p8_b, %p8_c
+ %tmp297 = mul nuw i64 %tmp296, %p8_d
+ %tmp298 = mul nsw i64 %i25.0, %tmp297
+ %tmp299 = getelementptr inbounds float, float* %A_8, i64 %tmp298
+ %tmp300 = mul nuw i64 %p8_c, %p8_d
+ %tmp301 = mul nsw i64 %j26.0, %tmp300
+ %tmp302 = getelementptr inbounds float, float* %tmp299, i64 %tmp301
+ %tmp303 = mul nsw i64 %k27.0, %p8_d
+ %tmp304 = getelementptr inbounds float, float* %tmp302, i64 %tmp303
+ %tmp305 = getelementptr inbounds float, float* %tmp304, i64 %l28.0
+ %tmp306 = load float, float* %tmp305, align 4
+ %tmp307 = fadd float %tmp306, %tmp295
+ store float %tmp307, float* %tmp305, align 4
+ br label %bb308
+
+bb308: ; preds = %bb291
+ %tmp309 = add nuw nsw i64 %l28.0, 1
+ br label %bb289
+
+bb310: ; preds = %bb289
+ br label %bb311
+
+bb311: ; preds = %bb310
+ %tmp312 = add nuw nsw i64 %k27.0, 1
+ br label %bb286
+
+bb313: ; preds = %bb286
+ br label %bb314
+
+bb314: ; preds = %bb313
+ %tmp315 = add nuw nsw i64 %j26.0, 1
+ br label %bb283
+
+bb316: ; preds = %bb283
+ br label %bb317
+
+bb317: ; preds = %bb316
+ %tmp318 = add nuw nsw i64 %i25.0, 1
+ br label %bb280
+
+bb319: ; preds = %bb280
+ br label %bb320
+
+bb320: ; preds = %bb357, %bb319
+ %i29.0 = phi i64 [ 0, %bb319 ], [ %tmp358, %bb357 ]
+ %tmp321 = icmp slt i64 %i29.0, %n9_a
+ br i1 %tmp321, label %bb322, label %bb359
+
+bb322: ; preds = %bb320
+ br label %bb323
+
+bb323: ; preds = %bb354, %bb322
+ %j30.0 = phi i64 [ 0, %bb322 ], [ %tmp355, %bb354 ]
+ %tmp324 = icmp slt i64 %j30.0, %n9_b
+ br i1 %tmp324, label %bb325, label %bb356
+
+bb325: ; preds = %bb323
+ br label %bb326
+
+bb326: ; preds = %bb351, %bb325
+ %k31.0 = phi i64 [ 0, %bb325 ], [ %tmp352, %bb351 ]
+ %tmp327 = icmp slt i64 %k31.0, %n9_c
+ br i1 %tmp327, label %bb328, label %bb353
+
+bb328: ; preds = %bb326
+ br label %bb329
+
+bb329: ; preds = %bb348, %bb328
+ %l32.0 = phi i64 [ 0, %bb328 ], [ %tmp349, %bb348 ]
+ %tmp330 = icmp slt i64 %l32.0, %n9_d
+ br i1 %tmp330, label %bb331, label %bb350
+
+bb331: ; preds = %bb329
+ %tmp332 = add nuw nsw i64 %i29.0, %j30.0
+ %tmp333 = add nsw i64 %tmp332, %k31.0
+ %tmp334 = add nsw i64 %tmp333, %l32.0
+ %tmp335 = sitofp i64 %tmp334 to float
+ %tmp336 = mul nuw i64 %p9_b, %p9_c
+ %tmp337 = mul nuw i64 %tmp336, %p9_d
+ %tmp338 = mul nsw i64 %i29.0, %tmp337
+ %tmp339 = getelementptr inbounds float, float* %A_9, i64 %tmp338
+ %tmp340 = mul nuw i64 %p9_c, %p9_d
+ %tmp341 = mul nsw i64 %j30.0, %tmp340
+ %tmp342 = getelementptr inbounds float, float* %tmp339, i64 %tmp341
+ %tmp343 = mul nsw i64 %k31.0, %p9_d
+ %tmp344 = getelementptr inbounds float, float* %tmp342, i64 %tmp343
+ %tmp345 = getelementptr inbounds float, float* %tmp344, i64 %l32.0
+ %tmp346 = load float, float* %tmp345, align 4
+ %tmp347 = fadd float %tmp346, %tmp335
+ store float %tmp347, float* %tmp345, align 4
+ br label %bb348
+
+bb348: ; preds = %bb331
+ %tmp349 = add nuw nsw i64 %l32.0, 1
+ br label %bb329
+
+bb350: ; preds = %bb329
+ br label %bb351
+
+bb351: ; preds = %bb350
+ %tmp352 = add nuw nsw i64 %k31.0, 1
+ br label %bb326
+
+bb353: ; preds = %bb326
+ br label %bb354
+
+bb354: ; preds = %bb353
+ %tmp355 = add nuw nsw i64 %j30.0, 1
+ br label %bb323
+
+bb356: ; preds = %bb323
+ br label %bb357
+
+bb357: ; preds = %bb356
+ %tmp358 = add nuw nsw i64 %i29.0, 1
+ br label %bb320
+
+bb359: ; preds = %bb320
+ ret void
+}
diff --git a/polly/test/ScopInfo/remarks.ll b/polly/test/ScopInfo/remarks.ll
index c07828fd604..316f3f14ae7 100644
--- a/polly/test/ScopInfo/remarks.ll
+++ b/polly/test/ScopInfo/remarks.ll
@@ -2,7 +2,7 @@
; RUN: -polly-invariant-load-hoisting=true -disable-output < %s 2>&1 | FileCheck %s
;
; CHECK: remark: test/ScopInfo/remarks.c:4:7: SCoP begins here.
-; CHECK: remark: test/ScopInfo/remarks.c:9:15: Inbounds assumption: [N, M, Debug] -> { : N <= 0 or (N > 0 and M <= 100) }
+; CHECK: remark: test/ScopInfo/remarks.c:9:15: Inbounds assumption: [N, M, Debug] -> { : M <= 100 }
; CHECK: remark: test/ScopInfo/remarks.c:13:7: No-error restriction: [N, M, Debug] -> { : N > 0 and M >= 0 and (Debug < 0 or Debug > 0) }
; CHECK: remark: test/ScopInfo/remarks.c:8:5: Finite loop restriction: [N, M, Debug] -> { : N > 0 and (M <= -2 or M = -1) }
; CHECK: remark: test/ScopInfo/remarks.c:4:7: No-overflows restriction: [N, M, Debug] -> { : M <= -2147483649 - N or M >= 2147483648 - N }
diff --git a/polly/test/ScopInfo/user_provided_non_dominating_assumptions.ll b/polly/test/ScopInfo/user_provided_non_dominating_assumptions.ll
index 1bfd6fb5a51..1a91aab081c 100644
--- a/polly/test/ScopInfo/user_provided_non_dominating_assumptions.ll
+++ b/polly/test/ScopInfo/user_provided_non_dominating_assumptions.ll
@@ -1,4 +1,5 @@
-; RUN: opt %loadPolly -pass-remarks-analysis="polly-scops" -polly-scops -disable-output < %s 2>&1 | FileCheck %s
+; RUN: opt %loadPolly -pass-remarks-analysis="polly-scops" -polly-scops \
+; RUN: -polly-precise-inbounds -disable-output < %s 2>&1 | FileCheck %s
;
; CHECK: remark: <unknown>:0:0: SCoP begins here.
; CHECK-NEXT: remark: <unknown>:0:0: Use user assumption: [i, N, M] -> { : N <= i or (N > i and N >= 0) }
OpenPOWER on IntegriCloud