<html><head><style type='text/css'>p { margin: 0; }</style></head><body><div style='font-family: arial,helvetica,sans-serif; font-size: 10pt; color: #000000'><br><hr id="zwchr"><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; color: rgb(0, 0, 0); font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica,Arial,sans-serif; font-size: 12pt;"><b>From: </b>"Ayal via llvm-dev Zaks" <llvm-dev@lists.llvm.org><br><b>To: </b>"LLVM Dev" <llvm-dev@lists.llvm.org><br><b>Sent: </b>Wednesday, September 21, 2016 12:50:34 PM<br><b>Subject: </b>[llvm-dev] RFC: Extending LV to vectorize outerloops<br><br>


<style><!--

@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;}

p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
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:11.0pt;
        font-family:"Calibri",sans-serif;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri",sans-serif;}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle23
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle24
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle25
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle26
        {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:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}

@list l0
        {mso-list-id:630597658;
        mso-list-type:hybrid;
        mso-list-template-ids:-2036853824 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:18.0pt;
        text-indent:-18.0pt;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-18.0pt;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:90.0pt;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:126.0pt;
        text-indent:-18.0pt;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:162.0pt;
        text-indent:-18.0pt;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:198.0pt;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:234.0pt;
        text-indent:-18.0pt;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:270.0pt;
        text-indent:-18.0pt;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:306.0pt;
        text-indent:-9.0pt;}
@list l1
        {mso-list-id:796216097;
        mso-list-type:hybrid;
        mso-list-template-ids:1016515872 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:18.0pt;
        text-indent:-18.0pt;}
@list l1:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-18.0pt;}
@list l1:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:90.0pt;
        text-indent:-9.0pt;}
@list l1:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:126.0pt;
        text-indent:-18.0pt;}
@list l1:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:162.0pt;
        text-indent:-18.0pt;}
@list l1:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:198.0pt;
        text-indent:-9.0pt;}
@list l1:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:234.0pt;
        text-indent:-18.0pt;}
@list l1:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:270.0pt;
        text-indent:-18.0pt;}
@list l1:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:306.0pt;
        text-indent:-9.0pt;}
@list l2
        {mso-list-id:908001806;
        mso-list-type:hybrid;
        mso-list-template-ids:-1471117948 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l2:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:18.0pt;
        text-indent:-18.0pt;}
@list l2:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-18.0pt;}
@list l2:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:90.0pt;
        text-indent:-9.0pt;}
@list l2:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:126.0pt;
        text-indent:-18.0pt;}
@list l2:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:162.0pt;
        text-indent:-18.0pt;}
@list l2:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:198.0pt;
        text-indent:-9.0pt;}
@list l2:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:234.0pt;
        text-indent:-18.0pt;}
@list l2:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:270.0pt;
        text-indent:-18.0pt;}
@list l2:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:306.0pt;
        text-indent:-9.0pt;}
@list l3
        {mso-list-id:1045060171;
        mso-list-type:hybrid;
        mso-list-template-ids:-2036853824 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l3:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:18.0pt;
        text-indent:-18.0pt;}
@list l3:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:54.0pt;
        text-indent:-18.0pt;}
@list l3:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:90.0pt;
        text-indent:-9.0pt;}
@list l3:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:126.0pt;
        text-indent:-18.0pt;}
@list l3:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:162.0pt;
        text-indent:-18.0pt;}
@list l3:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:198.0pt;
        text-indent:-9.0pt;}
@list l3:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:234.0pt;
        text-indent:-18.0pt;}
@list l3:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:270.0pt;
        text-indent:-18.0pt;}
@list l3:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:306.0pt;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style>

<div class="WordSection1">
<p class="MsoPlainText"><a name="_____replyseparator"></a><i><span style="font-size: 10pt; font-family: "Courier New";">Proposal for extending the Loop Vectorizer to handle Outer Loops</span></i></p>
<p class="MsoPlainText"><i><span style="font-size: 10pt; font-family: "Courier New";">================================================================</span></i></p>
<p class="MsoPlainText"><i><span style="font-size: 10pt; font-family: "Courier New";">Goal:</span></i></p>
<p class="MsoPlainText"><i><span style="font-size: 10pt; font-family: "Courier New";">-----</span></i></p>
<p class="MsoPlainText"><i><span id="DWT12659" style="font-size: 10pt; font-family: "Courier New";">We propose to extend the innermost Loop Vectorizer to also handle outerloops (cf.[1]). Our aim is to best leverage the efforts already invested in the existing innermost Loop
 Vectorizer rather than introduce a separate pass dedicated to outerloop vectorization.</span></i></p></div></blockquote>Good; I think it is important that we aim for incremental progress here; taking advantage of the existing infrastructure where reasonable.<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; color: rgb(0, 0, 0); font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica,Arial,sans-serif; font-size: 12pt;"><div class="WordSection1"><p class="MsoPlainText"><i><span id="DWT12660" style="font-size: 10pt; font-family: "Courier New";"> This proposal will support explicit vector programming of loops and functions [2]. It also facilitates evaluating multiple vectorization candidates, including both outer
 and innermost loops, to choose the most profitable ones.</span></i></p>
<p class="MsoPlainText"><i><span style="font-size: 10pt; font-family: "Courier New";"> </span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";">Background:</span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";">-----------</span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";">The current Loop Vectorizer is confined to handle only innermost loops. In order to extend it to also handle outerloops the following design decisions need to be reworked:</span></i></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">1.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span style="font-size: 10pt; font-family: "Courier New";">The resulting vectorized loop is inherently designed to contain a *<b>single</b>* basic block. This poses an issue today, as innermost loops
 may benefit from retaining some internal branches when vectorized. For outerloops this clearly cannot hold – the resulting vectorized loop will contain more than a single basic block as it will contain innerloops.</span></i></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">2.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span style="font-size: 10pt; font-family: "Courier New";">There is inherently a single vectorization candidate with a single dimension of optimization – namely the Vectorization Factor and/or Unrolling
 Factor of the innermost loop. When dealing with outerloops it is important to evaluate multiple vectorization candidates – including both outer and inner loops, and their respective VF/UF’s.</span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";"> </span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";">The current Loop Vectorizer works in the following three main steps:</span></i></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">1.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span style="font-size: 10pt; font-family: "Courier New";">Legal Step: check if loop can be legally vectorized; encode constraints and artifacts if so.</span></i></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">2.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span style="font-size: 10pt; font-family: "Courier New";">Cost Step: compute the relative cost of vectorizing it along possible vectorization and unroll factors.</span></i></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">3.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span style="font-size: 10pt; font-family: "Courier New";">Transform Step: vectorize the loop according to best vectorization and unroll factors.</span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";"> </span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";">This design has some implications:</span></i></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">1.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span style="font-size: 10pt; font-family: "Courier New";">Cost Step tries to predict what the vectorized loop will look like and how much it will cost, independently of what the Transform Step will
 eventually do. It’s hard to keep the two in sync, enforcing  the comment placed at the beginning of Transform Step:<br>
// Notice: any optimization or new instruction that go<br>
// into the code below should be also be implemented in<br>
// the cost-model.</span></i></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">2.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span style="font-size: 10pt; font-family: "Courier New";">Legal Step does more than check for vectorizability; e.g., it records auxiliary artifacts such as collectLoopUniforms() and InterleaveInfo.</span></i></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">3.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span style="font-size: 10pt; font-family: "Courier New";">Transform Step first populates the single basic block of the vectorized loop and later revisits scalarized instructions to predicate them one
 by one, as needed.</span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";"> </span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";">Proposal: introduce the Vectorization Plan as an explicit model of a vectorization candidate and update the overall flow:</span></i></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">1.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span style="font-size: 10pt; font-family: "Courier New";">Legal Step: check if loop can be legally vectorized, encode constraints by initiating Vectorization Plan(s) if so.</span></i></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">2.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span style="font-size: 10pt; font-family: "Courier New";">Plan Step:</span></i></p>
<p class="MsoListParagraph" style="margin-left: 54pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">a.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span style="font-size: 10pt; font-family: "Courier New";">Build initial vectorization plans complying with all legal constraints.</span></i></p>
<p class="MsoListParagraph" style="margin-left: 54pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">b.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span style="font-size: 10pt; font-family: "Courier New";">Optimize vectorization plans.
</span></i></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">3.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span style="font-size: 10pt; font-family: "Courier New";">Cost Step: compute the relative cost of each plan. This step can be applied repeatedly by Plan Optimize Step 2.b.</span></i></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;">
<i><span style="font-size: 10pt; font-family: "Courier New";"><span style="">4.<span style="font: 7pt "Times New Roman";"> 
</span></span></span></i><span dir="LTR"></span><i><span id="DWT12838" style="font-size: 10pt; font-family: "Courier New";">Transform Step: materialize the best plan. Note that only this step modifies the IR, as in the current Loop Vectorizer.</span></i></p></div></blockquote>This is also important: We should not speculatively modify the IR.<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; color: rgb(0, 0, 0); font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica,Arial,sans-serif; font-size: 12pt;"><div class="WordSection1">
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";"> </span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";">The Vectorization Plan is a recipe describing the vectorization candidate, including for instance its internal control-flow. It serves for both estimating the cost and for performing
 the translation, and facilitates dealing with multiple vectorization candidates. One can compare with LLVM’s existing SLP vectorizer, where TSLP [3] adds step 2.b.</span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";"> </span></i></p>
<p class="MsoNormal"><i><span id="DWT12840" style="font-size: 10pt; font-family: "Courier New";">As the scope of vectorization grows from innermost to outer loops, so do the uncertainty and complexity of each step. One way to mitigate the shortcomings of the Legal and Cost
 steps is to rely on programmers to indicate which loops can and/or should be vectorized. This is implicit for certain loops in data-parallel languages such as OpenCL [4,5] and explicit in others such as OpenMP [6]. This proposal to extend the Loop Vectorizer
 to outer loops supports and raises the importance of explicit vectorization beyond the current capabilities of Clang and LLVM. Namely, from currently forcing the vectorization of innermost loops according to prescribed width and/or interleaving count, to supporting
 OpenMP’s “#pragma omp simd” construct and associated clauses, including our earlier proposal for vectorizing across function boundaries [2].</span></i></p></div></blockquote>Our current metadata scheme for controlling the loop vectorizer should prove easy to extend, if extension is necessary at all, to provide explicitly vectorization factors, etc. for various loop-nest levels.<br><br>When we have profiling data, or can statically determine the inner-loop trip counts, then it should also be possible to reasonably decide on outer-loop vectorization. We'll need to put some thought into how to collect inner-loop trip counts from profiling data when the code is outer-loop vectorized. There may also be cases where outer-loop vectorization always seem more profitable, but we obviously can't evaluate an exponential number of potential vectorization plans, so we'll need to design some heuristic (perhaps based on reductions, consecutive memory accesses, etc.) to limit the search space.<br><br>This is an important capability; thanks for pursuing it!<br><br> -Hal<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; color: rgb(0, 0, 0); font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica,Arial,sans-serif; font-size: 12pt;"><div class="WordSection1"><p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";"></span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";"> </span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";"> </span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";">Comments on this overall approach are welcome. The first patches we’re working on are designed to have the innermost Loop Vectorizer explicitly model the control flow of its vectorized
 loop. More will be presented in our technical talk at the upcoming LLVM Developers' Meeting.</span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";"> </span></i></p>
<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: "Courier New";"> </span></i></p>
<p class="MsoPlainText"><i><span style="font-size: 10pt; font-family: "Courier New";">References:</span></i></p>
<p class="MsoPlainText"><i><span style="font-size: 10pt; font-family: "Courier New";">-----------</span></i></p>
<p class="MsoPlainText"><i><span style="font-size: 10pt; font-family: "Courier New";">[1] “Outer-loop vectorization: revisited for short SIMD architectures”, Dorit Nuzman and Ayal Zaks, PACT 2008.</span></i></p>
<p class="MsoPlainText" style="margin-right: 1.5pt;"><i><span style="font-size: 10pt; font-family: "Courier New";">[2] “Proposal for function vectorization and loop vectorization with function calls”, Xinmin Tian, [cfe-dev] March 2, 2016 (</span></i><a href="http://lists.llvm.org/pipermail/cfe-dev/2016-March/047732.html" target="_blank"><i><span style="font-size: 10pt; font-family: "Courier New"; color: windowtext; text-decoration: none;">http://lists.llvm.org/pipermail/cfe-dev/2016-March/047732.html</span></i></a><i><span style="font-size: 10pt; font-family: "Courier New";">.
 See also </span></i><a href="https://reviews.llvm.org/D22792" target="_blank"><i><span style="font-size: 10pt; font-family: "Courier New"; color: windowtext; text-decoration: none;">https://reviews.llvm.org/D22792</span></i></a><i><span style="font-size: 10pt; font-family: "Courier New";">).</span></i></p>
<p class="MsoPlainText" style="margin-right: 1.5pt;"><i><span style="font-size: 10pt; font-family: "Courier New";">[3] “Throttling Automatic Vectorization: When Less is More”, Vasileios Porpodas and Tim Jones, PACT 2015 and LLVM Developers' Meeting 2015.</span></i></p>
<p class="MsoPlainText"><i><span style="font-size: 10pt; font-family: "Courier New";">[4] “Intel OpenCL SDK Vectorizer”, Nadav Rotem, LLVM Developers' Meeting 2011.</span></i></p>
<p class="MsoPlainText"><i><span style="font-size: 10pt; font-family: "Courier New";">[5] “Automatic SIMD Vectorization of SSA-based Control Flow Graphs”, Ralf Karrenberg, Springer 2015. See also “Improving Performance of OpenCL on CPUs”, LLVM Developers' Meeting
 2012.</span></i></p>
<p class="MsoPlainText"><i><span style="font-size: 10pt; font-family: "Courier New";">[6] “Compiling C/C++ SIMD Extensions for Function and Loop Vectorization on Multicore-SIMD Processors”, Xinmin Tian and Hideki Saito et al., IPDPSW 2012.</span></i></p>
</div>
<p>---------------------------------------------------------------------<br>
Intel Israel (74) Limited</p>

<p>This e-mail and any attachments may contain confidential material for<br>
the sole use of the intended recipient(s). Any review or distribution<br>
by others is strictly prohibited. If you are not the intended<br>
recipient, please contact the sender and delete all copies.</p><br>_______________________________________________<br>LLVM Developers mailing list<br>llvm-dev@lists.llvm.org<br>http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev<br></blockquote><br><br><br>-- <br><div><span name="x"></span>Hal Finkel<br>Lead, Compiler Technology and Programming Languages<br>Leadership Computing Facility<br>Argonne National Laboratory<span name="x"></span><br></div></div></body></html>