From 7b6f9ba572f9e113e88e82407390d23bd39de730 Mon Sep 17 00:00:00 2001 From: Tobias Grosser Date: Mon, 9 Dec 2013 21:51:46 +0000 Subject: [PATCH] ScopValidator: smax expressions are no parameters This fixes PR18155 which is a regression introduced in 152913. llvm-svn: 196827 --- polly/lib/Support/SCEVValidator.cpp | 2 +- .../CodeGen/OpenMP/20120330-argument-use.ll | 12 ++++----- polly/test/ScopInfo/smax.ll | 26 +++++++++++++++++++ 3 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 polly/test/ScopInfo/smax.ll diff --git a/polly/lib/Support/SCEVValidator.cpp b/polly/lib/Support/SCEVValidator.cpp index 19ca7d492e2d..2434c0664e66 100644 --- a/polly/lib/Support/SCEVValidator.cpp +++ b/polly/lib/Support/SCEVValidator.cpp @@ -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)); diff --git a/polly/test/Cloog/CodeGen/OpenMP/20120330-argument-use.ll b/polly/test/Cloog/CodeGen/OpenMP/20120330-argument-use.ll index 415d099c84ad..0962ffccec35 100644 --- a/polly/test/Cloog/CodeGen/OpenMP/20120330-argument-use.ll +++ b/polly/test/Cloog/CodeGen/OpenMP/20120330-argument-use.ll @@ -58,13 +58,11 @@ for.end: ; preds = %for.cond 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 diff --git a/polly/test/ScopInfo/smax.ll b/polly/test/ScopInfo/smax.ll new file mode 100644 index 000000000000..73998dfe91b9 --- /dev/null +++ b/polly/test/ScopInfo/smax.ll @@ -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]