<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1253">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hello Ashutosh,</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thank you for the answer, however, the "compute" function is intended to be compiled in a library, so it cannot be inlined. As you said, it's weird that the first loop vectorizes without the "cannot identify array bounds" problem, which makes us think that
 it's a bug. We have already written more complex code that vectorizes, thus showing us the potential of the auto-vectorizer, which we really need for our project.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Regards,</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Emmanouil<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>Από:</b> Nema, Ashutosh <Ashutosh.Nema@amd.com><br>
<b>Στάλθηκε:</b> Δευτέρα, 26 Αυγούστου 2019 7:53 πμ<br>
<b>Προς:</b> manolis mi <manolismih@windowslive.com><br>
<b>Κοιν.:</b> Stephan Hageboeck <stephan.hageboeck@cern.ch>; llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Θέμα:</b> RE: Vectorization fails when dealing with a lot of for loops.</font>
<div> </div>
</div>
<style>
<!--
@font-face
        {font-family:"Cambria Math"}
@font-face
        {font-family:Calibri}
p.x_MsoNormal, li.x_MsoNormal, div.x_MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif}
a:link, span.x_MsoHyperlink
        {color:blue;
        text-decoration:underline}
a:visited, span.x_MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline}
p.x_MsoListParagraph, li.x_MsoListParagraph, div.x_MsoListParagraph
        {margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif}
p.x_msonormal0, li.x_msonormal0, div.x_msonormal0
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif}
span.x_EmailStyle19
        {font-family:"Calibri",sans-serif;
        color:windowtext}
.x_MsoChpDefault
        {font-size:10.0pt}
@page WordSection1
        {margin:1.0in 1.0in 1.0in 1.0in}
div.x_WordSection1
        {}
-->
</style>
<div lang="EN-US" link="blue" vlink="purple">
<div class="x_WordSection1">
<p class="x_MsoNormal"><span style="font-size:11.0pt; font-family:"Calibri",sans-serif">Hi
</span><span style="font-family:"Calibri",sans-serif; color:black">Emmanouil,</span></p>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black"> </span></p>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black">Seems like when you comment out a loop in “compute” function, it gets inlined, this helps LV by finding the bounds and vectorizes it.</span></p>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black"> </span></p>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black">With the presence of all the loops LAA is not able to identify the bounds for the accesses:</span></p>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black">LAA: Can't find bounds for ptr:  %arrayidx.i159 = getelementptr inbounds double, double* %30, i64 %and.i158, !dbg !46</span></p>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black">LAA: Can't find bounds for ptr:  %arrayidx.i155 = getelementptr inbounds double, double* %36, i64 %and.i154, !dbg !66</span></p>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black">LAA: Can't find bounds for ptr:  %arrayidx.i151 = getelementptr inbounds double, double* %42, i64 %and.i150, !dbg !91</span></p>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black">Its bit strange as its able to identify the bounds correctly for the first loop.</span></p>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black"> </span></p>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black">Without commenting the loop, if you make the “compute” function inline, it gets vectorize:</span></p>
<p class="x_MsoNormal" style="text-indent:.5in"><span style="font-family:"Calibri",sans-serif; color:black">- void compute(  size_t batchSize,</span></p>
<p class="x_MsoNormal" style="text-indent:.5in"><span style="font-family:"Calibri",sans-serif; color:black">+ void inline compute(  size_t batchSize,</span></p>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black"> </span></p>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black">Regards,</span></p>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black">Ashutosh</span></p>
<p class="x_MsoNormal"><span style="font-size:11.0pt; font-family:"Calibri",sans-serif"> </span></p>
<div>
<div style="border:none; border-top:solid #E1E1E1 1.0pt; padding:3.0pt 0in 0in 0in">
<p class="x_MsoNormal"><b><span style="font-size:11.0pt; font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt; font-family:"Calibri",sans-serif"> llvm-dev <llvm-dev-bounces@lists.llvm.org>
<b>On Behalf Of </b>manolis mi via llvm-dev<br>
<b>Sent:</b> Friday, August 23, 2019 9:13 PM<br>
<b>To:</b> via llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Cc:</b> Stephan Hageboeck <stephan.hageboeck@cern.ch><br>
<b>Subject:</b> [llvm-dev] Vectorization fails when dealing with a lot of for loops.</span></p>
</div>
</div>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">[CAUTION: External Email] </p>
<div>
<div>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black">Hello, could you please have a look at this code posted on godbolt.org:</span></p>
</div>
<div>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black"><a href="https://godbolt.org/z/O-O-Q7">https://godbolt.org/z/O-O-Q7</a></span></p>
</div>
<div>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black"> </span></p>
</div>
<div>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black">The problem is that inside the compute function, only the first loop vectorizes while the rest copies of it don't. But if I remove any of the for loops, then the rest vectorize
 successfully. Could you please confirm that this is a bug, otherwise give me more insight on why the vectorization fails? The message "Cannot identify array bounds" is not helpful.</span></p>
</div>
<div>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black"> </span></p>
</div>
<div>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black">Thank you for your time,</span></p>
</div>
<div>
<p class="x_MsoNormal"><span style="font-family:"Calibri",sans-serif; color:black">Emmanouil Michalainas, CERN</span></p>
</div>
</div>
</div>
</div>
</body>
</html>