[polly] r278738 - [ScopDetect] Do not assert in case of AddRecs with non-constant start expression
Tobias Grosser via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 15 13:59:31 PDT 2016
Author: grosser
Date: Mon Aug 15 15:59:30 2016
New Revision: 278738
URL: http://llvm.org/viewvc/llvm-project?rev=278738&view=rev
Log:
[ScopDetect] Do not assert in case of AddRecs with non-constant start expression
Added:
polly/trunk/test/ScopDetect/non-constant-add-rec-start-expr.ll
Modified:
polly/trunk/lib/Support/SCEVValidator.cpp
Modified: polly/trunk/lib/Support/SCEVValidator.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Support/SCEVValidator.cpp?rev=278738&r1=278737&r2=278738&view=diff
==============================================================================
--- polly/trunk/lib/Support/SCEVValidator.cpp (original)
+++ polly/trunk/lib/Support/SCEVValidator.cpp Mon Aug 15 15:59:30 2016
@@ -232,8 +232,7 @@ public:
return ValidatorResult(SCEVType::INVALID);
}
- assert(Start.isConstant() && Recurrence.isConstant() &&
- "Expected 'Start' and 'Recurrence' to be constant");
+ assert(Recurrence.isConstant() && "Expected 'Recurrence' to be constant");
// Directly generate ValidatorResult for Expr if 'start' is zero.
if (Expr->getStart()->isZero())
Added: polly/trunk/test/ScopDetect/non-constant-add-rec-start-expr.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopDetect/non-constant-add-rec-start-expr.ll?rev=278738&view=auto
==============================================================================
--- polly/trunk/test/ScopDetect/non-constant-add-rec-start-expr.ll (added)
+++ polly/trunk/test/ScopDetect/non-constant-add-rec-start-expr.ll Mon Aug 15 15:59:30 2016
@@ -0,0 +1,50 @@
+; RUN: opt %loadPolly -polly-detect -\
+; RUN: -analyze < %s | FileCheck %s
+
+; CHECK: Valid Region for Scop: bb11 => bb25
+
+; Ensure that this test case does not trigger an assertion. At some point,
+; we asserted on scops containing accesses where the access function contained
+; an AddRec expression with a non-constant step expression. This got missed, as
+; this very specific pattern does not seem too common. Even in this test case,
+; it disappears as soon as we turn the infinite loop into a finite loop.
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @hoge() local_unnamed_addr {
+bb:
+ %tmp = alloca [18 x [16 x i32]]
+ %tmp1 = alloca [17 x i32]
+ br label %bb2
+
+bb2:
+ %tmp3 = phi i64 [ 0, %bb ], [ %tmp5, %bb2 ]
+ %tmp4 = add nuw nsw i64 %tmp3, 2
+ %tmp5 = add nuw nsw i64 %tmp3, 1
+ br i1 undef, label %bb2, label %bb11
+
+bb11:
+ %tmp12 = phi i64 [ %tmp23, %bb24 ], [ 1, %bb2 ]
+ %tmp14 = getelementptr inbounds [17 x i32], [17 x i32]* %tmp1, i64 0, i64 1
+ br label %bb15
+
+bb15:
+ %tmp16 = sub nsw i64 %tmp12, 1
+ %tmp17 = shl i64 %tmp16, 32
+ %tmp18 = ashr exact i64 %tmp17, 32
+ %tmp19 = getelementptr inbounds [18 x [16 x i32]], [18 x [16 x i32]]* %tmp, i64 0, i64 %tmp4, i64 %tmp18
+ %tmp20 = load i32, i32* %tmp19, align 4
+ store i32 4, i32* %tmp19
+ br label %bb21
+
+bb21:
+ %tmp23 = add nuw nsw i64 %tmp12, 1
+ br i1 true, label %bb24, label %bb25
+
+bb24:
+ br label %bb11
+
+bb25:
+ ret void
+}
More information about the llvm-commits
mailing list