[polly] r296456 - [ScopInfo] Simplify inbounds assumptions under domain constraints

Tobias Grosser via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 28 01:45:54 PST 2017


Author: grosser
Date: Tue Feb 28 03:45:54 2017
New Revision: 296456

URL: http://llvm.org/viewvc/llvm-project?rev=296456&view=rev
Log:
[ScopInfo] Simplify inbounds assumptions under domain constraints

Without this simplification for a loop nest:

  void foo(long n1_a, long n1_b, long n1_c, long n1_d,
           long p1_b, long p1_c, long p1_d,
           float A_1[][p1_b][p1_c][p1_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;
 }

the assumption:

  n1_a <= 0 or (n1_a > 0 and n1_b <= 0) or
  (n1_a > 0 and n1_b > 0 and n1_c <= 0) or
  (n1_a > 0 and n1_b > 0 and n1_c > 0 and n1_d <= 0) or
  (n1_a > 0 and n1_b > 0 and n1_c > 0 and n1_d > 0 and
   p1_b >= n1_b and p1_c >= n1_c and p1_d >= n1_d)

is taken rather than the simpler assumption:

  p9_b >= n9_b and p9_c >= n9_c and p9_d >= n9_d.

The former is less strict, as it allows arbitrary values of p1_* in case, the
loop is not executed at all. However, in practice these precise constraints
explode when combined across different accesses and loops. For now it seems
to make more sense to take less precise, but more scalable constraints by
default. In case we find a practical example where more precise constraints
are needed, we can think about allowing such precise constraints in specific
situations where they help.

This change speeds up the new test case from taking very long (waited at least
a minute, but it probably takes a lot more) to below a second.

Added:
    polly/trunk/test/ScopInfo/assume_gep_bounds_many.ll
Modified:
    polly/trunk/lib/Analysis/ScopInfo.cpp
    polly/trunk/test/Isl/Ast/simple-run-time-condition.ll
    polly/trunk/test/ScopInfo/assume_gep_bounds_2.ll
    polly/trunk/test/ScopInfo/remarks.ll
    polly/trunk/test/ScopInfo/user_provided_non_dominating_assumptions.ll

Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=296456&r1=296455&r2=296456&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Tue Feb 28 03:45:54 2017
@@ -137,6 +137,11 @@ static cl::opt<bool> UnprofitableScalarA
     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);

Modified: polly/trunk/test/Isl/Ast/simple-run-time-condition.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/Isl/Ast/simple-run-time-condition.ll?rev=296456&r1=296455&r2=296456&view=diff
==============================================================================
--- polly/trunk/test/Isl/Ast/simple-run-time-condition.ll (original)
+++ polly/trunk/test/Isl/Ast/simple-run-time-condition.ll Tue Feb 28 03:45:54 2017
@@ -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) {

Modified: polly/trunk/test/ScopInfo/assume_gep_bounds_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/assume_gep_bounds_2.ll?rev=296456&r1=296455&r2=296456&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/assume_gep_bounds_2.ll (original)
+++ polly/trunk/test/ScopInfo/assume_gep_bounds_2.ll Tue Feb 28 03:45:54 2017
@@ -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) {

Added: polly/trunk/test/ScopInfo/assume_gep_bounds_many.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/assume_gep_bounds_many.ll?rev=296456&view=auto
==============================================================================
--- polly/trunk/test/ScopInfo/assume_gep_bounds_many.ll (added)
+++ polly/trunk/test/ScopInfo/assume_gep_bounds_many.ll Tue Feb 28 03:45:54 2017
@@ -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
+}

Modified: polly/trunk/test/ScopInfo/remarks.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/remarks.ll?rev=296456&r1=296455&r2=296456&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/remarks.ll (original)
+++ polly/trunk/test/ScopInfo/remarks.ll Tue Feb 28 03:45:54 2017
@@ -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 }

Modified: polly/trunk/test/ScopInfo/user_provided_non_dominating_assumptions.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/user_provided_non_dominating_assumptions.ll?rev=296456&r1=296455&r2=296456&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/user_provided_non_dominating_assumptions.ll (original)
+++ polly/trunk/test/ScopInfo/user_provided_non_dominating_assumptions.ll Tue Feb 28 03:45:54 2017
@@ -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) }




More information about the llvm-commits mailing list