Hi,<div><br></div><div>I added a comment explaining why this optimization is permitted, and simplified your testcase and folded it into an existing test file. Committed as r161998.</div><div><br></div><div>Thanks!</div><div>
<br><div class="gmail_quote">On Mon, Aug 13, 2012 at 4:48 PM, Yin Ma <span dir="ltr"><<a href="mailto:yinma@codeaurora.org" target="_blank">yinma@codeaurora.org</a>></span> wrote:<br><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";color:#1f497d">Hi Richard,<u></u><u></u></span></p><p class="MsoNormal">
<span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">     Could you review all my changes again. I have added test case you requested.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">I hope this one can be merged soon.<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Thanks,<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">                Yin <u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><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""> <a href="mailto:cfe-commits-bounces@cs.uiuc.edu" target="_blank">cfe-commits-bounces@cs.uiuc.edu</a> [mailto:<a href="mailto:cfe-commits-bounces@cs.uiuc.edu" target="_blank">cfe-commits-bounces@cs.uiuc.edu</a>] <b>On Behalf Of </b>Yin Ma<br>
<b>Sent:</b> Tuesday, July 31, 2012 11:26 AM<br><b>To:</b> 'Richard Smith'</span></p><div><div class="h5"><br><b>Cc:</b> <a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br><b>Subject:</b> Re: [cfe-commits] [PATCH][Review Please] Devirtualize record type member object<u></u><u></u></div>
</div><p></p></div></div><div><div class="h5"><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Hi Richard,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal" style="text-indent:9.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Here is the test file. It is good to be put into <u></u><u></u></span></p>
<p class="MsoNormal" style="text-indent:9.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Clang/test/CodeGenCXX directory<u></u><u></u></span></p><p class="MsoNormal" style="text-indent:9.0pt">
<span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal" style="text-indent:9.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Thanks,<u></u><u></u></span></p>
<p class="MsoNormal" style="text-indent:9.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal" style="text-indent:9.0pt"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">                   Yin <u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><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""> <a href="mailto:metafoo@gmail.com" target="_blank">metafoo@gmail.com</a> <a href="mailto:[mailto:metafoo@gmail.com]" target="_blank">[mailto:metafoo@gmail.com]</a> <b>On Behalf Of </b>Richard Smith<br>
<b>Sent:</b> Monday, July 30, 2012 2:38 PM<br><b>To:</b> Yin Ma<br><b>Cc:</b> <a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br><b>Subject:</b> Re: [cfe-commits] [PATCH][Review Please] Devirtualize record type member object<u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p><div><p class="MsoNormal">On Mon, Jul 30, 2012 at 2:33 PM, Yin Ma <<a href="mailto:yinma@codeaurora.org" target="_blank">yinma@codeaurora.org</a>> wrote:<u></u><u></u></p><div>
<div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Hi Richard,</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">     What test cases you need? Do you mean that a test sits in clang test folder</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">With a code that can be devirtualized?</span><u></u><u></u></p></div></div><div><p class="MsoNormal">
<u></u> <u></u></p></div><div><p class="MsoNormal">Yes, add some cases to test/CodeGenCXX/devirtualize-virtual-function-calls.cpp which check that the right IR is produced for this case.<u></u><u></u></p></div><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-top:5.0pt;margin-right:0in;margin-bottom:5.0pt"><div><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Thanks,</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">                          Yin </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></p>
<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""> <a href="mailto:metafoo@gmail.com" target="_blank">metafoo@gmail.com</a> [mailto:<a href="mailto:metafoo@gmail.com" target="_blank">metafoo@gmail.com</a>] <b>On Behalf Of </b>Richard Smith<br>
<b>Sent:</b> Monday, July 30, 2012 1:13 PM<br><b>To:</b> Yin Ma<br><b>Cc:</b> <a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br><b>Subject:</b> Re: [cfe-commits] [PATCH][Review Please] Devirtualize record type member object</span><u></u><u></u></p>
<div><div><p class="MsoNormal"> <u></u><u></u></p><div><p class="MsoNormal">On Mon, Jul 30, 2012 at 10:54 AM, Yin Ma <<a href="mailto:yinma@codeaurora.org" target="_blank">yinma@codeaurora.org</a>> wrote:<u></u><u></u></p>
<div><div><p style="background:white"><span style="font-size:10.5pt;font-family:"Arial","sans-serif"">Hi,</span><u></u><u></u></p><p style="background:white"><span style="font-size:10.5pt;font-family:"Arial","sans-serif"">Currently, the LLVM devirtualization forgets to handle a simple code pattern where can be devirutalized. The code pattern is when a call is from the record type member object. Currently, LLVM only supports devirtualizing a call from the record type object defined in the same function. If object is defined as member, it should be supported. The patch is to enable devirtualization for this case.</span><u></u><u></u></p>
<p style="background:white"><span style="font-size:10.5pt;font-family:"Arial","sans-serif"">In the attachment.<br>devir.diff is the code change<br>the rest of files are the results from validation tests</span><u></u><u></u></p>
<p style="background:white"><span style="font-size:10.5pt;font-family:"Arial","sans-serif"">Please give a review.</span><u></u><u></u></p></div></div><div><p class="MsoNormal">The patch looks correct, but needs some test cases added before it can be checked in.<u></u><u></u></p>
</div></div></div></div></div></div></blockquote></div><p class="MsoNormal"><u></u> <u></u></p></div></div></div></div></blockquote></div><br></div>