Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
March 18, 2018 Does the compiler inline the predicate functions to std.algorithm.sort? | ||||
---|---|---|---|---|
| ||||
I can't read assembly but it seems to me that it doesn't: https://godbolt.org/g/PCsnPT I think C++'s sort can take a "function object" that can get inlined. |
March 18, 2018 Re: Does the compiler inline the predicate functions to std.algorithm.sort? | ||||
---|---|---|---|---|
| ||||
Posted in reply to tipdbmp | On Sunday, 18 March 2018 at 12:59:06 UTC, tipdbmp wrote:
> I can't read assembly but it seems to me that it doesn't: https://godbolt.org/g/PCsnPT
> I think C++'s sort can take a "function object" that can get inlined.
add "-O3" also to the compiler switches.
|
March 18, 2018 Re: Does the compiler inline the predicate functions to std.algorithm.sort? | ||||
---|---|---|---|---|
| ||||
Posted in reply to tipdbmp | On Sunday, 18 March 2018 at 12:59:06 UTC, tipdbmp wrote:
> I can't read assembly but it seems to me that it doesn't: https://godbolt.org/g/PCsnPT
> I think C++'s sort can take a "function object" that can get inlined.
Correct it does not get in-lined.
Even with -O3 it does not.
The reason is that the code the sort instantiation produces is too big for the inliner cost function.
If you have a look at the the cg file produced when you specify -vcg-ast you can see that it's a massive amount of code.
|
March 18, 2018 Re: Does the compiler inline the predicate functions to std.algorithm.sort? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Stefan Koch | On Sunday, 18 March 2018 at 14:15:37 UTC, Stefan Koch wrote: > On Sunday, 18 March 2018 at 12:59:06 UTC, tipdbmp wrote: >> I can't read assembly but it seems to me that it doesn't: https://godbolt.org/g/PCsnPT >> I think C++'s sort can take a "function object" that can get inlined. > > Correct it does not get in-lined. > Even with -O3 it does not. > > The reason is that the code the sort instantiation produces is too big for the inliner cost function. > > If you have a look at the the cg file produced when you specify -vcg-ast you can see that it's a massive amount of code. I believe the original poster was asking about the *predicate* to sort, which is indeed inlined with optimizations on. (@tipdbmp: The string gets turned into the function _D3std10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62Z__TQBvTiTiZQCdFNaNbNiNfKiKiZb. No references to it remain with -O3; the LLVM IR obtained with -output-ll might be easier to read than assembly.) — David |
March 19, 2018 Re: Does the compiler inline the predicate functions to std.algorithm.sort? | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Nadlinger | >(@tipdbmp: The string gets turned into the function _D3std10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62Z__TQBvTiTiZQCdFNaNbNiNfKiKiZb. No references to it remain with -O3; the LLVM IR obtained with -output-ll might be easier to read than assembly.) I see. It seems that ldc 1.8.0 with "-release -O2|3" inlines it, but dmd 2.079.0 with "-release" (no -O option?) does not. >the LLVM IR obtained with -output-ll might be easier to read than assembly.) I only seem to get assembly on d.godbolt.org, even with the -output-ll option. |
March 19, 2018 Re: Does the compiler inline the predicate functions to std.algorithm.sort? | ||||
---|---|---|---|---|
| ||||
Posted in reply to tipdbmp | On Monday, 19 March 2018 at 12:45:58 UTC, tipdbmp wrote: >>(@tipdbmp: The string gets turned into the function _D3std10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62Z__TQBvTiTiZQCdFNaNbNiNfKiKiZb. No references to it remain with -O3; the LLVM IR obtained with -output-ll might be easier to read than assembly.) > > I see. It seems that ldc 1.8.0 with "-release -O2|3" inlines it, but dmd 2.079.0 with "-release" (no -O option?) does not. DMD has a -inline flag to enable inlining - though LDC is a lot better in optimization than DMD and thus typically used for anything performance related. >>the LLVM IR obtained with -output-ll might be easier to read than assembly.) > I only seem to get assembly on d.godbolt.org, even with the -output-ll option. You can get IR on run.dlang.io by simply selecting LDC and hitting the IR button. |
March 19, 2018 Re: Does the compiler inline the predicate functions to std.algorithm.sort? | ||||
---|---|---|---|---|
| ||||
Posted in reply to tipdbmp | On Monday, 19 March 2018 at 12:45:58 UTC, tipdbmp wrote:
>>
>>the LLVM IR obtained with -output-ll might be easier to read than assembly.)
> I only seem to get assembly on d.godbolt.org, even with the -output-ll option.
On d.godbolt.org, you can get LLVM IR with a trick: use `-output-s=false -output-ll`.
-Johan
|
Copyright © 1999-2021 by the D Language Foundation