diff options
author | Michael Kruse <llvm@meinersbur.de> | 2015-12-14 14:53:30 +0000 |
---|---|---|
committer | Michael Kruse <llvm@meinersbur.de> | 2015-12-14 14:53:30 +0000 |
commit | e0d135c53646687ef34968a4874a801cd587246b (patch) | |
tree | 1406abbf46b84d02aecc3937199fad05b3237dc8 | |
parent | af9a31aff325fb8f1026891f44ffa3b9259d5289 (diff) | |
download | bcm5719-llvm-e0d135c53646687ef34968a4874a801cd587246b.tar.gz bcm5719-llvm-e0d135c53646687ef34968a4874a801cd587246b.zip |
Add unit test for r255473
Check that memory accesses in non-affine regions that are always executed are
MUST_WRITE.
llvm-svn: 255500
-rw-r--r-- | polly/test/ScopInfo/NonAffine/non_affine_region_guaranteed_non-entry.ll | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/polly/test/ScopInfo/NonAffine/non_affine_region_guaranteed_non-entry.ll b/polly/test/ScopInfo/NonAffine/non_affine_region_guaranteed_non-entry.ll new file mode 100644 index 00000000000..d5acb3362ff --- /dev/null +++ b/polly/test/ScopInfo/NonAffine/non_affine_region_guaranteed_non-entry.ll @@ -0,0 +1,51 @@ +; RUN: opt %loadPolly -polly-detect -polly-scops -analyze < %s | FileCheck %s + +; The BasicBlock "guaranteed" is always executed inside the non-affine subregion +; region_entry->region_exit. As such, writes accesses in blocks that always +; execute are MustWriteAccesses. Before Polly commit r255473, we only assumed +; that the subregion's entry block is guaranteed to execute. + +; CHECK-NOT: MayWriteAccess +; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] +; CHECK-NEXT: { Stmt_region_entry__TO__region_exit[i0] -> MemRef_A[0] }; +; CHECK-NOT: MayWriteAccess + +define void @f(i32* %A, float %b) { +entry: + br label %for.cond + +for.cond: + %indvar = phi i32 [ %indvar.next, %for.inc ], [ 0, %entry ] + %exitcond = icmp ne i32 %indvar, 1024 + br i1 %exitcond, label %region_entry, label %return + +region_entry: + %cond_entry = fcmp oeq float %b, 3.0 + br i1 %cond_entry, label %bb2, label %bb3 + +bb2: + br label %guaranteed + +bb3: + br label %guaranteed + +guaranteed: + store i32 0, i32* %A + br i1 %cond_entry, label %bb5, label %bb6 + +bb5: + br label %region_exit + +bb6: + br i1 %cond_entry, label %region_exit, label %bb3 + +region_exit: + br label %for.inc + +for.inc: + %indvar.next = add i32 %indvar, 1 + br label %for.cond + +return: + ret void +} |