[CIR][ABI][AArch64][Lowering] Fix calls for struct types > 128 bits #1335
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In PR#1074 we introduced calls for struct types > 128 bits, but there's is an issue here.
This is meant to be a
memcpy
of the alloca instead of directly passing the alloca, just like in the OG. The PR was meant to use amemcpy
and later handle cases where we don't need thememcpy
.For example, running the following code snippet
tmp.c
usingbin/clang tmp.c -o tmp -Xclang -fclangir -Xclang -fclangir-call-conv-lowering --target=aarch64-none-linux-gnu
:gives 10 instead of 9, because we pass the pointer instead of a copy.
Relevant part of the OG LLVM output:
Current LLVM output through CIR:
So, there should be a memcpy.
This PR fixes this, and adds a comment/note for the future cases where we need to check if the copy is not needed. I have also updated the old test with structs having size > 128.