[cfe-dev] MinGW 32-Bit Support?

Reid Kleckner via cfe-dev cfe-dev at lists.llvm.org
Fri Mar 24 11:20:37 PDT 2017


On Fri, Mar 24, 2017 at 7:45 AM, Nikolai Kosjar via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> Hi!
>
> I've trouble building/running llvm+clang 4.0 with/from mingw 32 bit for
> different mingw versions (4.9.y/5.x.y) [1]. When building in release mode,
> llvm-tblgen.exe crashes. I can overcome this by explicitly building
> llvm-tblgen.exe (and only that one) in debug mode, but then I get funny
> crashes with libclang during parse operations.
>

Some versions of GCC miscompile llvm-tblgen when targeting Windows:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78936 You should be able to
check if this is the same issue by looking at the assembly produced for
SubtargetEmitter.cpp and checking if it has the same mismatch between the
call and the epilogue described in the bug.


> I get no crashes for libclang parse operations from binaries produced by
> MSVC2015 (for both, 32 and 64 bit) and mingw 64 bit.
>
> According to clang's default target, it seems that llvm/clang is build
> with MSVC nowadays, starting with version 3.8.x:
>
>   D:\>D:\usr\llvm-3.7.1-win32\bin\clang --version
>   clang version 3.7.1 (tags/RELEASE_371/final)
>   Target: i686-pc-windows-gnu
>   Thread model: posix
>
>   D:\>D:\usr\llvm-3.8.1-win32\bin\clang --version
>   clang version 3.8.1 (branches/release_38)
>   Target: i686-pc-windows-msvc
>   Thread model: posix
>   InstalledDir: D:\usr\llvm-3.8.1-win32\bin
>

I think the downloads from llvm.org have always been built with MSVC since
we started providing Windows binaries in LLVM 3.4, since that's what's Hans
has been using since he took over release management. Something changed in
how we compute our default target triple, but I wasn't able to find the
commit that did it. In any case, the intention is that Clang is configured
to target whatever it was built with by default, and the user can change
that at runtime with --target or by rebuilding clang from source and
reconfiguring it with a different default
(-DLLVM_DEFAULT_TARGET_TRIPLE=whatever).

Does anybody know why this has changed? I'm asking because last time I
> compared, libclang binaries build with mingw were significantly faster than
> the ones from MSVC. In addition to this, the profile guided optimization
> support of mingw produced faster binaries than the one optimized with MSVC.
>

I couldn't say anything about the relative strengths of GCC vs MSVC PGO. I
will say that in our experience, 64-bit clang is faster than 32-bit clang,
and Clang is pretty good at optimizing Clang. So if you just want a faster
compiler, you can build clang twice for 64-bit. You can set the default
triple back to 32-bit if that's what you need.

Can somebody reproduce [1] with mingw 32 bit?
> Any plans to make a build bot/job for mingw 32 bit available (again?) so
> that such errors will be caught earlier?
>
> Nikolai
>
>
> [1] https://bugs.llvm.org/show_bug.cgi?id=32018
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170324/39272e42/attachment.html>


More information about the cfe-dev mailing list