Have GVN simplify instructions as it goes. For example, consider
authorDuncan Sands <baldrick@free.fr>
Fri, 12 Nov 2010 21:10:24 +0000 (21:10 +0000)
committerDuncan Sands <baldrick@free.fr>
Fri, 12 Nov 2010 21:10:24 +0000 (21:10 +0000)
commit88c3df7afb8e067daab12dbbbc9ce898a52e9624
tree73231f47b9e6e4838ac466b75cfa982a723d964a
parent529916ca4ab83ec472a2d7039a05007c4d40553a
Have GVN simplify instructions as it goes.  For example, consider
"%z = %x and %y".  If GVN can prove that %y equals %x, then it turns
this into "%z = %x and %x".  With the new code, %z will be replaced
with %x everywhere (and then deleted).  Previously %z would be value
numbered too, which is a waste of time.  Also, while a clever value
numbering algorithm would give %z the same value number as %x, our
current one doesn't do so (at least I don't think it does).  The new
logic has an essentially equivalent effect to what you would get if
%z was given the same value number as %x, i.e. it should make value
numbering smarter.  While there, get hold of target data once at the
start rather than a gazillion times all over the place.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118923 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/GVN.cpp