On Thu, Oct 4, 2012 at 4:03 PM, Villmow, Micah <span dir="ltr"><<a href="mailto:Micah.Villmow@amd.com" target="_blank" class="cremed">Micah.Villmow@amd.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u> <u></u></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Chandler Carruth [mailto:<a href="mailto:chandlerc@google.com" target="_blank" class="cremed">chandlerc@google.com</a>]
<br>
<b>Sent:</b> Thursday, October 04, 2012 3:56 PM<br>
<b>To:</b> Villmow, Micah<br>
<b>Cc:</b> Kim Gräsman; Evan Cheng; <a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank" class="cremed">llvm-commits@cs.uiuc.edu</a> LLVM; Nadav Rotem; <a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank" class="cremed">cfe-commits@cs.uiuc.edu</a> cfe</span></p>
<div class="im"><br>
<b>Subject:</b> Re: [cfe-commits] [llvm-commits] [Patch] Move TargetData from Target to Support/VMCore<u></u><u></u></div><p></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">On Thu, Oct 4, 2012 at 3:51 PM, Villmow, Micah <<a href="mailto:Micah.Villmow@amd.com" target="_blank" class="cremed">Micah.Villmow@amd.com</a>> wrote:<u></u><u></u></p>
<div>
<div><div class="im">
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">I'm curious how this could work.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">I have two classes.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">TargetData and DataLayout.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">I want to point all uses of TargetData at DataLayout.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">typedef won't work not just because of forward declarations, but also because of static functions.</span><u></u><u></u></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">So, I could define DataLayout as a subclass of TargetData, but once I want to move to DataLayout, how do I define
 TargetData in a way that won't require changes to many many locations.</span><u></u><u></u></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I think you need to reverse the suggestion and instead use:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">class TargetData {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  // existing code<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">};<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">class DataLayout : public TargetData {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  // some forwarding boilerplate<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">}<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Then you can change everyone to refer to DataLayout, and then lift the implementation of TargetData up into DataLayout.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div><div><div class="im">
<p class="MsoNormal">You'll have to change folks to refer to DataLayout in o "top-down" way -- producers first.<u></u><u></u></p>
</div><p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">[Villmow, Micah] This is a good suggestion, but I was actually thinking of doing it in the reverse. Turn TargetData into the forwarding boilerplate, but I just wanted
 to make sure this was the intention instead of moving forward and having to redo some work.<u></u><u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u></span></i></b></p></div></div></div></div></div></div></blockquote><div><br></div><div>The reason I suggest this direction is because it seems slightly easier to update the producers first, and the consumers second. But that's subjective.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div><div><div><p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""> <u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">What subprojects do I need to modify?<u></u><u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Clang/LLVM/compiler-RT I know<u></u><u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u> <u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Others would be LLDB, dragonegg, vmkit?<u></u><u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u> <u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">What about libc++/polly/klee/safecode, etc...?</span></i></b></p></div></div></div></div></div></div></blockquote>
<div><br></div><div>LLDB, dragonegg, vmkit, klee, safecode, and polly seem the likel suspects. But some searching will help here. ;]</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div lang="EN-US" link="blue" vlink="purple"><div><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt"><div><div><div><p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u><u></u></span></i></b></p>

<p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u> </span></i></b><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Basically what is the line that separates which projects need to be updated by myself and what needs to be updated by their owners?</span></i></b></p>
</div></div></div></div></div></div></blockquote><div><br></div><div>The ones checked into llvm-projects SVN tree should be updated by you where possible.</div><div><br></div><div>The ones with build bots as well definitely need to be updated. The only ones of your set without build bots are vmkit, klee, and safecode.</div>
<div><br></div><div>For the ones with build bots, I think it's fine to essentially speculatively fix them. The bots will complain if something goes wrong.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div lang="EN-US" link="blue" vlink="purple"><div><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt"><div><div><div>
<p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u> <u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Thanks,<u></u><u></u></span></i></b></p>
<p class="MsoNormal"><b><i><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Micah<u></u><u></u></span></i></b></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><u></u> <u></u></span></p>
</div><div class="im">
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Micah</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""> </span><u></u><u></u></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Kim Gräsman [mailto:<a href="mailto:kim.grasman@gmail.com" target="_blank" class="cremed">kim.grasman@gmail.com</a>]
<br>
<b>Sent:</b> Thursday, October 04, 2012 1:33 PM<br>
<b>To:</b> Villmow, Micah<br>
<b>Cc:</b> Chris Lattner; Evan Cheng; <a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank" class="cremed">
llvm-commits@cs.uiuc.edu</a> LLVM; <a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank" class="cremed">
cfe-commits@cs.uiuc.edu</a> cfe; Nadav Rotem</span><u></u><u></u></p>
<div>
<p class="MsoNormal"><br>
<b>Subject:</b> Re: [cfe-commits] [llvm-commits] [Patch] Move TargetData from Target to Support/VMCore<u></u><u></u></p>
</div>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">HI Micah,<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><br>
<br>
On Thursday, October 4, 2012, Villmow, Micah wrote:<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">Chris, the problem with steps #2/#3 is that plenty of clients have forward declarations of TargetData and the typedef won't work in this case, so I need to update the clients anyways.<u></u><u></u></p>

<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">One trick I've used as an alternative to typedefs is to just derive from the old class, e.g.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  class NewName : public TargetData {};<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">This is forward-declarable just as well as TargetData itself.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">FWIW,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">- Kim<u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank" class="cremed">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank" class="cremed">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><u></u><u></u></p>
</blockquote>
</div></div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
</div>

</blockquote></div><br></div>