Fixes #35249
Adding clangs preserve_none call convention to std and lowering it to llvm.
llvm doc reference
I am a first time contributor so sorry for any confusion over what should be a simple patch!
- I split the callconv into a
x86_64_preserve_noneandaarch64_preserve_nonevariant - most callconvs seemed to be split by arch. If we'd rather have them just as one (.preserve_none, they are the same LLVM builtin) then I can that instead. Only these archs are supported according to LLVM docs. - Let me know if I've missed anything or the tests are insufficient - this is just being lowered to LLVM so I wasn't sure what rigor was required. I've confirmed via IR (and x86_64 asm) that its infact lowered.
Thanks!
Edit: Also if theres any docs to be updated assocated with this just point me to them
Fixes #35249
Adding clangs `preserve_none` call convention to std and lowering it to llvm.
[llvm doc reference](https://clang.llvm.org/docs/AttributeReference.html#preserve-none)
I am a first time contributor so sorry for any confusion over what should be a simple patch!
1. I split the callconv into a `x86_64_preserve_none` and `aarch64_preserve_none` variant - most callconvs seemed to be split by arch. If we'd rather have them just as one (`.preserve_none`, they are the same LLVM builtin) then I can that instead. Only these archs are supported according to LLVM docs.
2. Let me know if I've missed anything or the tests are insufficient - this is just being lowered to LLVM so I wasn't sure what rigor was required. I've confirmed via IR (and x86_64 asm) that its infact lowered.
Thanks!
Edit: Also if theres any docs to be updated assocated with this just point me to them