summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorPiotr Padlewski <piotr.padlewski@gmail.com>2017-01-21 21:56:56 +0000
committerPiotr Padlewski <piotr.padlewski@gmail.com>2017-01-21 21:56:56 +0000
commitbff575fe29da8a07eeb44ea5a2481d06b294391d (patch)
tree3274da0b5a607da13a41990f7e68aa173bcca104 /llvm
parentb81980a37677214a1d94aadeb1c5f39e29f7c45c (diff)
downloadbcm5719-llvm-bff575fe29da8a07eeb44ea5a2481d06b294391d.tar.gz
bcm5719-llvm-bff575fe29da8a07eeb44ea5a2481d06b294391d.zip
[MemorySSA] Fix invariant.group test and add new
Summary: This test had a bug: !llvm.invariant.group instead of !invariant.group. Also add some new test for future development. All tests passes, when MSSA will support invariant.group only the lines with FIXIT should be changed. Reviewers: dberlin, george.burgess.iv Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D28969 llvm-svn: 292730
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/Transforms/Util/MemorySSA/invariant-groups.ll77
1 files changed, 75 insertions, 2 deletions
diff --git a/llvm/test/Transforms/Util/MemorySSA/invariant-groups.ll b/llvm/test/Transforms/Util/MemorySSA/invariant-groups.ll
index 57247fe3b2b..6bb55d519ce 100644
--- a/llvm/test/Transforms/Util/MemorySSA/invariant-groups.ll
+++ b/llvm/test/Transforms/Util/MemorySSA/invariant-groups.ll
@@ -9,7 +9,7 @@
define i32 @foo(i32* %a) {
; CHECK: 1 = MemoryDef(liveOnEntry)
; CHECK-NEXT: store i32 0
- store i32 0, i32* %a, align 4, !llvm.invariant.group !0
+ store i32 0, i32* %a, align 4, !invariant.group !0
; CHECK: 2 = MemoryDef(1)
; CHECK-NEXT: store i32 1
@@ -19,12 +19,85 @@ define i32 @foo(i32* %a) {
%a8 = call i8* @llvm.invariant.group.barrier(i8* %1)
%a32 = bitcast i8* %a8 to i32*
+; This have to be MemoryUse(1), because we can't skip the barrier based on
+; invariant.group.
; CHECK: MemoryUse(2)
; CHECK-NEXT: %2 = load i32
- %2 = load i32, i32* %a32, align 4, !llvm.invariant.group !0
+ %2 = load i32, i32* %a32, align 4, !invariant.group !0
ret i32 %2
}
+define i32 @skipBarrier(i32* %a) {
+; CHECK: 1 = MemoryDef(liveOnEntry)
+; CHECK-NEXT: store i32 0
+ store i32 0, i32* %a, align 4, !invariant.group !0
+
+ %1 = bitcast i32* %a to i8*
+ %a8 = call i8* @llvm.invariant.group.barrier(i8* %1)
+ %a32 = bitcast i8* %a8 to i32*
+
+; We can skip the barrier only if the "skip" is not based on !invariant.group.
+; CHECK: MemoryUse(1)
+; CHECK-NEXT: %2 = load i32
+ %2 = load i32, i32* %a32, align 4, !invariant.group !0
+ ret i32 %2
+}
+
+define i32 @skipBarrier2(i32* %a) {
+
+; CHECK: MemoryUse(liveOnEntry)
+; CHECK-NEXT: %v = load i32
+ %v = load i32, i32* %a, align 4, !invariant.group !0
+
+ %1 = bitcast i32* %a to i8*
+ %a8 = call i8* @llvm.invariant.group.barrier(i8* %1)
+ %a32 = bitcast i8* %a8 to i32*
+
+; We can skip the barrier only if the "skip" is not based on !invariant.group.
+; CHECK: MemoryUse(liveOnEntry)
+; CHECK-NEXT: %v2 = load i32
+ %v2 = load i32, i32* %a32, align 4, !invariant.group !0
+; CHECK: 1 = MemoryDef(liveOnEntry)
+; CHECK-NEXT: store i32 1
+ store i32 1, i32* @g, align 4
+
+; FIXME: based on invariant.group it should be MemoryUse(liveOnEntry)
+; CHECK: MemoryUse(1)
+; CHECK-NEXT: %v3 = load i32
+ %v3 = load i32, i32* %a32, align 4, !invariant.group !0
+ %add = add nsw i32 %v2, %v3
+ %add2 = add nsw i32 %add, %v
+ ret i32 %add2
+}
+
+define i32 @handleInvariantGroups(i32* %a) {
+; CHECK: 1 = MemoryDef(liveOnEntry)
+; CHECK-NEXT: store i32 0
+ store i32 0, i32* %a, align 4, !invariant.group !0
+
+; CHECK: 2 = MemoryDef(1)
+; CHECK-NEXT: store i32 1
+ store i32 1, i32* @g, align 4
+ %1 = bitcast i32* %a to i8*
+ %a8 = call i8* @llvm.invariant.group.barrier(i8* %1)
+ %a32 = bitcast i8* %a8 to i32*
+
+; CHECK: MemoryUse(2)
+; CHECK-NEXT: %2 = load i32
+ %2 = load i32, i32* %a32, align 4, !invariant.group !0
+
+; CHECK: 3 = MemoryDef(2)
+; CHECK-NEXT: store i32 2
+ store i32 2, i32* @g, align 4
+
+; FIXME: This can be changed to MemoryUse(2)
+; CHECK: MemoryUse(3)
+; CHECK-NEXT: %3 = load i32
+ %3 = load i32, i32* %a32, align 4, !invariant.group !0
+ %add = add nsw i32 %2, %3
+ ret i32 %add
+}
+
declare i8* @llvm.invariant.group.barrier(i8*)
!0 = !{!"group1"}
OpenPOWER on IntegriCloud