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.