[polly] r201815 - Do not track location of scalar dependences in ScopInfo

Tobias Grosser tobias at grosser.es
Thu Feb 20 13:29:09 PST 2014


Author: grosser
Date: Thu Feb 20 15:29:09 2014
New Revision: 201815

URL: http://llvm.org/viewvc/llvm-project?rev=201815&view=rev
Log:
Do not track location of scalar dependences in ScopInfo

We do not have a use for this information at the moment. If we need this at some
point, the "instruction -> access" mapping needs to be enhanced as a single
instruction could then possibly perform multiple accesses.

This patch allows us to build the polyhedral information for scops with scalar
dependences.

Added:
    polly/trunk/test/ScopInfo/scalar.ll
Modified:
    polly/trunk/lib/Analysis/ScopInfo.cpp

Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=201815&r1=201814&r2=201815&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Thu Feb 20 15:29:09 2014
@@ -528,9 +528,17 @@ void ScopStmt::buildAccesses(TempScop &t
                                       E = AccFuncs->end();
        I != E; ++I) {
     MemAccs.push_back(new MemoryAccess(I->first, I->second, this));
-    assert(!InstructionToAccess.count(I->second) &&
+
+    // We do not track locations for scalar memory accesses at the moment.
+    //
+    // We do not have a use for this information at the moment. If we need this
+    // at some point, the "instruction -> access" mapping needs to be enhanced
+    // as a single instruction could then possibly perform multiple accesses.
+    if (!I->first.isScalar()) {
+      assert(!InstructionToAccess.count(I->second) &&
            "Unexpected 1-to-N mapping on instruction to access map!");
-    InstructionToAccess[I->second] = MemAccs.back();
+      InstructionToAccess[I->second] = MemAccs.back();
+    }
   }
 }
 

Added: polly/trunk/test/ScopInfo/scalar.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/scalar.ll?rev=201815&view=auto
==============================================================================
--- polly/trunk/test/ScopInfo/scalar.ll (added)
+++ polly/trunk/test/ScopInfo/scalar.ll Thu Feb 20 15:29:09 2014
@@ -0,0 +1,50 @@
+; RUN: opt %loadPolly -polly-scops -analyze -disable-polly-intra-scop-scalar-to-array < %s | FileCheck %s
+
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @f(i64* %a, i64 %N) {
+entry:
+  br label %for
+
+for:
+  %indvar = phi i64 [ 0, %entry ], [ %indvar.next, %for.backedge ]
+  br label %S1
+
+S1:
+  %scevgep1 = getelementptr i64* %a, i64 %indvar
+  %val = load i64* %scevgep1, align 8
+  br label %S2
+
+S2:
+  %scevgep2 = getelementptr i64* %a, i64 %indvar
+  store i64 %val, i64* %scevgep2, align 8
+  br label %for.backedge
+
+for.backedge:
+  %indvar.next = add nsw i64 %indvar, 1
+  %exitcond = icmp eq i64 %indvar.next, %N
+  br i1 %exitcond, label %return, label %for
+
+return:
+  ret void
+}
+
+; CHECK: Stmt_S1
+; CHECK:       Domain :=
+; CHECK:           [N] -> { Stmt_S1[i0] : i0 >= 0 and i0 <= -1 + N };
+; CHECK:       Scattering :=
+; CHECK:           [N] -> { Stmt_S1[i0] -> scattering[0, i0, 0] };
+; CHECK:       ReadAccess :=
+; CHECK:           [N] -> { Stmt_S1[i0] -> MemRef_a[i0] };
+; CHECK:       MustWriteAccess :=
+; CHECK:           [N] -> { Stmt_S1[i0] -> MemRef_val[0] };
+; CHECK: Stmt_S2
+; CHECK:       Domain :=
+; CHECK:           [N] -> { Stmt_S2[i0] : i0 >= 0 and i0 <= -1 + N };
+; CHECK:       Scattering :=
+; CHECK:           [N] -> { Stmt_S2[i0] -> scattering[0, i0, 1] };
+; CHECK:       ReadAccess :=
+; CHECK:           [N] -> { Stmt_S2[i0] -> MemRef_val[0] };
+; CHECK:       MustWriteAccess :=
+; CHECK:           [N] -> { Stmt_S2[i0] -> MemRef_a[i0] };





More information about the llvm-commits mailing list