I am improving the support of arm(aarch64) mods in the stdarch project. There are currently 500+ arm instructions
being blocked due to the issue
about llvm IR. We should have a way to generate Struct type llvm IR without paddings.
I studied the mechanism of generating llvm IR in rustc. At present, the compiler will
automatically add paddings when generating a Struct type llvm IR.(in this fuction)
I can think of two ways to tell the compiler not to add paddings: (1) Extend the #[repr]
attribute, such as #[repr(no_padding)] (2) Add a new attribute separately. Either of
them should be unstable, since I cannot think of a reliable method to ensure the safety
of IR. I can do the corresponding implementation, if agreed.
May I have some suggestion here and wether it may be necessary to submit an rfc?
I have thought about it too, and tried to modify the IR generating function so that it does not generate paddings when all the padding sizes are 0. But in this way, parameter indices errors have raised in many places during testing, and these errors all come from the check function of llvm. I don’t know the specific reason why they reported the error.
In other words, I am not sure when these paddings should exist, which is why I think the new attribute can only be unstable
I think the field projection code in rustc_codegen_llvm needs to be changed for the lack of the padding fields. This would still be the case if it was a new attribute.
Just a heads-up: I have a proof-of-concept implementation working which removes zero-sized padding from the emitted LLVM IR regardless of the ABI - see PR. It just needs some optimization.