Limiting gep merging to fix the performance problem described in
authorWei Mi <wmi@google.com>
Tue, 21 Apr 2015 23:02:15 +0000 (23:02 +0000)
committerWei Mi <wmi@google.com>
Tue, 21 Apr 2015 23:02:15 +0000 (23:02 +0000)
commita0adf9fd41deedda6ba5f5b19c11d30fe0282450
tree6a7186dac047bd5f92acfe249df716c60e6b8514
parent6598431c7acadcf0f3dedd6853163209c14a2cc7
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 optimization,
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/D8911

llvm-svn: 235455
llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
llvm/test/Transforms/InstCombine/descale-zero.ll
llvm/test/Transforms/InstCombine/getelementptr.ll