CC'ing to Jayesh, Sreenivas, Adarsh from Intel. I am BCC'ing to Sameeran, Tejas from AMD.
On Thu, Jan 7, 2021 at 12:21 AM Ivan Serdyuk <local.tourist.k...@gmail.com> wrote: > 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-1 >>>>>>>>>>>>>> exp120200721161335.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/CANFCsz9nbXFCvZN9eOGBYYUZEvoiNGn9kDOZtVYuy1K8Ji7hmQ%40mail.gmail.com.