[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