LLVM: include/llvm/CodeGen/TargetCallingConv.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef LLVM_CODEGEN_TARGETCALLINGCONV_H
14#define LLVM_CODEGEN_TARGETCALLINGCONV_H
15
20#include
21#include
22#include
23
24namespace llvm {
25namespace ISD {
26
28 private:
29 unsigned IsZExt : 1;
30 unsigned IsSExt : 1;
31 unsigned IsNoExt : 1;
32 unsigned IsInReg : 1;
33 unsigned IsSRet : 1;
34 unsigned IsByVal : 1;
35 unsigned IsByRef : 1;
36 unsigned IsNest : 1;
37 unsigned IsReturned : 1;
38 unsigned IsSplit : 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;
46 unsigned IsHva : 1;
47 unsigned IsHvaStart : 1;
48 unsigned IsSecArgPass : 1;
49 unsigned MemAlign : 6;
50
51
52 unsigned OrigAlign : 5;
53 unsigned IsInConsecutiveRegsLast : 1;
54 unsigned IsInConsecutiveRegs : 1;
55 unsigned IsCopyElisionCandidate : 1;
56 unsigned IsPointer : 1;
57
58 unsigned IsVarArg : 1;
59
60 unsigned ByValOrByRefSize = 0;
61
62 unsigned PointerAddrSpace = 0;
63
64 public:
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");
74 }
75
76 bool isZExt() const { return IsZExt; }
78
79 bool isSExt() const { return IsSExt; }
81
82 bool isNoExt() const { return IsNoExt; }
84
85 bool isInReg() const { return IsInReg; }
87
88 bool isSRet() const { return IsSRet; }
90
91 bool isByVal() const { return IsByVal; }
93
94 bool isByRef() const { return IsByRef; }
96
97 bool isInAlloca() const { return IsInAlloca; }
99
102
105
108
111
114
115 bool isHva() const { return IsHva; }
117
120
123
124 bool isNest() const { return IsNest; }
126
129
132
135 IsInConsecutiveRegsLast = Flag;
136 }
137
138 bool isSplit() const { return IsSplit; }
140
143
146
149
150 bool isVarArg() const { return IsVarArg; }
152
156
161
165 assert(A && "ByValAlign must be defined");
166 return *A;
167 }
168
172
177
180 return ByValOrByRefSize;
181 }
184 ByValOrByRefSize = S;
185 }
186
189 return ByValOrByRefSize;
190 }
193 ByValOrByRefSize = S;
194 }
195
198};
199
200
201
202
203
206
208
209
210
212
213
216
217
219
221
222
223
224
226
231
235
240 };
241
242
243
244
245
248
250
251
253
254
256
257
259
260
261
262
264
269 };
270
271}
272}
273
274#endif
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.
Definition TargetCallingConv.h:27
bool isNest() const
Definition TargetCallingConv.h:124
bool isSplitEnd() const
Definition TargetCallingConv.h:141
bool isHvaStart() const
Definition TargetCallingConv.h:118
void setHva()
Definition TargetCallingConv.h:116
void setSwiftAsync()
Definition TargetCallingConv.h:107
bool isPointer() const
Definition TargetCallingConv.h:147
void setSExt()
Definition TargetCallingConv.h:80
bool isInConsecutiveRegs() const
Definition TargetCallingConv.h:130
bool isInReg() const
Definition TargetCallingConv.h:85
void setInConsecutiveRegs(bool Flag=true)
Definition TargetCallingConv.h:131
void setByVal()
Definition TargetCallingConv.h:92
bool isCopyElisionCandidate() const
Definition TargetCallingConv.h:144
void setSplit()
Definition TargetCallingConv.h:139
void setVarArg()
Definition TargetCallingConv.h:151
bool isInAlloca() const
Definition TargetCallingConv.h:97
void setPreallocated()
Definition TargetCallingConv.h:101
void setCopyElisionCandidate()
Definition TargetCallingConv.h:145
void setPointer()
Definition TargetCallingConv.h:148
bool isSRet() const
Definition TargetCallingConv.h:88
Align getNonZeroOrigAlign() const
Definition TargetCallingConv.h:169
bool isSecArgPass() const
Definition TargetCallingConv.h:121
bool isSwiftSelf() const
Definition TargetCallingConv.h:103
void setByRef()
Definition TargetCallingConv.h:95
void setPointerAddrSpace(unsigned AS)
Definition TargetCallingConv.h:197
unsigned getPointerAddrSpace() const
Definition TargetCallingConv.h:196
bool isHva() const
Definition TargetCallingConv.h:115
bool isZExt() const
Definition TargetCallingConv.h:76
bool isNoExt() const
Definition TargetCallingConv.h:82
void setSwiftError()
Definition TargetCallingConv.h:110
bool isSplit() const
Definition TargetCallingConv.h:138
void setNest()
Definition TargetCallingConv.h:125
void setZExt()
Definition TargetCallingConv.h:77
unsigned getByRefSize() const
Definition TargetCallingConv.h:187
void setReturned(bool V=true)
Definition TargetCallingConv.h:128
void setByRefSize(unsigned S)
Definition TargetCallingConv.h:191
bool isSwiftError() const
Definition TargetCallingConv.h:109
void setInAlloca()
Definition TargetCallingConv.h:98
bool isSExt() const
Definition TargetCallingConv.h:79
unsigned getByValSize() const
Definition TargetCallingConv.h:178
void setSRet()
Definition TargetCallingConv.h:89
bool isByVal() const
Definition TargetCallingConv.h:91
bool isInConsecutiveRegsLast() const
Definition TargetCallingConv.h:133
void setSwiftSelf()
Definition TargetCallingConv.h:104
bool isReturned() const
Definition TargetCallingConv.h:127
void setNoExt()
Definition TargetCallingConv.h:83
Align getNonZeroMemAlign() const
Definition TargetCallingConv.h:153
void setInReg()
Definition TargetCallingConv.h:86
void setHvaStart()
Definition TargetCallingConv.h:119
void setByValSize(unsigned S)
Definition TargetCallingConv.h:182
void setCFGuardTarget()
Definition TargetCallingConv.h:113
void setInConsecutiveRegsLast(bool Flag=true)
Definition TargetCallingConv.h:134
void setSplitEnd()
Definition TargetCallingConv.h:142
bool isPreallocated() const
Definition TargetCallingConv.h:100
void setSecArgPass()
Definition TargetCallingConv.h:122
bool isVarArg() const
Definition TargetCallingConv.h:150
bool isSwiftAsync() const
Definition TargetCallingConv.h:106
bool isByRef() const
Definition TargetCallingConv.h:94
void setOrigAlign(Align A)
Definition TargetCallingConv.h:173
void setMemAlign(Align A)
Definition TargetCallingConv.h:157
bool isCFGuardTarget() const
Definition TargetCallingConv.h:112
ArgFlagsTy()
Definition TargetCallingConv.h:65
Align getNonZeroByValAlign() const
Definition TargetCallingConv.h:162
bool Used
Definition TargetCallingConv.h:215
static const unsigned NoArgIndex
Sentinel value for implicit machine-level input arguments.
Definition TargetCallingConv.h:220
Type * OrigTy
Original IR type of the argument.
Definition TargetCallingConv.h:214
InputArg(ArgFlagsTy Flags, MVT VT, EVT ArgVT, Type *OrigTy, bool Used, unsigned OrigArgIndex, unsigned PartOffset)
Definition TargetCallingConv.h:227
bool isOrigArg() const
Definition TargetCallingConv.h:232
MVT VT
Legalized type of this argument part.
Definition TargetCallingConv.h:207
unsigned PartOffset
Offset in bytes of current input value relative to the beginning of original argument.
Definition TargetCallingConv.h:225
EVT ArgVT
Usually the non-legalized type of the argument, which is the EVT corresponding to the OrigTy IR type.
Definition TargetCallingConv.h:211
unsigned getOrigArgIndex() const
Definition TargetCallingConv.h:236
unsigned OrigArgIndex
Index original Function's argument.
Definition TargetCallingConv.h:218
ArgFlagsTy Flags
Definition TargetCallingConv.h:205
MVT VT
Definition TargetCallingConv.h:249
unsigned PartOffset
Offset in bytes of current output value relative to the beginning of original argument.
Definition TargetCallingConv.h:263
OutputArg(ArgFlagsTy Flags, MVT VT, EVT ArgVT, Type *OrigTy, unsigned OrigArgIndex, unsigned PartOffset)
Definition TargetCallingConv.h:265
Type * OrigTy
Original IR type of the argument.
Definition TargetCallingConv.h:255
EVT ArgVT
Non-legalized type of the argument.
Definition TargetCallingConv.h:252
unsigned OrigArgIndex
Index original Function's argument.
Definition TargetCallingConv.h:258
ArgFlagsTy Flags
Definition TargetCallingConv.h:247
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.