diff options
author | Hans Wennborg <hans@hanshq.net> | 2018-02-05 16:10:42 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2018-02-05 16:10:42 +0000 |
commit | 22db17cf4334b028fe13e37ed7957eff2ae01ea9 (patch) | |
tree | 6c46c93b4fd89a6fe98b449613a3a812ed5818b1 | |
parent | 1c3afaf50a0b6b96ab53740006b0bd99fd0eb1d5 (diff) | |
download | bcm5719-llvm-22db17cf4334b028fe13e37ed7957eff2ae01ea9.tar.gz bcm5719-llvm-22db17cf4334b028fe13e37ed7957eff2ae01ea9.zip |
Revert r323472 "[Debug] Add dbg.value intrinsics for PHIs created during LCSSA."
This broke the Chromium build; see PR36238.
> This patch is an enhancement to propagate dbg.value information when
> Phis are created on behalf of LCSSA. I noticed a case where a value
> carried across a loop was reported as <optimized out>.
>
> Specifically this case:
>
> int bar(int x, int y) {
> return x + y;
> }
>
> int foo(int size) {
> int val = 0;
> for (int i = 0; i < size; ++i) {
> val = bar(val, i); // Both val and i are correct
> }
> return val; // <optimized out>
> }
>
> In the above case, after all of the interesting computation completes
> our value is reported as "optimized out." This change will add a
> dbg.value to correct this.
>
> This patch also moves the dbg.value insertion routine from
> LoopRotation.cpp into Local.cpp, so that we can share it in both places
> (LoopRotation and LCSSA).
>
> Patch by Matt Davis!
>
> Differential Revision: https://reviews.llvm.org/D42551
llvm-svn: 324247
-rw-r--r-- | llvm/lib/Transforms/Utils/LCSSA.cpp | 9 | ||||
-rw-r--r-- | llvm/test/Transforms/LCSSA/basictest.ll | 1 |
2 files changed, 2 insertions, 8 deletions
diff --git a/llvm/lib/Transforms/Utils/LCSSA.cpp b/llvm/lib/Transforms/Utils/LCSSA.cpp index a68448bb25a..ae0e2bb6c28 100644 --- a/llvm/lib/Transforms/Utils/LCSSA.cpp +++ b/llvm/lib/Transforms/Utils/LCSSA.cpp @@ -43,7 +43,6 @@ #include "llvm/IR/PredIteratorCache.h" #include "llvm/Pass.h" #include "llvm/Transforms/Scalar.h" -#include "llvm/Transforms/Utils/Local.h" #include "llvm/Transforms/Utils/LoopUtils.h" #include "llvm/Transforms/Utils/SSAUpdater.h" using namespace llvm; @@ -215,15 +214,11 @@ bool llvm::formLCSSAForInstructions(SmallVectorImpl<Instruction *> &Worklist, Worklist.push_back(PostProcessPN); // Keep track of PHI nodes that we want to remove because they did not have - // any uses rewritten. If the new PHI is used, store it so that we can - // try to propagate dbg.value intrinsics to it. - SmallVector<PHINode *, 2> NeedDbgValues; + // any uses rewritten. for (PHINode *PN : AddedPHIs) if (PN->use_empty()) PHIsToRemove.insert(PN); - else - NeedDbgValues.push_back(PN); - insertDebugValuesForPHIs(InstBB, NeedDbgValues); + Changed = true; } // Remove PHI nodes that did not have any uses rewritten. diff --git a/llvm/test/Transforms/LCSSA/basictest.ll b/llvm/test/Transforms/LCSSA/basictest.ll index e5f974ca28d..978e0435c73 100644 --- a/llvm/test/Transforms/LCSSA/basictest.ll +++ b/llvm/test/Transforms/LCSSA/basictest.ll @@ -1,6 +1,5 @@ ; RUN: opt < %s -lcssa -S | FileCheck %s ; RUN: opt < %s -passes=lcssa -S | FileCheck %s -; RUN: opt < %s -debugify -lcssa -S | FileCheck -check-prefix=CHECK2 %s define void @lcssa(i1 %S2) { ; CHECK-LABEL: @lcssa |