[PATCH] IR: Make MDNode::dump() useful by adding addresses
Duncan P. N. Exon Smith
dexonsmith at apple.com
Fri Dec 12 14:37:56 PST 2014
It's horrible to inspect `MDNode`s in a debugger. All of their operands
that are `MDNode`s get dumped as `<badref>`, since we can't assign
metadata slots in the context of a `Metadata::dump()`. (Why not? Why
not assign numbers lazily? Because then each time you called `dump()`,
a given `MDNode` could have a different lazily assigned number.)
Fortunately, the C memory model gives us perfectly good identifiers for
`MDNode`. Add pointer addresses to the dumps, transforming this:
(lldb) e N->dump()
metadata !{i32 662302, i32 26, metadata <badref>, null}
(lldb) e ((MDNode*)N->getOperand(2))->dump()
metadata !{i32 4, metadata !"foo"}
into:
(lldb) e N->dump()
metadata !{i32 662302, i32 26, metadata <badref:0x100706ee0>, null}
(lldb) e ((MDNode*)0x100706ee0)->dump()
metadata !{i32 4, metadata !"foo"}
and this:
(lldb) e N->dump()
metadata !{metadata <badref>, metadata <badref>, metadata <badref>, metadata <badref>, metadata <badref>}
(lldb) e N->getOperand(0)
(const llvm::MDOperand) $0 = {
MD = 0x00000001012004e0
}
(lldb) e N->getOperand(1)
(const llvm::MDOperand) $1 = {
MD = 0x00000001012004e0
}
(lldb) e N->getOperand(2)
(const llvm::MDOperand) $2 = {
MD = 0x0000000101200058
}
(lldb) e N->getOperand(3)
(const llvm::MDOperand) $3 = {
MD = 0x00000001012004e0
}
(lldb) e N->getOperand(4)
(const llvm::MDOperand) $4 = {
MD = 0x0000000101200058
}
(lldb) e ((MDNode*)0x00000001012004e0)->dump()
metadata !{}
(lldb) e ((MDNode*)0x0000000101200058)->dump()
metadata !{null}
into:
(lldb) e N->dump()
metadata !{metadata <badref:0x1012004e0>, metadata <badref:0x1012004e0>, metadata <badref:0x101200058>, metadata <badref:0x1012004e0>, metadata <badref:0x101200058>}
(lldb) e ((MDNode*)0x1012004e0)->dump()
metadata !{}
(lldb) e ((MDNode*)0x101200058)->dump()
metadata !{null}
I've left `badref` in the operand to keep it `FileCheck`-able, via:
CHECK-NOT: badref
Another option would be:
(lldb) e N->dump()
metadata !{metadata !0x1012004e0, metadata !0x1012004e0, metadata !0x101200058, metadata !0x1012004e0, metadata !0x101200058}
which would allow:
CHECK-NOT: !0x
but IMO that's too subtle...
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-IR-Make-MDNode-dump-useful-by-adding-addresses.patch
Type: application/octet-stream
Size: 4524 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141212/8b0f8158/attachment.obj>
More information about the llvm-commits
mailing list