-
Notifications
You must be signed in to change notification settings - Fork 4.9k
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # 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)
@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: