Enhance removed loads/substitutes in LSE.

LSE does load removal in the end in order to maintain the validity of
all the heap locations collected in the first pass. We should however
proactively retrieve a removed load's substitute as its value. This
simplifies the handling of substitutes by making sure the substitute
itself has no substitute. It also enables some additional optimizations
by using the true heap value for merging/same-value test, etc.

Test: run-test on host.
Change-Id: I26d97e7794d80a141ab02bf446dd07656f5cde1d
3 files changed