Fix out-of-order stepping behavior in programs with hoisted constants.
authorPaul Robinson <paul.robinson@sony.com>
Thu, 9 Nov 2017 20:01:31 +0000 (20:01 +0000)
committerPaul Robinson <paul.robinson@sony.com>
Thu, 9 Nov 2017 20:01:31 +0000 (20:01 +0000)
commitb46256b0b4ce0746b7d9c121a2572c17765cffea
treebd396f0cece021870a0f4c2fd25dad94ed4424a0
parent2af11919eb009319fae38c9afd7c75254bb671f6
Fix out-of-order stepping behavior in programs with hoisted constants.

When the Constant Hoisting pass moves expensive constants into a
common block, it would assign a debug location equal to the last use
of that constant. While this is certainly intuitive, it places the
constant in an out-of-order location, according to the debug location
information. This produces out-of-order stepping when debugging
programs affected by this pass.

This patch creates in-order stepping behavior by merging the debug
locations for hoisted constants, and the new insertion point.

Patch by Matthew Voss!

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

llvm-svn: 317827
llvm/lib/Transforms/Scalar/ConstantHoisting.cpp
llvm/test/Transforms/ConstantHoisting/X86/dbg-dominatingblock.ll [new file with mode: 0644]
llvm/test/Transforms/ConstantHoisting/X86/dbg-samebasicblock.ll [new file with mode: 0644]