Skip to content

Conversation

@imhameed
Copy link
Contributor

@imhameed imhameed commented Jun 1, 2021

Some functions never associate the mini IR source registers used with their
setret instructions with LLVM values because they unconditionally throw.

System.Runtime.Intrinsics.X86.Aes:Decrypt is an example of such a function;
when compiled for arm64, it never returns a value and unconditionally throws a
PlatformNotSupportedException.

We already had support for handling this for some, but not all, return value
passing conventions. Deduplicate this support and apply it uniformly to all
return value passing conventions that expect a populated mini IR source
register.

Make LLVMArgNone specifically mean "no return value"/"void return
type".

Split from #53132.

Partially fixes FullAOT compilation of System.Private.CoreLib.dll on arm64.

Some functions never associate a mini IR source register with an LLVM
value because they unconditionally throw.
`System.Runtime.Intrinsics.X86.Aes:Decrypt` is an example of such a
function; when compiled for arm64, it never returns a value and
unconditionally throws a `PlatformNotSupportedException`.

We already had support for handling this for some, but not all, return
value passing conventions. Deduplicate this support and apply it
uniformly to all return value passing conventions that expect a
populated mini IR source register.

Make `LLVMArgNone` specifically mean 'no return value'/`void` return
type.
@imhameed imhameed merged commit f4e01f5 into dotnet:main Jun 2, 2021
@ghost ghost locked as resolved and limited conversation to collaborators Jul 2, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants