13#ifndef LLVM_CODEGEN_TARGETCALLINGCONV_H
14#define LLVM_CODEGEN_TARGETCALLINGCONV_H
37 unsigned IsReturned : 1;
39 unsigned IsInAlloca : 1;
40 unsigned IsPreallocated : 1;
41 unsigned IsSplitEnd : 1;
42 unsigned IsSwiftSelf : 1;
43 unsigned IsSwiftAsync : 1;
44 unsigned IsSwiftError : 1;
45 unsigned IsCFGuardTarget : 1;
47 unsigned IsHvaStart : 1;
48 unsigned IsSecArgPass : 1;
49 unsigned MemAlign : 6;
52 unsigned OrigAlign : 5;
53 unsigned IsInConsecutiveRegsLast : 1;
54 unsigned IsInConsecutiveRegs : 1;
55 unsigned IsCopyElisionCandidate : 1;
56 unsigned IsPointer : 1;
58 unsigned IsVarArg : 1;
60 unsigned ByValOrByRefSize = 0;
62 unsigned PointerAddrSpace = 0;
66 : IsZExt(0), IsSExt(0), IsNoExt(0), IsInReg(0), IsSRet(0), IsByVal(0),
67 IsByRef(0), IsNest(0), IsReturned(0), IsSplit(0), IsInAlloca(0),
68 IsPreallocated(0), IsSplitEnd(0), IsSwiftSelf(0), IsSwiftAsync(0),
69 IsSwiftError(0), IsCFGuardTarget(0), IsHva(0), IsHvaStart(0),
70 IsSecArgPass(0), MemAlign(0), OrigAlign(0),
71 IsInConsecutiveRegsLast(0), IsInConsecutiveRegs(0),
72 IsCopyElisionCandidate(0), IsPointer(0), IsVarArg(0) {
73 static_assert(
sizeof(*this) == 4 *
sizeof(
unsigned),
"flags are too big");
76 bool isZExt()
const {
return IsZExt; }
79 bool isSExt()
const {
return IsSExt; }
88 bool isSRet()
const {
return IsSRet; }
115 bool isHva()
const {
return IsHva; }
135 IsInConsecutiveRegsLast = Flag;
165 assert(
A &&
"ByValAlign must be defined");
180 return ByValOrByRefSize;
184 ByValOrByRefSize = S;
189 return ByValOrByRefSize;
193 ByValOrByRefSize = S;
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
The instances of the Type class are immutable: once they are created, they are never changed.
This is an optimization pass for GlobalISel generic memory operations.
unsigned encode(MaybeAlign A)
Returns a representation of the alignment that encodes undefined as 0.
MaybeAlign decodeMaybeAlign(unsigned Value)
Dual operation of the encode function above.
This struct is a compact representation of a valid (non-zero power of two) alignment.
bool isInConsecutiveRegs() const
void setInConsecutiveRegs(bool Flag=true)
bool isCopyElisionCandidate() const
void setCopyElisionCandidate()
Align getNonZeroOrigAlign() const
bool isSecArgPass() const
void setPointerAddrSpace(unsigned AS)
unsigned getPointerAddrSpace() const
unsigned getByRefSize() const
void setReturned(bool V=true)
void setByRefSize(unsigned S)
bool isSwiftError() const
unsigned getByValSize() const
bool isInConsecutiveRegsLast() const
Align getNonZeroMemAlign() const
void setByValSize(unsigned S)
void setInConsecutiveRegsLast(bool Flag=true)
bool isPreallocated() const
bool isSwiftAsync() const
void setOrigAlign(Align A)
void setMemAlign(Align A)
bool isCFGuardTarget() const
Align getNonZeroByValAlign() const
OutputArg - This struct carries flags and a value for a single outgoing (actual) argument or outgoing...
unsigned PartOffset
Offset in bytes of current output value relative to the beginning of original argument.
OutputArg(ArgFlagsTy Flags, MVT VT, EVT ArgVT, Type *OrigTy, unsigned OrigArgIndex, unsigned PartOffset)
Type * OrigTy
Original IR type of the argument.
EVT ArgVT
Non-legalized type of the argument.
unsigned OrigArgIndex
Index original Function's argument.
This struct is a compact representation of a valid (power of two) or undefined (0) alignment.
Align valueOrOne() const
For convenience, returns a valid alignment or 1 if undefined.