summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--polly/lib/CodeGen/IslNodeBuilder.cpp2
-rw-r--r--polly/test/Isl/CodeGen/OpenMP/mapped-phi-access.ll6
-rw-r--r--polly/test/Isl/CodeGen/OpenMP/reference_latest.ll44
3 files changed, 48 insertions, 4 deletions
diff --git a/polly/lib/CodeGen/IslNodeBuilder.cpp b/polly/lib/CodeGen/IslNodeBuilder.cpp
index d6dafcbcb4a..381195d48ee 100644
--- a/polly/lib/CodeGen/IslNodeBuilder.cpp
+++ b/polly/lib/CodeGen/IslNodeBuilder.cpp
@@ -263,7 +263,7 @@ isl_stat addReferencesFromStmt(const ScopStmt *Stmt, void *UserPtr,
}
if (Access->isLatestArrayKind()) {
- auto *BasePtr = Access->getScopArrayInfo()->getBasePtr();
+ auto *BasePtr = Access->getLatestScopArrayInfo()->getBasePtr();
if (Instruction *OpInst = dyn_cast<Instruction>(BasePtr))
if (Stmt->getParent()->contains(OpInst))
continue;
diff --git a/polly/test/Isl/CodeGen/OpenMP/mapped-phi-access.ll b/polly/test/Isl/CodeGen/OpenMP/mapped-phi-access.ll
index 8065c31fb3e..5968840136e 100644
--- a/polly/test/Isl/CodeGen/OpenMP/mapped-phi-access.ll
+++ b/polly/test/Isl/CodeGen/OpenMP/mapped-phi-access.ll
@@ -53,6 +53,6 @@ attributes #0 = { nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="fals
; CHECK-LABEL: define internal void @main_polly_subfn(i8* %polly.par.userContext)
;
; CHECK: polly.stmt.for.body65.i226:
-; CHECK-NEXT: %polly.access.cast.polly.subfunc.arg.2 = bitcast i8* %polly.subfunc.arg.2 to double*
-; CHECK-NEXT: %polly.access.polly.subfunc.arg.2 = getelementptr double, double* %polly.access.cast.polly.subfunc.arg.2, i64 %polly.indvar
-; CHECK-NEXT: store double undef, double* %polly.access.polly.subfunc.arg.2
+; CHECK-NEXT: %polly.access.cast.polly.subfunc.arg.[[R0:[0-9]*]] = bitcast i8* %polly.subfunc.arg.{{[0-9]*}} to double*
+; CHECK-NEXT: %polly.access.polly.subfunc.arg.[[R1:[0-9]*]] = getelementptr double, double* %polly.access.cast.polly.subfunc.arg.[[R0]], i64 %polly.indvar
+; CHECK-NEXT: store double undef, double* %polly.access.polly.subfunc.arg.[[R1]]
diff --git a/polly/test/Isl/CodeGen/OpenMP/reference_latest.ll b/polly/test/Isl/CodeGen/OpenMP/reference_latest.ll
new file mode 100644
index 00000000000..4622fbf2e0b
--- /dev/null
+++ b/polly/test/Isl/CodeGen/OpenMP/reference_latest.ll
@@ -0,0 +1,44 @@
+; RUN: opt %loadPolly -polly-delicm -polly-simplify -polly-parallel -polly-codegen -S < %s | FileCheck %s
+;
+; Test that parallel codegen handles scalars mapped to other arrays.
+; After mapping "store double %add10" references the array "MemRef2".
+; Its base pointer therefore needs to be made available in the subfunction.
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+define void @reference_latest(float* nocapture readonly %data, i32 %n, i32 %m) {
+entry:
+ %0 = alloca double, i64 undef, align 16
+ %conv1 = sext i32 %m to i64
+ br label %while.body
+
+while.body:
+ %indvars.iv211 = phi i64 [ %conv1, %entry ], [ %indvars.iv.next212, %for.end ]
+ br label %for.body
+
+for.body:
+ %indvars.iv207 = phi i64 [ %indvars.iv211, %while.body ], [ %indvars.iv.next208, %for.body ]
+ %arrayidx7 = getelementptr inbounds float, float* %data, i64 0
+ %1 = load float, float* %arrayidx7, align 4
+ %add10 = fadd double undef, undef
+ %indvars.iv.next208 = add nsw i64 %indvars.iv207, 1
+ %lftr.wideiv = trunc i64 %indvars.iv.next208 to i32
+ %exitcond210 = icmp eq i32 %lftr.wideiv, %n
+ br i1 %exitcond210, label %for.end, label %for.body
+
+for.end:
+ %arrayidx12 = getelementptr inbounds double, double* %0, i64 %indvars.iv211
+ store double %add10, double* %arrayidx12, align 8
+ %indvars.iv.next212 = add nsw i64 %indvars.iv211, -1
+ %2 = trunc i64 %indvars.iv211 to i32
+ %tobool = icmp eq i32 %2, 0
+ br i1 %tobool, label %while.end, label %while.body
+
+while.end:
+ ret void
+}
+
+; CHECK-LABEL: define internal void @reference_latest_polly_subfn(i8* %polly.par.userContext)
+
+; CHECK: %polly.access.polly.subfunc.arg. = getelementptr double, double* %polly.subfunc.arg., i64 %{{[0-9]+}}
+; CHECK-NEXT: store double %p_add{{[0-9]*}}, double* %polly.access.polly.subfunc.arg.
OpenPOWER on IntegriCloud