diff options
author | Davide Italiano <davide@freebsd.org> | 2017-01-19 18:51:56 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2017-01-19 18:51:56 +0000 |
commit | 2ef8c4e708f189e5bc80af63e9ecb36fa68acff2 (patch) | |
tree | dba202c45ca87440d09c15ea14a3ec24abd13a80 /llvm/test/Transforms/InstCombine/getelementptr.ll | |
parent | 93b558a486cc4ca2acedef5904f75746dc606139 (diff) | |
download | bcm5719-llvm-2ef8c4e708f189e5bc80af63e9ecb36fa68acff2.tar.gz bcm5719-llvm-2ef8c4e708f189e5bc80af63e9ecb36fa68acff2.zip |
[InstCombine] Simplify gep (gep p, a), (b-a)
Patch by Andrea Canciani.
Differential Revision: https://reviews.llvm.org/D27413
llvm-svn: 292506
Diffstat (limited to 'llvm/test/Transforms/InstCombine/getelementptr.ll')
-rw-r--r-- | llvm/test/Transforms/InstCombine/getelementptr.ll | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/getelementptr.ll b/llvm/test/Transforms/InstCombine/getelementptr.ll index 7ccbdf11fde..6e2ac92b93c 100644 --- a/llvm/test/Transforms/InstCombine/getelementptr.ll +++ b/llvm/test/Transforms/InstCombine/getelementptr.ll @@ -883,6 +883,33 @@ define %struct.C* @test46(%struct.C* %c1, %struct.C* %c2, i64 %N) { ; CHECK-NEXT: ret %struct.C* [[GEP]] } +define i32* @test47(i32* %I, i64 %C, i64 %D) { + %sub = sub i64 %D, %C + %A = getelementptr i32, i32* %I, i64 %C + %B = getelementptr i32, i32* %A, i64 %sub + ret i32* %B +; CHECK-LABEL: @test47( +; CHECK-NEXT: %B = getelementptr i32, i32* %I, i64 %D +} + +define i32* @test48(i32* %I, i64 %C, i64 %D) { + %sub = sub i64 %D, %C + %A = getelementptr i32, i32* %I, i64 %sub + %B = getelementptr i32, i32* %A, i64 %C + ret i32* %B +; CHECK-LABEL: @test48( +; CHECK-NEXT: %B = getelementptr i32, i32* %I, i64 %D +} + +define i32* @test49(i32* %I, i64 %C) { + %notC = xor i64 -1, %C + %A = getelementptr i32, i32* %I, i64 %C + %B = getelementptr i32, i32* %A, i64 %notC + ret i32* %B +; CHECK-LABEL: @test49( +; CHECK-NEXT: %B = getelementptr i32, i32* %I, i64 -1 +} + define i32 addrspace(1)* @ascast_0_gep(i32* %p) nounwind { ; CHECK-LABEL: @ascast_0_gep( ; CHECK-NOT: getelementptr |