Fix a somewhat subtle pair of issues with JumpThreading I introduced in
authorChandler Carruth <chandlerc@gmail.com>
Mon, 20 Oct 2014 05:34:36 +0000 (05:34 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Mon, 20 Oct 2014 05:34:36 +0000 (05:34 +0000)
commit6665d62117729d7cfb99dc621d6bb2c77f5861ec
tree8b4bba60cbe300d64b0deb0ea78cca23cceceb00
parent4804aedd24fc7adf9c23fa6c912713eceae49d5b
Fix a somewhat subtle pair of issues with JumpThreading I introduced in
r220178. First, the creation routine doesn't insert prior to the
terminator of the basic block provided, but really at the end of the
basic block. Instead, get the terminator and insert before that. The
next issue was that we need to ensure multiple PHI node entries for
a single predecessor re-use the same cast instruction rather than
creating new ones.

All of the logic here was without tests previously. I've reduced and
added a test case from the test suite that crashed without both of these
fixes.

llvm-svn: 220186
llvm/lib/Transforms/Scalar/JumpThreading.cpp
llvm/test/Transforms/JumpThreading/thread-loads.ll