[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