<div dir="ltr"><font size="-1"><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><div><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-im"><div><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"><div><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><div><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a">Hello everyone,<br></span></div></span></div></span></div></span></span></div></span><br><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-im"><div>During the summer I was working on improving the loop modeling in the <font size="-1">Clang Static Analyzer</font>.</div></span><div>NOTE: The full length report, which also describes various
implementation details and results of quantitative evaluation of the
implemented features, can be found <a href="https://docs.google.com/document/d/1-kHFeVPVzkR_HbE5_yt72Kp_qIoONlmwGf5kyanWsnI/edit" target="_blank">here</a>.<br></div><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-im"><div><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><div><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><div><font color="#000000" face="Arial"><span style="white-space:pre-wrap"></span></font></div></span></div></span><font color="#000000" face="Arial"><span style="white-space:pre-wrap"></span></font></div><div><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><div><br></div><div>1. Motivation and aims:<br>In
the current state of the analyzer, it handles loops quite simple. It
unrolls them 4 times by default and then cut the analysis of that path
where the loop would have been unrolled more times. This behavior is
reached by having a counter for every CFG blocks which determines that
how many times that block was already visited. The analyzer checks it
for every encountered block if the number of visits is more than 4 on
the simulated path. If yes, then it aborts the simulation on that path.<br><font size="-1">The
loss in code coverage is one of the problems with this approach to loop
modeling. Specifically, in cases where the loop bound is statically
known to be greater than 4, the analyzer often did not analyze the code
following the loop. Thus, the naive loop handling (described above)
could lead to unchecked code. Here is a small example for that:</font><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"><br><br><span style="font-family:monospace,monospace">void f() {<br> int a[6];<br> for (int i = 0; i < 6; i++){<span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-im"><br> a[i] = i+2;<br> }<br> //complex body<br>}</span></span></span></div><div><span style="font-family:monospace,monospace"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-im"></span></span><br><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"><font size="-1"><div>In
the above example, because the loop bound is a statically known value,
the analysis will be stopped at the 4th iteration of the loop and the
“complex body” after the loop will not be analyzed.</div></font></span></div></span></div></span></span><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-im"><div><font color="#000000" face="Arial"><span style="white-space:pre-wrap"></span></font><font size="2"><br></font></div><div><font size="2">2. The working process<br></font></div><div><font size="2"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">My work on improving the loop modeling primarily can be divided into 2 tasks:</span></p></span></font><ol><li><font size="2"> L<span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">oop Unrolling - Work up heuristics and AST patterns in order to find specific loops which are worth to be completely unrolled. </span></span></span><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">All patches for this work have been reviewed and committed to the clang repository which are the following:</span></span></span></span></span></span></font></li><ol><li style="list-style-type:circle;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><font size="2"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">The initial implementation: </span><a href="https://reviews.llvm.org/D34260" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">D34260</span></a><a href="https://reviews.llvm.org/D34260" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline"><br></span></a></font></p></li><li style="list-style-type:circle;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><font size="2"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Changed the CFG of the clang compiler to represent loops more directly: </span><a href="https://reviews.llvm.org/D35668" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">D35668</span></a><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"> and </span><a href="https://reviews.llvm.org/D35670" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">D35670</span></a></font></p></li><li style="list-style-type:circle;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><font size="2"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"></span>Update the Loop Unrolling feature to use the newly added CFG affordances: <a href="https://reviews.llvm.org/D35684" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">D35684</span></a></font></p></li></ol><ol><li style="list-style-type:circle;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><font size="2">Evaluated
the option on different C/C++ open source projects, and measured
performance as well as coverage to choose the best defaults.</font></li><font size="2"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"><li dir="ltr" style="list-style-type:circle;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"></span><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">New heuristics and fixes added in: </span><a href="https://reviews.llvm.org/D36962" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">D36962</span></a><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">, </span><a href="https://reviews.llvm.org/D37103" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">D37103</span></a><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">, and </span><a href="https://reviews.llvm.org/D37181" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">D37181</span></a></p></li></span></font></ol><li><font size="2"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Loop Widening - </span>The
Loop Unrolling work laid the infrastructure for future improvements in
loop modeling. In the last part of the summer, I started investigating
approaches to Loop Widening, where the analyzer simulates the execution
of an arbitrary number of iterations. There is already a solution which
reaches this behavior by discarding all of the known information. My aim
was to give a more precise solution/approach for widening. I submitted
the following patches for review:</font></li><ol><font size="2"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"></span><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"></span><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"></span></font></ol><ol><font size="2"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"><li dir="ltr" style="list-style-type:circle;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">The
initial patch which only invalidates the possibly changed variables but
does not handle every possible case. In this scenario if we encounter a
not handled statement we decide not to widen the loop. </span><a href="https://reviews.llvm.org/D36690" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">D36690</span></a></p></li></span></font><li style="list-style-type:circle;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><font size="2"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">In
order to handle nested loops better, the analyzer tries to reanalyze
the loops with a widened state which execution was aborted due to
visiting the same block too many times on a given path. </span><a href="https://reviews.llvm.org/D37108" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">D37108</span></a></font></p></li></ol></ol><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><font size="2"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><br></span></span></font></p><font color="#000000" face="Arial"><span style="white-space:pre-wrap"></span></font></div></span><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-im"><div><font color="#000000" size="2" face="Arial"><span style="white-space:pre-wrap">3. Usage</span></font></div><div><span style="color:rgb(0,0,0)"><font size="2">Currently,
both of the features are hidden behind a flag. In order to use the loop
unrolling feature, the user has to pass the ‘unroll-loops=true’ config
option to the analyzer. </font></span><br></div><div><font size="2">For widening you have to download and apply the patches from the Phabricator and build the clang with these changes.(<span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><a href="https://reviews.llvm.org/D36690" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">D36690</span></a><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-"> </span>and </span><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><a href="https://reviews.llvm.org/D37108" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">D37108</span></a></span>) It is behind the flag 'widen-loops' so you have to pass the config option <span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im">‘widen-loops=true’ to the analyzer in order to use this feature.</span></span></font><font color="#000000" face="Arial"><span style="white-space:pre-wrap"><br></span></font></div></span><div><br><font color="#000000" face="Arial"><span style="white-space:pre-wrap"><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7204287082421752369gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><div><font color="#000000" face="Arial"><span style="white-space:pre-wrap">4. Results<br></span></font><font size="2"><font color="#000000" face="Arial"><span style="white-space:pre-wrap"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline" id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7204287082421752369gmail-docs-internal-guid-3beff227-2b35-d73b-7e03-17d1c43e0a45">The loop unrolling results were summarized and sent to the cfe-dev mailing list (<a href="http://lists.llvm.org/pipermail/cfe-dev/2017-August/055210.html" target="_blank">link</a></span><a href="http://lists.llvm.org/pipermail/cfe-dev/2017-August/055210.html" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline"></span></a><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">). The feature increased the coverage of the analysis by 2.3% in average on the investigated projects while the analysis time remained the same (or even went down). </span></span></font></font><font size="2"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Based on these results I would suggest using the loop unrolling feature by default.</span></font></div><div><br><font size="2"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"></span></font><font size="2"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline" id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7204287082421752369gmail-docs-internal-guid-3beff227-2b35-ffbe-4586-d1465c97720f"></span></font></div><div><font size="2"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline" id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7204287082421752369gmail-docs-internal-guid-3beff227-2b35-ffbe-4586-d1465c97720f">The widening results and the question about changing the functionality of the flag ‘loop-widening’ was sent to the cfe-dev as well: </span><a href="http://lists.llvm.org/pipermail/cfe-dev/2017-August/055222.html" style="text-decoration:none" target="_blank"><span style="font-family:Arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">link</span></a><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">. </span><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Although has a small observable coverage loss (2.3% in average comparing to Widen) it's offset by the number of the false positives not discovered.</span></font><font size="2"><span style="font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"> In conclusion it would be beneficial to replace the current implementation of the 'widen-loops' option.</span></font></div></span></span></font></div></span></span></font><font size="-1"><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><span class="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-im"><div><font color="#000000" face="Arial"><span style="white-space:pre-wrap"><br></span></font></div></span></span><span id="gmail-m_-2627780802443555686m_-3477317616269947665gmail-m_-1625869114057274350gmail-m_-7182690058629095035m_-4441997822179820351gmail-m_1035283611295478876gmail-m_-6984545879864530803gmail-m_7419939792528279379gmail-docs-internal-guid-7bf810a9-126f-34a8-382c-d1ac8850f04a"><div><font color="#000000" face="Arial"><span style="white-space:pre-wrap">Regards,</span></font></div><div><font color="#000000" face="Arial"><span style="white-space:pre-wrap">Peter Szecsi</span></font></div></span></font></div>