[PATCH] D105279: [RemoveRedundantDebugValues] Introduce a MIR pass that removes redundant DBG_VALUEs
Djordje Todorovic via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 1 06:46:26 PDT 2021
djtodoro created this revision.
djtodoro added reviewers: jmorse, Orlando, aprantl.
djtodoro added a project: debug-info.
Herald added subscribers: nikic, kerbowa, pengfei, ormris, hiraditya, mgorny, nhaehnle, jvesely, nemanjai, jholewinski.
djtodoro requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
This new MIR pass removes redundant `DBG_VALUEs`.
After the register allocator is done, more precisely, after the Virtual Register Rewriter, we end up having duplicated `DBG_VALUEs`, since some virtual registers are being rewritten into the same physical register as some of existing `DBG_VALUEs`. Each `DBG_VALUE` should indicate (at least before the LiveDebugValues) variables assignment, but it is being clobbered for function parameters during the `SelectionDAG` since it generates new `DBG_VALUEs` after `COPY` instructions, even though the parameter has no assignment. For example, if we had a DBG_VALUE $regX as an entry debug value representing the parameter, and a `COPY` and after the `COPY`, `DBG_VALUE $virt_reg`, and after the //virtregrewrite// the `$virt_reg gets` rewritten into `$regX`, we'd end up having redundant `DBG_VALUE`.
This breaks the definition of the `DBG_VALUE` since some analysis passes might be built on top of that premise..., and this patch tries to fix the MIR with the respect to that.
This first patch performs bacward scan, by trying to detect a sequence of consecutive DBG_VALUEs, and to remove all DBG_VALUEs describing one variable but the last one:
For example:
(1) DBG_VALUE $edi, !"var1", ...
(2) DBG_VALUE $esi, !"var2", ...
(3) DBG_VALUE $edi, !"var1", ...
...
in this case, we can remove (1).
By combining the forward scan that will be introduced in the next patch (from this stack), by inspecting the statistics, the `RemoveRedundantDebugValues` removes **15032** instructions by using gdb-7.11 as a testbed.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D105279
Files:
llvm/docs/SourceLevelDebugging.rst
llvm/include/llvm/CodeGen/CodeGenPassBuilder.h
llvm/include/llvm/CodeGen/MachinePassRegistry.def
llvm/include/llvm/CodeGen/Passes.h
llvm/include/llvm/InitializePasses.h
llvm/lib/CodeGen/CMakeLists.txt
llvm/lib/CodeGen/CodeGen.cpp
llvm/lib/CodeGen/LiveDebugVariables.cpp
llvm/lib/CodeGen/RemoveRedundantDebugValues.cpp
llvm/lib/CodeGen/TargetPassConfig.cpp
llvm/test/CodeGen/AArch64/O0-pipeline.ll
llvm/test/CodeGen/AArch64/O3-pipeline.ll
llvm/test/CodeGen/AMDGPU/llc-pipeline.ll
llvm/test/CodeGen/AMDGPU/ptr-arg-dbg-value.ll
llvm/test/CodeGen/ARM/O3-pipeline.ll
llvm/test/CodeGen/PowerPC/O3-pipeline.ll
llvm/test/CodeGen/PowerPC/non-debug-mi-search-frspxsrsp.ll
llvm/test/CodeGen/X86/O0-pipeline.ll
llvm/test/CodeGen/X86/opt-pipeline.ll
llvm/test/DebugInfo/MIR/Hexagon/live-debug-values-bundled-entry-values.mir
llvm/test/DebugInfo/MIR/X86/multiple-param-dbg-value-entry.mir
llvm/test/DebugInfo/MIR/X86/remove-redundant-dbg-vals.mir
llvm/test/DebugInfo/NVPTX/debug-loc-offset.ll
llvm/test/DebugInfo/X86/livedebugvars-avoid-duplicates.ll
llvm/utils/gn/secondary/llvm/lib/CodeGen/BUILD.gn
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D105279.355858.patch
Type: text/x-patch
Size: 31171 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210701/b517cf4e/attachment.bin>
More information about the llvm-commits
mailing list