diff options
Diffstat (limited to 'llvm/include/llvm/CodeGen/TargetCallingConv.h')
-rw-r--r-- | llvm/include/llvm/CodeGen/TargetCallingConv.h | 56 |
1 files changed, 24 insertions, 32 deletions
diff --git a/llvm/include/llvm/CodeGen/TargetCallingConv.h b/llvm/include/llvm/CodeGen/TargetCallingConv.h index df974b499851..29e644898f6b 100644 --- a/llvm/include/llvm/CodeGen/TargetCallingConv.h +++ b/llvm/include/llvm/CodeGen/TargetCallingConv.h @@ -39,12 +39,14 @@ namespace ISD { unsigned IsPreallocated : 1; ///< ByVal without the copy unsigned IsSplitEnd : 1; ///< Last part of a split unsigned IsSwiftSelf : 1; ///< Swift self parameter + unsigned IsSwiftAsync : 1; ///< Swift async context parameter unsigned IsSwiftError : 1; ///< Swift error parameter unsigned IsCFGuardTarget : 1; ///< Control Flow Guard target unsigned IsHva : 1; ///< HVA field for unsigned IsHvaStart : 1; ///< HVA structure start unsigned IsSecArgPass : 1; ///< Second argument - unsigned ByValOrByRefAlign : 4; ///< Log 2 of byval/byref alignment + unsigned MemAlign : 4; ///< Log 2 of alignment when arg is passed in memory + ///< (including byval/byref) unsigned OrigAlign : 5; ///< Log 2 of original alignment unsigned IsInConsecutiveRegsLast : 1; unsigned IsInConsecutiveRegs : 1; @@ -55,19 +57,14 @@ namespace ISD { unsigned PointerAddrSpace; ///< Address space of pointer argument - /// Set the alignment used by byref or byval parameters. - void setAlignImpl(Align A) { - ByValOrByRefAlign = encode(A); - assert(getNonZeroByValAlign() == A && "bitfield overflow"); - } - public: ArgFlagsTy() - : IsZExt(0), IsSExt(0), IsInReg(0), IsSRet(0), IsByVal(0), IsByRef(0), - IsNest(0), IsReturned(0), IsSplit(0), IsInAlloca(0), IsPreallocated(0), - IsSplitEnd(0), IsSwiftSelf(0), IsSwiftError(0), IsCFGuardTarget(0), - IsHva(0), IsHvaStart(0), IsSecArgPass(0), ByValOrByRefAlign(0), - OrigAlign(0), IsInConsecutiveRegsLast(0), IsInConsecutiveRegs(0), + : IsZExt(0), IsSExt(0), IsInReg(0), IsSRet(0), IsByVal(0), IsByRef(0), + IsNest(0), IsReturned(0), IsSplit(0), IsInAlloca(0), + IsPreallocated(0), IsSplitEnd(0), IsSwiftSelf(0), IsSwiftAsync(0), + IsSwiftError(0), IsCFGuardTarget(0), IsHva(0), IsHvaStart(0), + IsSecArgPass(0), MemAlign(0), OrigAlign(0), + IsInConsecutiveRegsLast(0), IsInConsecutiveRegs(0), IsCopyElisionCandidate(0), IsPointer(0), ByValOrByRefSize(0), PointerAddrSpace(0) { static_assert(sizeof(*this) == 3 * sizeof(unsigned), "flags are too big"); @@ -100,6 +97,9 @@ namespace ISD { bool isSwiftSelf() const { return IsSwiftSelf; } void setSwiftSelf() { IsSwiftSelf = 1; } + bool isSwiftAsync() const { return IsSwiftAsync; } + void setSwiftAsync() { IsSwiftAsync = 1; } + bool isSwiftError() const { return IsSwiftError; } void setSwiftError() { IsSwiftError = 1; } @@ -119,7 +119,7 @@ namespace ISD { void setNest() { IsNest = 1; } bool isReturned() const { return IsReturned; } - void setReturned() { IsReturned = 1; } + void setReturned(bool V = true) { IsReturned = V; } bool isInConsecutiveRegs() const { return IsInConsecutiveRegs; } void setInConsecutiveRegs(bool Flag = true) { IsInConsecutiveRegs = Flag; } @@ -141,34 +141,26 @@ namespace ISD { bool isPointer() const { return IsPointer; } void setPointer() { IsPointer = 1; } - LLVM_ATTRIBUTE_DEPRECATED(unsigned getByValAlign() const, - "Use getNonZeroByValAlign() instead") { - MaybeAlign A = decodeMaybeAlign(ByValOrByRefAlign); - return A ? A->value() : 0; + Align getNonZeroMemAlign() const { + return decodeMaybeAlign(MemAlign).valueOrOne(); } + + void setMemAlign(Align A) { + MemAlign = encode(A); + assert(getNonZeroMemAlign() == A && "bitfield overflow"); + } + Align getNonZeroByValAlign() const { - MaybeAlign A = decodeMaybeAlign(ByValOrByRefAlign); + assert(isByVal()); + MaybeAlign A = decodeMaybeAlign(MemAlign); assert(A && "ByValAlign must be defined"); return *A; } - void setByValAlign(Align A) { - assert(isByVal() && !isByRef()); - setAlignImpl(A); - } - - void setByRefAlign(Align A) { - assert(!isByVal() && isByRef()); - setAlignImpl(A); - } - LLVM_ATTRIBUTE_DEPRECATED(unsigned getOrigAlign() const, - "Use getNonZeroOrigAlign() instead") { - MaybeAlign A = decodeMaybeAlign(OrigAlign); - return A ? A->value() : 0; - } Align getNonZeroOrigAlign() const { return decodeMaybeAlign(OrigAlign).valueOrOne(); } + void setOrigAlign(Align A) { OrigAlign = encode(A); assert(getNonZeroOrigAlign() == A && "bitfield overflow"); |