Clang accepts preserve_all for AArch64 while it is missing form the backed.
Fixes #58145
Paths
| Differential D135652
[AArch64] Add preserve_all calling convention. ClosedPublic Authored by danielkiss on Oct 11 2022, 1:37 AM.
Details Summary Clang accepts preserve_all for AArch64 while it is missing form the backed. Fixes #58145
Diff Detail Event TimelineComment Actions Precommit CI found a relevant issue. Also, can you add release notes to Clang for the improvement? Also, is there a reason to support preserve_all but not preserve_most given their relationship? Comment Actions
Fix and added.
There is support for preserve_most already, works as expected. Comment Actions
Oh, well, that's all the more reason to support this work -- thank you for the fix! The Clang bits LGTM, but I'll leave it to LLVM folks to review that side of things. danielkiss marked an inline comment as done. Comment ActionsTo accommodate better to the vector ABI, AAPCS the vector parameter registers are not preserved by the callee but save the whole vector registers.
danielkiss added inline comments.
This revision is now accepted and ready to land.Apr 27 2023, 2:55 PM This revision was landed with ongoing or failed builds.Apr 28 2023, 5:55 AM Closed by commit rGd75e70d7ae1f: [AArch64] Add preserve_all calling convention. (authored by danielkiss). · Explain Why This revision was automatically updated to reflect the committed changes.
Revision Contents
Diff 467584 clang/docs/ReleaseNotes.rst
clang/include/clang/Basic/AttrDocs.td
llvm/docs/LangRef.rst
llvm/docs/ReleaseNotes.rst
llvm/lib/Target/AArch64/AArch64CallingConvention.td
llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp
llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp
llvm/lib/Target/ARM/ARMISelLowering.cpp
llvm/test/CodeGen/AArch64/arm64-preserve-all.ll
llvm/test/CodeGen/AArch64/preserve.ll
llvm/test/CodeGen/AArch64/tailcall-ccmismatch2.ll
|
Please clarify which bits are actually getting preserved. It looks like it's the low 64 bits of each vector register?