summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/InstCombine/getelementptr.ll
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-08-27 20:08:37 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-08-27 20:08:37 +0000
commit22ccfc44845f29e850c52d4b3850f9ac8a82922c (patch)
treed220fc6fb4f8b2a66e5fd077e1915bd675055c7d /llvm/test/Transforms/InstCombine/getelementptr.ll
parent11ca2971e88f37dc1b40f00542cb6228e255fee4 (diff)
downloadbcm5719-llvm-22ccfc44845f29e850c52d4b3850f9ac8a82922c.tar.gz
bcm5719-llvm-22ccfc44845f29e850c52d4b3850f9ac8a82922c.zip
InstCombine: Combine gep X, (Y-X) to Y
We try to perform this transform in InstSimplify but we aren't always able to. Sometimes, we need to insert a bitcast if X and Y don't have the same time. llvm-svn: 216598
Diffstat (limited to 'llvm/test/Transforms/InstCombine/getelementptr.ll')
-rw-r--r--llvm/test/Transforms/InstCombine/getelementptr.ll13
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/getelementptr.ll b/llvm/test/Transforms/InstCombine/getelementptr.ll
index 71546ae3328..684d9447129 100644
--- a/llvm/test/Transforms/InstCombine/getelementptr.ll
+++ b/llvm/test/Transforms/InstCombine/getelementptr.ll
@@ -858,6 +858,19 @@ define %struct.C* @test44(%struct.C* %c1, %struct.C* %c2) {
; CHECK-NEXT: ret %struct.C* [[INTTOPTR]]
}
+define %struct.C* @test45(%struct.C* %c1, %struct.C** %c2) {
+ %ptrtoint1 = ptrtoint %struct.C* %c1 to i64
+ %ptrtoint2 = ptrtoint %struct.C** %c2 to i64
+ %sub = sub i64 %ptrtoint2, %ptrtoint1 ; C2 - C1
+ %shr = sdiv i64 %sub, 7
+ %gep = getelementptr inbounds %struct.C* %c1, i64 %shr ; C1 + (C2 - C1)
+ ret %struct.C* %gep
+
+; CHECK-LABEL: @test45(
+; CHECK-NEXT: [[BITCAST:%.*]] = bitcast %struct.C** %c2 to %struct.C*
+; CHECK-NEXT: ret %struct.C* [[BITCAST]]
+}
+
define i32 addrspace(1)* @ascast_0_gep(i32* %p) nounwind {
; CHECK-LABEL: @ascast_0_gep(
; CHECK-NOT: getelementptr
OpenPOWER on IntegriCloud