summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorGeoff Berry <gberry@codeaurora.org>2016-10-25 16:18:47 +0000
committerGeoff Berry <gberry@codeaurora.org>2016-10-25 16:18:47 +0000
commit91e9a5cc236941473e9791de0071f02378e0497d (patch)
tree761b0e5c3bc14dec8c0bf54766a65a2b2a36e861 /llvm/test
parent58139d1758c116e4f86d859fe99b11dafca1ec9f (diff)
downloadbcm5719-llvm-91e9a5cc236941473e9791de0071f02378e0497d.tar.gz
bcm5719-llvm-91e9a5cc236941473e9791de0071f02378e0497d.zip
[EarlyCSE] Make MemorySSA memory dependency check more aggressive.
Now that MemorySSA keeps track of whether MemoryUses are optimized, use getClobberingMemoryAccess() to check MemoryUse memory dependencies since it should no longer be so expensive. This is a follow-up change to https://reviews.llvm.org/D25881 llvm-svn: 285080
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Transforms/EarlyCSE/memoryssa.ll39
1 files changed, 39 insertions, 0 deletions
diff --git a/llvm/test/Transforms/EarlyCSE/memoryssa.ll b/llvm/test/Transforms/EarlyCSE/memoryssa.ll
index 9c7f64af004..1c10efe2293 100644
--- a/llvm/test/Transforms/EarlyCSE/memoryssa.ll
+++ b/llvm/test/Transforms/EarlyCSE/memoryssa.ll
@@ -5,6 +5,7 @@
@G1 = global i32 zeroinitializer
@G2 = global i32 zeroinitializer
+@G3 = global i32 zeroinitializer
;; Simple load value numbering across non-clobbering store.
; CHECK-LABEL: @test1(
@@ -67,3 +68,41 @@ end:
store i32 %sum, i32* @G2
ret void
}
+
+
+;; Check that MemoryPhi optimization and MemoryUse re-optimization
+;; happens during EarlyCSE, enabling more load CSE opportunities.
+; CHECK-LABEL: @test_memphiopt2(
+; CHECK-NOMEMSSA-LABEL: @test_memphiopt2(
+define void @test_memphiopt2(i1 %c, i32* %p) {
+; CHECK-LABEL: entry:
+; CHECK-NOMEMSSA-LABEL: entry:
+entry:
+; CHECK: load
+; CHECK-NOMEMSSA: load
+ %v1 = load i32, i32* @G1
+; CHECK: store
+; CHECK-NOMEMSSA: store
+ store i32 %v1, i32* @G2
+ br i1 %c, label %then, label %end
+
+; CHECK-LABEL: then:
+; CHECK-NOMEMSSA-LABEL: then:
+then:
+; CHECK: load
+; CHECK-NOMEMSSA: load
+ %pv = load i32, i32* %p
+; CHECK-NOT: store
+; CHECK-NOMEMSSA-NOT: store
+ store i32 %pv, i32* %p
+ br label %end
+
+; CHECK-LABEL: end:
+; CHECK-NOMEMSSA-LABEL: end:
+end:
+; CHECK-NOT: load
+; CHECK-NOMEMSSA: load
+ %v2 = load i32, i32* @G1
+ store i32 %v2, i32* @G3
+ ret void
+}
OpenPOWER on IntegriCloud