diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp index f572772d3c980..aa208e397f5d9 100644 --- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -6569,22 +6569,22 @@ CCAssignFn *AArch64TargetLowering::CCAssignFnForCall(CallingConv::ID CC, return CC_AArch64_DarwinPCS; return Subtarget->isTargetILP32() ? CC_AArch64_DarwinPCS_ILP32_VarArg : CC_AArch64_DarwinPCS_VarArg; - case CallingConv::Win64: - if (IsVarArg) { - if (Subtarget->isWindowsArm64EC()) - return CC_AArch64_Arm64EC_VarArg; - return CC_AArch64_Win64_VarArg; - } - return CC_AArch64_Win64PCS; - case CallingConv::CFGuard_Check: - if (Subtarget->isWindowsArm64EC()) - return CC_AArch64_Arm64EC_CFGuard_Check; - return CC_AArch64_Win64_CFGuard_Check; - case CallingConv::AArch64_VectorCall: - case CallingConv::AArch64_SVE_VectorCall: - case CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X0: - case CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X2: - return CC_AArch64_AAPCS; + case CallingConv::Win64: + if (IsVarArg) { + if (Subtarget->isWindowsArm64EC()) + return CC_AArch64_Arm64EC_VarArg; + return CC_AArch64_Win64_VarArg; + } + return CC_AArch64_Win64PCS; + case CallingConv::CFGuard_Check: + if (Subtarget->isWindowsArm64EC()) + return CC_AArch64_Arm64EC_CFGuard_Check; + return CC_AArch64_Win64_CFGuard_Check; + case CallingConv::AArch64_VectorCall: + case CallingConv::AArch64_SVE_VectorCall: + case CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X0: + case CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X2: + return CC_AArch64_AAPCS; case CallingConv::ARM64EC_Thunk_X64: return CC_AArch64_Arm64EC_Thunk; case CallingConv::ARM64EC_Thunk_Native: diff --git a/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.h b/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.h index 10e69655f77e1..e3f1d25d68ff0 100644 --- a/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.h +++ b/llvm/lib/Target/AArch64/Utils/AArch64BaseInfo.h @@ -741,94 +741,94 @@ namespace AArch64PRCTX { } namespace AArch64II { - /// Target Operand Flag enum. - enum TOF { - //===------------------------------------------------------------------===// - // AArch64 Specific MachineOperand flags. - - MO_NO_FLAG, - - MO_FRAGMENT = 0x7, - - /// MO_PAGE - A symbol operand with this flag represents the pc-relative - /// offset of the 4K page containing the symbol. This is used with the - /// ADRP instruction. - MO_PAGE = 1, - - /// MO_PAGEOFF - A symbol operand with this flag represents the offset of - /// that symbol within a 4K page. This offset is added to the page address - /// to produce the complete address. - MO_PAGEOFF = 2, - - /// MO_G3 - A symbol operand with this flag (granule 3) represents the high - /// 16-bits of a 64-bit address, used in a MOVZ or MOVK instruction - MO_G3 = 3, - - /// MO_G2 - A symbol operand with this flag (granule 2) represents the bits - /// 32-47 of a 64-bit address, used in a MOVZ or MOVK instruction - MO_G2 = 4, - - /// MO_G1 - A symbol operand with this flag (granule 1) represents the bits - /// 16-31 of a 64-bit address, used in a MOVZ or MOVK instruction - MO_G1 = 5, - - /// MO_G0 - A symbol operand with this flag (granule 0) represents the bits - /// 0-15 of a 64-bit address, used in a MOVZ or MOVK instruction - MO_G0 = 6, - - /// MO_HI12 - This flag indicates that a symbol operand represents the bits - /// 13-24 of a 64-bit address, used in a arithmetic immediate-shifted-left- - /// by-12-bits instruction. - MO_HI12 = 7, - - /// MO_COFFSTUB - On a symbol operand "FOO", this indicates that the - /// reference is actually to the ".refptr.FOO" symbol. This is used for - /// stub symbols on windows. - MO_COFFSTUB = 0x8, - - /// MO_GOT - This flag indicates that a symbol operand represents the - /// address of the GOT entry for the symbol, rather than the address of - /// the symbol itself. - MO_GOT = 0x10, - - /// MO_NC - Indicates whether the linker is expected to check the symbol - /// reference for overflow. For example in an ADRP/ADD pair of relocations - /// the ADRP usually does check, but not the ADD. - MO_NC = 0x20, - - /// MO_TLS - Indicates that the operand being accessed is some kind of - /// thread-local symbol. On Darwin, only one type of thread-local access - /// exists (pre linker-relaxation), but on ELF the TLSModel used for the - /// referee will affect interpretation. - MO_TLS = 0x40, - - /// MO_DLLIMPORT - On a symbol operand, this represents that the reference - /// to the symbol is for an import stub. This is used for DLL import - /// storage class indication on Windows. - MO_DLLIMPORT = 0x80, - - /// MO_S - Indicates that the bits of the symbol operand represented by - /// MO_G0 etc are signed. - MO_S = 0x100, - - /// MO_PREL - Indicates that the bits of the symbol operand represented by - /// MO_G0 etc are PC relative. - MO_PREL = 0x200, - - /// MO_TAGGED - With MO_PAGE, indicates that the page includes a memory tag - /// in bits 56-63. - /// On a FrameIndex operand, indicates that the underlying memory is tagged - /// with an unknown tag value (MTE); this needs to be lowered either to an - /// SP-relative load or store instruction (which do not check tags), or to - /// an LDG instruction to obtain the tag value. - MO_TAGGED = 0x400, - - /// MO_ARM64EC_CALLMANGLE - Operand refers to the Arm64EC-mangled version - /// of a symbol, not the original. For dllimport symbols, this means it - /// uses "__imp_aux". For other symbols, this means it uses the mangled - /// ("#" prefix for C) name. - MO_ARM64EC_CALLMANGLE = 0x800, - }; +/// Target Operand Flag enum. +enum TOF { + //===------------------------------------------------------------------===// + // AArch64 Specific MachineOperand flags. + + MO_NO_FLAG, + + MO_FRAGMENT = 0x7, + + /// MO_PAGE - A symbol operand with this flag represents the pc-relative + /// offset of the 4K page containing the symbol. This is used with the + /// ADRP instruction. + MO_PAGE = 1, + + /// MO_PAGEOFF - A symbol operand with this flag represents the offset of + /// that symbol within a 4K page. This offset is added to the page address + /// to produce the complete address. + MO_PAGEOFF = 2, + + /// MO_G3 - A symbol operand with this flag (granule 3) represents the high + /// 16-bits of a 64-bit address, used in a MOVZ or MOVK instruction + MO_G3 = 3, + + /// MO_G2 - A symbol operand with this flag (granule 2) represents the bits + /// 32-47 of a 64-bit address, used in a MOVZ or MOVK instruction + MO_G2 = 4, + + /// MO_G1 - A symbol operand with this flag (granule 1) represents the bits + /// 16-31 of a 64-bit address, used in a MOVZ or MOVK instruction + MO_G1 = 5, + + /// MO_G0 - A symbol operand with this flag (granule 0) represents the bits + /// 0-15 of a 64-bit address, used in a MOVZ or MOVK instruction + MO_G0 = 6, + + /// MO_HI12 - This flag indicates that a symbol operand represents the bits + /// 13-24 of a 64-bit address, used in a arithmetic immediate-shifted-left- + /// by-12-bits instruction. + MO_HI12 = 7, + + /// MO_COFFSTUB - On a symbol operand "FOO", this indicates that the + /// reference is actually to the ".refptr.FOO" symbol. This is used for + /// stub symbols on windows. + MO_COFFSTUB = 0x8, + + /// MO_GOT - This flag indicates that a symbol operand represents the + /// address of the GOT entry for the symbol, rather than the address of + /// the symbol itself. + MO_GOT = 0x10, + + /// MO_NC - Indicates whether the linker is expected to check the symbol + /// reference for overflow. For example in an ADRP/ADD pair of relocations + /// the ADRP usually does check, but not the ADD. + MO_NC = 0x20, + + /// MO_TLS - Indicates that the operand being accessed is some kind of + /// thread-local symbol. On Darwin, only one type of thread-local access + /// exists (pre linker-relaxation), but on ELF the TLSModel used for the + /// referee will affect interpretation. + MO_TLS = 0x40, + + /// MO_DLLIMPORT - On a symbol operand, this represents that the reference + /// to the symbol is for an import stub. This is used for DLL import + /// storage class indication on Windows. + MO_DLLIMPORT = 0x80, + + /// MO_S - Indicates that the bits of the symbol operand represented by + /// MO_G0 etc are signed. + MO_S = 0x100, + + /// MO_PREL - Indicates that the bits of the symbol operand represented by + /// MO_G0 etc are PC relative. + MO_PREL = 0x200, + + /// MO_TAGGED - With MO_PAGE, indicates that the page includes a memory tag + /// in bits 56-63. + /// On a FrameIndex operand, indicates that the underlying memory is tagged + /// with an unknown tag value (MTE); this needs to be lowered either to an + /// SP-relative load or store instruction (which do not check tags), or to + /// an LDG instruction to obtain the tag value. + MO_TAGGED = 0x400, + + /// MO_ARM64EC_CALLMANGLE - Operand refers to the Arm64EC-mangled version + /// of a symbol, not the original. For dllimport symbols, this means it + /// uses "__imp_aux". For other symbols, this means it uses the mangled + /// ("#" prefix for C) name. + MO_ARM64EC_CALLMANGLE = 0x800, +}; } // end namespace AArch64II //===----------------------------------------------------------------------===//