]> granicus.if.org Git - llvm/commit
[DebugInfo] Do not extend range for physreg in LiveDebugVariables
authorBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Thu, 28 Sep 2017 13:10:06 +0000 (13:10 +0000)
committerBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Thu, 28 Sep 2017 13:10:06 +0000 (13:10 +0000)
commit4b8314b0f01488be055c7c94ff295147cee1716b
treec833e0b6cf50e058b5b0baf89f87f1f265a760ff
parentb02f52d6bfc7129043305d2f4a8fd070b36496ed
[DebugInfo] Do not extend range for physreg in LiveDebugVariables

Summary:
A DBG_VALUE that is referring to a physical register is
valid up until the next def of the register, or the end
of the basic block that it belongs to.

LiveDebugVariables is computing live intervals (slot index
ranges) for DBG_VALUE instructions, before regalloc, in order
to be able to re-insert DBG_VALUE instructions again after
regalloc. When the DBG_VALUE is mapping a variable to a
physical register we do not need to compute the range. We
should simply re-insert the DBG_VALUE at the start position.

The problem that was found, resulting in this patch, was a
situation when the DBG_VALUE was the last real use of the
physical register. The computeIntervals/extendDef methods
extended the range to cover the whole basic block, even though
the physical register very well could be allocated to some
virtual register inside the basic block. So the extended
range could not be trusted.

This patch is a preparation for https://reviews.llvm.org/D38229,
where the goal is to insert DBG_VALUE after each new definition
of a variable, even if the virtual registers that the variable
was connected to has been coalesced into using the same physical
register (e.g. due to two address instructions). For more info
see https://bugs.llvm.org/show_bug.cgi?id=34545

Reviewers: aprantl, rnk, echristo

Reviewed By: aprantl

Subscribers: Ka-Ka, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@314414 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/LiveDebugVariables.cpp
test/DebugInfo/MIR/X86/live-debug-vars-unused-arg-debugonly.mir [new file with mode: 0644]
test/DebugInfo/MIR/X86/live-debug-vars-unused-arg.mir [new file with mode: 0644]