ScopValidator: smax expressions are no parameters

This fixes PR18155 which is a regression introduced in 152913.

llvm-svn: 196827
This commit is contained in:
Tobias Grosser 2013-12-09 21:51:46 +00:00
parent 7d66a19fe4
commit 7b6f9ba572
3 changed files with 32 additions and 8 deletions

View File

@ -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));

View File

@ -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

View File

@ -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]