I've seen from this reply in a thread from 2011 that DMD will not inline functions that contain inline assembly. Is this still the case?
Thread overview | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
November 11, 2021 Is DMD still not inlining "inline asm"? | ||||
---|---|---|---|---|
| ||||
November 11, 2021 Re: Is DMD still not inlining "inline asm"? | ||||
---|---|---|---|---|
| ||||
Posted in reply to rempas | 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.
|
November 11, 2021 Re: Is DMD still not inlining "inline asm"? | ||||
---|---|---|---|---|
| ||||
Posted in reply to rempas | On Thursday, 11 November 2021 at 08:58:43 UTC, rempas wrote: >I've seen from this 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. |
November 11, 2021 Re: Is DMD still not inlining "inline asm"? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Adam D Ruppe | 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! |
November 11, 2021 Re: Is DMD still not inlining "inline asm"? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Basile B. | 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 |
November 11, 2021 Re: Is DMD still not inlining "inline asm"? | ||||
---|---|---|---|---|
| ||||
Posted in reply to rempas | 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. |
November 12, 2021 Re: Is DMD still not inlining "inline asm"? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Basile B. | 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.
|
November 12, 2021 Re: Is DMD still not inlining "inline asm"? | ||||
---|---|---|---|---|
| ||||
Posted in reply to max haughton | 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? |
November 12, 2021 Re: Is DMD still not inlining "inline asm"? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Elronnd | 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?
|
November 12, 2021 Re: Is DMD still not inlining "inline asm"? | ||||
---|---|---|---|---|
| ||||
Posted in reply to rempas | 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. |