<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 17, 2016 at 11:00 AM, David Blaikie via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br><br><div class="gmail_quote"><span class=""><div dir="ltr">On Tue, Aug 16, 2016 at 8:42 PM Tim Shen <<a href="mailto:timshen@google.com" target="_blank">timshen@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">timshen added a comment.<br>
<br>
In <a href="https://reviews.llvm.org/D23580#517447" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D23580#517447</a>, @dblaikie wrote:<br>
<br>
> what's the printer used for? Would it be best to generalize it (perhaps adding another extension point to the graph traits, so NodeRefs can be printed out - with a default implementation for pointers)?<br>
<br>
<br>
One usage is to print dot files.<br>
<br>
I think it's more like that GraphWriter that requires the input nodes to be both fulfilling GraphTraits, and printable, not that GraphTraits has an optional printable requirement - these are two totally orthogonal traits.<br></blockquote><div><br></div></span><div>Fair - though I'm not sure if it's too important whether that's expressed through graph traits or not. I guess maybe it's easier if it's separate.<br><br>But, for example, for the heavy references you wanted to implement (that motivated all this refactoring) which, if I understand, are something like {node number, graph reference} - printing that out would be as simple as printing the node number. (or, if you wanted to be able to print multiple graphs and know they are distinct, it could print both elements of the heavy reference)<br></div></div></div></blockquote><div>This is precisely right.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div><br>Is there just the one graph algorithm that requires print support? If it's just one, I can understand not bothering to introduce another trait, etc (especially if only raw pointers are used with the one printing graph algorithm)</div></div></div></blockquote><div><br></div><div>pretty much all of the graphs we have can be written, see view-cfg, view-dom, etc.</div><div><br></div><div>There's basically *one graph writer*. It writes DOT files.<br></div><div>it already has DOTGraphTraits.</div><div><br></div><div>The pointer thing is what keeps this comment true:</div><div><div> // Graphs do not need to implement any interface past what is already required</div><div> // by the GraphTraits template, but they can choose to implement                specializations</div><div> // of the DOTGraphTraits template if they want to customize the graphs output   in</div><div> // any way.</div></div><div><br></div><div><br></div><div>Truthfully, this pointer usage i pointed out should be moved to dot traits, and removed from GraphWriter itself.</div><div><br></div><div>The default dot traits can require pointers, and use it to provide a unique name,  you can override it for references.</div><div><br></div><div><br></div><div><br></div></div></div></div>