This patch implements the part of the calling convention
where SVE Vectors are passed by reference. This means the
caller must allocate stack space for these objects and
pass the address to the callee.
Details
Diff Detail
Event Timeline
- Added two fixes to DAGCombine where we need to bail out if the type is scalable (the tests ran into some assertion failures otherwise).
Please add a comment explaining each isScalableVector(), to make it clear why we're excluding them. Otherwise LGTM
llvm/test/CodeGen/AArch64/sve-calling-convention-byref.ll | ||
---|---|---|
9 | I just thought of this, but should scalable arguments be allowed for calls using the regular C calling convetion? If they are, do we need any additional changes to make that work? |
Thanks, I'll add some comments for these cases (and do this for future cases I find as well).
llvm/test/CodeGen/AArch64/sve-calling-convention-byref.ll | ||
---|---|---|
9 | The code that derives aarch64_sve_vector_pcs from the function signature (it takes and/or returns SVE vectors) already exists (in AArch64ISelLowering::LowerCall), so the aarch64_sve_vector_pcs is unnecessary here. |
I just thought of this, but should scalable arguments be allowed for calls using the regular C calling convetion? If they are, do we need any additional changes to make that work?