[all-commits] [llvm/llvm-project] 5637ec: [ARM64EC 4/?] Add LLVM support for varargs calling...

Eli Friedman via All-commits all-commits at lists.llvm.org
Mon Sep 5 13:10:19 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 5637ec0983041b26cdcd2064d8ec6636f352e3c9
      https://github.com/llvm/llvm-project/commit/5637ec0983041b26cdcd2064d8ec6636f352e3c9
  Author: Eli Friedman <efriedma at quicinc.com>
  Date:   2022-09-05 (Mon, 05 Sep 2022)

  Changed paths:
    M llvm/lib/Target/AArch64/AArch64CallingConvention.h
    M llvm/lib/Target/AArch64/AArch64CallingConvention.td
    M llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
    M llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h
    M llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp
    A llvm/test/CodeGen/AArch64/arm64ec-varargs.ll

  Log Message:
  -----------
  [ARM64EC 4/?] Add LLVM support for varargs calling convention.

Part of patchset to add initial support for ARM64EC.

The ARM64EC calling convention is the same as ARM64 for non-varargs
functions, but for varargs, the convention is significantly different.
Basically, only x0-x3 registers are used for passing arguments, and x4
and x5 describe the address/size of the arguments passed in memory. (See
https://docs.microsoft.com/en-us/windows/uwp/porting/arm64ec-abi for
more details; see
https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention for
the x64 calling convention rules, which this convention needs to match.)

Note that this currently doesn't handle i128 arguments correctly; as
noted in review, that's sort of complicated to handle, so I'm leaving it
for a followup.

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




More information about the All-commits mailing list