Fix PR12858, a crash due to GVN's PRE not fully removing an instruction from the
authorDuncan Sands <baldrick@free.fr>
Tue, 22 May 2012 14:17:53 +0000 (14:17 +0000)
committerDuncan Sands <baldrick@free.fr>
Tue, 22 May 2012 14:17:53 +0000 (14:17 +0000)
commit5cdbb1de7d9ca578330b35b7fb7b10296216316b
tree46567e7a91d9af1f6634437743f3ba9b8425fb98
parent85b9e56bac85b30ede70e46ef9f60e4dec3b88f3
Fix PR12858, a crash due to GVN's PRE not fully removing an instruction from the
leader table.  That's because it wasn't expecting instructions to turn up as
leader for a value number that is not its own, but equality propagation could
create this situation.  One solution is to have the leader table use a WeakVH
but this slows down GVN by about 5%.  Instead just have equality propagation not
add instructions to the leader table, only constants and arguments.  In theory
this might cause GVN to run more (each time it changes something it runs again)
but it doesn't seem to occur enough to cause a slow down.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157251 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/GVN.cpp
test/Transforms/GVN/2012-05-22-PreCrash.ll [new file with mode: 0644]