[llvm] r253518 - Fix returned value for GVN: could return "false" even after modifying the IR
Mehdi Amini via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 18 14:49:50 PST 2015
Author: mehdi_amini
Date: Wed Nov 18 16:49:49 2015
New Revision: 253518
URL: http://llvm.org/viewvc/llvm-project?rev=253518&view=rev
Log:
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 at gmail.com>
From: Mehdi Amini <mehdi.amini at apple.com>
Modified:
llvm/trunk/lib/Transforms/Scalar/GVN.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=253518&r1=253517&r2=253518&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Wed Nov 18 16:49:49 2015
@@ -2709,7 +2709,7 @@ bool GVN::performPRE(Function &F) {
BE = CurrentBlock->end();
BI != BE;) {
Instruction *CurInst = &*BI++;
- Changed = performScalarPRE(CurInst);
+ Changed |= performScalarPRE(CurInst);
}
}
More information about the llvm-commits
mailing list