[polly] r190237 - ScopInfo: Correctly handle true/false conditions

Tobias Grosser tobias at grosser.es
Fri Sep 6 18:54:13 PDT 2013


Author: grosser
Date: Fri Sep  6 20:54:13 2013
New Revision: 190237

URL: http://llvm.org/viewvc/llvm-project?rev=190237&view=rev
Log:
ScopInfo: Correctly handle true/false conditions

This is a modified version of the orignally contributed patch.

Contributed-by: alexandre.isoard at gmail.com

Added:
    polly/trunk/test/ScopInfo/cond_constant_in_loop.ll
Modified:
    polly/trunk/lib/Analysis/TempScopInfo.cpp
    polly/trunk/test/Cloog/CodeGen/single_loop_zero_iterations.ll
    polly/trunk/test/Isl/CodeGen/single_loop_zero_iterations.ll
    polly/trunk/test/ScheduleOptimizer/2012-10-14-Zero-Bands.ll

Modified: polly/trunk/lib/Analysis/TempScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/TempScopInfo.cpp?rev=190237&r1=190236&r2=190237&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/TempScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/TempScopInfo.cpp Fri Sep  6 20:54:13 2013
@@ -230,13 +230,12 @@ void TempScopInfo::buildLoopBounds(TempS
 void TempScopInfo::buildAffineCondition(Value &V, bool inverted,
                                         Comparison **Comp) const {
   if (ConstantInt *C = dyn_cast<ConstantInt>(&V)) {
-    // If this is always true condition, we will create 1 >= 0,
-    // otherwise we will create 1 == 0.
+    // If this is always true condition, we will create 0 == 0,
+    // otherwise we will create 0 != 0.
     const SCEV *LHS = SE->getConstant(C->getType(), 0);
-    const SCEV *RHS = SE->getConstant(C->getType(), 1);
 
     if (C->isOne() == inverted)
-      *Comp = new Comparison(RHS, LHS, ICmpInst::ICMP_NE);
+      *Comp = new Comparison(LHS, LHS, ICmpInst::ICMP_NE);
     else
       *Comp = new Comparison(LHS, LHS, ICmpInst::ICMP_EQ);
 

Modified: polly/trunk/test/Cloog/CodeGen/single_loop_zero_iterations.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/Cloog/CodeGen/single_loop_zero_iterations.ll?rev=190237&r1=190236&r2=190237&view=diff
==============================================================================
--- polly/trunk/test/Cloog/CodeGen/single_loop_zero_iterations.ll (original)
+++ polly/trunk/test/Cloog/CodeGen/single_loop_zero_iterations.ll Fri Sep  6 20:54:13 2013
@@ -67,4 +67,4 @@ return:
 
 ; CHECK: for region: 'for.cond => for.end.region' in function 'main':
 ; CHECK-NEXT: main():
-; CHECK-NEXT:   Stmt_for_body(0);
+; CHECK-NOT:   Stmt_for_body(0);

Modified: polly/trunk/test/Isl/CodeGen/single_loop_zero_iterations.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/Isl/CodeGen/single_loop_zero_iterations.ll?rev=190237&r1=190236&r2=190237&view=diff
==============================================================================
--- polly/trunk/test/Isl/CodeGen/single_loop_zero_iterations.ll (original)
+++ polly/trunk/test/Isl/CodeGen/single_loop_zero_iterations.ll Fri Sep  6 20:54:13 2013
@@ -67,4 +67,4 @@ return:
 
 ; CHECK: for region: 'for.cond => for.end.region' in function 'main':
 ; CHECK-NEXT: main():
-; CHECK-NEXT:   Stmt_for_body(0);
+; CHECK-NOT:   Stmt_for_body(0);

Modified: polly/trunk/test/ScheduleOptimizer/2012-10-14-Zero-Bands.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScheduleOptimizer/2012-10-14-Zero-Bands.ll?rev=190237&r1=190236&r2=190237&view=diff
==============================================================================
--- polly/trunk/test/ScheduleOptimizer/2012-10-14-Zero-Bands.ll (original)
+++ polly/trunk/test/ScheduleOptimizer/2012-10-14-Zero-Bands.ll Fri Sep  6 20:54:13 2013
@@ -24,4 +24,4 @@ return:
 }
 
 ; CHECK: Calculated schedule:
-; CHECK: { Stmt_if_then[] -> [] }
+; CHECK-NOT: Stmt_if_then

Added: polly/trunk/test/ScopInfo/cond_constant_in_loop.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/cond_constant_in_loop.ll?rev=190237&view=auto
==============================================================================
--- polly/trunk/test/ScopInfo/cond_constant_in_loop.ll (added)
+++ polly/trunk/test/ScopInfo/cond_constant_in_loop.ll Fri Sep  6 20:54:13 2013
@@ -0,0 +1,53 @@
+; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
+
+;void f(long a[], long N, long M) {
+;  long i, j, k;
+;  for (j = 0; j < M; ++j)
+;    if (true)
+;      a[j] = j;
+;    else {
+;      a[j] = M;
+;      a[j - N] = 0;
+;    }
+;}
+
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @f(i64* nocapture %a, i64 %N, i64 %M) nounwind {
+entry:
+  %0 = icmp sgt i64 %M, 0                         ; <i1> [#uses=1]
+  br i1 %0, label %bb, label %return
+
+bb:                                               ; preds = %bb3, %entry
+  %1 = phi i64 [ 0, %entry ], [ %2, %bb3 ]        ; <i64> [#uses=5]
+  %scevgep = getelementptr i64* %a, i64 %1        ; <i64*> [#uses=2]
+  br i1 true, label %bb1, label %bb2
+
+bb1:                                              ; preds = %bb
+  store i64 %1, i64* %scevgep, align 8
+  br label %bb3
+
+bb2:                                              ; preds = %bb
+  %tmp7 = sub i64 %1, %N                          ; <i64> [#uses=1]
+  %scevgep8 = getelementptr i64* %a, i64 %tmp7    ; <i64*> [#uses=1]
+  store i64 %M, i64* %scevgep, align 8
+  store i64 0, i64* %scevgep8, align 8
+  br label %bb3
+
+bb3:                                              ; preds = %bb2, %bb1
+  %2 = add nsw i64 %1, 1                          ; <i64> [#uses=2]
+  %exitcond = icmp eq i64 %2, %M                  ; <i1> [#uses=1]
+  br i1 %exitcond, label %return, label %bb
+
+return:                                           ; preds = %bb3, %entry
+  ret void
+}
+
+; CHECK: Stmt_bb1
+; CHECK:   Domain :=
+; CHECK:     [M, N] -> { Stmt_bb1[i0] : i0 >= 0 and i0 <= -1 + M };
+; CHECK: Stmt_bb2
+; CHECK:   Domain :=
+; CHECK:     [M, N] -> { Stmt_bb2[i0] : 1 = 0 };
+





More information about the llvm-commits mailing list