[PATCH] D11425: Filter UnDef size values in Scop Detection
Tobias Grosser
tobias at grosser.es
Wed Jul 29 06:52:40 PDT 2015
This revision was automatically updated to reflect the committed changes.
Closed by commit rL243515: Do not detect scops that are delinearized to arrays with "undef" size (authored by grosser).
Changed prior to commit:
http://reviews.llvm.org/D11425?vs=30886&id=30903#toc
Repository:
rL LLVM
http://reviews.llvm.org/D11425
Files:
polly/trunk/lib/Analysis/ScopDetection.cpp
polly/trunk/test/ScopDetect/restrict-undef-size-scopdetect.ll
Index: polly/trunk/lib/Analysis/ScopDetection.cpp
===================================================================
--- polly/trunk/lib/Analysis/ScopDetection.cpp
+++ polly/trunk/lib/Analysis/ScopDetection.cpp
@@ -512,11 +512,21 @@
Context.ElementSize[BasePointer]);
if (!AllowNonAffine)
- for (const SCEV *DelinearizedSize : Shape->DelinearizedSizes)
+ for (const SCEV *DelinearizedSize : Shape->DelinearizedSizes) {
+ if (auto *Unknown = dyn_cast<SCEVUnknown>(DelinearizedSize)) {
+ auto *value = dyn_cast<Value>(Unknown->getValue());
+ if (isa<UndefValue>(value)) {
+ invalid<ReportDifferentArrayElementSize>(
+ Context, /*Assert=*/true,
+ Context.Accesses[BasePointer].front().first, BaseValue);
+ return false;
+ }
+ }
if (hasScalarDepsInsideRegion(DelinearizedSize, &CurRegion))
invalid<ReportNonAffineAccess>(
Context, /*Assert=*/true, DelinearizedSize,
Context.Accesses[BasePointer].front().first, BaseValue);
+ }
// No array shape derived.
if (Shape->DelinearizedSizes.empty()) {
Index: polly/trunk/test/ScopDetect/restrict-undef-size-scopdetect.ll
===================================================================
--- polly/trunk/test/ScopDetect/restrict-undef-size-scopdetect.ll
+++ polly/trunk/test/ScopDetect/restrict-undef-size-scopdetect.ll
@@ -0,0 +1,33 @@
+; RUN: opt %loadPolly -polly-detect -analyze < %s | FileCheck %s
+; CHECK-NOT: Valid Region for Scop:
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+%struct.bar = type { i32, [4 x i32] }
+
+define void @f(%struct.bar* %arg) {
+bb:
+ %tmp = alloca [4 x i32], align 16
+ br label %bb1
+
+bb1: ; preds = %bb8, %bb
+ %tmp2 = phi i64 [ 0, %bb ], [ %tmp9, %bb8 ]
+ br i1 false, label %bb3, label %bb6
+
+bb3: ; preds = %bb1
+ %tmp4 = getelementptr inbounds [4 x i32], [4 x i32]* %tmp, i64 0, i64 0
+ %tmp5 = load i32, i32* %tmp4
+ br label %bb8
+
+bb6: ; preds = %bb1
+ %tmp7 = getelementptr inbounds %struct.bar, %struct.bar* %arg, i64 0, i32 1, i64 undef
+ store i32 42, i32* %tmp7
+ br label %bb8
+
+bb8: ; preds = %bb6, %bb3
+ %tmp9 = add nuw nsw i64 %tmp2, 1
+ br i1 false, label %bb1, label %bb10
+
+bb10: ; preds = %bb8
+ ret void
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D11425.30903.patch
Type: text/x-patch
Size: 2576 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150729/29ebebbf/attachment.bin>
More information about the llvm-commits
mailing list