Fix returned value for GVN: could return "false" even after modifying the IR
authorMehdi Amini <mehdi.amini@apple.com>
Wed, 18 Nov 2015 22:49:49 +0000 (22:49 +0000)
committerMehdi Amini <mehdi.amini@apple.com>
Wed, 18 Nov 2015 22:49:49 +0000 (22:49 +0000)
commit5b7b529be0c28d8a9ae5ca89c6770f2516bac9c6
treefc0b8604d9b67cc351eeec35c83725be48a03e17
parent8fa8f201ac690729d76f852ea53a51666bedd8cc
Fix returned value for GVN: could return "false" even after modifying the IR

This bug would manifest in some very specific cases where all the following
conditions are fullfilled:

- GVN didn't remove block
- The regular GVN iteration didn't change the IR
- PRE is enabled
- PRE will not split critical edge
- The last instruction processed by PRE didn't change the IR

Because the CallGraph PassManager relies on this returned value to decide
if it needs to recompute a node after the execution of Function passes,
not returning the right value can lead to unexpected results.

Fix for: https://llvm.org/bugs/show_bug.cgi?id=24715

Patch by Wenxiang Qiu <vincentqiuuu@gmail.com>

From: Mehdi Amini <mehdi.amini@apple.com>

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