<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hello again,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Here is also a patch for InlineSpiller.cpp with an assert that triggers on this problem, in case anyone wants to try. Sorry for repeated mailings.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">/Jonas<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<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""> Jonas Paulsson
<br>
<b>Sent:</b> den 12 december 2014 12:26<br>
<b>To:</b> 'Quentin Colombet'; David Blaikie<br>
<b>Cc:</b> Patrik Hägglund H; llvm-commits@cs.uiuc.edu<br>
<b>Subject:</b> RE: [llvm] r224009 - Bugfix in InlineSpiller::traceSiblingValue().<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I tried to reproduce the error on arm and x86 targets and came pretty close at least with arm by using inline asm as you suggested. But, unfortunately I could
 not reproduce the exact conditions where the LiveInterval would get split in the same way before the inner loops.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I attach the c file I was using in case someone else might want to have a go. To get an idea on what the exact problem was, see the conversations between me
 and Quentin on the mailing list.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">/Jonas<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<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""> Quentin Colombet [<a href="mailto:qcolombet@apple.com">mailto:qcolombet@apple.com</a>]
<br>
<b>Sent:</b> den 11 december 2014 20:20<br>
<b>To:</b> David Blaikie<br>
<b>Cc:</b> Patrik Hägglund H; <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a>; Jonas Paulsson<br>
<b>Subject:</b> Re: [llvm] r224009 - Bugfix in InlineSpiller::traceSiblingValue().<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hi David,<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Indeed, this has been brought up during the review.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Jonas hasn’t been able to find a test case for in-tree targets so far.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">I’ve given him a few hints that may help him to reproduce the problem with in-tree targets, but the conditions to make that happen are quite difficult to have all lined up (that’s why it never occurred so far, whereas the bug was there
 forever).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Jonas may have additional comments.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">-Quentin<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Dec 11, 2014, at 9:58 AM, David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<o:p></o:p></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Any chance of a test case? (I assume this was brought up in code review - but it's helpful to have the justification included in the commit message, ideally)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Thu, Dec 11, 2014 at 2:40 AM, Patrik Hagglund <<a href="mailto:patrik.h.hagglund@ericsson.com" target="_blank">patrik.h.hagglund@ericsson.com</a>> wrote:<o:p></o:p></p>
<p class="MsoNormal">Author: patha<br>
Date: Thu Dec 11 04:40:17 2014<br>
New Revision: 224009<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=224009&view=rev" target="_blank">
http://llvm.org/viewvc/llvm-project?rev=224009&view=rev</a><br>
Log:<br>
Bugfix in InlineSpiller::traceSiblingValue().<br>
<br>
Properly determine whether or not a phi was added by splitting.<br>
Check against the current VNInfo of OrigLI instead of against the<br>
OrigVNI argument.<br>
<br>
Patch provided by Jonas Paulsson. Reviewed by Quentin Colombet.<br>
<br>
Modified:<br>
    llvm/trunk/lib/CodeGen/InlineSpiller.cpp<br>
<br>
Modified: llvm/trunk/lib/CodeGen/InlineSpiller.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/InlineSpiller.cpp?rev=224009&r1=224008&r2=224009&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/InlineSpiller.cpp?rev=224009&r1=224008&r2=224009&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/InlineSpiller.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/InlineSpiller.cpp Thu Dec 11 04:40:17 2014<br>
@@ -508,6 +508,7 @@ MachineInstr *InlineSpiller::traceSiblin<br>
   SmallVector<std::pair<unsigned, VNInfo*>, 8> WorkList;<br>
   WorkList.push_back(std::make_pair(UseReg, UseVNI));<br>
<br>
+  LiveInterval &OrigLI = LIS.getInterval(Original);<br>
   do {<br>
     unsigned Reg;<br>
     VNInfo *VNI;<br>
@@ -521,8 +522,11 @@ MachineInstr *InlineSpiller::traceSiblin<br>
<br>
     // Trace through PHI-defs created by live range splitting.<br>
     if (VNI->isPHIDef()) {<br>
-      // Stop at original PHIs.  We don't know the value at the predecessors.<br>
-      if (VNI->def == OrigVNI->def) {<br>
+      // Stop at original PHIs.  We don't know the value at the<br>
+      // predecessors. Look up the VNInfo for the current definition<br>
+      // in OrigLI, to properly determine whether or not this phi was<br>
+      // added by splitting.<br>
+      if (VNI->def == OrigLI.getVNInfoAt(VNI->def)->def) {<br>
         DEBUG(dbgs() << "orig phi value\n");<br>
         SVI->second.DefByOrigPHI = true;<br>
         SVI->second.AllDefsAreReloads = false;<br>
@@ -542,7 +546,6 @@ MachineInstr *InlineSpiller::traceSiblin<br>
       // Separate all values dominated by OrigVNI into PHIs and non-PHIs.<br>
       SmallVector<VNInfo*, 8> PHIs, NonPHIs;<br>
       LiveInterval &LI = LIS.getInterval(Reg);<br>
-      LiveInterval &OrigLI = LIS.getInterval(Original);<br>
<br>
       for (LiveInterval::vni_iterator VI = LI.vni_begin(), VE = LI.vni_end();<br>
            VI != VE; ++VI) {<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal">_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</body>
</html>