diff options
| author | Philip Reames <listmail@philipreames.com> | 2018-08-06 21:18:34 +0000 |
|---|---|---|
| committer | Philip Reames <listmail@philipreames.com> | 2018-08-06 21:18:34 +0000 |
| commit | 9d7bb2f700317f6eabc1ea8cbd58065d0bc21ef9 (patch) | |
| tree | d28e23bbfdcbaaec04514c13bc001089956fa737 /llvm | |
| parent | 15e91c32354deebef7e8c74fa25022bfa1dbe193 (diff) | |
| download | bcm5719-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.ll | 42 |
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*) |

