| Thread overview | ||||||||
|---|---|---|---|---|---|---|---|---|
|
September 27, 2016 ThinLTO on OS X! | ||||
|---|---|---|---|---|
| ||||
Hi all,
The new XCode 8 features LLVM's ThinLTO in the linker. With some patching in LDC, I got it to work pretty easily. The result:
<file b.d>
```
extern(C) void doesNothing() {}
```
<file a.d>
```
extern(C) void doesNothing(); // declaration only
void main() {
for (ulong i = 0; i < 100_000_000; ++i) {
doesNothing();
}
}
```
Separate compilation:
> ../bin/ldc2 -c b.d -O3 -of=b.o
> ../bin/ldc2 a.d b.o -of=a -O3
> time ./a
./a 1.77s user 0.01s system 98% cpu 1.802 total
Separate compilation with ThinLTO:
> ../bin/ldc2 -c b.d -O3 -of=bthin.o -thinlto
> ../bin/ldc2 a.d bthin.o -of=athin -O3 -thinlto
> time ./athin
./athin 0.00s user 0.00s system 61% cpu 0.006 total
BAM!
PR incoming.
I'd like your input for the commandline flag name.
| ||||
September 27, 2016 Re: ThinLTO on OS X! | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Johan Engelen | On Tuesday, 27 September 2016 at 18:52:46 UTC, Johan Engelen wrote: > Hi all, > The new XCode 8 features LLVM's ThinLTO in the linker. For more information: http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html | |||
September 27, 2016 Re: ThinLTO on OS X! | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Johan Engelen | On Tuesday, 27 September 2016 at 18:52:46 UTC, Johan Engelen wrote: > > PR incoming. https://github.com/ldc-developers/ldc/pull/1793 | |||
October 07, 2016 Re: ThinLTO on OS X! | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Johan Engelen | Does this mean that separate and incremental compilation will now produce the same optimal code as all-at-once compilation? In other words, do we no longer have to do all-at-once compilation to get minimal file size or optimal code gen?
--
Marco
| |||
October 07, 2016 Re: ThinLTO on OS X! | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Marco Leise | On Friday, 7 October 2016 at 15:42:08 UTC, Marco Leise wrote: > Does this mean that separate and incremental compilation will now produce the same optimal code as all-at-once compilation? In other words, do we no longer have to do all-at-once compilation to get minimal file size or optimal code gen? Yes, almost. http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html (note: it's still work-in-progress, I'm slowly tackling problems as they arise) | |||
October 26, 2016 Re: ThinLTO on OS X! | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Johan Engelen | On Tuesday, 27 September 2016 at 18:52:46 UTC, Johan Engelen wrote:
> Hi all,
> The new XCode 8 features LLVM's ThinLTO in the linker. With some patching in LDC, I got it to work pretty easily.
A brief update.
So there were a number of issues to be straightened out, some in LDC, some in LLVM, but now I think things are starting to look good for LTO :)
What is super cool is that when you have mixed C++/D source, and are using Clang/LDC, you get cross-language inlining with LTO! ^_^
<file b.cpp>
```
void doesNothing() {}
```
<file a.d>
```
extern(C++) void doesNothing(); // declaration only
void main() {
for (ulong i = 0; i < 100_000_000; ++i) {
doesNothing();
}
}
```
The runtime is zero of the program when using `flto=thin` for both clang and LDC.
Without LTO, it takes a few seconds.
cheers,
Johan
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply