Hello,

Thanks for the note.

I am still not completely sure what the problem is.

You wrote:

 | I found
 |
 | // triple: i686-pc-linux-gnu
 | static const CpuAttrs attrs1[] = {
 | // first entry is default cpu
 | { "i686", "+cx8,+x87"},
 |
 | and (inside the hashmap)
 |
 | { "yonah", "+cx8,+fxsr,+mmx,+sse,+sse2,+sse3,+x87"},
 | , which is not what I have supported (for Intel Celeron M440).

What makes you say that this is not what you have supported? Are you
saying that the cpu clang calls "yonah" doesn't actually have one of these
features (ex: sse3)?

 | Clang reports "unsupported CPU features" on any non-provided one.
 | So that is one big problem.

Not sure what you mean here. Can you please post the complete clang
invocation and error message you are getting?


 | const TripleCpus triples[] = {
 | { "x86_64-unknown-linux-gnu", &attrs0[0] },
 | { "i686-pc-linux-gnu", &attrs1[0] },
 | { "aarch64-unknown-linux-gnu", &attrs2[0] },
 | { "", nullptr } // sentinel
 | };
 | is not targeting to yonah, while llc is targeting it.
 | It is always some "default" CPU model and, in fact, your code never
provided extraction of the CPU model (from llc).
 |

When llc emits the line

  Host CPU: yonah

this does not mean that clang/llc will automatically target 'yonah' when
compiling, it just means that the program has detected the host CPU.

Generally speaking if you want clang to produce code targeted specifically
to the host CPU, you have to use -march=native or -mtune-native.

Thanks, Than

On Fri, Dec 4, 2020 at 8:08 PM Ivan Serdyuk <local.tourist.k...@gmail.com>
wrote:

> Hello.
>
> This issue is related to
> https://go-review.googlesource.com/c/gollvm/+/274574
> .
>
> I think I have some misunderstanding on how you used to deal with CPU
> models, for LLVM.
>
> First things first - I had success with using
>
> #include "llvm/ADT/StringRef.h"
> #include "llvm/ADT/StringMap.h"
> #include "llvm/MC/SubtargetFeature.h"
> #include "llvm/Support/Host.h"
>
> using namespace llvm;
> SubtargetFeatures Features1;
>
> int main (int argc, char **argv)
> {
> sys::getHostCPUName();
> StringMap HostFeatures;
> if (sys::getHostCPUFeatures(HostFeatures))
> for (auto &F : HostFeatures)
> Features1.AddFeature(F.first(), F.second);
>
> printf("test %s", Features1.getString().c_str());
> printf("\nsomething else\n");
> return 0;
> }
> . It gives me such a set of CPU features:
>
>
> +sse2,-tsxldtrk,-cx16,-sahf,-tbm,-avx512ifma,-sha,-gfni,-fma4,-vpclmulqdq,-prfchw,-bmi2,-cldemote,-fsgsbase,-ptwrite,-amx-tile,-avx512bf16,-popcnt,-aes,-avx512bitalg,-movdiri,-xsaves,-avx512er,-xsavec,-avx512vnni,-amx-bf16,-avx512vpopcntdq,-pconfig,-clwb,-avx512f,-clzero,-pku,+mmx,-lwp,-rdpid,-xop,-rdseed,-waitpkg,-movdir64b,-sse4a,-avx512bw,-clflushopt,-xsave,-avx512vbmi2,-64bit,-avx512vl,-serialize,-invpcid,-avx512cd,-avx,-vaes,+cx8,-fma,-rtm,-bmi,-enqcmd,-rdrnd,-mwaitx,-sse4.1,-sse4.2,-avx2,+fxsr,-wbnoinvd,+sse,-lzcnt,-pclmul,-prefetchwt1,-f16c,-ssse3,-sgx,-shstk,+cmov,-avx512vbmi,-amx-int8,-movbe,-avx512vp2intersect,-xsaveopt,-avx512dq,-adx,-avx512pf,+sse3
>
> $ llc --version
> provides
> Default target: i686-pc-linux-gnu
> Host CPU: yonah
> .
>
> I tried to update the capture-fcn-attributes.go file, like this:
>
> var supportedTriples []string = []string{
> "x86_64-unknown-linux-gnu",
> "i686-pc-linux-gnu",
> "aarch64-unknown-linux-gnu",
> }
> .
>
> When I tried the generator
>
> capture-fcn-attributes -o /tmp/cpu_feature_list
> it generated me a broad list.
> The header contained
>
> Ubuntu clang version 11.0.0-++20200721055954+cebd637c886-1exp1
> 20200721161335.13
> .
> I found
>
> // triple: i686-pc-linux-gnu
> static const CpuAttrs attrs1[] = {
> // first entry is default cpu
> { "i686", "+cx8,+x87"},
>
> and (inside the hashmap)
>
> { "yonah", "+cx8,+fxsr,+mmx,+sse,+sse2,+sse3,+x87"},
> , which is not what I have supported (for Intel Celeron M440).
> Clang reports "unsupported CPU features" on any non-provided one.
> So that is one big problem.
> Next problem is that
>
> const TripleCpus triples[] = {
> { "x86_64-unknown-linux-gnu", &attrs0[0] },
> { "i686-pc-linux-gnu", &attrs1[0] },
> { "aarch64-unknown-linux-gnu", &attrs2[0] },
> { "", nullptr } // sentinel
> };
> is not targeting to yonah, while llc is targeting it.
> It is always some "default" CPU model and, in fact, your code never
> provided extraction of the CPU model (from llc).
>
> To make my observation complete - I am providing what is generated via
>
> capture-fcn-attributes -cpu yonah
> :
>
> // triple: x86_64-unknown-linux-gnu
> static const CpuAttrs attrs0[] = {
> // first entry is default cpu
> { "x86-64", "+cx8,+fxsr,+mmx,+sse,+sse2,+x87"},
> { "", "" } // sentinel
> };
>
> // triple: i686-pc-linux-gnu
> static const CpuAttrs attrs1[] = {
> // first entry is default cpu
> { "i686", "+cx8,+x87"},
> { "yonah", "+cx8,+fxsr,+mmx,+sse,+sse2,+sse3,+x87"},
> { "", "" } // sentinel
> };
>
> // triple: aarch64-unknown-linux-gnu
> static const CpuAttrs attrs2[] = {
> // first entry is default cpu
> { "generic", "+neon"},
> { "", "" } // sentinel
> };
>
> const TripleCpus triples[] = {
> { "x86_64-unknown-linux-gnu", &attrs0[0] },
> { "i686-pc-linux-gnu", &attrs1[0] },
> { "aarch64-unknown-linux-gnu", &attrs2[0] },
> { "", nullptr } // sentinel
> };
> .
>
> I tried
>
> capture-fcn-attributes -cpu yonah -triples i686-pc-linux-gnu
> and got
>
> // triple: i686-pc-linux-gnu
> static const CpuAttrs attrs0[] = {
> // first entry is default cpu
> { "i686", "+cx8,+x87"},
> { "yonah", "+cx8,+fxsr,+mmx,+sse,+sse2,+sse3,+x87"},
> { "", "" } // sentinel
> };
>
> const TripleCpus triples[] = {
> { "i686-pc-linux-gnu", &attrs0[0] },
> { "", nullptr } // sentinel
> };
> .
>
> I understand that your strategy worked find on Intel based system-on-board
> machines - but didn't try something for AMD (yet).
> Nevertheless I have these issues on i686 - so I am proposing to perform a
> review.
>
>
> Ivan
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/aac8c576-9763-4bba-96a1-51f545084630n%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/aac8c576-9763-4bba-96a1-51f545084630n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CA%2BUr55GmQxmrHq6qsUV%2BYOK%2Bbxa%2Bx%3D1ggD-eXuQikGt4zUUa9Q%40mail.gmail.com.

Reply via email to