<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=us-ascii">
<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;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Times New Roman",serif;
        color:#002060;
        font-weight:normal;
        font-style:normal;}
.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="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<p class="msipheadera4477989" align="Left" style="margin:0"><span style="font-size:10.0pt;font-family:Arial;color:#0000FF">[AMD Official Use Only]</span></p>
<br>
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">Hello Everyone,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">I am planning to implement the LLVM changes for fortran NAMELIST feature from DebugInfo point of view.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">gfortran already support namelist from DebugInfo point of view, it emits DW_TAG_namelist and DW_TAG_namelist_item die's as shown below. But gdb does not understand
 these, hence we enhanced gdb to handle namelist variable/type. Soon upstreaming the gdb code changes.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">In order to emit the
</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">DW_TAG_namelist and DW_TAG_namelist_item die's in LLVM, following LLVM IR changes are proposed, could you please review and comment if any change is required. Namelist in
 fortran is basically group of variables or arrays. It can be represented as composite type. Already Metadata is created for each of the namelist items like !20, !22 in the below example, we just need to reference to these while handling DW_TAG_namelist_item.
 This proposal looks simple and uses the existing composite type with a new tag:DW_TAG_namelist. Please let me know if you have any comments or need more information on these.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">NOTE: Currently flang also does not emit any metadata to handle namelist DebugInfo. flang code changes for the same will be taken up after the LLVM support
 for namelist. <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">Proposed LLVM IR changes for namelist DebugInfo handling (for the sample fortran program shown below):<o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">. . .<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">!20 = !DILocalVariable(scope: !15, name: "a", file: !3, line: 6, type: !19)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">. . .<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">!22 = !DILocalVariable(scope: !15, name: "b", file: !3, line: 7, type: !19)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">. . .<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">!24 = !{ !26, !27 }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">!25 = !DICompositeType(tag:
</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:red">DW_TAG_namelist</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">, file: !3, name: "nml", elements: !24)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">!26 = !DIDerivedType(tag:
</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:red">DW_TAG_namelist_item</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">,
</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:red">item: !20</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">!27 = !DIDerivedType(tag:
</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:red">DW_TAG_namelist_item</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">,
</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:red">item: !22</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">. . .<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">Thanks and regards,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">Bhuvan<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">Sample program :<o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">program main<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">  integer :: a, b<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">  namelist /nml/ a, b<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">  a = 10<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">  b = 20<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">  Write(*,nml)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">end program main<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">dwarfdump of an gfortran emitted binary :<o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">. . .<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">0x000000</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:red">b4</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">:    
 DW_TAG_variable [10]<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                  DW_AT_name [DW_FORM_string]   ("a")<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                  DW_AT_decl_file [DW_FORM_data1]       ("/home/bhuvan/work/fortran/test/3180/n2.f90")<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                  DW_AT_decl_line [DW_FORM_data1]       (20)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                  DW_AT_type [DW_FORM_ref4]     (cu + 0x006d => {0x0000006d} "integer(kind=4)")<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                  DW_AT_declaration [DW_FORM_flag_present]      (true)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                  DW_AT_location [DW_FORM_exprloc]      (DW_OP_fbreg -20)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">0x000000</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:red">c0</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">:    
 DW_TAG_variable [10]<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                  DW_AT_name [DW_FORM_string]   ("b")<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                  DW_AT_decl_file [DW_FORM_data1]       ("/home/bhuvan/work/fortran/test/3180/n2.f90")<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                  DW_AT_decl_line [DW_FORM_data1]       (20)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                  DW_AT_type [DW_FORM_ref4]     (cu + 0x006d => {0x0000006d} "integer(kind=4)")<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                  DW_AT_declaration [DW_FORM_flag_present]      (true)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                  DW_AT_location [DW_FORM_exprloc]      (DW_OP_fbreg -24)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">. . .<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">0x000000dd:     DW_TAG_namelist [12] *<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                  DW_AT_name [DW_FORM_string]   ("nml")<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">0x000000e2:       DW_TAG_namelist_item [9]<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                    DW_AT_namelist_item [DW_FORM_ref4]  (cu + 0x00b4 => {0x000000</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:red">b4</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">})<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">0x000000e7:       DW_TAG_namelist_item [9]<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">                    DW_AT_namelist_item [DW_FORM_ref4]  (cu + 0x00c0 => {0x000000</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:red">c0</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">})<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">0x000000ec:       NULL<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">Sample GDB commands output (GDB used here is internal, soon it will be upstreamed) :<o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">(gdb) ptype nml<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">type = Type nml<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">    integer(kind=4) :: a<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">    integer(kind=4) :: b<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">End Type nml<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">(gdb) print nml<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060">$1 = ( a = 10, b = 20 )</span><span style="font-size:12.0pt;font-family:"Times New Roman",serif;color:#002060"><o:p></o:p></span></p>
</div>
</body>
</html>