[all-commits] [llvm/llvm-project] 516634: [SVE][AArch64] Refine hasSVEArgsOrReturn

Matthew Devereau via All-commits all-commits at lists.llvm.org
Fri Jul 1 06:26:27 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 5166345f50412f1a380948c18809545c4b7a9bd3
      https://github.com/llvm/llvm-project/commit/5166345f50412f1a380948c18809545c4b7a9bd3
  Author: Matt Devereau <matthew.devereau at arm.com>
  Date:   2022-07-01 (Fri, 01 Jul 2022)

  Changed paths:
    M llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
    M llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
    M llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h
    M llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp
    M llvm/lib/Target/AArch64/AArch64RegisterInfo.h
    M llvm/test/CodeGen/AArch64/sve-calling-convention-mixed.ll

  Log Message:
  -----------
  [SVE][AArch64] Refine hasSVEArgsOrReturn

As described in aapcs64 (https://github.com/ARM-software/abi-aa/blob/2022Q1/aapcs64/aapcs64.rst#scalable-vector-registers)
AAVPCS is used only when registers z0-z7 take an SVE argument. This fixes the case where floats occupy the lower bits
of registers z0-z7 but SVE arguments in registers greater than z7 cause a function to use AAVPCS where it should use AAPCS.

Moving SVE function deduction from AArch64RegisterInfo::hasSVEArgsOrReturn to AArch64TargetLowering::LowerFormalArguments
where physical register lowering is more accurate fixes this.

Differential Revision: https://reviews.llvm.org/D127209




More information about the All-commits mailing list