Partially revert r210444 due to performance regression
authorJingyue Wu <jingyue@google.com>
Wed, 16 Jul 2014 23:25:00 +0000 (23:25 +0000)
committerJingyue Wu <jingyue@google.com>
Wed, 16 Jul 2014 23:25:00 +0000 (23:25 +0000)
commit0bdc027e3161c8ab557d4cd19c3b463aef8ed196
tree3361755ec91281a5f007bfc6da9cdba08a31612c
parent3e49fda0d4f2de4c22a4cedfd9c2d2e5b0589f9c
Partially revert r210444 due to performance regression

Summary:
Converting outermost zext(a) to sext(a) causes worse code when the
computation of zext(a) could be reused. For example, after converting

... = array[zext(a)]
... = array[zext(a) + 1]

to

... = array[sext(a)]
... = array[zext(a) + 1],

the program computes sext(a), which is actually unnecessary. I added one
test in split-gep-and-gvn.ll to illustrate this scenario.

Also, with r211281 and r211084, we annotate more "nuw" tags to
computation involving CUDA intrinsics such as threadIdx.x. These
annotations help with splitting GEP a lot, rendering the benefit we get
from this reverted optimization only marginal.

Test Plan: make check-all

Reviewers: eliben, meheff

Reviewed By: meheff

Subscribers: jholewinski, llvm-commits

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

llvm-svn: 213209
llvm/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp
llvm/test/Transforms/SeparateConstOffsetFromGEP/NVPTX/split-gep-and-gvn.ll
llvm/test/Transforms/SeparateConstOffsetFromGEP/NVPTX/split-gep.ll