I assume that this should be enforced by CMake - so some build flag would be provided. So the "default" schema would be to cover all per-project architectures (not the llc derived ones).
So here is what was generated: $ cat ../driver/ArchCpusAttrs.h > // DO NOT EDIT: this file auto-generated by the following command: > // > // ./capture-fcn-attributes -o ../driver/ArchCpusAttrs.h -triples > i686-pc-linux-gnu > // > // in combination with clang: > // > // clang version 12.0.0 > // > > typedef struct { > const char *cpu; > const char *attrs; > } CpuAttrs; > > typedef struct { > const char *triple; > const CpuAttrs *cpuattrs; > } TripleCpus; > > // triple: i686-pc-linux-gnu > static const CpuAttrs attrs0[] = { > // first entry is default cpu > *{ "pentium4", "+cx8,+fxsr,+mmx,+sse,+sse2,+x87"}*, > { "alderlake", > "+adx,+aes,+avx,+avx2,+avxvnni,+bmi,+bmi2,+cldemote,+clflushopt,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+hreset,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+popcnt,+prfchw,+ptwrite,+rdrnd,+rdseed,+sahf,+serialize,+sgx,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+waitpkg,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "amdfam10", > "+3dnow,+3dnowa,+cx16,+cx8,+fxsr,+lzcnt,+mmx,+popcnt,+prfchw,+sahf,+sse,+sse2,+sse3,+sse4a,+x87"}, > { "athlon", "+3dnow,+3dnowa,+cx8,+mmx,+x87"}, > { "athlon-4", "+3dnow,+3dnowa,+cx8,+fxsr,+mmx,+sse,+x87"}, > { "athlon-fx", "+3dnow,+3dnowa,+cx8,+fxsr,+mmx,+sse,+sse2,+x87"}, > { "athlon-mp", "+3dnow,+3dnowa,+cx8,+fxsr,+mmx,+sse,+x87"}, > { "athlon-tbird", "+3dnow,+3dnowa,+cx8,+mmx,+x87"}, > { "athlon-xp", "+3dnow,+3dnowa,+cx8,+fxsr,+mmx,+sse,+x87"}, > { "athlon64", "+3dnow,+3dnowa,+cx8,+fxsr,+mmx,+sse,+sse2,+x87"}, > { "athlon64-sse3", > "+3dnow,+3dnowa,+cx8,+fxsr,+mmx,+sse,+sse2,+sse3,+x87"}, > { "atom", > "+cx16,+cx8,+fxsr,+mmx,+movbe,+sahf,+sse,+sse2,+sse3,+ssse3,+x87"}, > { "barcelona", > "+3dnow,+3dnowa,+cx16,+cx8,+fxsr,+lzcnt,+mmx,+popcnt,+prfchw,+sahf,+sse,+sse2,+sse3,+sse4a,+x87"}, > { "bdver1", > "+aes,+avx,+cx16,+cx8,+fma4,+fxsr,+lwp,+lzcnt,+mmx,+pclmul,+popcnt,+prfchw,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+sse4a,+ssse3,+x87,+xop,+xsave"}, > { "bdver2", > "+aes,+avx,+bmi,+cx16,+cx8,+f16c,+fma,+fma4,+fxsr,+lwp,+lzcnt,+mmx,+pclmul,+popcnt,+prfchw,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+sse4a,+ssse3,+tbm,+x87,+xop,+xsave"}, > { "bdver3", > "+aes,+avx,+bmi,+cx16,+cx8,+f16c,+fma,+fma4,+fsgsbase,+fxsr,+lwp,+lzcnt,+mmx,+pclmul,+popcnt,+prfchw,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+sse4a,+ssse3,+tbm,+x87,+xop,+xsave,+xsaveopt"}, > { "bdver4", > "+aes,+avx,+avx2,+bmi,+bmi2,+cx16,+cx8,+f16c,+fma,+fma4,+fsgsbase,+fxsr,+lwp,+lzcnt,+mmx,+movbe,+mwaitx,+pclmul,+popcnt,+prfchw,+rdrnd,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+sse4a,+ssse3,+tbm,+x87,+xop,+xsave,+xsaveopt"}, > { "bonnell", > "+cx16,+cx8,+fxsr,+mmx,+movbe,+sahf,+sse,+sse2,+sse3,+ssse3,+x87"}, > { "broadwell", > "+adx,+avx,+avx2,+bmi,+bmi2,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+popcnt,+prfchw,+rdrnd,+rdseed,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"}, > { "btver1", > "+cx16,+cx8,+fxsr,+lzcnt,+mmx,+popcnt,+prfchw,+sahf,+sse,+sse2,+sse3,+sse4a,+ssse3,+x87"}, > { "btver2", > "+aes,+avx,+bmi,+cx16,+cx8,+f16c,+fxsr,+lzcnt,+mmx,+movbe,+pclmul,+popcnt,+prfchw,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+sse4a,+ssse3,+x87,+xsave,+xsaveopt"}, > { "c3", "+3dnow,+cx8,+mmx,+x87"}, > { "c3-2", "+cx8,+fxsr,+mmx,+sse,+x87"}, > { "cannonlake", > "+adx,+aes,+avx,+avx2,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512ifma,+avx512vbmi,+avx512vl,+bmi,+bmi2,+clflushopt,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+pku,+popcnt,+prfchw,+rdrnd,+rdseed,+sahf,+sgx,+sha,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "cascadelake", > "+adx,+aes,+avx,+avx2,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512vl,+avx512vnni,+bmi,+bmi2,+clflushopt,+clwb,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+pku,+popcnt,+prfchw,+rdrnd,+rdseed,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "cooperlake", > "+adx,+aes,+avx,+avx2,+avx512bf16,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512vl,+avx512vnni,+bmi,+bmi2,+clflushopt,+clwb,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+pku,+popcnt,+prfchw,+rdrnd,+rdseed,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "core-avx-i", > "+avx,+cx16,+cx8,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"}, > { "core-avx2", > "+avx,+avx2,+bmi,+bmi2,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+popcnt,+rdrnd,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"}, > { "core2", "+cx16,+cx8,+fxsr,+mmx,+sahf,+sse,+sse2,+sse3,+ssse3,+x87"}, > { "corei7", > "+cx16,+cx8,+fxsr,+mmx,+popcnt,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"}, > { "corei7-avx", > "+avx,+cx16,+cx8,+fxsr,+mmx,+pclmul,+popcnt,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"}, > { "geode", "+3dnow,+3dnowa,+cx8,+mmx,+x87"}, > { "goldmont", > "+aes,+clflushopt,+cx16,+cx8,+fsgsbase,+fxsr,+mmx,+movbe,+pclmul,+popcnt,+prfchw,+rdrnd,+rdseed,+sahf,+sha,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "goldmont-plus", > "+aes,+clflushopt,+cx16,+cx8,+fsgsbase,+fxsr,+mmx,+movbe,+pclmul,+popcnt,+prfchw,+ptwrite,+rdpid,+rdrnd,+rdseed,+sahf,+sgx,+sha,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "haswell", > "+avx,+avx2,+bmi,+bmi2,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+popcnt,+rdrnd,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"}, > { "i386", "+x87"}, > { "i486", "+x87"}, > { "i586", "+cx8,+x87"}, > { "i686", "+cx8,+x87"}, > { "icelake-client", > "+adx,+aes,+avx,+avx2,+avx512bitalg,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512ifma,+avx512vbmi,+avx512vbmi2,+avx512vl,+avx512vnni,+avx512vpopcntdq,+bmi,+bmi2,+clflushopt,+clwb,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+gfni,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+pku,+popcnt,+prfchw,+rdpid,+rdrnd,+rdseed,+sahf,+sgx,+sha,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+vaes,+vpclmulqdq,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "icelake-server", > "+adx,+aes,+avx,+avx2,+avx512bitalg,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512ifma,+avx512vbmi,+avx512vbmi2,+avx512vl,+avx512vnni,+avx512vpopcntdq,+bmi,+bmi2,+clflushopt,+clwb,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+gfni,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+pconfig,+pku,+popcnt,+prfchw,+rdpid,+rdrnd,+rdseed,+sahf,+sgx,+sha,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+vaes,+vpclmulqdq,+wbnoinvd,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "ivybridge", > "+avx,+cx16,+cx8,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"}, > { "k6", "+cx8,+mmx,+x87"}, > { "k6-2", "+3dnow,+cx8,+mmx,+x87"}, > { "k6-3", "+3dnow,+cx8,+mmx,+x87"}, > { "k8", "+3dnow,+3dnowa,+cx8,+fxsr,+mmx,+sse,+sse2,+x87"}, > { "k8-sse3", "+3dnow,+3dnowa,+cx8,+fxsr,+mmx,+sse,+sse2,+sse3,+x87"}, > { "knl", > "+adx,+aes,+avx,+avx2,+avx512cd,+avx512er,+avx512f,+avx512pf,+bmi,+bmi2,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+popcnt,+prefetchwt1,+prfchw,+rdrnd,+rdseed,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"}, > { "knm", > "+adx,+aes,+avx,+avx2,+avx512cd,+avx512er,+avx512f,+avx512pf,+avx512vpopcntdq,+bmi,+bmi2,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+popcnt,+prefetchwt1,+prfchw,+rdrnd,+rdseed,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"}, > { "lakemont", "+cx8"}, > { "nehalem", > "+cx16,+cx8,+fxsr,+mmx,+popcnt,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"}, > { "nocona", "+cx16,+cx8,+fxsr,+mmx,+sse,+sse2,+sse3,+x87"}, > { "opteron", "+3dnow,+3dnowa,+cx8,+fxsr,+mmx,+sse,+sse2,+x87"}, > { "opteron-sse3", > "+3dnow,+3dnowa,+cx8,+fxsr,+mmx,+sse,+sse2,+sse3,+x87"}, > { "penryn", > "+cx16,+cx8,+fxsr,+mmx,+sahf,+sse,+sse2,+sse3,+sse4.1,+ssse3,+x87"}, > { "pentium", "+cx8,+x87"}, > { "pentium-m", "+cx8,+fxsr,+mmx,+sse,+sse2,+x87"}, > { "pentium-mmx", "+cx8,+mmx,+x87"}, > { "pentium2", "+cx8,+fxsr,+mmx,+x87"}, > { "pentium3", "+cx8,+fxsr,+mmx,+sse,+x87"}, > { "pentium3m", "+cx8,+fxsr,+mmx,+sse,+x87"}, > { "pentium4m", "+cx8,+fxsr,+mmx,+sse,+sse2,+x87"}, > { "pentiumpro", "+cx8,+x87"}, > { "prescott", "+cx8,+fxsr,+mmx,+sse,+sse2,+sse3,+x87"}, > { "sandybridge", > "+avx,+cx16,+cx8,+fxsr,+mmx,+pclmul,+popcnt,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"}, > { "sapphirerapids", > "+adx,+aes,+amx-bf16,+amx-int8,+amx-tile,+avx,+avx2,+avx512bf16,+avx512bitalg,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512ifma,+avx512vbmi,+avx512vbmi2,+avx512vl,+avx512vnni,+avx512vp2intersect,+avx512vpopcntdq,+avxvnni,+bmi,+bmi2,+cldemote,+clflushopt,+clwb,+cx16,+cx8,+enqcmd,+f16c,+fma,+fsgsbase,+fxsr,+gfni,+invpcid,+lzcnt,+mmx,+movbe,+movdir64b,+movdiri,+pclmul,+pconfig,+pku,+popcnt,+prfchw,+ptwrite,+rdpid,+rdrnd,+rdseed,+sahf,+serialize,+sgx,+sha,+shstk,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+tsxldtrk,+uintr,+vaes,+vpclmulqdq,+waitpkg,+wbnoinvd,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "silvermont", > "+cx16,+cx8,+fxsr,+mmx,+movbe,+pclmul,+popcnt,+prfchw,+rdrnd,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"}, > { "skx", > "+adx,+aes,+avx,+avx2,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512vl,+bmi,+bmi2,+clflushopt,+clwb,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+pku,+popcnt,+prfchw,+rdrnd,+rdseed,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "skylake", > "+adx,+aes,+avx,+avx2,+bmi,+bmi2,+clflushopt,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+popcnt,+prfchw,+rdrnd,+rdseed,+sahf,+sgx,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "skylake-avx512", > "+adx,+aes,+avx,+avx2,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512vl,+bmi,+bmi2,+clflushopt,+clwb,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+pclmul,+pku,+popcnt,+prfchw,+rdrnd,+rdseed,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "slm", > "+cx16,+cx8,+fxsr,+mmx,+movbe,+pclmul,+popcnt,+prfchw,+rdrnd,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"}, > { "tigerlake", > "+adx,+aes,+avx,+avx2,+avx512bitalg,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512ifma,+avx512vbmi,+avx512vbmi2,+avx512vl,+avx512vnni,+avx512vp2intersect,+avx512vpopcntdq,+bmi,+bmi2,+clflushopt,+clwb,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+gfni,+invpcid,+kl,+lzcnt,+mmx,+movbe,+movdir64b,+movdiri,+pclmul,+pku,+popcnt,+prfchw,+rdpid,+rdrnd,+rdseed,+sahf,+sgx,+sha,+shstk,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+vaes,+vpclmulqdq,+widekl,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "tremont", > "+aes,+clflushopt,+clwb,+cx16,+cx8,+fsgsbase,+fxsr,+gfni,+mmx,+movbe,+pclmul,+popcnt,+prfchw,+ptwrite,+rdpid,+rdrnd,+rdseed,+sahf,+sgx,+sha,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "westmere", > "+cx16,+cx8,+fxsr,+mmx,+pclmul,+popcnt,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"}, > { "winchip-c6", "+cx8,+mmx,+x87"}, > { "winchip2", "+3dnow,+cx8,+mmx,+x87"}, > { "x86-64", "+cx8,+fxsr,+mmx,+sse,+sse2,+x87"}, > { "x86-64-v2", > "+cx16,+cx8,+fxsr,+mmx,+popcnt,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"}, > { "x86-64-v3", > "+avx,+avx2,+bmi,+bmi2,+cx16,+cx8,+f16c,+fma,+fxsr,+lzcnt,+mmx,+movbe,+popcnt,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave"}, > { "x86-64-v4", > "+avx,+avx2,+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512vl,+bmi,+bmi2,+cx16,+cx8,+f16c,+fma,+fxsr,+lzcnt,+mmx,+movbe,+popcnt,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave"}, > { "yonah", "+cx8,+fxsr,+mmx,+sse,+sse2,+sse3,+x87"}, > { "znver1", > "+adx,+aes,+avx,+avx2,+bmi,+bmi2,+clflushopt,+clzero,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+lzcnt,+mmx,+movbe,+mwaitx,+pclmul,+popcnt,+prfchw,+rdrnd,+rdseed,+sahf,+sha,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+sse4a,+ssse3,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "znver2", > "+adx,+aes,+avx,+avx2,+bmi,+bmi2,+clflushopt,+clwb,+clzero,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+lzcnt,+mmx,+movbe,+mwaitx,+pclmul,+popcnt,+prfchw,+rdpid,+rdrnd,+rdseed,+sahf,+sha,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+sse4a,+ssse3,+wbnoinvd,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "znver3", > "+adx,+aes,+avx,+avx2,+bmi,+bmi2,+clflushopt,+clwb,+clzero,+cx16,+cx8,+f16c,+fma,+fsgsbase,+fxsr,+invpcid,+lzcnt,+mmx,+movbe,+mwaitx,+pclmul,+pku,+popcnt,+prfchw,+rdpid,+rdrnd,+rdseed,+sahf,+sha,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+sse4a,+ssse3,+vaes,+vpclmulqdq,+wbnoinvd,+x87,+xsave,+xsavec,+xsaveopt,+xsaves"}, > { "", "" } // sentinel > }; > > const TripleCpus triples[] = { > { "i686-pc-linux-gnu", &attrs0[0] }, > { "", nullptr } // sentinel > }; > . So the value was set to "pentium4", while > $ llc --version | grep CPU > Host CPU: yonah > . It is even more confusing. Now, I made further steps: > [3/3] Linking CXX executable bin/llvm-goc > $ ./bin/llvm-goc --version > gollvm version 1 (experimental) [LLVM version 12] > and $ ninja libgo_golang.org_x_crypto_chacha20 > [1/120] Building Go package 'unicode' (non-PIC) > FAILED: tools/gollvm/libgo/unicode.o > cd /home/oceanfish81/Desktop/workarea/release/tools/gollvm/libgo && > /usr/local/bin/cmake -E make_directory ./. && > /home/oceanfish81/Desktop/workarea/release/./bin/llvm-goc -c -o > /home/oceanfish81/Desktop/workarea/release/tools/gollvm/libgo/./unicode.o > -fgo-pkgpath=unicode -I . > /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/casetables.go > /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/digit.go > /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/graphic.go > /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/letter.go > /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/tables.go > . I do not see any proof that > currently Gollvm is not supported on architecture i686 > unsupported llvm::CallingConv::ID 1023 > unsupported llvm::CallingConv::ID 1023 > unsupported llvm::CallingConv::ID 1023 > is beyond the ranks of the current issue. #0 0x087a548a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) > (/home/oceanfish81/Desktop/workarea/release/./bin/llvm-goc+0x87a548a) > PLEASE submit a bug report to https://bugs.llvm.org/ and include the > crash backtrace. > Stack dump: > 0. Program arguments: > /home/oceanfish81/Desktop/workarea/release/./bin/llvm-goc -c -o > /home/oceanfish81/Desktop/workarea/release/tools/gollvm/libgo/./unicode.o > -fgo-pkgpath=unicode -I . > /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/casetables.go > /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/digit.go > /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/graphic.go > /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/letter.go > /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/tables.go > Segmentation fault (core dumped) > [2/120] Building Go package 'internal/unsafeheader' (PIC) > FAILED: tools/gollvm/libgo/internal/.pic/unsafeheader.o > cd /home/oceanfish81/Desktop/workarea/release/tools/gollvm/libgo && > /usr/local/bin/cmake -E make_directory ./internal/.pic && > /home/oceanfish81/Desktop/workarea/release/./bin/llvm-goc -c -o > /home/oceanfish81/Desktop/workarea/release/tools/gollvm/libgo/internal/.pic/unsafeheader.o > -fPIC -fgo-pkgpath=internal/unsafeheader -I . > /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/internal/unsafeheader/unsafeheader.go > currently Gollvm is not supported on architecture i686 > unsupported llvm::CallingConv::ID 1023 > unsupported llvm::CallingConv::ID 1023 > unsupported llvm::CallingConv::ID 1023 > #0 0x087a548a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) > (/home/oceanfish81/Desktop/workarea/release/./bin/llvm-goc+0x87a548a) > PLEASE submit a bug report to https://bugs.llvm.org/ and include the > crash backtrace. > Stack dump: > 0. Program arguments: > /home/oceanfish81/Desktop/workarea/release/./bin/llvm-goc -c -o > /home/oceanfish81/Desktop/workarea/release/tools/gollvm/libgo/internal/.pic/unsafeheader.o > -fPIC -fgo-pkgpath=internal/unsafeheader -I . > /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/internal/unsafeheader/unsafeheader.go > Segmentation fault (core dumped) > . So I don't see what is the next step (and what to do with "pentium4" versus "yonah"). I am super sure that some patch is required, to provide consistent automation of build. On Wed, Jan 6, 2021 at 11:40 PM Than McIntosh <th...@google.com> wrote: > > You can of course run capture-fcn-attributes with an explicit set of > triples, e.g. > > $ ./capture-fcn-attributes -o ../driver/ArchCpusAttrs.h -triples > i686-pc-linux-gnu > > which will get you off the ground... but you would not want to check in > the resulting header. The values in ArchCpusAttrs.h have to cover all > supported targets. > > Than > > > On Wed, Jan 6, 2021 at 4:31 PM Ivan Serdyuk <local.tourist.k...@gmail.com> > wrote: > >> My current scenario assumes that I have compiled for x86 targets, to run >> Clang on an x86 machine. What should be done if it is not assumed to >> involve any other back-ends, during the build? >> >> >> On Wed, Jan 6, 2021 at 10:27 PM Than McIntosh <th...@google.com> wrote: >> >>> Right, that would be expected. The easiest thing to do is make sure >>> that you're running cmake in your build area with >>> >>> -DLLVM_TARGETS_TO_BUILD="all" >>> >>> then you can build "llc" and "clang" , then update your path so that the >>> freshly built llc/clang are picked up first. Once you have that set up, it >>> should take care of the problem running "llc" from capture-fcn-attributes. >>> >>> Than >>> >>> >>> On Wed, Jan 6, 2021 at 3:14 PM Ivan Serdyuk < >>> local.tourist.k...@gmail.com> wrote: >>> >>>> I think a caught an error: >>>> >>>> $ ./capture-fcn-attributes >>>>> llc run failed: llc: error: : error: unable to get target for >>>>> 'aarch64-unknown-linux-gnu', see --version and --triple. >>>>> >>>>> capture-fcn-attributes: err = exit status 1 >>>>> >>>> >>>> . Hence that I didn't compile Aarch64 back-end, for LLVM: >>>> >>>> $ llc --version >>>>> LLVM (http://llvm.org/): >>>>> LLVM version 12.0.0git >>>>> Optimized build. >>>>> Default target: i686-pc-linux-gnu >>>>> Host CPU: yonah >>>>> >>>>> Registered Targets: >>>>> x86 - 32-bit X86: Pentium-Pro and above >>>>> x86-64 - 64-bit X86: EM64T and AMD64 >>>>> >>>> . So this would not run out-of-the-box. >>>> >>>> >>>> >>>> On Wed, Jan 6, 2021 at 8:21 PM Than McIntosh <th...@google.com> wrote: >>>> >>>>> Thanks. The error you're seeing >>>>> >>>>> "unable to determine target CPU features for target >>>>> i686-pc-linux-gnu" >>>>> >>>>> looks as though it's because i686-pc-linux-gnu isn't listed as a >>>>> target in >>>>> driver/ArchCpusAttrs.h. >>>>> >>>>> From the root of your repo, try >>>>> >>>>> $ cd tools >>>>> $ go build capture-fcn-attributes.go >>>>> $ ./capture-fcn-attributes -o ../driver/ArchCpusAttrs.h >>>>> >>>>> and then give the gollvm build another try. >>>>> >>>>> Thanks, Than >>>>> >>>>> On Wed, Jan 6, 2021 at 12:53 PM Ivan Serdyuk < >>>>> local.tourist.k...@gmail.com> wrote: >>>>> >>>>>> Here you go: >>>>>> >>>>>> ~/Desktop/workarea/llvm-project/llvm/tools/gollvm$ git diff >>>>>> diff --git a/cmake/modules/AutoGenGo.cmake >>>>>> b/cmake/modules/AutoGenGo.cmake >>>>>> index 3e3ab83..097a2ad 100644 >>>>>> --- a/cmake/modules/AutoGenGo.cmake >>>>>> +++ b/cmake/modules/AutoGenGo.cmake >>>>>> @@ -51,6 +51,17 @@ function(mkversion goos goarch outfile bindir >>>>>> srcroot scriptroot) >>>>>> set(pcquantum "1") >>>>>> set(int64align "8") >>>>>> set(minframesize 0) >>>>>> + elseif( ${goarch} STREQUAL "386") >>>>>> + # Simply picking up one typical setting >>>>>> + # Align with current sets in gofrontend/libgo/goarch.sh >>>>>> + set(archfamily "I386") >>>>>> + set(bigendian "false") >>>>>> + set(cachelinesize "64") >>>>>> + set(physpagesize "4096") >>>>>> + set(pcquantum "1") >>>>>> + set(int64align "4") >>>>>> + set(minframesize 4) >>>>>> + set(ptrsize 4) >>>>>> elseif( ${goarch} STREQUAL "arm64") >>>>>> # Simply picking up one typical setting >>>>>> # Align with current sets in gofrontend/libgo/goarch.sh >>>>>> diff --git a/cmake/modules/GoVars.cmake b/cmake/modules/GoVars.cmake >>>>>> index ec6f6b2..0cea38a 100644 >>>>>> --- a/cmake/modules/GoVars.cmake >>>>>> +++ b/cmake/modules/GoVars.cmake >>>>>> @@ -8,6 +8,9 @@ list(GET lht_components 2 goos) >>>>>> # LLVM's "x86_64" is the same as Go's "amd64". >>>>>> if( ${llarch} STREQUAL "x86_64" ) >>>>>> set(goarch "amd64") >>>>>> +# For i386/i686 >>>>>> +elseif( ${llarch} STREQUAL "i686" ) >>>>>> + set(goarch "386") >>>>>> # LLVM's "aarch64" is the same as Go's "arm64". >>>>>> elseif( ${llarch} STREQUAL "aarch64" ) >>>>>> set(goarch "arm64") >>>>>> @@ -23,6 +26,10 @@ set(allgoos "aix" "android" "darwin" "dragonfly" >>>>>> "freebsd" "irix" "linux" "netbs >>>>>> # Set library suffix based on target triple >>>>>> if( ${llarch} STREQUAL "x86_64" ) >>>>>> set(library_suffix "64") >>>>>> +elseif( ${llarch} STREQUAL "i686" ) >>>>>> +# Driver::installedLibDir honors ./lib only, on Ubuntu 16 >>>>>> +# But we can stick for ./lib32 (along with those in AddGollvm.cmake) >>>>>> + set(library_suffix "32") >>>>>> elseif( ${llarch} STREQUAL "aarch64" ) >>>>>> # Driver::installedLibDir honors ./lib64 only >>>>>> # Future change needed (along with those in AddGollvm.cmake) >>>>>> diff --git a/cmake/modules/LibbacktraceUtils.cmake >>>>>> b/cmake/modules/LibbacktraceUtils.cmake >>>>>> index dc54f18..42287a9 100644 >>>>>> --- a/cmake/modules/LibbacktraceUtils.cmake >>>>>> +++ b/cmake/modules/LibbacktraceUtils.cmake >>>>>> @@ -8,6 +8,9 @@ function(setup_libbacktrace) >>>>>> if( ${goarch} STREQUAL "amd64") >>>>>> set(BACKTRACE_ELF_SIZE 64) >>>>>> set(HAVE_GETIPINFO 1) >>>>>> + elseif( ${goarch} STREQUAL "386") >>>>>> + set(BACKTRACE_ELF_SIZE 32) >>>>>> + set(HAVE_GETIPINFO 1) >>>>>> elseif( ${goarch} STREQUAL "arm64") >>>>>> set(BACKTRACE_ELF_SIZE 64) >>>>>> set(HAVE_GETIPINFO 1) >>>>>> diff --git a/cmake/modules/LibffiUtils.cmake >>>>>> b/cmake/modules/LibffiUtils.cmake >>>>>> index b3fa697..fb34c36 100644 >>>>>> --- a/cmake/modules/LibffiUtils.cmake >>>>>> --- a/cmake/modules/LibffiUtils.cmake >>>>>> +++ b/cmake/modules/LibffiUtils.cmake >>>>>> @@ -9,6 +9,8 @@ function(setup_libffi libffi_srcroot) >>>>>> set(arch_dir "aarch64") >>>>>> elseif(${llarch} STREQUAL "x86_64") >>>>>> set(arch_dir "x86") >>>>>> + elseif(${llarch} STREQUAL "i686") >>>>>> + set(arch_dir "x86") >>>>>> else() >>>>>> message(SEND_ERROR "Arch ${llarch} not yet supported") >>>>>> endif() >>>>>> diff --git a/driver/Driver.cpp b/driver/Driver.cpp >>>>>> index 8debbab..aa83fb1 100644 >>>>>> --- a/driver/Driver.cpp >>>>>> +++ b/driver/Driver.cpp >>>>>> @@ -76,7 +76,7 @@ std::string Driver::installedLibDir() >>>>>> llvm::sys::path::append(ldir, "../lib64"); >>>>>> break; >>>>>> default: >>>>>> - llvm::sys::path::append(ldir, "../lib64"); >>>>>> + llvm::sys::path::append(ldir, "../lib"); >>>>>> break; >>>>>> } >>>>>> : >>>>>> --- a/cmake/modules/LibffiUtils.cmake >>>>>> +++ b/cmake/modules/LibffiUtils.cmake >>>>>> @@ -9,6 +9,8 @@ function(setup_libffi libffi_srcroot) >>>>>> set(arch_dir "aarch64") >>>>>> elseif(${llarch} STREQUAL "x86_64") >>>>>> set(arch_dir "x86") >>>>>> + elseif(${llarch} STREQUAL "i686") >>>>>> + set(arch_dir "x86") >>>>>> else() >>>>>> message(SEND_ERROR "Arch ${llarch} not yet supported") >>>>>> endif() >>>>>> diff --git a/driver/Driver.cpp b/driver/Driver.cpp >>>>>> index 8debbab..aa83fb1 100644 >>>>>> --- a/driver/Driver.cpp >>>>>> +++ b/driver/Driver.cpp >>>>>> @@ -76,7 +76,7 @@ std::string Driver::installedLibDir() >>>>>> llvm::sys::path::append(ldir, "../lib64"); >>>>>> break; >>>>>> default: >>>>>> - llvm::sys::path::append(ldir, "../lib64"); >>>>>> + llvm::sys::path::append(ldir, "../lib"); >>>>>> break; >>>>>> } >>>>>> return std::string(ldir.str()); >>>>>> >>>>>> and >>>>>> >>>>>> $ git log -1 >>>>>> commit 850255c5cd7f9df79a148d537fd395089b7caf29 (HEAD -> master, >>>>>> origin/master, origin/HEAD) >>>>>> Author: Ivan Serdyuk <local.tourist.k...@gmail.com> >>>>>> Date: Fri Dec 4 17:14:00 2020 +0200 >>>>>> >>>>>> gollvm: Updating README.md, to elevate the min. required version >>>>>> of Clang compiler >>>>>> >>>>>> Too many issues with Clang 9 - so let's assume Clang 10+ >>>>>> >>>>>> Change-Id: Icf1a74148878b07fd941e5d525ac7e0c7f6bfdaf >>>>>> Reviewed-on: https://go-review.googlesource.com/c/gollvm/+/275473 >>>>>> Reviewed-by: Than McIntosh <th...@google.com> >>>>>> Trust: Ian Lance Taylor <i...@golang.org> >>>>>> >>>>>> On Wednesday, January 6, 2021 at 5:34:17 PM UTC+2 th...@google.com >>>>>> wrote: >>>>>> >>>>>>> Diff is fine. No need for the entire folder. >>>>>>> Than >>>>>>> >>>>>>> >>>>>>> On Wed, Jan 6, 2021 at 10:18 AM Ivan Serdyuk <local.tou...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Than, >>>>>>>> I could perform "git diff" and provide the generated file. >>>>>>>> I could also compress & share the build folder. >>>>>>>> What else would be required? >>>>>>>> >>>>>>>> Ivan >>>>>>>> >>>>>>>> On Wednesday, January 6, 2021 at 5:07:06 PM UTC+2 th...@google.com >>>>>>>> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> It would be helpful if you could put up a CL that includes all of >>>>>>>>> the changes you're testing -- at this point do you have any >>>>>>>>> modifications >>>>>>>>> to driver/ArchCpusAttrs.h ? >>>>>>>>> >>>>>>>>> Thanks >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Wed, Jan 6, 2021 at 10:00 AM Ivan Serdyuk < >>>>>>>>> local.tou...@gmail.com> wrote: >>>>>>>>> >>>>>>>>>> Ping >>>>>>>>>> >>>>>>>>>> On Friday, January 1, 2021 at 5:45:02 AM UTC+2 Ivan Serdyuk wrote: >>>>>>>>>> >>>>>>>>>>> Happy New Year, Than. >>>>>>>>>>> >>>>>>>>>>> So I have rebuilt llvm-goc, after applying >>>>>>>>>>> https://go-review.googlesource.com/c/gollvm/+/270219. >>>>>>>>>>> Here >>>>>>>>>>> <https://drive.google.com/file/d/1qDSKwKORZjH824gVeSXUknVm0rpKZ9j-/view?usp=sharing> >>>>>>>>>>> is my compressed build folder. >>>>>>>>>>> >>>>>>>>>>> I am using >>>>>>>>>>> $ clang --version >>>>>>>>>>> clang version 12.0.0 >>>>>>>>>>> Target: i686-pc-linux-gnu >>>>>>>>>>> Thread model: posix >>>>>>>>>>> on >>>>>>>>>>> $ uname -a >>>>>>>>>>> Linux oceanfish81-A8He 4.15.0-129-generic #132-Ubuntu SMP Thu >>>>>>>>>>> Dec 10 14:07:35 UTC 2020 i686 i686 i686 GNU/Linux >>>>>>>>>>> >>>>>>>>>>> You can obtain a pre-compiler "MinSizeRel" build of LLVM >>>>>>>>>>> (including Clang) here >>>>>>>>>>> <https://drive.google.com/file/d/1c7wredQbaX4p20Ee15WnY3SblbjiQHMD/view?usp=sharing> >>>>>>>>>>> . >>>>>>>>>>> >>>>>>>>>>> I tried to build an avarage libgo package - and here is what I >>>>>>>>>>> got: >>>>>>>>>>> >>>>>>>>>>> $ ninja libgo_golang.org_x_crypto_chacha20 >>>>>>>>>>> [1/120] Building Go package 'unicode' (non-PIC) >>>>>>>>>>> FAILED: tools/gollvm/libgo/unicode.o >>>>>>>>>>> cd /home/oceanfish81/Desktop/workarea/release/tools/gollvm/libgo >>>>>>>>>>> && /usr/local/bin/cmake -E make_directory ./. && >>>>>>>>>>> /home/oceanfish81/Desktop/workarea/release/./bin/llvm-goc -c -o >>>>>>>>>>> /home/oceanfish81/Desktop/workarea/release/tools/gollvm/libgo/./unicode.o >>>>>>>>>>> -fgo-pkgpath=unicode -I . >>>>>>>>>>> /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/casetables.go >>>>>>>>>>> /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/digit.go >>>>>>>>>>> /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/graphic.go >>>>>>>>>>> /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/letter.go >>>>>>>>>>> /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/unicode/tables.go >>>>>>>>>>> currently Gollvm is not supported on architecture i686 >>>>>>>>>>> /home/oceanfish81/Desktop/workarea/release/./bin/llvm-goc: *unable >>>>>>>>>>> to determine target CPU features for target i686-pc-linux-gnu* >>>>>>>>>>> [2/120] Building Go package 'internal/unsafeheader' (PIC) >>>>>>>>>>> FAILED: tools/gollvm/libgo/internal/.pic/unsafeheader.o >>>>>>>>>>> cd /home/oceanfish81/Desktop/workarea/release/tools/gollvm/libgo >>>>>>>>>>> && /usr/local/bin/cmake -E make_directory ./internal/.pic && >>>>>>>>>>> /home/oceanfish81/Desktop/workarea/release/./bin/llvm-goc -c -o >>>>>>>>>>> /home/oceanfish81/Desktop/workarea/release/tools/gollvm/libgo/internal/.pic/unsafeheader.o >>>>>>>>>>> -fPIC -fgo-pkgpath=internal/unsafeheader -I . >>>>>>>>>>> /home/oceanfish81/Desktop/workarea/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/internal/unsafeheader/unsafeheader.go >>>>>>>>>>> currently Gollvm is not supported on architecture i686 >>>>>>>>>>> /home/oceanfish81/Desktop/workarea/release/./bin/llvm-goc: *unable >>>>>>>>>>> to determine target CPU features for target i686-pc-linux-gnu* >>>>>>>>>>> ninja: build stopped: subcommand failed. >>>>>>>>>>> >>>>>>>>>>> Ivan >>>>>>>>>>> On Tuesday, December 8, 2020 at 3:30:05 PM UTC+2 >>>>>>>>>>> th...@google.com wrote: >>>>>>>>>>> >>>>>>>>>>>> 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.tou...@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...@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...@googlegroups.com. >>>>>>>>>> >>>>>>>>> To view this discussion on the web visit >>>>>>>>>> https://groups.google.com/d/msgid/golang-nuts/cc763125-04fe-4a8d-9940-625c0f25cc50n%40googlegroups.com >>>>>>>>>> <https://groups.google.com/d/msgid/golang-nuts/cc763125-04fe-4a8d-9940-625c0f25cc50n%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...@googlegroups.com. >>>>>>>> >>>>>>> To view this discussion on the web visit >>>>>>>> https://groups.google.com/d/msgid/golang-nuts/67c15826-5ed2-40ca-b284-6ff471fb6584n%40googlegroups.com >>>>>>>> <https://groups.google.com/d/msgid/golang-nuts/67c15826-5ed2-40ca-b284-6ff471fb6584n%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/399b00c6-8a6c-46aa-8397-b7d01cd85e44n%40googlegroups.com >>>>>> <https://groups.google.com/d/msgid/golang-nuts/399b00c6-8a6c-46aa-8397-b7d01cd85e44n%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/CANFCsz8c98qBOxFcLjPvw8Hp2wwGuLW2csF-i-XXMfCyocaPqw%40mail.gmail.com.