[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