[fpc-devel] Enable LLVM?
Jonas Maebe
jonas.maebe at elis.ugent.be
Mon Jul 13 12:15:37 CEST 2015
Den wrote:
> I was just wondering if there was an option to enable compiling to
> LLVM bitcode? I see a bit of work happening in SVN from it, and would
> love to start using it.
You cannot use it, because it does not work yet. And as mentioned in
earlier messages:
* it will need architecture and OS-specific support per target (I'm only
working on Darwin/x86-64 right now)
* it will probably only work with specific LLVM versions, because LLVM
only cares to an extremely limited extent about backward/forward
compatibility
* LLVM's handling of parameter passing is split between Clang and LLVM
in a way that makes it impossible for third parties to support it in a
reliable way (although some people are looking into splitting off that
functionality into a - C++ - library; not sure how useful that would be
for FPC)
LLVM also makes a lot of assumptions that are wrong as far as non-C
languages are concerned. For example, the result of a load from a nil
address is considered to be "undefined", which means they (and every
instruction that depends on such a result) may be "optimised" away
completely by LLVM. In Pascal (or at least FPC), you instead expect a
segmentation fault if that happens. You can find a few other such issues
documented at
http://www.mono-project.com/docs/advanced/runtime/docs/llvm-backend/ ,
but there are more. They are open to fixing such assumptions (or to at
least add a command line parameter to disable them), but I'm not aware
of anyone actually working on LLVM to do this (and I'm not going to do
that myself either).
Finally, it is not possible at this time to combine units compiled with
a regular code generator with units compiled with LLVM due to
differences in the PPU format between the two. I don't know if it will
be possible to solve this without a significant rewrite of in particular
our handling of inline functions.
Just to say: don't get your hopes up that it will just be a simple
"recompile and take advantage of all LLVM features", especially in the
beginning.
Jonas
More information about the fpc-devel
mailing list