[PATCH] IR: Move the complex address expression field out of DIVariable and into an extra argument of the dbg.declare/dbg.value intrinsics.

Adrian Prantl aprantl at apple.com
Thu Aug 14 16:54:20 PDT 2014


Here's a wild idea:

Currently, DIVariable is a variable-length field that has an optional reference to a Metadata array consisting of a variable number of complex address expressions. In the case of OpPiece expressions this is wasting a lot of storage in IR, because when an aggregate type is, e.g., SROA'd into all of its n individual members, the IR will contain n copies of the DIVariable, all alike, only differing in the complex address reference at the end.

By making the complex address into an extra argument of the dbg.value/dbg.declare intrinsics, all of the pieces can reference the same variable and the complex address expressions can be uniqued across the CU, too.
Down the road, this will allow us to move other flags, such as "indirection" out of the DIVariable, too.

The new intrinsics look like this:
declare void @llvm.dbg.declare(metadata %storage, metadata %expr, metadata %var)
declare void @llvm.dbg.value(metadata %storage, i64 %offset, metadata %expr, metadata %var)

This patch is still a work-in-progress (I'm down to a handful test failures), but I wanted to collect feedback early, while I'm ironing out the last problems!

Questions:
- Do we need to provide some kind of auto-upgrade from previous IR versions?

What this patch doesn't do:
- I would like to add a unique offset to the values of ComplexAddrKind that doubles as a tag, so we can detect and pretty-print DIExpression metadata nodes.
- To keep this readable, I did not include the diff for ~200 updated testcases. I have a Python script that automatically rewrites .ll files to use the new syntax.
- This patch does not touch the "Indirect" field in DIVariable; but moving that into the expression would be a natural next step.

http://reviews.llvm.org/D4919

Files:
  include/llvm/CodeGen/MachineInstr.h
  include/llvm/CodeGen/MachineInstrBuilder.h
  include/llvm/CodeGen/MachineModuleInfo.h
  include/llvm/CodeGen/SelectionDAG.h
  include/llvm/IR/DIBuilder.h
  include/llvm/IR/DebugInfo.h
  include/llvm/IR/IntrinsicInst.h
  include/llvm/IR/Intrinsics.td
  lib/CodeGen/AsmPrinter/AsmPrinter.cpp
  lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp
  lib/CodeGen/AsmPrinter/DebugLocEntry.h
  lib/CodeGen/AsmPrinter/DwarfDebug.cpp
  lib/CodeGen/AsmPrinter/DwarfDebug.h
  lib/CodeGen/AsmPrinter/DwarfUnit.cpp
  lib/CodeGen/InlineSpiller.cpp
  lib/CodeGen/LiveDebugVariables.cpp
  lib/CodeGen/RegAllocFast.cpp
  lib/CodeGen/SelectionDAG/FastISel.cpp
  lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
  lib/CodeGen/SelectionDAG/InstrEmitter.cpp
  lib/CodeGen/SelectionDAG/SDNodeDbgValue.h
  lib/CodeGen/SelectionDAG/SelectionDAG.cpp
  lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
  lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h
  lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
  lib/IR/DIBuilder.cpp
  lib/IR/DebugInfo.cpp
  lib/Target/AArch64/AArch64InstrInfo.cpp
  lib/Target/AArch64/AArch64InstrInfo.h
  lib/Target/X86/X86FastISel.cpp
  lib/Transforms/Scalar/SROA.cpp
  lib/Transforms/Scalar/ScalarReplAggregates.cpp
  lib/Transforms/Utils/Local.cpp
  tools/clang/lib/CodeGen/CGDebugInfo.cpp
  unittests/Transforms/Utils/Cloning.cpp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D4919.12535.patch
Type: text/x-patch
Size: 80282 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140814/79838393/attachment.bin>


More information about the llvm-commits mailing list