[fpc-devel] The 15k bounty: Optimizing executable speed for Linux x86 / LLVM
jonas at freepascal.org
Sat Nov 17 23:13:39 CET 2018
On 17/11/18 22:15, Simon Kissel wrote:
> How far of a way is that? Sadly we'll have to support some 32 bit
> platforms for a couple more years...
I really don't know. It's not something I have looked into, but I'm
afraid it will be messy.
> And how far away is getting this to run on Linux?
Getting it to work on Linux/x86-64 should be fairly easy. Other 64 bit
platforms (both architectures and OSes) should not be difficult either.
> And: Any language features or RTL stuff that does not yet work
> with FPC/LLVM?
Only the ones mentioned before:
* global variables are currently not treated as volatile by the LLVM
code generator, so if you use them to share values between threads with
explicit synchronisation, that will fail (as Sven explained)
* hardware exceptions (like segmentation faults, fpu exceptions and bus
errors) because LLVM does not model them. I could try to work around
this by making all accesses to all variables potentially referenced in
try/except blocks "volatile" (both in the blocks and afterwards), but
that would prevent many optimizations and it would not even guarantee to
solve all potential problems (since the LLVM code generator would still
assume that if those instructions trap, all behaviour afterwards is
undefined and hence it can optimize as if those instructions will never
trap; marking them as volatile won't change that: even if in many cases
the end result may be the same, it's not guaranteed).
The only work done on LLVM in this regard is some experimental
support for FPU exceptions in recent versions
but I have not yet added support for that yet (nor do I know how well it
works, or on which platforms it is supported).
> Bonus question: I don't know on which layer threads and exceptions are
> handled with LLVM - will you be able to make use of the improvements to
> TLS and Exception handling, in other words, can we combine the best
> of both worlds?
The only improvements to exception handling until now have been for the
LLVM target. The code I already submitted is generic though, and can be
used by non-LLVM targets as well.
TLS-based threadvar support needs to be implemented separately for LLVM,
but that should be fairly easy (it's just another way of declaring the
variable in the LLVM IR.
More information about the fpc-devel