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.
ISD namespace - This namespace contains an enum which represents all of the SelectionDAG node types a...
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
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.