summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorMehdi Amini <mehdi.amini@apple.com>2015-11-18 22:49:49 +0000
committerMehdi Amini <mehdi.amini@apple.com>2015-11-18 22:49:49 +0000
commitadb4057a153a8f5d315cfcdeada125742c04345f (patch)
tree68a2a60d6c15a8d4e64a3f5252d095e4c948ecfc /llvm
parent6b43f1f40f644b896f44078872c0b93ec3afef67 (diff)
downloadbcm5719-llvm-adb4057a153a8f5d315cfcdeada125742c04345f.tar.gz
bcm5719-llvm-adb4057a153a8f5d315cfcdeada125742c04345f.zip
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> llvm-svn: 253518
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Transforms/Scalar/GVN.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/GVN.cpp b/llvm/lib/Transforms/Scalar/GVN.cpp
index d261b2acae9..1cb7198e9ee 100644
--- a/llvm/lib/Transforms/Scalar/GVN.cpp
+++ b/llvm/lib/Transforms/Scalar/GVN.cpp
@@ -2709,7 +2709,7 @@ bool GVN::performPRE(Function &F) {
BE = CurrentBlock->end();
BI != BE;) {
Instruction *CurInst = &*BI++;
- Changed = performScalarPRE(CurInst);
+ Changed |= performScalarPRE(CurInst);
}
}
OpenPOWER on IntegriCloud