Hi, <br><br>I've been thinking about how to keep the line number with the llvm transform/Analysis passes.<br>Basically, I agree with Chris's notes (<a href="http://www.nondot.org/sabre/LLVMNotes/DebugInfoImprovements.txt">http://www.nondot.org/sabre/LLVMNotes/DebugInfoImprovements.txt</a>),  and I will follow his way to turn on the line number information when optimization enabled.<br>
<br>Here is a detailed proposal:<br><br><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Clenovo%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:宋体;
        panose-1:2 1 6 0 3 1 1 1 1 1;
        mso-font-alt:SimSun;
        mso-font-charset:134;
        mso-generic-font-family:auto;
        mso-font-pitch:variable;
        mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
        {font-family:"\@宋体";
        panose-1:2 1 6 0 3 1 1 1 1 1;
        mso-font-charset:134;
        mso-generic-font-family:auto;
        mso-font-pitch:variable;
        mso-font-signature:3 135135232 16 0 262145 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {mso-style-parent:"";
        margin:0pt;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        mso-pagination:none;
        font-size:10.5pt;
        mso-bidi-font-size:12.0pt;
        font-family:"Times New Roman";
        mso-fareast-font-family:宋体;
        mso-font-kerning:1.0pt;}
h3
        {mso-style-next:正文;
        margin-top:13.0pt;
        margin-right:0pt;
        margin-bottom:13.0pt;
        margin-left:0pt;
        text-align:justify;
        text-justify:inter-ideograph;
        line-height:173%;
        mso-pagination:lines-together;
        page-break-after:avoid;
        mso-outline-level:3;
        font-size:16.0pt;
        font-family:"Times New Roman";
        mso-font-kerning:1.0pt;}
 /* Page Definitions */
 @page
        {mso-page-border-surround-header:no;
        mso-page-border-surround-footer:no;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;
        mso-header-margin:36.0pt;
        mso-footer-margin:36.0pt;
        mso-paper-source:0;}
div.Section1
        {page:Section1;}
 /* List Definitions */
 @list l0
        {mso-list-id:61296163;
        mso-list-template-ids:-1469037926;}
@list l0:level1
        {mso-level-tab-stop:21.25pt;
        mso-level-number-position:left;
        margin-left:21.25pt;
        text-indent:-21.25pt;}
@list l0:level2
        {mso-level-text:"%1\.%2\.";
        mso-level-tab-stop:28.35pt;
        mso-level-number-position:left;
        margin-left:28.35pt;
        text-indent:-28.35pt;
        mso-ansi-font-size:14.0pt;
        mso-bidi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l0:level3
        {mso-level-tab-stop:21.0pt;
        mso-level-number-position:left;
        margin-left:21.0pt;
        text-indent:-21.0pt;}
@list l0:level4
        {mso-level-text:"%1\.%2\.%3\.%4\.";
        mso-level-tab-stop:42.55pt;
        mso-level-number-position:left;
        margin-left:42.55pt;
        text-indent:-42.55pt;}
@list l0:level5
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.";
        mso-level-tab-stop:49.6pt;
        mso-level-number-position:left;
        margin-left:49.6pt;
        text-indent:-49.6pt;}
@list l0:level6
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.";
        mso-level-tab-stop:56.7pt;
        mso-level-number-position:left;
        margin-left:56.7pt;
        text-indent:-56.7pt;}
@list l0:level7
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.";
        mso-level-tab-stop:63.8pt;
        mso-level-number-position:left;
        margin-left:63.8pt;
        text-indent:-63.8pt;}
@list l0:level8
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.";
        mso-level-tab-stop:70.9pt;
        mso-level-number-position:left;
        margin-left:70.9pt;
        text-indent:-70.9pt;}
@list l0:level9
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9\.";
        mso-level-tab-stop:77.95pt;
        mso-level-number-position:left;
        margin-left:77.95pt;
        text-indent:-77.95pt;}
@list l1
        {mso-list-id:1191652489;
        mso-list-template-ids:67698719;}
@list l1:level1
        {mso-level-tab-stop:21.25pt;
        mso-level-number-position:left;
        margin-left:21.25pt;
        text-indent:-21.25pt;}
@list l1:level2
        {mso-level-text:"%1\.%2\.";
        mso-level-tab-stop:28.35pt;
        mso-level-number-position:left;
        margin-left:28.35pt;
        text-indent:-28.35pt;}
@list l1:level3
        {mso-level-text:"%1\.%2\.%3\.";
        mso-level-tab-stop:35.45pt;
        mso-level-number-position:left;
        margin-left:35.45pt;
        text-indent:-35.45pt;}
@list l1:level4
        {mso-level-text:"%1\.%2\.%3\.%4\.";
        mso-level-tab-stop:42.55pt;
        mso-level-number-position:left;
        margin-left:42.55pt;
        text-indent:-42.55pt;}
@list l1:level5
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.";
        mso-level-tab-stop:49.6pt;
        mso-level-number-position:left;
        margin-left:49.6pt;
        text-indent:-49.6pt;}
@list l1:level6
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.";
        mso-level-tab-stop:56.7pt;
        mso-level-number-position:left;
        margin-left:56.7pt;
        text-indent:-56.7pt;}
@list l1:level7
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.";
        mso-level-tab-stop:63.8pt;
        mso-level-number-position:left;
        margin-left:63.8pt;
        text-indent:-63.8pt;}
@list l1:level8
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.";
        mso-level-tab-stop:70.9pt;
        mso-level-number-position:left;
        margin-left:70.9pt;
        text-indent:-70.9pt;}
@list l1:level9
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9\.";
        mso-level-tab-stop:77.95pt;
        mso-level-number-position:left;
        margin-left:77.95pt;
        text-indent:-77.95pt;}
@list l2
        {mso-list-id:1483621104;
        mso-list-template-ids:-1125068064;}
@list l2:level1
        {mso-level-tab-stop:21.25pt;
        mso-level-number-position:left;
        margin-left:21.25pt;
        text-indent:-21.25pt;}
@list l2:level2
        {mso-level-number-format:none;
        mso-level-text:"1\.2";
        mso-level-tab-stop:28.35pt;
        mso-level-number-position:left;
        margin-left:28.35pt;
        text-indent:-28.35pt;}
@list l2:level3
        {mso-level-text:"%1\.%2\.%3\.";
        mso-level-tab-stop:35.45pt;
        mso-level-number-position:left;
        margin-left:35.45pt;
        text-indent:-35.45pt;}
@list l2:level4
        {mso-level-text:"%1\.%2\.%3\.%4\.";
        mso-level-tab-stop:42.55pt;
        mso-level-number-position:left;
        margin-left:42.55pt;
        text-indent:-42.55pt;}
@list l2:level5
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.";
        mso-level-tab-stop:49.6pt;
        mso-level-number-position:left;
        margin-left:49.6pt;
        text-indent:-49.6pt;}
@list l2:level6
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.";
        mso-level-tab-stop:56.7pt;
        mso-level-number-position:left;
        margin-left:56.7pt;
        text-indent:-56.7pt;}
@list l2:level7
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.";
        mso-level-tab-stop:63.8pt;
        mso-level-number-position:left;
        margin-left:63.8pt;
        text-indent:-63.8pt;}
@list l2:level8
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.";
        mso-level-tab-stop:70.9pt;
        mso-level-number-position:left;
        margin-left:70.9pt;
        text-indent:-70.9pt;}
@list l2:level9
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9\.";
        mso-level-tab-stop:77.95pt;
        mso-level-number-position:left;
        margin-left:77.95pt;
        text-indent:-77.95pt;}
@list l3
        {mso-list-id:1716152943;
        mso-list-template-ids:-1469037926;}
@list l3:level1
        {mso-level-tab-stop:21.25pt;
        mso-level-number-position:left;
        margin-left:21.25pt;
        text-indent:-21.25pt;}
@list l3:level2
        {mso-level-text:"%1\.%2\.";
        mso-level-tab-stop:28.35pt;
        mso-level-number-position:left;
        margin-left:28.35pt;
        text-indent:-28.35pt;
        mso-ansi-font-size:14.0pt;
        mso-bidi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l3:level3
        {mso-level-tab-stop:21.0pt;
        mso-level-number-position:left;
        margin-left:21.0pt;
        text-indent:-21.0pt;}
@list l3:level4
        {mso-level-text:"%1\.%2\.%3\.%4\.";
        mso-level-tab-stop:42.55pt;
        mso-level-number-position:left;
        margin-left:42.55pt;
        text-indent:-42.55pt;}
@list l3:level5
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.";
        mso-level-tab-stop:49.6pt;
        mso-level-number-position:left;
        margin-left:49.6pt;
        text-indent:-49.6pt;}
@list l3:level6
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.";
        mso-level-tab-stop:56.7pt;
        mso-level-number-position:left;
        margin-left:56.7pt;
        text-indent:-56.7pt;}
@list l3:level7
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.";
        mso-level-tab-stop:63.8pt;
        mso-level-number-position:left;
        margin-left:63.8pt;
        text-indent:-63.8pt;}
@list l3:level8
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.";
        mso-level-tab-stop:70.9pt;
        mso-level-number-position:left;
        margin-left:70.9pt;
        text-indent:-70.9pt;}
@list l3:level9
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9\.";
        mso-level-tab-stop:77.95pt;
        mso-level-number-position:left;
        margin-left:77.95pt;
        text-indent:-77.95pt;}
@list l4
        {mso-list-id:2000502512;
        mso-list-template-ids:428405252;}
@list l4:level1
        {mso-level-tab-stop:21.25pt;
        mso-level-number-position:left;
        margin-left:21.25pt;
        text-indent:-21.25pt;}
@list l4:level2
        {mso-level-text:"%1\.%2\.";
        mso-level-tab-stop:28.35pt;
        mso-level-number-position:left;
        margin-left:28.35pt;
        text-indent:-28.35pt;
        mso-ansi-font-size:14.0pt;
        mso-bidi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l4:level3
        {mso-level-start-at:2;
        mso-level-tab-stop:21.0pt;
        mso-level-number-position:left;
        margin-left:21.0pt;
        text-indent:-21.0pt;}
@list l4:level4
        {mso-level-text:"%1\.%2\.%3\.%4\.";
        mso-level-tab-stop:42.55pt;
        mso-level-number-position:left;
        margin-left:42.55pt;
        text-indent:-42.55pt;}
@list l4:level5
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.";
        mso-level-tab-stop:49.6pt;
        mso-level-number-position:left;
        margin-left:49.6pt;
        text-indent:-49.6pt;}
@list l4:level6
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.";
        mso-level-tab-stop:56.7pt;
        mso-level-number-position:left;
        margin-left:56.7pt;
        text-indent:-56.7pt;}
@list l4:level7
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.";
        mso-level-tab-stop:63.8pt;
        mso-level-number-position:left;
        margin-left:63.8pt;
        text-indent:-63.8pt;}
@list l4:level8
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.";
        mso-level-tab-stop:70.9pt;
        mso-level-number-position:left;
        margin-left:70.9pt;
        text-indent:-70.9pt;}
@list l4:level9
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9\.";
        mso-level-tab-stop:77.95pt;
        mso-level-number-position:left;
        margin-left:77.95pt;
        text-indent:-77.95pt;}
ol
        {margin-bottom:0pt;}
ul
        {margin-bottom:0pt;}
-->
</style>

<h3 style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">1.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">     
</span></span></span><span lang="EN-US">Introduction</span></h3>

<p class="MsoNormal"><span lang="EN-US">At the time of this writing, LLVM's DWARF
debug info generation works reasonably well at -O0, but it is completely
disabled at optimization levels -O1 and higher.<span style=""> 
</span>This is because our debug info representation interferes with
optimizations, transparently disabling them in cases where they would not update
it correctly.<span style="">  </span>This is useful for
preserving correct debug info, but it is not what people expect when they use
'llvm-gcc -O3 -g foo.c'. (From Chris Lattner)</span></p>

<p class="MsoNormal"><span lang="EN-US"> ...</span></p>

<p class="MsoNormal"><span lang="EN-US"> ...<br></span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">This document describes a path forward that
will get us to a place where turning on debug info does not pessimize code, and
still preserves the invariant that we don't produce bogus debug info.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 28.35pt; text-indent: -28.35pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">1.1.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">    </span></span></span></b><b style=""><span style="font-size: 14pt;" lang="EN-US">Goals</span></b></p>


<p class="MsoNormal"><span lang="EN-US">The goals for this project are to:</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">1.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Enable optimization when line number
info is turned on.</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">2.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Do not generate incorrect/bogus line number info</span></p>

<p class="MsoNormal"><span lang="EN-US">The goals of this proposal are to:</span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">1.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Clearly state the requirements.</span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">2.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Identify a work plan that will
satisfy those requirements.</span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">3.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Estimate time, schedule and
cost for the work plan.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 28.35pt; text-indent: -28.35pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">1.2.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">    </span></span></span></b><b style=""><span style="font-size: 14pt;" lang="EN-US">Resources,
Tools and Methods</span></b></p>

<p class="MsoNormal"><span lang="EN-US">This work will be accomplished using the
following:</span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="DE"><span style="">1.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="DE">Intel(R)
Xeon(R) CPU E5420 2.50GHz hardware</span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">2.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Linux 2.6 Kernel (Fedora Core 6
or Cent OS 5)</span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">3.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">GCC 4.1 compiler</span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">4.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">C++ programming language</span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">5.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">LLVM, RELEASE 2.3</span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">6.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">LLVM-GCC4.2 RELEASE 2.3</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">The method for performing this work will
use the LLVM project's open source development policies, which include:</span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">1.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Incremental development. A
progression of small changes to the LLVM code base will be made. To
incrementally move LLVM in the desired direction, this generally means adding
features and testing them before removing the functionality they are intended
to replace. This approach maintains compatibility with previous designs until
new designs are provably correct.</span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">2.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Validation with test cases.
With each incremental change, llvm/test and llvm-test test suites should be run
through to (a) prove the new functionality, (b) expose potential weaknesses in
the implementation. Additionally, sets of unit test cases should be developed
for each new feature.<br></span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">3.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Milestone Validation. Each milestone
will be recognized as completed when the associated set of test cases functions
correctly. <br></span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">4.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Open Source with peer review
(Optional). For each patch, submit to LLVM commit-list via email for review and
comment. This is for contribution back to LLVM in the future.</span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">5.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Incremental documentation. As
new features are added to LLVM, the documentation will be updated at the same
time. </span></p>

<p class="MsoNormal" style="margin-left: 21.25pt; text-indent: -21.25pt;"><span style="" lang="EN-US"><span style="">6.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Bugzilla Tracking. <br></span></p>

<br><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Clenovo%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:宋体;
        panose-1:2 1 6 0 3 1 1 1 1 1;
        mso-font-alt:SimSun;
        mso-font-charset:134;
        mso-generic-font-family:auto;
        mso-font-pitch:variable;
        mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
        {font-family:"\@宋体";
        panose-1:2 1 6 0 3 1 1 1 1 1;
        mso-font-charset:134;
        mso-generic-font-family:auto;
        mso-font-pitch:variable;
        mso-font-signature:3 135135232 16 0 262145 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {mso-style-parent:"";
        margin:0pt;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        mso-pagination:none;
        font-size:10.5pt;
        mso-bidi-font-size:12.0pt;
        font-family:"Times New Roman";
        mso-fareast-font-family:宋体;
        mso-font-kerning:1.0pt;}
h3
        {mso-style-next:正文;
        margin-top:13.0pt;
        margin-right:0pt;
        margin-bottom:13.0pt;
        margin-left:0pt;
        text-align:justify;
        text-justify:inter-ideograph;
        line-height:173%;
        mso-pagination:lines-together;
        page-break-after:avoid;
        mso-outline-level:3;
        font-size:16.0pt;
        font-family:"Times New Roman";
        mso-font-kerning:1.0pt;}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;
        text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline;
        text-underline:single;}
 /* Page Definitions */
 @page
        {mso-page-border-surround-header:no;
        mso-page-border-surround-footer:no;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;
        mso-header-margin:36.0pt;
        mso-footer-margin:36.0pt;
        mso-paper-source:0;}
div.Section1
        {page:Section1;}
 /* List Definitions */
 @list l0
        {mso-list-id:1327972534;
        mso-list-template-ids:1794558268;}
@list l0:level1
        {mso-level-start-at:2;
        mso-level-tab-stop:21.0pt;
        mso-level-number-position:left;
        margin-left:21.0pt;
        text-indent:-21.0pt;}
@list l0:level2
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2";
        mso-level-tab-stop:18.0pt;
        mso-level-number-position:left;
        margin-left:18.0pt;
        text-indent:-18.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l0:level3
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3";
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        margin-left:36.0pt;
        text-indent:-36.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l0:level4
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4";
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        margin-left:36.0pt;
        text-indent:-36.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l0:level5
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l0:level6
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l0:level7
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l0:level8
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8";
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        margin-left:72.0pt;
        text-indent:-72.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l0:level9
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9";
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        margin-left:72.0pt;
        text-indent:-72.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l1
        {mso-list-id:1859466516;
        mso-list-template-ids:714407606;}
@list l1:level1
        {mso-level-tab-stop:21.0pt;
        mso-level-number-position:left;
        margin-left:21.0pt;
        text-indent:-21.0pt;}
@list l1:level2
        {mso-level-start-at:3;
        mso-level-legal-format:yes;
        mso-level-text:"%1\.%2";
        mso-level-tab-stop:24.0pt;
        mso-level-number-position:left;
        margin-left:24.0pt;
        text-indent:-24.0pt;}
@list l1:level3
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3";
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        margin-left:36.0pt;
        text-indent:-36.0pt;}
@list l1:level4
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4";
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        margin-left:36.0pt;
        text-indent:-36.0pt;}
@list l1:level5
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;}
@list l1:level6
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;}
@list l1:level7
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;}
@list l1:level8
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8";
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        margin-left:72.0pt;
        text-indent:-72.0pt;}
@list l1:level9
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9";
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        margin-left:72.0pt;
        text-indent:-72.0pt;}
ol
        {margin-bottom:0pt;}
ul
        {margin-bottom:0pt;}
-->
</style>

<h3 style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">2.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">     
</span></span></span><span lang="EN-US">Requirements</span></h3><p class="MsoNormal"><span lang="EN-US">As LLVM optimization passes will change the
original input source code a lot, it is not a trivial work to keep the debug
information in the optimized code. The point is we should make sure the debug
information in the optimized code is totally correct. For now, I think there is
no absolutely solution for this project. A reasonable scheme is to keep the
correct debug info, if the debug info leaves incorrect after optimization, just
remove it. It does not generate silently broken information. (From Chris)<br></span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">This is a long project, and will take quite
a bit of work in all areas before we can declare "success", but it is
worthwhile, and important and useful steps can be made without solving the
whole problem. This proposal should solve half of this problem. That is to keep
the line number information with optimization code. (From Chris)<a href="http://www.nondot.org/sabre/LLVMNotes/EmbeddedMetadata.txt"></a></span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">The following sub-sections define specific
requirements to improve the debug information in LLVM.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">2.1<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  </span></span></span></b><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style=""> </span>Verification Flow</span></b></p>


<p class="MsoNormal"><span lang="EN-US">The most important of this project is to
make the debug information do not block any optimization by LLVM transform
passes. Here I propose a way to determine whether codegen is being impacted by
debug info. This is also useful for us to scan the LLVM transform pass list to
find which pass need to update to work with debug information.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><b style=""><span lang="EN-US">From
Chris:</span></b><span lang="EN-US"> Add a -strip-debug pass that removes all
debug info from the LLVM IR. Given this, it would allow us to do:</span></p>

<p class="MsoNormal"><span lang="EN-US"><span style="">       </span>$
llvm-gcc -O3 -c -o - | llc > good.s</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">$ llvm-gcc -O3
-c -g -o - | opt -strip-debug | llc > test.s</span></p>

<p class="MsoNormal"><span lang="EN-US"><span style="">       </span>$
diff good.s test.s</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">If the two .s files differed, then badness
happened.<span style="">  </span>This obviously only catches
badness that happens in the LLVM optimizer, if the code generator is broken,
we'll need something more sophisticated that strips debug info out of the .s
file.<span style="">  </span>In any case, this is a good place
to start, and should be turned into a llvm-test TEST/report.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">Incidentally, we have to go through
codegen, we can't diff .ll files after debug info is stripped out. This is
because debug info is allowed to (and probably does) impact local names within
functions, but these functions are removed at codegen and are not important to
preserve. <b style="">End</b></span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">2.2<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  </span></span></span></b><span style="font-size: 14pt;" lang="EN-US"><span style=""> </span><b style="">A Pass to clean up the debug info</b></span></p>


<p class="MsoNormal"><span lang="EN-US">LLVM already has a transform pass "-strip-debug",
it removes all the debug information. But for the first half of this project,
we want to just keep the line number information (stop point) in the optimized
code. So we need a new transform pass to just removes the variable declaration
information. Pass "-strip-debug" also doesn't cleanup the dead variable and
function calling for debug information, it thinks other pass like "-dce" or "-globaldce"
can handle this. But as we are also going to update those passes, we can't use
them in the verification flow, otherwise, it may output incorrect check
results.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">The new pass "-strip-debug-pro" should have
the following functions:</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">1.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Just remove the variable
declaration information and clean up the dead debug information.</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">2.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Just remove the line number
information and clean up the dead debug information.</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">3.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Remove all the debug
information and clean up.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">2.3<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  </span></span></span></b><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style=""> </span>Front End Changes</span></b></p>


<p class="MsoNormal"><span lang="EN-US">For the first half of the project, we just
aim to handle the line number debug information. So we need to force llvm-gcc
not to emit any variable declaration information.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">2.4<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  </span></span></span></b><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style=""> </span>Optimization Transform Changes</span></b></p>


<p class="MsoNormal"><span lang="EN-US">According to the output of the check
script, we can get a pass-to-update list. Just follow the list to update the
pass one by one.</span></p>

<p class="MsoNormal"><span lang="EN-US">When done a single pass, turn back to run
the llvm/test and llvm-test, note apply the pass "-strip-debug-pro" right after
the updated pass to see if it work correctly.</span></p><p class="MsoNormal"><br><span lang="EN-US"></span></p><p class="MsoNormal"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Clenovo%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:宋体;
        panose-1:2 1 6 0 3 1 1 1 1 1;
        mso-font-alt:SimSun;
        mso-font-charset:134;
        mso-generic-font-family:auto;
        mso-font-pitch:variable;
        mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
        {font-family:"\@宋体";
        panose-1:2 1 6 0 3 1 1 1 1 1;
        mso-font-charset:134;
        mso-generic-font-family:auto;
        mso-font-pitch:variable;
        mso-font-signature:3 135135232 16 0 262145 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {mso-style-parent:"";
        margin:0pt;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        mso-pagination:none;
        font-size:10.5pt;
        mso-bidi-font-size:12.0pt;
        font-family:"Times New Roman";
        mso-fareast-font-family:宋体;
        mso-font-kerning:1.0pt;}
h3
        {mso-style-next:正文;
        margin-top:13.0pt;
        margin-right:0pt;
        margin-bottom:13.0pt;
        margin-left:0pt;
        text-align:justify;
        text-justify:inter-ideograph;
        line-height:173%;
        mso-pagination:lines-together;
        page-break-after:avoid;
        mso-outline-level:3;
        font-size:16.0pt;
        font-family:"Times New Roman";
        mso-font-kerning:1.0pt;}
 /* Page Definitions */
 @page
        {mso-page-border-surround-header:no;
        mso-page-border-surround-footer:no;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;
        mso-header-margin:36.0pt;
        mso-footer-margin:36.0pt;
        mso-paper-source:0;}
div.Section1
        {page:Section1;}
 /* List Definitions */
 @list l0
        {mso-list-id:61296163;
        mso-list-template-ids:-1469037926;}
@list l0:level1
        {mso-level-tab-stop:21.25pt;
        mso-level-number-position:left;
        margin-left:21.25pt;
        text-indent:-21.25pt;}
@list l0:level2
        {mso-level-text:"%1\.%2\.";
        mso-level-tab-stop:28.35pt;
        mso-level-number-position:left;
        margin-left:28.35pt;
        text-indent:-28.35pt;
        mso-ansi-font-size:14.0pt;
        mso-bidi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l0:level3
        {mso-level-tab-stop:21.0pt;
        mso-level-number-position:left;
        margin-left:21.0pt;
        text-indent:-21.0pt;}
@list l0:level4
        {mso-level-text:"%1\.%2\.%3\.%4\.";
        mso-level-tab-stop:42.55pt;
        mso-level-number-position:left;
        margin-left:42.55pt;
        text-indent:-42.55pt;}
@list l0:level5
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.";
        mso-level-tab-stop:49.6pt;
        mso-level-number-position:left;
        margin-left:49.6pt;
        text-indent:-49.6pt;}
@list l0:level6
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.";
        mso-level-tab-stop:56.7pt;
        mso-level-number-position:left;
        margin-left:56.7pt;
        text-indent:-56.7pt;}
@list l0:level7
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.";
        mso-level-tab-stop:63.8pt;
        mso-level-number-position:left;
        margin-left:63.8pt;
        text-indent:-63.8pt;}
@list l0:level8
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.";
        mso-level-tab-stop:70.9pt;
        mso-level-number-position:left;
        margin-left:70.9pt;
        text-indent:-70.9pt;}
@list l0:level9
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9\.";
        mso-level-tab-stop:77.95pt;
        mso-level-number-position:left;
        margin-left:77.95pt;
        text-indent:-77.95pt;}
@list l1
        {mso-list-id:138500118;
        mso-list-type:hybrid;
        mso-list-template-ids:627213424 -882082280 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
        {mso-level-tab-stop:21.0pt;
        mso-level-number-position:left;
        margin-left:21.0pt;
        text-indent:-21.0pt;}
@list l2
        {mso-list-id:1327972534;
        mso-list-template-ids:1794558268;}
@list l2:level1
        {mso-level-start-at:2;
        mso-level-tab-stop:21.0pt;
        mso-level-number-position:left;
        margin-left:21.0pt;
        text-indent:-21.0pt;}
@list l2:level2
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2";
        mso-level-tab-stop:18.0pt;
        mso-level-number-position:left;
        margin-left:18.0pt;
        text-indent:-18.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l2:level3
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3";
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        margin-left:36.0pt;
        text-indent:-36.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l2:level4
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4";
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        margin-left:36.0pt;
        text-indent:-36.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l2:level5
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l2:level6
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l2:level7
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l2:level8
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8";
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        margin-left:72.0pt;
        text-indent:-72.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l2:level9
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9";
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        margin-left:72.0pt;
        text-indent:-72.0pt;
        mso-ansi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l3
        {mso-list-id:1647589740;
        mso-list-template-ids:-1953754022;}
@list l3:level1
        {mso-level-tab-stop:21.0pt;
        mso-level-number-position:left;
        margin-left:21.0pt;
        text-indent:-21.0pt;}
@list l3:level2
        {mso-level-start-at:2;
        mso-level-legal-format:yes;
        mso-level-text:"%1\.%2";
        mso-level-tab-stop:24.0pt;
        mso-level-number-position:left;
        margin-left:24.0pt;
        text-indent:-24.0pt;}
@list l3:level3
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3";
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        margin-left:36.0pt;
        text-indent:-36.0pt;}
@list l3:level4
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4";
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        margin-left:36.0pt;
        text-indent:-36.0pt;}
@list l3:level5
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;}
@list l3:level6
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;}
@list l3:level7
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;}
@list l3:level8
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8";
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        margin-left:72.0pt;
        text-indent:-72.0pt;}
@list l3:level9
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9";
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        margin-left:72.0pt;
        text-indent:-72.0pt;}
@list l4
        {mso-list-id:1716152943;
        mso-list-template-ids:-1469037926;}
@list l4:level1
        {mso-level-tab-stop:21.25pt;
        mso-level-number-position:left;
        margin-left:21.25pt;
        text-indent:-21.25pt;}
@list l4:level2
        {mso-level-text:"%1\.%2\.";
        mso-level-tab-stop:28.35pt;
        mso-level-number-position:left;
        margin-left:28.35pt;
        text-indent:-28.35pt;
        mso-ansi-font-size:14.0pt;
        mso-bidi-font-size:14.0pt;
        mso-ansi-font-weight:bold;}
@list l4:level3
        {mso-level-tab-stop:21.0pt;
        mso-level-number-position:left;
        margin-left:21.0pt;
        text-indent:-21.0pt;}
@list l4:level4
        {mso-level-text:"%1\.%2\.%3\.%4\.";
        mso-level-tab-stop:42.55pt;
        mso-level-number-position:left;
        margin-left:42.55pt;
        text-indent:-42.55pt;}
@list l4:level5
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.";
        mso-level-tab-stop:49.6pt;
        mso-level-number-position:left;
        margin-left:49.6pt;
        text-indent:-49.6pt;}
@list l4:level6
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.";
        mso-level-tab-stop:56.7pt;
        mso-level-number-position:left;
        margin-left:56.7pt;
        text-indent:-56.7pt;}
@list l4:level7
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.";
        mso-level-tab-stop:63.8pt;
        mso-level-number-position:left;
        margin-left:63.8pt;
        text-indent:-63.8pt;}
@list l4:level8
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.";
        mso-level-tab-stop:70.9pt;
        mso-level-number-position:left;
        margin-left:70.9pt;
        text-indent:-70.9pt;}
@list l4:level9
        {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9\.";
        mso-level-tab-stop:77.95pt;
        mso-level-number-position:left;
        margin-left:77.95pt;
        text-indent:-77.95pt;}
@list l5
        {mso-list-id:1859466516;
        mso-list-template-ids:714407606;}
@list l5:level1
        {mso-level-tab-stop:21.0pt;
        mso-level-number-position:left;
        margin-left:21.0pt;
        text-indent:-21.0pt;}
@list l5:level2
        {mso-level-start-at:3;
        mso-level-legal-format:yes;
        mso-level-text:"%1\.%2";
        mso-level-tab-stop:24.0pt;
        mso-level-number-position:left;
        margin-left:24.0pt;
        text-indent:-24.0pt;}
@list l5:level3
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3";
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        margin-left:36.0pt;
        text-indent:-36.0pt;}
@list l5:level4
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4";
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        margin-left:36.0pt;
        text-indent:-36.0pt;}
@list l5:level5
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;}
@list l5:level6
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;}
@list l5:level7
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7";
        mso-level-tab-stop:54.0pt;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-54.0pt;}
@list l5:level8
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8";
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        margin-left:72.0pt;
        text-indent:-72.0pt;}
@list l5:level9
        {mso-level-legal-format:yes;
        mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9";
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        margin-left:72.0pt;
        text-indent:-72.0pt;}
ol
        {margin-bottom:0pt;}
ul
        {margin-bottom:0pt;}
-->
</style>

</p><h3 style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">2.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">     
</span></span></span><span lang="EN-US">Proposed Work Plan</span></h3>

<p class="MsoNormal"><span lang="EN-US">This section defines a proposed work plan
to accomplish the requirements that we desires. The work plan is broken into
several distinct phases that follow a logical progression of modifications to
the LLVM software.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">2.1<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  </span></span></span></b><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style=""> </span>Phase 1: Establish the testing system</span></b></p>


<p class="MsoNormal"><span lang="EN-US">One of the most useful things to get
started is to have some way to determine whether codegen is being impacted by
debug info.<span style="">  </span>It is important to be able to
tell when this happens so that we can track down these places and fix them.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 36pt; text-indent: -36pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">2.1.1<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">   
</span></span></span></b><b style=""><span style="font-size: 14pt;" lang="EN-US">Pass Scanning Script</span></b></p>

<p class="MsoNormal"><span lang="EN-US">Following the way proposed by Chris, it is
good to have a script to scan the standard LLVM transform pass list. We can get
the standard compile optimization pass list by:</span></p>

<p class="MsoNormal"><span lang="EN-US"><span style="">       </span>$
opt -std-compile-opts -debug-pass=Arguments foo.bc > /dev/null</span></p>

<p class="MsoNormal"><span lang="EN-US">Pass Arguments:<span style="">  </span>-preverify -domtree -verify -lowersetjmp
-raiseallocs -simplifycfg -domtree -domfrontier -mem2reg -globalopt -globaldce
-ipconstprop -deadargelim -instcombine -simplifycfg -basiccg -prune-eh -inline
-argpromotion -tailduplicate -simplify-libcalls -instcombine -jump-threading
-simplifycfg -domtree -domfrontier -scalarrepl -instcombine -break-crit-edges
-condprop -tailcallelim -simplifycfg -reassociate -domtree -loops -loopsimplify
-domfrontier -scalar-evolution -lcssa -loop-rotate -licm -lcssa -loop-unswitch
-scalar-evolution -lcssa -loop-index-split -instcombine -scalar-evolution
-domfrontier -lcssa -indvars -domfrontier -scalar-evolution -lcssa -loop-unroll
-instcombine -domtree -memdep -gvn -memcpyopt -sccp -instcombine
-break-crit-edges -condprop -memdep -dse -mergereturn -postdomtree
-postdomfrontier -adce -simplifycfg -strip-dead-prototypes -printusedtypes
-deadtypeelim -constmerge -preverify -domtree -verify</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">The script should look like:</span></p>

<table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
 <tbody><tr style="">
  <td style="border: 1pt solid windowtext; padding: 0pt 5.4pt; width: 426.1pt;" valign="top" width="568">
  <p class="MsoNormal"><span lang="EN-US">#!/bin/sh</span></p>
  <p class="MsoNormal"><span lang="EN-US"> </span></p>
  <p class="MsoNormal"><span lang="EN-US">OPTS="-preverify -domtree -verify
  -lowersetjmp -raiseallocs -simplifycfg -domtree -domfrontier -mem2reg
  -globalopt -globaldce -ipconstprop -deadargelim -instcombine -simplifycfg
  -basiccg -prune-eh -inline -argpromotion -tailduplicate -simplify-libcalls
  -instcombine -jump-threading -simplifycfg -domtree -domfrontier -scalarrepl
  -instcombine -break-crit-edges -condprop -tailcallelim -simplifycfg
  -reassociate -domtree -loops -loopsimplify -domfrontier -scalar-evolution
  -lcssa -loop-rotate -licm -lcssa -loop-unswitch -scalar-evolution -lcssa
  -loop-index-split -instcombine -scalar-evolution -domfrontier -lcssa -indvars
  -domfrontier -scalar-evolution -lcssa -loop-unroll -instcombine -domtree
  -memdep -gvn -memcpyopt -sccp -instcombine -break-crit-edges -condprop
  -memdep -dse -mergereturn -postdomtree -postdomfrontier -adce -simplifycfg
  -strip-dead-prototypes -printusedtypes -deadtypeelim -constmerge -preverify
  -domtree -verify"</span></p>
  <p class="MsoNormal"><span lang="EN-US"> </span></p>
  <p class="MsoNormal"><span lang="EN-US">llvm-gcc -g -emit-llvm -c $1 -o $1.db1.ll
  -S</span></p>
  <p class="MsoNormal"><span lang="EN-US">llvm-gcc -emit-llvm -c $1 -o good.bc</span></p>
  <p class="MsoNormal"><span lang="EN-US"> </span></p>
  <p class="MsoNormal"><span lang="EN-US">sed '/call void @llvm.dbg.declare/d'
  $1.db1.ll > $1.db2.ll</span></p>
  <p class="MsoNormal"><span lang="EN-US"> </span></p>
  <p class="MsoNormal"><span lang="EN-US">llvm-as $1.db2.ll -f</span></p>
  <p class="MsoNormal"><span lang="EN-US"> </span></p>
  <p class="MsoNormal"><span lang="EN-US">for p in $OPTS; do</span></p>
  <p class="MsoNormal"><span lang="EN-US"><span style=""> 
  </span>opt $p $1.db2.bc -o $1.db2.bc -f</span></p>
  <p class="MsoNormal"><span lang="EN-US"><span style=""> 
  </span>opt -strip-debug -deadtypeelim -dce -globaldce -deadtypeelim $1.db2.bc
  | llc > test.s -f</span></p>
  <p class="MsoNormal"><span lang="EN-US"><span style=""> 
  </span>opt $p -strip-debug -deadtypeelim -dce -globaldce -deadtypeelim
  good.bc -o good.bc -f</span></p>
  <p class="MsoNormal"><span lang="EN-US"><span style=""> 
  </span>llc good.bc > good.s -f</span></p>
  <p class="MsoNormal"><span lang="EN-US"><span style=""> 
  </span>echo "PASS $p : " >> diff.log</span></p>
  <p class="MsoNormal"><span lang="EN-US"><span style=""> 
  </span>if `diff good.s test.s >> diff.log 2>&1 ` ; then</span></p>
  <p class="MsoNormal"><span lang="EN-US"><span style="">     
  </span>echo "PASS $p : SUCC"</span></p>
  <p class="MsoNormal"><span lang="EN-US"><span style=""> 
  </span>else</span></p>
  <p class="MsoNormal"><span lang="EN-US"><span style="">     
  </span>echo "PASS $p : FAIL"</span></p>
  <p class="MsoNormal"><span lang="EN-US"><span style=""> 
  </span>fi</span></p>
  <p class="MsoNormal"><span lang="EN-US">done</span></p>
  </td>
 </tr>
</tbody></table>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">For example:</span></p>

<table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
 <tbody><tr style="">
  <td style="border: 1pt solid windowtext; padding: 0pt 5.4pt; width: 426.1pt;" valign="top" width="568">
  <p class="MsoNormal"><span lang="EN-US">Foo.c:</span></p>
  <p class="MsoNormal"><span lang="EN-US">int foo(int x, int y) {</span></p>
  <p class="MsoNormal"><span lang="EN-US"><span style="">  </span>return
  x + y;</span></p>
  <p class="MsoNormal"><span lang="EN-US">}</span></p>
  <p class="MsoNormal"><span lang="EN-US"> </span></p>
  <p class="MsoNormal"><span lang="EN-US">$ ./check.sh foo.c</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -preverify : SUCC</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -domtree : SUCC</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -verify : SUCC</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -lowersetjmp : SUCC</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -raiseallocs : SUCC</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -simplifycfg : SUCC</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -domtree : SUCC</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -domfrontier : SUCC</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -mem2reg : FAIL</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -globalopt : FAIL</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -globaldce : FAIL</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -ipconstprop : FAIL</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -deadargelim : FAIL</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -instcombine : FAIL</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -simplifycfg : FAIL</span></p>
  <p class="MsoNormal"><span lang="EN-US"> </span></p>
  <p class="MsoNormal"><span lang="EN-US">Check the log file:</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -preverify :</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -domtree :</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -verify :</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -lowersetjmp :</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -raiseallocs :</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -simplifycfg :</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -domtree :</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -domfrontier :</span></p>
  <p class="MsoNormal"><span lang="EN-US">PASS -mem2reg :</span></p>
  <p class="MsoNormal"><span lang="EN-US">8,9c8,14</span></p>
  <p class="MsoNormal"><span lang="EN-US"><<span style="">  
  </span>movl<span style="">    </span>4(%esp), %eax</span></p>
  <p class="MsoNormal"><span lang="EN-US"><<span style="">  
  </span>addl<span style="">    </span>8(%esp), %eax</span></p>
  <p class="MsoNormal"><span lang="EN-US">---</span></p>
  <p class="MsoNormal"><span lang="EN-US">><span style="">  
  </span>subl<span style="">    </span>$8, %esp</span></p>
  <p class="MsoNormal"><span lang="EN-US">><span style="">  
  </span>movl<span style="">    </span>12(%esp), %eax</span></p>
  <p class="MsoNormal"><span lang="EN-US">><span style="">  
  </span>movl<span style="">    </span>%eax, 4(%esp)</span></p>
  <p class="MsoNormal"><span lang="EN-US">><span style="">  
  </span>movl<span style="">    </span>16(%esp), %eax</span></p>
  <p class="MsoNormal"><span lang="EN-US">><span style="">  
  </span>movl<span style="">    </span>%eax, (%esp)</span></p>
  <p class="MsoNormal"><span lang="EN-US">><span style="">  
  </span>addl<span style="">    </span>4(%esp), %eax</span></p>
  <p class="MsoNormal"><span lang="EN-US">><span style="">  
  </span>addl<span style="">    </span>$8, %esp</span></p>
  </td>
 </tr>
</tbody></table>

<p class="MsoNormal"><span lang="EN-US">For the above example, we found that the
transform pass "mem2reg" obviously not done the work when keeping the debug
information. Then we know we need to update it and re-test</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 36pt; text-indent: -36pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">2.1.2<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">   
</span></span></span></b><b style=""><span style="font-size: 14pt;" lang="EN-US">Update the LLVM testing system</span></b></p>

<p class="MsoNormal"><span lang="EN-US">The LLVM testing infrastructure contains
two major categories of tests: code fragments and whole programs. Code
fragments are referred to as the "DejaGNU tests" and are in the llvm
module in subversion under the llvm/test directory. The whole programs tests
are referred to as the "Test suite" and are in the test-suite module
in subversion.</span></p>

<p class="MsoNormal"><span lang="EN-US">Scanning all the test cases, find those
using the specified transform and add the script similar to that previously
mentioned.</span></p>

<p class="MsoNormal"><span lang="EN-US">Make the result write into llvm-test
TEST/report.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">2.2<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  </span></span></span></b><span style="font-size: 14pt;" lang="EN-US"><span style=""> </span><b style="">Phase 2: New Pass to Strip Debug
Information</b></span></p>

<p class="MsoNormal"><span lang="EN-US">LLVM already has a transform pass "-strip-debug",
it removes all the debug information. But for the first half of this project,
we want to just keep the line number information (stop point) in the optimized
code. So we need a new transform pass to just removes the variable declaration
information. Pass "-strip-debug" also doesn't cleanup the dead variable and
function calling for debug information, it thinks other pass like "-dce" or "-globaldce"
can handle this. But as we are also going to update those passes, we can't use
them in the verification flow, otherwise, it may output incorrect check
results.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">The new pass "-strip-debug-pro" should have
the following functions:</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">1.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Just remove the variable
declaration information and clean up the dead debug information.</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style=""></span></span><span lang="EN-US"><br></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">2.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span lang="EN-US">Remove all the debug
information and clean up</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 36pt; text-indent: -36pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">3.2.1<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">   
</span></span></span></b><b style=""><span style="font-size: 14pt;" lang="EN-US">Work Plan</span></b></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">1.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="EN-US">Take
a reference to transform pass StripSymbol.cpp</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">2.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="EN-US">Based
on the StripSymbol.cpp, add an option to it to just remove debug information,
like "-rm-debug"</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style=""></span></span><span style="" lang="EN-US"><br></span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">3.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="EN-US">Add
an option to just remove the variable declaration information, like "–rm-debug=2"</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">4.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="EN-US">Add
a procedure to clean up the dead variables and function calls for debug
purpose.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">2.3<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  </span></span></span></b><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style=""> </span>Phase 3: Extend llvm-gcc</span></b></p>


<p class="MsoNormal"><span style="" lang="EN-US">Once we
have a way to verify what is happening, I propose that we aim for an intermediate
point: instead of having -O disable all debug info, we should make it disable
just variable information, but keep emitting line number info.<span style="">  </span>This would allow stepping through the
program, getting stack traces, use performance tools like shark, etc.</span></p>

<p class="MsoNormal"><span style="" lang="EN-US"> </span></p>

<p class="MsoNormal"><span style="" lang="EN-US">We need
the front-end llvm-gcc to have a mode that causes it to emit line number info
but not</span></p>

<p class="MsoNormal"><span style="" lang="EN-US">variable
info, we can go through the process above to identify passes that change
behavior when line number intrinsics are in the code.</span></p>

<p class="MsoNormal"><span style="" lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 36pt; text-indent: -36pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">1.3.1<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">   
</span></span></span></b><b style=""><span style="font-size: 14pt;" lang="EN-US">Work Plan</span></b></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">1.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="EN-US">First
locate the file position that llvm-gcc handle the parameter options.</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">2.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="EN-US">Add
a new option to control the llvm-gcc to emit specified debug information: like –g1. –g1 to only emit line number.</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">3.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="EN-US">Building
the new llvm-gcc</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">4.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="EN-US">Testing
through llvm/test, llvm-test</span></p>

<p class="MsoNormal"><span style="" lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style="">2.4<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  </span></span></span></b><b style=""><span style="font-size: 14pt;" lang="EN-US"><span style=""> </span>Phase 4: Update Transform Passes for Line
Number Info.</span></b></p>

<p class="MsoNormal"><span style="" lang="EN-US">When the
front-end has a mode that causes it to emit line number info but not variable
info, we can go through the process above to identify passes that change
behavior when line number intrinsics are in the code.<span style="">  </span>Obvious cases are things like loop unroll and
inlining: they 'measure' the size of some code to determine whether to unroll
it or not. This means that it should be enhanced to ignore debug intrinsics for
the sake of code size estimation.<span style="">  </span></span></p>

<p class="MsoNormal"><span style="" lang="EN-US"> </span></p>

<p class="MsoNormal"><span style="" lang="EN-US">Another
example is optimizations like SimplifyCFG when it merges if/then/else into
select instructions. SimplifyCFG will have to be enhanced to ignore debug intrinsics
when doing its safety/profitability analysis, but then it will also have to be
updated to just delete the line number intrinsics when it does the xform. This
is simplifycfg's way of "updating" the debug info for this example transformation.</span></p>

<p class="MsoNormal"><span style="" lang="EN-US"> </span></p>

<p class="MsoNormal"><span style="" lang="EN-US">As we
progress through various optimizations, we will find cases where it is possible
to update (e.g. loop unroll or inlining, which doesn't have to do anything
special to update line #'s) and places where it isn't.<span style="">  </span>As long as the debug intrinsics don't affect
codegen, we are happy, even if the debug intrinsics are deleted in cases where
it would be possible to update them (this becomes a optimized debugging QoI
issue).</span></p>

<p class="MsoNormal"><span style="" lang="EN-US"> </span></p>

<p class="MsoNormal"><span style="" lang="EN-US"><br></span></p>

<p class="MsoNormal"><span style="" lang="EN-US"> </span></p>

<p class="MsoNormal"><b style=""><span style="font-size: 14pt;" lang="EN-US">3.4.1</span></b><b style=""><span style="font-size: 14pt;" lang="EN-US"> Work
Plan</span></b></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">1.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="EN-US">Update
transform pass mem2reg</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">2.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="EN-US">Testing
through llvm/test, llvm-test</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">3.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="EN-US">Update
transform pass simplifycfg</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">4.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="EN-US">Testing
through llvm/test, llvm-test</span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">5.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">         </span></span></span><span style="" lang="EN-US">Likewise, update
transform passes globalopt, globaldce, ipconstprop, deadargelim, instcombine... </span></p>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><span style="" lang="EN-US"><span style="">6.<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span></span><span style="" lang="EN-US">Update
other passes and testing them.</span></p>

<p></p>