<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">  </span>.text</div><div><span style="white-space:pre"> </span>.file<span style="white-space:pre">        </span>"filer_o3.ll"</div><div><span style="white-space:pre">       </span>.globl<span style="white-space:pre">       </span>foo</div><div><span style="white-space:pre">   </span>.p2align<span style="white-space:pre">     </span>4, 0x90</div><div><span style="white-space:pre">       </span>.type<span style="white-space:pre">        </span>foo,@function</div><div>foo:                                    # @foo</div><div><span style="white-space:pre">  </span>.cfi_startproc</div><div># BB#0:                                 # %min.iters.checked</div><div><span style="white-space:pre">     </span>pushq<span style="white-space:pre">        </span>%rbp</div><div>.Ltmp0:</div><div><span style="white-space:pre">    </span>.cfi_def_cfa_offset 16</div><div>.Ltmp1:</div><div><span style="white-space:pre">  </span>.cfi_offset %rbp, -16</div><div><span style="white-space:pre"> </span>movq<span style="white-space:pre"> </span>%rsp, %rbp</div><div>.Ltmp2:</div><div><span style="white-space:pre">      </span>.cfi_def_cfa_register %rbp</div><div><span style="white-space:pre">    </span>movq<span style="white-space:pre"> </span>$-1024, %rax            # imm = 0xFC00</div><div><span style="white-space:pre">  </span>.p2align<span style="white-space:pre">     </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">      </span>vmovdqa32<span style="white-space:pre">    </span>c+1024(%rax), %xmm0</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre">     </span>vmovdqa32<span style="white-space:pre">    </span>c+1040(%rax), %xmm1</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre">     </span>vpaddd<span style="white-space:pre">       </span>b+1024(%rax), %xmm0, %xmm0</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre">      </span>vpaddd<span style="white-space:pre">       </span>b+1040(%rax), %xmm1, %xmm1</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre">      </span>vmovdqa32<span style="white-space:pre">    </span>%xmm0, a+1024(%rax)</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre">     </span>vmovdqa32<span style="white-space:pre">    </span>%xmm1, a+1040(%rax)</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre">     </span>vmovdqa32<span style="white-space:pre">    </span>c+1056(%rax), %xmm0</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre">     </span>vmovdqa32<span style="white-space:pre">    </span>c+1072(%rax), %xmm1</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre">     </span>vpaddd<span style="white-space:pre">       </span>b+1056(%rax), %xmm0, %xmm0</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre">      </span>vpaddd<span style="white-space:pre">       </span>b+1072(%rax), %xmm1, %xmm1</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre">      </span>vmovdqa32<span style="white-space:pre">    </span>%xmm0, a+1056(%rax)</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre">     </span>vmovdqa32<span style="white-space:pre">    </span>%xmm1, a+1072(%rax)</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre">     </span>addq<span style="white-space:pre"> </span>$64, %rax</font></b></div><div><b><font color="#0000ff"><span style="white-space:pre">       </span>jne<span style="white-space:pre">  </span>.LBB0_1</font></b></div><div># BB#2:                                 # %middle.block</div><div><span style="white-space:pre">  </span>popq<span style="white-space:pre"> </span>%rbp</div><div><span style="white-space:pre">  </span>retq</div><div>.Lfunc_end0:</div><div><span style="white-space:pre">       </span>.size<span style="white-space:pre">        </span>foo, .Lfunc_end0-foo</div><div><span style="white-space:pre">  </span>.cfi_endproc</div><div><br></div><div><span style="white-space:pre"> </span>.type<span style="white-space:pre">        </span>b,@object               # @b</div><div><span style="white-space:pre">   </span>.comm<span style="white-space:pre">        </span>b,1024,16</div><div><span style="white-space:pre">     </span>.type<span style="white-space:pre">        </span>c,@object               # @c</div><div><span style="white-space:pre">   </span>.comm<span style="white-space:pre">        </span>c,1024,16</div><div><span style="white-space:pre">     </span>.type<span style="white-space:pre">        </span>a,@object               # @a</div><div><span style="white-space:pre">   </span>.comm<span style="white-space:pre">        </span>a,1024,16</div><div><br></div><div><span style="white-space:pre">    </span>.ident<span style="white-space:pre">       </span>"clang version 3.9.0 (tags/RELEASE_390/final)"</div><div><span style="white-space:pre">      </span>.section<span style="white-space:pre">     </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>