summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/CodeGenPrepare
diff options
context:
space:
mode:
authorJohn Brawn <john.brawn@arm.com>2017-10-03 13:04:15 +0000
committerJohn Brawn <john.brawn@arm.com>2017-10-03 13:04:15 +0000
commiteb83c7554e5eee2b0c4c145050a0da901c25e4bb (patch)
tree53a395f9f0776d6403d24bee05cb326392f50453 /llvm/test/Transforms/CodeGenPrepare
parent68aa7de5172002935b14549aedeb7310b0b715e5 (diff)
downloadbcm5719-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.ll17
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
+}
OpenPOWER on IntegriCloud