[polly] r196827 - ScopValidator: smax expressions are no parameters

Tobias Grosser tobias at grosser.es
Mon Dec 9 13:51:46 PST 2013


Author: grosser
Date: Mon Dec  9 15:51:46 2013
New Revision: 196827

URL: http://llvm.org/viewvc/llvm-project?rev=196827&view=rev
Log:
ScopValidator: smax expressions are no parameters

This fixes PR18155 which is a regression introduced in 152913.

Added:
    polly/trunk/test/ScopInfo/smax.ll
Modified:
    polly/trunk/lib/Support/SCEVValidator.cpp
    polly/trunk/test/Cloog/CodeGen/OpenMP/20120330-argument-use.ll

Modified: polly/trunk/lib/Support/SCEVValidator.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Support/SCEVValidator.cpp?rev=196827&r1=196826&r2=196827&view=diff
==============================================================================
--- polly/trunk/lib/Support/SCEVValidator.cpp (original)
+++ polly/trunk/lib/Support/SCEVValidator.cpp Mon Dec  9 15:51:46 2013
@@ -297,7 +297,7 @@ public:
   }
 
   class ValidatorResult visitSMaxExpr(const SCEVSMaxExpr *Expr) {
-    ValidatorResult Return(SCEVType::INT, Expr);
+    ValidatorResult Return(SCEVType::INT);
 
     for (int i = 0, e = Expr->getNumOperands(); i < e; ++i) {
       ValidatorResult Op = visit(Expr->getOperand(i));

Modified: polly/trunk/test/Cloog/CodeGen/OpenMP/20120330-argument-use.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/Cloog/CodeGen/OpenMP/20120330-argument-use.ll?rev=196827&r1=196826&r2=196827&view=diff
==============================================================================
--- polly/trunk/test/Cloog/CodeGen/OpenMP/20120330-argument-use.ll (original)
+++ polly/trunk/test/Cloog/CodeGen/OpenMP/20120330-argument-use.ll Mon Dec  9 15:51:46 2013
@@ -58,13 +58,11 @@ for.end:
   ret void
 }
 
-; CHECK: %omp.userContext1 = bitcast i8* %omp.userContext to { i32, i32, i32*, i32* }*
-; CHECK: %0 = getelementptr inbounds { i32, i32, i32*, i32* }* %omp.userContext1, i32 0, i32 0
+; CHECK: %omp.userContext1 = bitcast i8* %omp.userContext to { i32, i32*, i32* }*
+; CHECK: %0 = getelementptr inbounds { i32, i32*, i32* }* %omp.userContext1, i32 0, i32 0
 ; CHECK: %1 = load i32* %0
-; CHECK: %2 = getelementptr inbounds { i32, i32, i32*, i32* }* %omp.userContext1, i32 0, i32 1
-; CHECK: %3 = load i32* %2
-; CHECK: %4 = getelementptr inbounds { i32, i32, i32*, i32* }* %omp.userContext1, i32 0, i32 2
+; CHECK: %2 = getelementptr inbounds { i32, i32*, i32* }* %omp.userContext1, i32 0, i32 1
+; CHECK: %3 = load i32** %2
+; CHECK: %4 = getelementptr inbounds { i32, i32*, i32* }* %omp.userContext1, i32 0, i32 2
 ; CHECK: %5 = load i32** %4
-; CHECK: %6 = getelementptr inbounds { i32, i32, i32*, i32* }* %omp.userContext1, i32 0, i32 3
-; CHECK: %7 = load i32** %6
 

Added: polly/trunk/test/ScopInfo/smax.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/smax.ll?rev=196827&view=auto
==============================================================================
--- polly/trunk/test/ScopInfo/smax.ll (added)
+++ polly/trunk/test/ScopInfo/smax.ll Mon Dec  9 15:51:46 2013
@@ -0,0 +1,26 @@
+; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
+target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:64:128-a0:0:32-n32-S64"
+target triple = "thumbv7-none-linux-gnueabi"
+
+define void @foo(i32 * noalias %data, i32 * noalias %ptr, i32 %x_pos, i32 %w) {
+entry:
+  br label %for.body
+
+for.body:
+  %x = phi i32 [ 0, %entry ], [ %x.inc, %for.body ]
+  %add = add nsw i32 %x, %x_pos
+  %cmp1 = icmp sgt i32 %add, %w
+  %cond = select i1 %cmp1, i32 %w, i32 %add
+  %arrayidx = getelementptr inbounds i32* %ptr, i32 %cond
+  store i32 1, i32* %arrayidx
+  %x.inc = add nsw i32 %x, 1
+  %cmp = icmp slt i32 %x.inc, 2
+  br i1 %cmp, label %for.body, label %for.end
+
+for.end:
+  ret void
+}
+
+; We check that there are only two parameters, but not a third one that
+; represents the smax() expression. This test case comes from PR 18155.
+; CHECK: [w, x_pos]





More information about the llvm-commits mailing list