OSDN Git Service

Limiting gep merging to fix the performance problem described in
authorWei Mi <wmi@google.com>
Tue, 21 Apr 2015 22:37:09 +0000 (22:37 +0000)
committerWei Mi <wmi@google.com>
Tue, 21 Apr 2015 22:37:09 +0000 (22:37 +0000)
commit73a5fa9ad6298af59b38f2e0dfba9a55b6fbc845
tree45acb2c66b480aa7f27f8d0544efcbcb7ce95397
parent550a1ca57610686a6b4886d912e8e3423bb4f493
Limiting gep merging to fix the performance problem described in
https://llvm.org/bugs/show_bug.cgi?id=23163.

Gep merging sometimes behaves like a reverse CSE/LICM optimizations,
which has negative impact on performance. In this patch we restrict
gep merging to happen only when the indexes to be merged are both consts,
which ensures such merge is always beneficial.

The patch makes gep merging only happen in very restrictive cases.
It is possible that some analysis/optimization passes rely on the merged
geps to get better result, and we havn't notice them yet. We will be ready
to further improve it once we see the cases.

Differential Revision: http://reviews.llvm.org/D9007

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235451 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/InstCombine/InstructionCombining.cpp
test/Transforms/InstCombine/descale-zero.ll [deleted file]
test/Transforms/InstCombine/gep-merge.ll [new file with mode: 0644]
test/Transforms/InstCombine/getelementptr.ll