<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><span class=""><div>I see vectorization happening on this example (see below).<br></div></span><span class=""><div><br></div><br><blockquote type="cite"><div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>Any help is appreciated.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word"><div><span><font color="#888888"><div><br></div><span><font color="#888888"><div>-- </div><div>Mehdi</div></font></span></font></span></div></div></blockquote></div><span><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr"><div><div dir="ltr"><div>Rail Shafigulin<br></div>Software Engineer <br>Esencia Technologies<br></div></div></div></div>
</span></div></div>
</blockquote></div><br>Forgot to attach a C file. Here it is:</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra">#define N 32</div><div class="gmail_extra"><br></div><div class="gmail_extra">int main () {</div><div class="gmail_extra"><br></div><div class="gmail_extra">  int  a[N], b[N];</div><div class="gmail_extra">  int c[N];</div><div class="gmail_extra"><br></div><div class="gmail_extra">  for (int i = 0; i < N; ++i)</div><div class="gmail_extra">       c[i] = a[i] + b[i];</div><div class="gmail_extra"><br></div><div class="gmail_extra">  int sum=0;</div><div class="gmail_extra">  for (int i = 0; i < N; ++i)</div><div class="gmail_extra">       sum += c[i];</div><div class="gmail_extra"><br></div><div class="gmail_extra">  return sum;</div><div class="gmail_extra">}</div><div><br></div></div></div></div></blockquote><div><br></div></span><div>This will be vectorized without any insertelement, here is a few lines extracted from the output of clang on this code:</div><div><br></div><div>  %wide.load8.6 = load <4 x i32>* %48, align 16, !tbaa !2<br>  %49 = add nsw <4 x i32> %wide.load8.6, %wide.load.6<br>  %50 = getelementptr inbounds [32 x i32]* %c, i64 0, i64 24<br>  %51 = bitcast i32* %50 to <4 x i32>*<br>  store <4 x i32> %49, <4 x i32>* %51, align 16, !tbaa !2<br></div></div></blockquote><div> </div><div>Hmm... It didn't work for me. Maybe because I'm running an older version of clang, 3.5 to be exactly. For now I'm stuck with it and can't switch to a newer version.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><br></div><div>Because you didn't write the example as I described it, i.e. taking integer, doing a few arithmetic and writing result to contiguous memory, the vectorizer will be able to load directly vectors from memory, operates on them, and store the results. For example try with the following C code:</div><div><br>void foo (int a1, int a2, int a3, int a4, int b1, int b2, int b3, int b4, int *res) {<br>  res[0] = a1 + b1 * 2;<br>  res[1] = a2 + b2 * 2;<br>  res[2] = a3 + b3 * 2;<br>  res[3] = a4 + b4 * 2;<br>}<br><br></div><div><br></div><div>That's for the clang part, you can look at the vectorizer lit test to have examples of IR before/after vectorization.</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>-- </div><div>Mehdi</div></font></span></div></blockquote></div><div class="gmail_extra"><br></div>I misunderstood you. I thought asked me to create an IR with insertelement in it. I'm going to try your example and see what happens.<br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Rail Shafigulin<br></div>Software Engineer <br>Esencia Technologies<br></div></div></div></div>
</div></div>