<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<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:0in;
        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;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
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" style="margin-left:.5in">Our users really wanted the line table entry for line 2 to include the constant materialization code for some VS debugger feature.<o:p></o:p></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"><a name="_MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Same here.  I have serious doubts that the fastisel tactic of bubbling constants up to the top of the block really helps code size
 or performance that much, and it distinctly hurts the debugging experience.  It's reordering code at –O0 and that is generally a Bad Thing™.<o:p></o:p></span></a></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">--paulr<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 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""> Reid Kleckner [mailto:rnk@google.com]
<br>
<b>Sent:</b> Tuesday, June 19, 2018 9:37 PM<br>
<b>To:</b> Vedant Kumar; Robinson, Paul<br>
<b>Cc:</b> llvm-dev; Justin Bogner; David Li; David Blaikie<br>
<b>Subject:</b> Re: [RFC] Removing debug locations from ConstantSDNodes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<div>
<p class="MsoNormal">On Tue, Jun 19, 2018 at 5:46 PM Vedant Kumar <<a href="mailto:vsk@apple.com">vsk@apple.com</a>> wrote:<o:p></o:p></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">Someone (Reid?) mentioned that we could try sinking constants to their point of first use as an alternative, and (IIUC) create new nodes with distinct DebugLocs for each use of a constant. I don't recall the details of that alternative
 clearly. Based on my (likely incorrect) understanding of it, dropping locations from constants outright might be simpler.<o:p></o:p></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Our use case was in fastisel, so things are different. I don't think my solution will help you.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">In our case, users were complaining about code like this:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">volatile int do_something;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">void f() {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  ++do_something;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  foo(1, 2, 3);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  ++do_something;<br>
}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">We'd generate locations like:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  .loc line 1<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  incl do_something(%rip)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  movl $1, %ecx<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="background:white">  movl $2, %edx</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="background:white">  movl $3, %r8d</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="background:white">  .loc line 2 # line 2 starts here, instead of 3 instructions earlier</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="background:white">  callq foo</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="background:white">  .loc line 3</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="background:white">  incl do_something(%rip)</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Our users really wanted the line table entry for line 2 to include the constant materialization code for some VS debugger feature.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I think if you remove locations from ConstantSDNodes, you might want to add a late pass that propagates source locations backwards onto location-less instructions. This would also avoid some special cases when a basic block starts with
 an instruction that lacks location information. See CodeViewDebug::beginInstruction and DwarfDebug::beginInstruction for what we do today.<o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>