-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SIMD problems when mixing llvm and non-llvm code #73454
Comments
I couldn't figure out the best area label to add to this issue. If you have write-permissions please help me learn by adding exactly one area label. |
This is another instance of the same problem #73003 Basically as long as we have a fallback execution engine (JIT or interpreter) that doesn't support some intrinsic (or returns |
@lambdageek @fanyang-mono -- with #74357 merged(backported), I think we can move this to 8.0.0 ? |
I think so. If @vargaz has some idea of a quick fix for this, he could move it back later. |
we need to also do something with calling conventions |
Partially reverts dotnet#68991 When LLVM code calls non-LLVM code it will pass arguments in SIMD registers which the non-LLVM code doesn't expect Fixes dotnet#73454 (issue 1)
Partially reverts #68991 When LLVM code calls non-LLVM code it will pass arguments in SIMD registers which the non-LLVM code doesn't expect Fixes #73454 (issue 1) Co-authored-by: Aleksey Kliger <[email protected]>
@vargaz Sorry about that - created a dummy default branch in that repo so that this never happens again. |
Moving this issue to .NET8, since we didn't had the bandwidth to handle it during .NET7. |
@fanyang-mono with recent intrinsic implementations and reverting for removing fallback paths, can this be closed? |
I tested both cases with miniJIT and normal AOT with LLVM and both are working. However, I encountered failures during running fullAOT with LLVM versions of both cases. I'll investigate further what is causing these failures. |
I ran additional tests on osx-arm64 and these are the results:
|
Based on @matouskozak's testing, the SIMD behavior between various codegen engines are aligned now. Closing this issue. |
Description
Currently on mono, SIMD is only supported when using LLVM compiled code. This can lead to various problems when mixing llvm and non-llvm compiled code. This mixing can happen for various reasons:
LLVM code passes SIMD types in SIMD registers, while JITted code passes them on the stack.
Testcase:
This will fail when AOT-ed using --aot=llvm
Reproduction Steps
.
Expected behavior
.
Actual behavior
.
Regression?
No response
Known Workarounds
No response
Configuration
No response
Other information
No response
The text was updated successfully, but these errors were encountered: