summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorPhilip Reames <listmail@philipreames.com>2018-08-06 21:18:34 +0000
committerPhilip Reames <listmail@philipreames.com>2018-08-06 21:18:34 +0000
commit9d7bb2f700317f6eabc1ea8cbd58065d0bc21ef9 (patch)
treed28e23bbfdcbaaec04514c13bc001089956fa737 /llvm
parent15e91c32354deebef7e8c74fa25022bfa1dbe193 (diff)
downloadbcm5719-llvm-9d7bb2f700317f6eabc1ea8cbd58065d0bc21ef9.tar.gz
bcm5719-llvm-9d7bb2f700317f6eabc1ea8cbd58065d0bc21ef9.zip
[LICM] Strengthen invariant.start hoisting tests [NFC]
llvm-svn: 339057
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/Transforms/LICM/invariant.start.ll42
1 files changed, 42 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LICM/invariant.start.ll b/llvm/test/Transforms/LICM/invariant.start.ll
index 433e4259559..36082f6b9ee 100644
--- a/llvm/test/Transforms/LICM/invariant.start.ll
+++ b/llvm/test/Transforms/LICM/invariant.start.ll
@@ -20,4 +20,46 @@ loop:
br label %loop
}
+;; TODO: despite the loop varying invariant.start, we should be
+;; able to hoist the load
+define void @test2(i1 %cond, i32* %ptr) {
+; CHECK-LABEL: @test2(
+; CHECK-LABEL: entry:
+; CHECK-LABEL: loop:
+; CHECK: call {}* @llvm.invariant.start.p0i32(i64 4, i32* %piv)
+; CHECK: %val = load i32, i32* %ptr
+
+entry:
+ br label %loop
+
+loop:
+ %x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
+ %piv = getelementptr i32, i32* %ptr, i32 %x
+ call {}* @llvm.invariant.start.p0i32(i64 4, i32* %piv)
+ %val = load i32, i32* %ptr
+ %x.inc = add i32 %x, %val
+ br label %loop
+}
+
+; Should be able to hoist since store doesn't alias
+define void @test3(i1 %cond, i32* %ptr) {
+; CHECK-LABEL: @test3(
+; CHECK-LABEL: entry:
+; CHECK-LABEL: loop:
+; CHECK: call {}* @llvm.invariant.start.p0i32(i64 4, i32* %ptr)
+; CHECK: %val = load i32, i32* %ptr
+
+entry:
+ br label %loop
+
+loop:
+ %x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
+ call {}* @llvm.invariant.start.p0i32(i64 4, i32* %ptr)
+ %val = load i32, i32* %ptr
+ %p2 = getelementptr i32, i32* %ptr, i32 1
+ store volatile i32 0, i32* %p2
+ %x.inc = add i32 %x, %val
+ br label %loop
+}
+
declare {}* @llvm.invariant.start.p0i32(i64, i32*)
OpenPOWER on IntegriCloud