<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle23
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:2.0cm 42.5pt 2.0cm 3.0cm;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1059204957;
        mso-list-template-ids:1760094104;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1
        {mso-list-id:1316565920;
        mso-list-type:hybrid;
        mso-list-template-ids:-1782013380 68747265 68747267 68747269 68747265 68747267 68747269 68747265 68747267 68747269;}
@list l1:level1
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l1:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l1:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l1:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l1:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l1:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l1:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l1:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l1:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l2
        {mso-list-id:1366324215;
        mso-list-template-ids:1289548922;}
@list l2:level1
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l2:level2
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l2:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l2:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l2:level5
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l2:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l2:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l2:level8
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l2:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></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 bgcolor="white" lang="RU" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">Let's discuss here
<a href="https://reviews.llvm.org/D51523">https://reviews.llvm.org/D51523</a> <o:p>
</o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext">From:</span></b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext"> Maxim Kazantsev
<br>
<b>Sent:</b> Friday, August 31, 2018 6:29 AM<br>
<b>To:</b> 'Philip Reames' <listmail@philipreames.com>; llvm-commits@lists.llvm.org<br>
<b>Subject:</b> RE: [llvm] r341051 - [NFC] Add severe validation of InstructionPrecedenceTracking<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">Hi Philip,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">Let me try to address your concerns.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l1 level1 lfo2"><![if !supportLists]><span lang="EN-US" style="font-size:11.0pt;font-family:Symbol;color:#1F497D;mso-fareast-language:EN-US"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">We do not expect *all* blocks to be populated all the time and never check it. We do expect that for all blocks
 we claim to have the cached answer this answer is correct.<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l1 level1 lfo2"><![if !supportLists]><span lang="EN-US" style="font-size:11.0pt;font-family:Symbol;color:#1F497D;mso-fareast-language:EN-US"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">Agreed, but it only happens in debug mode.<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l1 level1 lfo2"><![if !supportLists]><span lang="EN-US" style="font-size:11.0pt;font-family:Symbol;color:#1F497D;mso-fareast-language:EN-US"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">We don't have to have a correct state on destructor. We could have changed the block contents without bothering
 to invalidate the ICF because we know that we will no longer make any queries to it. Therefore, the validation on destructor doesn’t sound.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">If you still think it should be reverted, I'll do it.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">Max<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext">From:</span></b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext"> Philip Reames [<a href="mailto:listmail@philipreames.com">mailto:listmail@philipreames.com</a>]
<br>
<b>Sent:</b> Thursday, August 30, 2018 11:16 PM<br>
<b>To:</b> Maxim Kazantsev <<a href="mailto:max.kazantsev@azul.com">max.kazantsev@azul.com</a>>;
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<b>Subject:</b> Re: [llvm] r341051 - [NFC] Add severe validation of InstructionPrecedenceTracking<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p>Max,<o:p></o:p></p>
<p>I see a couple of problems with this patch, please revert so that we can discuss in a review thread.<o:p></o:p></p>
<p>Problems:<o:p></o:p></p>
<ul type="disc">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo5">
The implemented validation appears to expect all blocks with special instructions to be populated at all times.  This appears inconsistent the lazy semantics elsewhere.<o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo5">
The validation on getFirstSpecialInstruction is too heavyweight.  We need a checker check there.<o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo5">
We're not validating on destruction which is the entire point.<o:p></o:p></li></ul>
<p>Philip<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On 08/30/2018 03:26 AM, Max Kazantsev via llvm-commits wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre>Author: mkazantsev<o:p></o:p></pre>
<pre>Date: Thu Aug 30 03:26:06 2018<o:p></o:p></pre>
<pre>New Revision: 341051<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=341051&view=rev">http://llvm.org/viewvc/llvm-project?rev=341051&view=rev</a><o:p></o:p></pre>
<pre>Log:<o:p></o:p></pre>
<pre>[NFC] Add severe validation of InstructionPrecedenceTracking<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Modified:<o:p></o:p></pre>
<pre>    llvm/trunk/include/llvm/Analysis/InstructionPrecedenceTracking.h<o:p></o:p></pre>
<pre>    llvm/trunk/lib/Analysis/InstructionPrecedenceTracking.cpp<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Modified: llvm/trunk/include/llvm/Analysis/InstructionPrecedenceTracking.h<o:p></o:p></pre>
<pre>URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/InstructionPrecedenceTracking.h?rev=341051&r1=341050&r2=341051&view=diff">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/InstructionPrecedenceTracking.h?rev=341051&r1=341050&r2=341051&view=diff</a><o:p></o:p></pre>
<pre>==============================================================================<o:p></o:p></pre>
<pre>--- llvm/trunk/include/llvm/Analysis/InstructionPrecedenceTracking.h (original)<o:p></o:p></pre>
<pre>+++ llvm/trunk/include/llvm/Analysis/InstructionPrecedenceTracking.h Thu Aug 30 03:26:06 2018<o:p></o:p></pre>
<pre>@@ -37,6 +37,15 @@ class InstructionPrecedenceTracking {<o:p></o:p></pre>
<pre>   // Fills information about the given block's special instructions.<o:p></o:p></pre>
<pre>   void fill(const BasicBlock *BB);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+  #ifndef NDEBUG<o:p></o:p></pre>
<pre>+  /// Asserts whether or not the contents of this tracking is up-to-date. It can<o:p></o:p></pre>
<pre>+  /// be used to detect situations where we failed to invalidate the map<o:p></o:p></pre>
<pre>+  /// properly. The behavior of request to an invalid tracking is undefined, and<o:p></o:p></pre>
<pre>+  /// we should avoid such situations. It is slow and should only be called in<o:p></o:p></pre>
<pre>+  /// debug mode.<o:p></o:p></pre>
<pre>+  void validate() const;<o:p></o:p></pre>
<pre>+#endif<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre> protected:<o:p></o:p></pre>
<pre>   InstructionPrecedenceTracking(DominatorTree *DT)<o:p></o:p></pre>
<pre>       : OI(OrderedInstructions(DT)) {}<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Modified: llvm/trunk/lib/Analysis/InstructionPrecedenceTracking.cpp<o:p></o:p></pre>
<pre>URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/InstructionPrecedenceTracking.cpp?rev=341051&r1=341050&r2=341051&view=diff">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/InstructionPrecedenceTracking.cpp?rev=341051&r1=341050&r2=341051&view=diff</a><o:p></o:p></pre>
<pre>==============================================================================<o:p></o:p></pre>
<pre>--- llvm/trunk/lib/Analysis/InstructionPrecedenceTracking.cpp (original)<o:p></o:p></pre>
<pre>+++ llvm/trunk/lib/Analysis/InstructionPrecedenceTracking.cpp Thu Aug 30 03:26:06 2018<o:p></o:p></pre>
<pre>@@ -25,6 +25,11 @@ using namespace llvm;<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> const Instruction *InstructionPrecedenceTracking::getFirstSpecialInstruction(<o:p></o:p></pre>
<pre>     const BasicBlock *BB) {<o:p></o:p></pre>
<pre>+#ifndef NDEBUG<o:p></o:p></pre>
<pre>+  // Make sure that we are making this request to tracking which is up-to-date.<o:p></o:p></pre>
<pre>+  validate();<o:p></o:p></pre>
<pre>+#endif<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>   if (!KnownBlocks.count(BB))<o:p></o:p></pre>
<pre>     fill(BB);<o:p></o:p></pre>
<pre>   auto *FirstICF = FirstSpecialInsts.lookup(BB);<o:p></o:p></pre>
<pre>@@ -56,6 +61,36 @@ void InstructionPrecedenceTracking::fill<o:p></o:p></pre>
<pre>   KnownBlocks.insert(BB);<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+#ifndef NDEBUG<o:p></o:p></pre>
<pre>+void InstructionPrecedenceTracking::validate() const {<o:p></o:p></pre>
<pre>+  unsigned NumNoSpecialBlocks = 0;<o:p></o:p></pre>
<pre>+  // Check that for every known block we have something cached for it.<o:p></o:p></pre>
<pre>+  for (auto *BB : KnownBlocks) {<o:p></o:p></pre>
<pre>+    auto It = FirstSpecialInsts.find(BB);<o:p></o:p></pre>
<pre>+    bool BlockHasSpecialInsns = false;<o:p></o:p></pre>
<pre>+    for (const Instruction &Insn : *BB) {<o:p></o:p></pre>
<pre>+      if (isSpecialInstruction(&Insn)) {<o:p></o:p></pre>
<pre>+        assert(It != FirstSpecialInsts.end() &&<o:p></o:p></pre>
<pre>+               "Blocked marked as known but we have no cached value for it!");<o:p></o:p></pre>
<pre>+        assert(It->second == &Insn &&<o:p></o:p></pre>
<pre>+               "Cached first special instruction is wrong!");<o:p></o:p></pre>
<pre>+        BlockHasSpecialInsns = true;<o:p></o:p></pre>
<pre>+        break;<o:p></o:p></pre>
<pre>+      }<o:p></o:p></pre>
<pre>+    }<o:p></o:p></pre>
<pre>+    if (!BlockHasSpecialInsns) {<o:p></o:p></pre>
<pre>+      assert(It == FirstSpecialInsts.end() &&<o:p></o:p></pre>
<pre>+             "Block is marked as having special instructions but in fact it "<o:p></o:p></pre>
<pre>+             "has none!");<o:p></o:p></pre>
<pre>+      ++NumNoSpecialBlocks;<o:p></o:p></pre>
<pre>+    }<o:p></o:p></pre>
<pre>+  }<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+  assert(KnownBlocks.size() == NumNoSpecialBlocks + FirstSpecialInsts.size() &&<o:p></o:p></pre>
<pre>+         "We don't have info for some blocks?");<o:p></o:p></pre>
<pre>+}<o:p></o:p></pre>
<pre>+#endif<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre> void InstructionPrecedenceTracking::invalidateBlock(const BasicBlock *BB) {<o:p></o:p></pre>
<pre>   OI.invalidateBlock(BB);<o:p></o:p></pre>
<pre>   FirstSpecialInsts.erase(BB);<o:p></o:p></pre>
<pre>@@ -67,6 +102,10 @@ void InstructionPrecedenceTracking::clea<o:p></o:p></pre>
<pre>     OI.invalidateBlock(It.first);<o:p></o:p></pre>
<pre>   FirstSpecialInsts.clear();<o:p></o:p></pre>
<pre>   KnownBlocks.clear();<o:p></o:p></pre>
<pre>+#ifndef NDEBUG<o:p></o:p></pre>
<pre>+  // The map should be valid after clearing (at least empty).<o:p></o:p></pre>
<pre>+  validate();<o:p></o:p></pre>
<pre>+#endif<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> bool ImplicitControlFlowTracking::isSpecialInstruction(<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre><o:p> </o:p></pre>
<pre>_______________________________________________<o:p></o:p></pre>
<pre>llvm-commits mailing list<o:p></o:p></pre>
<pre><a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><o:p></o:p></pre>
<pre><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><o:p></o:p></pre>
</blockquote>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>