Simplify (X<<1)-X into X. According to my auto-simplier this is the most common...
authorDuncan Sands <baldrick@free.fr>
Tue, 18 Jan 2011 09:24:58 +0000 (09:24 +0000)
committerDuncan Sands <baldrick@free.fr>
Tue, 18 Jan 2011 09:24:58 +0000 (09:24 +0000)
commitfe02c69f84ad52d42be934e4fe702f03e4991a6a
treeaa3ac73de8b775633dc315afb6b202b8ed74770e
parent908d8e82b5cc19d1a0a55a5fbc9dfd87359d726e
Simplify (X<<1)-X into X.  According to my auto-simplier this is the most common missed
simplification in fully optimized code.  It occurs sporadically in the testsuite, and
many times in 403.gcc: the final bitcode has 131 fewer subtractions after this change.
The reason that the multiplies are not eliminated is the same reason that instcombine
did not catch this: they are used by other instructions (instcombine catches this with
a more general transform which in general is only profitable if the operands have only
one use).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123754 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Analysis/InstructionSimplify.cpp
test/Transforms/InstSimplify/2010-12-20-Distribute.ll