diff options
| author | John Brawn <john.brawn@arm.com> | 2017-10-03 13:04:15 +0000 |
|---|---|---|
| committer | John Brawn <john.brawn@arm.com> | 2017-10-03 13:04:15 +0000 |
| commit | eb83c7554e5eee2b0c4c145050a0da901c25e4bb (patch) | |
| tree | 53a395f9f0776d6403d24bee05cb326392f50453 /llvm/test/Transforms/CodeGenPrepare | |
| parent | 68aa7de5172002935b14549aedeb7310b0b715e5 (diff) | |
| download | bcm5719-llvm-eb83c7554e5eee2b0c4c145050a0da901c25e4bb.tar.gz bcm5719-llvm-eb83c7554e5eee2b0c4c145050a0da901c25e4bb.zip | |
[CGP] In optimizeMemoryInst handle select similarly to phi
This lets us optimize away selects that perform the same address computation in
two different ways and is also the first step towards being able to handle
selects between two different, but compatible, address computations.
Differential Revision: https://reviews.llvm.org/D38242
llvm-svn: 314794
Diffstat (limited to 'llvm/test/Transforms/CodeGenPrepare')
| -rw-r--r-- | llvm/test/Transforms/CodeGenPrepare/X86/sink-addrmode.ll | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/test/Transforms/CodeGenPrepare/X86/sink-addrmode.ll b/llvm/test/Transforms/CodeGenPrepare/X86/sink-addrmode.ll index 088b177c2e1..9d2e3fff59d 100644 --- a/llvm/test/Transforms/CodeGenPrepare/X86/sink-addrmode.ll +++ b/llvm/test/Transforms/CodeGenPrepare/X86/sink-addrmode.ll @@ -251,3 +251,20 @@ backedge: exit: ret void } + +; Make sure we can eliminate a select when both arguments perform equivalent +; address computation. +define void @test10(i1 %cond, i64* %base) { +; CHECK-LABEL: @test10 +; CHECK: getelementptr i8, {{.+}} 40 +; CHECK-NOT: select +entry: + %gep1 = getelementptr inbounds i64, i64* %base, i64 5 + %gep1.casted = bitcast i64* %gep1 to i32* + %base.casted = bitcast i64* %base to i32* + %gep2 = getelementptr inbounds i32, i32* %base.casted, i64 10 + %casted.merged = select i1 %cond, i32* %gep1.casted, i32* %gep2 + %v = load i32, i32* %casted.merged, align 4 + call void @foo(i32 %v) + ret void +} |

