[fpc-pascal] inlining functions
jonas at freepascal.org
Sat Jan 12 13:31:30 CET 2019
On 12/01/19 13:05, denisgolovan wrote:
> 12.01.2019, 14:53, "Jonas Maebe" <jonas at freepascal.org>:
>> Not at this time (unless you use the LLVM backend).
> Could you give some hints on how to enable WPO/LTO under LLVM backend?
> http://wiki.freepascal.org/LLVM does not seem to mention anything on that.
It's not yet integrated in the compiler, so you have to do it manually
a) compile everything with -al (including the RTL etc; add OPT="-a" to
the make command)
b) go in all the unit directories, and assemble the files to bitcode
using something like this:
for file in *.ll; do
clang -emit-llvm -O -c $file
c) compile your program with -a -s and do the same as in step b) for
d) edit the generated link.res file, and replace all references to unit
files ending in ".o" with the same files ending in ".bc"
If you used a custom clang rather than the one installed by default on
your system, you will also have to specify the path to the libLTO that
the linker should use. You have to do this on the ld command line in
ppas.sh. You can find the correct parameter by compiling a test
C-program with "clang -flto -### test.c", as this will print the ld
invocation to use. E.g. on macOS, it will be something like
On Linux, it's something like
(or a different optimization level)
>> However, what you actually can do, is manually recompile all units of your program
>> multiple times. While this won't help with inline functions called
>> before they are parsed in those same units, it will allow inlining of
>> function bodies in other units that were not available during the first
>> compilation due to dependency cycles.
> It does not look too practical, right?
That's why I mentioned it's a manual process.
More information about the fpc-pascal