<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 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"Segoe UI";
        panose-1:2 11 5 2 4 2 4 2 2 3;}
@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;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.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" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Note to other responders: It is extremely helpful to read the comments in the linked review.  Most of my immediate reactions to the questions are already brought up there.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Normally we would not want the middle end to construct new debug info, but as noted in the review, it seems like the most reasonable approach for this specific case.  Anything you do construct in the middle end should be marked as “artificial”
 (there should be a flag for that).  <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I haven’t looked at the patch in any detail, but if the types for your artificial variables are copied from existing source variables, you can just reuse the type info from the debug info for those source variables.  If the artificial variable
 types are independent of source variables, then you would create new types and mark them as artificial.  If you do create new types, you probably want to cache them if these frames can occur in more than one place; that is to avoid bloating the debug info.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">If you know the source language is C/C++, then it might be helpful to use ‘__’ prefixes to avoid name collisions with real types and variables.  It seems that Swift doesn’t want the extra debug info, and I don’t know what the Fortran conventions
 are.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hope this helps,<o:p></o:p></p>
<p class="MsoNormal">--paulr<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></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 #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> llvm-dev <llvm-dev-bounces@lists.llvm.org> <b>On Behalf Of
</b>chuanqi.xcq via llvm-dev<br>
<b>Sent:</b> Tuesday, April 6, 2021 10:31 PM<br>
<b>To:</b> llvm-dev@lists.llvm.org<br>
<b>Subject:</b> [llvm-dev] Should we construct debug information in LLVM?<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Tahoma",sans-serif;color:black">Hi,</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Tahoma",sans-serif;color:black">Recently I am working on constructing debug information in LLVM for C++ Coroutine Frame: <a href="https://reviews.llvm.org/D99179">https://reviews.llvm.org/D99179</a>.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Tahoma",sans-serif;color:black">The reason why we can't construct thr debug information for C++ Coroutine Frame in the frontend is the framework of LLVM</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">coroutine decides to construct the frame in the middle end. So we can't know the layout of the coroutine frame until the coro-split<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">pass.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Then a lot of my collegues told me many times that it is very important to them to see the frame in the debugger in production
<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">environment. Although many things in the frame are temporaries produced by compiler, my collegues are still satisfied to see the<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">frame.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">But I am also agree with that it is a little bit odd to contruct the debug information in the middle end. I get this from the API<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">design. And about half of codes in D99179 are trying to construct the debug information from corresponding LLVM type, which <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">is unrelated to coroutine module. <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">As the reviewer's suggestion, I want to ask the opinion from the debug info folks:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">- <span style="font-size:10.0pt;font-family:"Segoe UI",sans-serif;color:black;background:white">Is it ok to construct debug information in LLVM Passes?</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Segoe UI",sans-serif;color:black;background:white">- If no, is there any method to help us to solve these problems? </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Segoe UI",sans-serif;color:black;background:white">Thanks,</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Segoe UI",sans-serif;color:black;background:white">Chuanqi</span><o:p></o:p></p>
</div>
</div>
</div>
</div>
</body>
</html>