[PATCH] IR: Make MDNode::dump() useful by adding addresses

Yaron Keren yaron.keren at gmail.com
Fri Dec 12 14:59:22 PST 2014


Thanks,that's very useful!


2014-12-13 0:39 GMT+02:00 Adrian Prantl <aprantl at apple.com>:

> I want this.
>
> -- adrian
> > On Dec 12, 2014, at 2:37 PM, Duncan P. N. Exon Smith <
> dexonsmith at apple.com> wrote:
> >
> > 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...
> >
> > <0001-IR-Make-MDNode-dump-useful-by-adding-addresses.patch>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141213/9cbeb3ff/attachment.html>


More information about the llvm-commits mailing list