[BranchFolding] Salvage DBG_VALUE instructions from empty blocks
authorBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Mon, 30 Apr 2018 14:37:46 +0000 (14:37 +0000)
committerBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Mon, 30 Apr 2018 14:37:46 +0000 (14:37 +0000)
commit9a8483a4b208a49cd8c267ff070413374cbd9403
treecdd70ebc6326144a0f395099a03f24dfbc27bbf5
parentabafca619b50b9e05055122813c079f152f8f102
[BranchFolding] Salvage DBG_VALUE instructions from empty blocks

Summary:
This patch will introduce copying of DBG_VALUE instructions
from an otherwise empty basic block to predecessor/successor
blocks in case the empty block is eliminated/bypassed. It
is currently only done in one identified situation in the
BranchFolding pass, before optimizing on empty block.
It can be seen as a light variant of the propagation done
by the LiveDebugValues pass, which unfortunately is executed
after the BranchFolding pass.

We only propagate (copy) DBG_VALUE instructions in a limited
number of situations:
 a) If the empty BB is the only predecessor of a successor
    we can copy the DBG_VALUE instruction to the beginning of
    the successor (because the DBG_VALUE instruction is always
    part of the flow between the blocks).
 b) If the empty BB is the only successor of a predecessor
    we can copy the DBG_VALUE instruction to the end of the
    predecessor (because the DBG_VALUE instruction is always
    part of the flow between the blocks). In this case we add
    the DBG_VALUE just before the first terminator (assuming
    that the terminators do not impact the DBG_VALUE).

A future solution, to handle more situations, could perhaps
be to run the LiveDebugValues pass before branch folding?

This fix is related to PR37234. It is expected to resolve
the problem seen, when applied together with the fix in
SelectionDAG from here: https://reviews.llvm.org/D46129

Reviewers: #debug-info, aprantl, rnk

Reviewed By: #debug-info, aprantl

Subscribers: ormris, gbedwell, llvm-commits

Differential Revision: https://reviews.llvm.org/D46184

llvm-svn: 331183
llvm/lib/CodeGen/BranchFolding.cpp
llvm/test/DebugInfo/X86/PR37234.ll [new file with mode: 0644]