Re: Is DMD still not inlining "inline asm"?

2021-11-14 Thread Guillaume Piolat via Digitalmars-d-learn

On Friday, 12 November 2021 at 00:46:05 UTC, Elronnd wrote:

On Thursday, 11 November 2021 at 13:22:15 UTC, Basile B. wrote:

As for now, I know no compiler that can do that.


GCC can do it.  Somewhat notoriously, LTO can lead to bugs from 
underspecified asm constraints following cross-TU inlining.


LDC can also do it with GCC asm constraints, however it is 
atrociously hard to get documentation and examples for this.


Re: Is DMD still not inlining "inline asm"?

2021-11-13 Thread Basile B. via Digitalmars-d-learn

On Friday, 12 November 2021 at 00:46:05 UTC, Elronnd wrote:

On Thursday, 11 November 2021 at 13:22:15 UTC, Basile B. wrote:

As for now, I know no compiler that can do that.


GCC can do it.  Somewhat notoriously,


you meant "infamously" ?

LTO can lead to bugs from underspecified asm constraints 
following cross-TU inlining.


I have missed the LTO train TBH, gotta try that once...


Re: Is DMD still not inlining "inline asm"?

2021-11-12 Thread rempas via Digitalmars-d-learn

On Friday, 12 November 2021 at 15:10:19 UTC, max haughton wrote:


Not always. The attribute is intended for naked asm since 
inlining could be completely wrong in this case.


Got that! Thanks for the info!


Re: Is DMD still not inlining "inline asm"?

2021-11-12 Thread max haughton via Digitalmars-d-learn

On Friday, 12 November 2021 at 11:32:16 UTC, rempas wrote:
On Thursday, 11 November 2021 at 19:22:33 UTC, max haughton 
wrote:


There's an attribute to tell it the function is safe to inline.


And can't you do that with inline asm?


Not always. The attribute is intended for naked asm since 
inlining could be completely wrong in this case.


Re: Is DMD still not inlining "inline asm"?

2021-11-12 Thread rempas via Digitalmars-d-learn

On Friday, 12 November 2021 at 00:46:05 UTC, Elronnd wrote:


GCC can do it.  Somewhat notoriously, LTO can lead to bugs from 
underspecified asm constraints following cross-TU inlining.


That's really interesting to hear! Do we have any cases where 
this happened to software that was used for production?


Re: Is DMD still not inlining "inline asm"?

2021-11-12 Thread rempas via Digitalmars-d-learn

On Thursday, 11 November 2021 at 19:22:33 UTC, max haughton wrote:


There's an attribute to tell it the function is safe to inline.


And can't you do that with inline asm?


Re: Is DMD still not inlining "inline asm"?

2021-11-11 Thread Elronnd via Digitalmars-d-learn

On Thursday, 11 November 2021 at 13:22:15 UTC, Basile B. wrote:

As for now, I know no compiler that can do that.


GCC can do it.  Somewhat notoriously, LTO can lead to bugs from 
underspecified asm constraints following cross-TU inlining.


Re: Is DMD still not inlining "inline asm"?

2021-11-11 Thread max haughton via Digitalmars-d-learn

On Thursday, 11 November 2021 at 17:29:33 UTC, rempas wrote:

On Thursday, 11 November 2021 at 13:22:15 UTC, Basile B. wrote:


Yes, this is still the case. A particularity of DMD inliner is 
that it does its job in the front-end, so inlining asm is 
totally impossible. Then, even if inlining was done in the 
backend inlining of asm would not be guaranteed because the 
byte code is generated at a very late stag, which causes 
problem with the registry allocator, the preservation of the 
stack, etc.


For example ldc2 does not inline a trival asm func 
https://godbolt.org/z/1W6r693Tq.


As for now, I know no compiler that can do that.


What? Not even GCC or Clang? Someone said that LDC2 does it 
with two ways in the thread I linked


There's an attribute to tell it the function is safe to inline.


Re: Is DMD still not inlining "inline asm"?

2021-11-11 Thread rempas via Digitalmars-d-learn

On Thursday, 11 November 2021 at 13:22:15 UTC, Basile B. wrote:


Yes, this is still the case. A particularity of DMD inliner is 
that it does its job in the front-end, so inlining asm is 
totally impossible. Then, even if inlining was done in the 
backend inlining of asm would not be guaranteed because the 
byte code is generated at a very late stag, which causes 
problem with the registry allocator, the preservation of the 
stack, etc.


For example ldc2 does not inline a trival asm func 
https://godbolt.org/z/1W6r693Tq.


As for now, I know no compiler that can do that.


What? Not even GCC or Clang? Someone said that LDC2 does it with 
two ways in the thread I linked


Re: Is DMD still not inlining "inline asm"?

2021-11-11 Thread rempas via Digitalmars-d-learn

On Thursday, 11 November 2021 at 12:05:14 UTC, Adam D Ruppe wrote:


You really shouldn't expect dmd to inline *anything*.

Or to optimize anything for that matter. That isn't its 
strength.


Oh yeah! I just thought to ask anyway! Thanks a lot for your time!


Re: Is DMD still not inlining "inline asm"?

2021-11-11 Thread Basile B. via Digitalmars-d-learn

On Thursday, 11 November 2021 at 08:58:43 UTC, rempas wrote:
I've seen from 
[this](https://forum.dlang.org/post/op.vrzngqeavxi10f@biotronic-laptop) reply in a thread from 2011 that DMD will not inline functions that contain inline assembly. Is this still the case?


Yes, this is still the case. A particularity of DMD inliner is 
that it does its job in the front-end, so inlining asm is totally 
impossible. Then, even if inlining was done in the backend 
inlining of asm would not be guaranteed because the byte code is 
generated at a very late stag, which causes problem with the 
registry allocator, the preservation of the stack, etc.


For example ldc2 does not inline a trival asm func 
https://godbolt.org/z/1W6r693Tq.


As for now, I know no compiler that can do that.


Re: Is DMD still not inlining "inline asm"?

2021-11-11 Thread Adam D Ruppe via Digitalmars-d-learn

On Thursday, 11 November 2021 at 08:58:43 UTC, rempas wrote:
I've seen from 
[this](https://forum.dlang.org/post/op.vrzngqeavxi10f@biotronic-laptop) reply in a thread from 2011 that DMD will not inline functions that contain inline assembly. Is this still the case?


You really shouldn't expect dmd to inline *anything*.

Or to optimize anything for that matter. That isn't its strength.