summaryrefslogtreecommitdiffstats
path: root/polly/test
diff options
context:
space:
mode:
authorHuihui Zhang <huihuiz@codeaurora.org>2018-04-04 18:08:13 +0000
committerHuihui Zhang <huihuiz@codeaurora.org>2018-04-04 18:08:13 +0000
commit71e54ccd064585614d4951b3573ec932b45f98c2 (patch)
treed0dfe35af5c02dce9c7c38ed82640a1013fcb00d /polly/test
parentea5f34b8ffd09e87486bfacf8c068f150ddbb2c7 (diff)
downloadbcm5719-llvm-71e54ccd064585614d4951b3573ec932b45f98c2.tar.gz
bcm5719-llvm-71e54ccd064585614d4951b3573ec932b45f98c2.zip
[Polly][IslAst] Fix minimal dependence distance.
Summary: When checking the parallelism of a scheduling dimension, we first check if excluding reduction dependences the loop is parallel or not. If the loop is not parallel, then we need to return the minimal dependence distance of all data dependences, including the previously subtracted reduction dependences. Reviewers: grosser, Meinersbur, efriedma, eli.friedman, jdoerfert, bollu Reviewed By: Meinersbur Subscribers: llvm-commits, pollydev Tags: #polly Differential Revision: https://reviews.llvm.org/D45236 llvm-svn: 329214
Diffstat (limited to 'polly/test')
-rw-r--r--polly/test/Isl/Ast/dependence_distance_minimal.ll57
1 files changed, 57 insertions, 0 deletions
diff --git a/polly/test/Isl/Ast/dependence_distance_minimal.ll b/polly/test/Isl/Ast/dependence_distance_minimal.ll
new file mode 100644
index 00000000000..2785ae71258
--- /dev/null
+++ b/polly/test/Isl/Ast/dependence_distance_minimal.ll
@@ -0,0 +1,57 @@
+; RUN: opt %loadPolly -polly-ast -polly-ast-detect-parallel -analyze < %s | FileCheck %s
+;
+; The minimal dependence distance of the innermost loop should be 1 instead of 250.
+; CHECK: #pragma minimal dependence distance: 1
+; CHECK: for (int c0 = 0; c0 <= 499; c0 += 1)
+; CHECK: #pragma minimal dependence distance: 1
+; CHECK: for (int c1 = 0; c1 <= 998; c1 += 1) {
+; CHECK: Stmt_bb9(c0, c1);
+; CHECK: Stmt_bb9_b(c0, c1);
+;
+; void foo (int *A, int *B) {
+; for (int i=0; i < 500; i++) {
+; for (int j=0; j < 1000; j++) {
+; B[i] = B[i] + 1;
+; A[j] += A[j % 250];
+; }
+; }
+; }
+;
+target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
+
+define void @foo(i32* nocapture %arg, i32* nocapture %arg1) {
+bb:
+ br label %bb2
+
+bb2: ; preds = %bb
+ br label %bb4
+
+bb3: ; preds = %bb6
+ ret void
+
+bb4: ; preds = %bb6, %bb2
+ %tmp = phi i32 [ 0, %bb2 ], [ %tmp7, %bb6 ]
+ %tmp5 = getelementptr inbounds i32, i32* %arg1, i32 %tmp
+ br label %bb9
+
+bb6: ; preds = %bb9
+ %tmp7 = add nuw nsw i32 %tmp, 1
+ %tmp8 = icmp eq i32 %tmp7, 500
+ br i1 %tmp8, label %bb3, label %bb4
+
+bb9: ; preds = %bb9, %bb4
+ %tmp10 = phi i32 [ 1, %bb4 ], [ %tmp19, %bb9 ]
+ %tmp11 = load i32, i32* %tmp5, align 4
+ %tmp12 = add nsw i32 %tmp11, 1
+ store i32 %tmp12, i32* %tmp5, align 4
+ %tmp13 = urem i32 %tmp10, 250
+ %tmp14 = getelementptr inbounds i32, i32* %arg, i32 %tmp13
+ %tmp15 = load i32, i32* %tmp14, align 4
+ %tmp16 = getelementptr inbounds i32, i32* %arg, i32 %tmp10
+ %tmp17 = load i32, i32* %tmp16, align 4
+ %tmp18 = add nsw i32 %tmp17, %tmp15
+ store i32 %tmp18, i32* %tmp16, align 4
+ %tmp19 = add nuw nsw i32 %tmp10, 1
+ %tmp20 = icmp eq i32 %tmp19, 1000
+ br i1 %tmp20, label %bb6, label %bb9
+}
OpenPOWER on IntegriCloud