LLVM: include/llvm/IR/Statepoint.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16#ifndef LLVM_IR_STATEPOINT_H

17#define LLVM_IR_STATEPOINT_H

18

29#include

30#include

31#include

32#include

33#include

34

35namespace llvm {

36

37

38

41 GCTransition = 1,

42

43

44

45

46

47

48

50

51 MaskAll = 3

52};

53

54

55

56class GCRelocateInst;

57

58

59

60

62public:

66

68 if (const Function *CF = I->getCalledFunction())

69 return CF->getIntrinsicID() == Intrinsic::experimental_gc_statepoint;

70 return false;

71 }

72

74 return isa(V) && classof(cast(V));

75 }

76

77 enum {

84 };

85

86

89 }

90

91

95 cast(NumPatchBytesVal)->getZExtValue();

96 assert(isInt<32>(NumPatchBytes) && "should fit in 32 bits!");

97 return NumPatchBytes;

98 }

99

100

103 }

104

107 }

108

109

112 }

113

114

115

118 }

119

120

121

124 return FT->getReturnType();

125 }

126

127

128

130

134 }

135

139 return I;

140 }

141

144 }

145

148 return Opt->Inputs.begin();

150 }

153 return Opt->Inputs.end();

155 }

156

157

160 }

161

164 return Opt->Inputs.begin();

166 }

169 return Opt->Inputs.end();

171 }

172

173

176 }

177

178

179

182 return Opt->Inputs.begin();

184 }

185

186

189 return Opt->Inputs.end();

191 }

192

193

196 }

197

198

199

200

201

202

203 inline std::vector<const GCRelocateInst *> getGCRelocates() const;

204};

205

207 std::vector<const GCRelocateInst *> Result;

208

209

210

211

213 if (auto *Relocate = dyn_cast(U))

214 Result.push_back(Relocate);

215

216 auto *StatepointInvoke = dyn_cast(this);

217 if (!StatepointInvoke)

218 return Result;

219

220

221 LandingPadInst *LandingPad = StatepointInvoke->getLandingPadInst();

222

223

224 for (const User *LandingPadUser : LandingPad->users()) {

225 if (auto *Relocate = dyn_cast(LandingPadUser))

226 Result.push_back(Relocate);

227 }

228 return Result;

229}

230

231

232

233

234

238

241};

242

243

244

246

247

248

250

251}

252

253#endif

This file contains the simple types necessary to represent the attributes associated with functions a...

This file contains the declarations for the subclasses of Constant, which represent the different fla...

assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())

Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to callin...

std::optional< OperandBundleUse > getOperandBundle(StringRef Name) const

Return an operand bundle by name, if present.

User::op_iterator arg_begin()

Return the iterator pointing to the beginning of the argument list.

Type * getParamElementType(unsigned ArgNo) const

Extract the elementtype type for a parameter.

Value * getArgOperand(unsigned i) const

User::op_iterator arg_end()

Return the iterator pointing to the end of the argument list.

unsigned arg_size() const

Represents a gc.statepoint intrinsic call.

GCStatepointInst()=delete

uint32_t getNumPatchBytes() const

Return the number of patchable bytes associated with this statepoint.

const_op_iterator deopt_begin() const

const_op_iterator deopt_end() const

int getNumCallArgs() const

Number of arguments to be passed to the actual callee.

size_t actual_arg_size() const

Return the number of arguments to the underlying call.

iterator_range< const_op_iterator > actual_args() const

range adapter for actual call arguments

const_op_iterator gc_transition_args_begin() const

iterator_range< const_op_iterator > deopt_operands() const

range adapter for vm state arguments

GCStatepointInst(const GCStatepointInst &)=delete

uint64_t getID() const

Return the ID associated with this statepoint.

const_op_iterator gc_live_begin() const

Returns an iterator to the begining of the argument range describing gc live values for the statepoin...

uint64_t getFlags() const

const_op_iterator actual_arg_begin() const

Return an iterator to the begining of the arguments to the underlying call.

Function * getActualCalledFunction() const

Returns the function called if this is a wrapping a direct call, and null otherwise.

const_op_iterator actual_arg_end() const

Return an end iterator of the arguments to the underlying call.

iterator_range< const_op_iterator > gc_transition_args() const

range adapter for GC transition arguments

iterator_range< const_op_iterator > gc_live() const

range adapter for gc live arguments

const_op_iterator gc_live_end() const

Return an end iterator for the gc live range.

Type * getActualReturnType() const

Return the type of the value returned by the call underlying the statepoint.

static bool classof(const CallBase *I)

GCStatepointInst & operator=(const GCStatepointInst &)=delete

static bool classof(const Value *V)

Value * getActualCalledOperand() const

Return the value actually being called or invoked.

const_op_iterator gc_transition_args_end() const

std::vector< const GCRelocateInst * > getGCRelocates() const

Get list of all gc reloactes linked to this statepoint May contain several relocations for the same b...

The landingpad instruction holds all of the information necessary to generate correct exception handl...

The instances of the Type class are immutable: once they are created, they are never changed.

A Use represents the edge between a Value definition and its users.

LLVM Value Representation.

iterator_range< user_iterator > users()

A range adaptor for a pair of iterators.

This provides a very simple, boring adaptor for a begin and end iterator into a range type.

This is an optimization pass for GlobalISel generic memory operations.

iterator_range< T > make_range(T x, T y)

Convenience function for iterating over sub-ranges.

StatepointDirectives parseStatepointDirectivesFromAttrs(AttributeList AS)

Parse out statepoint directives from the function attributes present in AS.

StatepointFlags

The statepoint intrinsic accepts a set of flags as its third argument.

@ MaskAll

A bitmask that includes all valid flags.

@ DeoptLiveIn

Mark the deopt arguments associated with the statepoint as only being "live-in".

@ GCTransition

Indicates that this statepoint is a transition from GC-aware code to code that is not GC-aware.

bool isStatepointDirectiveAttr(Attribute Attr)

Return true if the Attr is an attribute that is a statepoint directive.

Call sites that get wrapped by a gc.statepoint (currently only in RewriteStatepointsForGC and potenti...

std::optional< uint32_t > NumPatchBytes

std::optional< uint64_t > StatepointID

static const uint64_t DefaultStatepointID

static const uint64_t DeoptBundleStatepointID