<div dir="auto"><div style="font-family:sans-serif;font-size:16px" dir="auto">when i generate code with 72 loop iterations.</div><div style="font-family:sans-serif;font-size:16px" dir="auto"><br></div><div style="font-family:sans-serif;font-size:16px" dir="auto">the compiler generates code with using avx512 zmm operations 4 times (16x4=64) and remaining 8 iterations are handled by routine mov operations with EAX register. wouldn't it be better if it uses ymm for remaining 8 iterations as it does when iteration count is between 8 and 15. same for xmm and so on.</div><div style="font-family:sans-serif;font-size:16px" dir="auto"><br></div><div style="font-family:sans-serif;font-size:16px" dir="auto"><br></div><div style="font-family:sans-serif;font-size:16px" dir="auto">please correct me if i am wrong.</div><div style="font-family:sans-serif;font-size:16px" dir="auto"><br></div><div style="font-family:sans-serif;font-size:16px" dir="auto"><br></div><div style="font-family:sans-serif;font-size:16px" dir="auto">Thank You</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Jun 21, 2017 12:21 AM, "hameeza ahmed" <<a href="mailto:hahmed2305@gmail.com">hahmed2305@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello,<div><br></div><div>I am using llvm  on my core i7 laptop which has no avx support.</div><div><br></div><div>my goal is to generate avx512 code (loop vectorization) for  Knight landing/skylake .  </div><div><br></div><div><br></div><div><br></div><div>my .c code is;</div><div><br></div><div><div>int a[256], b[256], c[256];</div><div>foo () {</div><div>int i;</div><div>for (i=0; i<256; i++) {</div><div>a[i] = b[i] + c[i];</div><div>}</div><div>}</div></div><div><br></div><div>i first generated its .ll file via clang </div><div><br></div><div>clang -S  -emit-llvm test.c -o test.ll<br></div><div><br></div><div>then i optimized it;</div><div><br></div><div>opt -S -O3 test.ll -o test_o3.ll<br></div><div><br></div><div>then i used llc for code generation</div><div><br></div><div>llc -mcpu=skylake-avx512 -mattr=+avx512f test_o3.ll -o test_o3.s<br></div><div><br></div><div>llc -mcpu=knl -mattr=+avx512f test_o3.ll -o test_o3.s<br></div><div><br></div><div><br></div><div>here is my generated code;</div><div><br></div><div><br></div><div><br></div><div><div><span style="white-space:pre-wrap">        </span>.text</div><div><span style="white-space:pre-wrap">    </span>.file<span style="white-space:pre-wrap">   </span>"filer_o3.ll"</div><div><span style="white-space:pre-wrap">  </span>.globl<span style="white-space:pre-wrap">  </span>foo</div><div><span style="white-space:pre-wrap">      </span>.p2align<span style="white-space:pre-wrap">        </span>4, 0x90</div><div><span style="white-space:pre-wrap">  </span>.type<span style="white-space:pre-wrap">   </span>foo,@function</div><div>foo:                                    # @foo</div><div><span style="white-space:pre-wrap">     </span>.cfi_startproc</div><div># BB#0:                                 # %min.iters.checked</div><div><span style="white-space:pre-wrap">        </span>pushq<span style="white-space:pre-wrap">   </span>%rbp</div><div>.Ltmp0:</div><div><span style="white-space:pre-wrap">       </span>.cfi_def_cfa_offset 16</div><div>.Ltmp1:</div><div><span style="white-space:pre-wrap">     </span>.cfi_offset %rbp, -16</div><div><span style="white-space:pre-wrap">    </span>movq<span style="white-space:pre-wrap">    </span>%rsp, %rbp</div><div>.Ltmp2:</div><div><span style="white-space:pre-wrap"> </span>.cfi_def_cfa_register %rbp</div><div><span style="white-space:pre-wrap">       </span>movq<span style="white-space:pre-wrap">    </span>$-1024, %rax            # imm = 0xFC00</div><div><span style="white-space:pre-wrap">     </span>.p2align<span style="white-space:pre-wrap">        </span>4, 0x90</div><div>.<b><font color="#0000ff">LBB0_1:                                # %vector.body</font></b></div><div><b><font color="#0000ff">                                        # =>This Inner Loop Header: Depth=1</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap"> </span>vmovdqa32<span style="white-space:pre-wrap">       </span>c+1024(%rax), %xmm0</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap">        </span>vmovdqa32<span style="white-space:pre-wrap">       </span>c+1040(%rax), %xmm1</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap">        </span>vpaddd<span style="white-space:pre-wrap">  </span>b+1024(%rax), %xmm0, %xmm0</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap"> </span>vpaddd<span style="white-space:pre-wrap">  </span>b+1040(%rax), %xmm1, %xmm1</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap"> </span>vmovdqa32<span style="white-space:pre-wrap">       </span>%xmm0, a+1024(%rax)</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap">        </span>vmovdqa32<span style="white-space:pre-wrap">       </span>%xmm1, a+1040(%rax)</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap">        </span>vmovdqa32<span style="white-space:pre-wrap">       </span>c+1056(%rax), %xmm0</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap">        </span>vmovdqa32<span style="white-space:pre-wrap">       </span>c+1072(%rax), %xmm1</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap">        </span>vpaddd<span style="white-space:pre-wrap">  </span>b+1056(%rax), %xmm0, %xmm0</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap"> </span>vpaddd<span style="white-space:pre-wrap">  </span>b+1072(%rax), %xmm1, %xmm1</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap"> </span>vmovdqa32<span style="white-space:pre-wrap">       </span>%xmm0, a+1056(%rax)</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap">        </span>vmovdqa32<span style="white-space:pre-wrap">       </span>%xmm1, a+1072(%rax)</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap">        </span>addq<span style="white-space:pre-wrap">    </span>$64, %rax</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre-wrap">  </span>jne<span style="white-space:pre-wrap">     </span>.LBB0_1</font></b></div><div># BB#2:                                 # %middle.block</div><div><span style="white-space:pre-wrap">     </span>popq<span style="white-space:pre-wrap">    </span>%rbp</div><div><span style="white-space:pre-wrap">     </span>retq</div><div>.Lfunc_end0:</div><div><span style="white-space:pre-wrap">  </span>.size<span style="white-space:pre-wrap">   </span>foo, .Lfunc_end0-foo</div><div><span style="white-space:pre-wrap">     </span>.cfi_endproc</div><div><br></div><div><span style="white-space:pre-wrap">    </span>.type<span style="white-space:pre-wrap">   </span>b,@object               # @b</div><div><span style="white-space:pre-wrap">      </span>.comm<span style="white-space:pre-wrap">   </span>b,1024,16</div><div><span style="white-space:pre-wrap">        </span>.type<span style="white-space:pre-wrap">   </span>c,@object               # @c</div><div><span style="white-space:pre-wrap">      </span>.comm<span style="white-space:pre-wrap">   </span>c,1024,16</div><div><span style="white-space:pre-wrap">        </span>.type<span style="white-space:pre-wrap">   </span>a,@object               # @a</div><div><span style="white-space:pre-wrap">      </span>.comm<span style="white-space:pre-wrap">   </span>a,1024,16</div><div><br></div><div><span style="white-space:pre-wrap">       </span>.ident<span style="white-space:pre-wrap">  </span>"clang version 3.9.0 (tags/RELEASE_390/final)"</div><div><span style="white-space:pre-wrap"> </span>.section<span style="white-space:pre-wrap">        </span>".note.GNU-stack","",@progbits</div></div><div><br></div><div>in the generated code although there is use of vmov... instructions but no zmm register? only xmm registers.</div><div><br></div><div><br></div><div>Can you please specify where i am wrong. i have tried it several times by different parameters but always get xmm registers.</div><div><br></div><div><br></div><div>Thank You</div></div>
</blockquote></div></div>