LLVM 24.0.0git
Context.h
Go to the documentation of this file.
1//===- Context.h ------------------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_SANDBOXIR_CONTEXT_H
10#define LLVM_SANDBOXIR_CONTEXT_H
11
12#include "llvm/ADT/DenseMap.h"
13#include "llvm/ADT/MapVector.h"
15#include "llvm/IR/LLVMContext.h"
17#include "llvm/SandboxIR/Type.h"
19
20#include <cstdint>
21
22namespace llvm {
23namespace sandboxir {
24
25class Argument;
26class BBIterator;
27class Constant;
28class Module;
29class Region;
30class Value;
31class Use;
32
34public:
35 // A EraseInstrCallback receives the instruction about to be erased.
36 using EraseInstrCallback = std::function<void(Instruction *)>;
37 // A CreateInstrCallback receives the instruction about to be created.
38 using CreateInstrCallback = std::function<void(Instruction *)>;
39 // A MoveInstrCallback receives the instruction about to be moved, the
40 // destination BB and an iterator pointing to the insertion position.
42 std::function<void(Instruction *, const BBIterator &)>;
43 // A SetUseCallback receives the Use that is about to get its source set.
44 using SetUseCallback = std::function<void(const Use &, Value *)>;
45
46 /// An ID for a registered callback. Used for deregistration. A dedicated type
47 /// is employed so as to keep IDs opaque to the end user; only Context should
48 /// deal with its underlying representation.
49 class CallbackID {
50 public:
51 // Uses a 64-bit integer so we don't have to worry about the unlikely case
52 // of overflowing a 32-bit counter.
53 using ValTy = uint64_t;
54 static constexpr ValTy InvalidVal = 0;
55
56 private:
57 // Default initialization results in an invalid ID.
58 ValTy Val = InvalidVal;
59 explicit CallbackID(ValTy Val) : Val{Val} {
60 assert(Val != InvalidVal && "newly-created ID is invalid!");
61 }
62
63 public:
64 CallbackID() = default;
65 bool operator==(const CallbackID &Other) const { return Val == Other.Val; }
66 friend class Context;
67 friend struct DenseMapInfo<CallbackID>;
68 };
69
70protected:
72 friend class Type; // For LLVMCtx.
73 friend class PointerType; // For LLVMCtx.
74 friend class IntegerType; // For LLVMCtx.
75 friend class ByteType; // For LLVMCtx.
76 friend class StructType; // For LLVMCtx.
77 friend class Region; // For LLVMCtx.
78 friend class IRSnapshotChecker; // To snapshot LLVMModuleToModuleMap.
79
81
82 /// Maps LLVM Value to the corresponding sandboxir::Value. Owns all
83 /// SandboxIR objects.
85
86 /// Maps an LLVM Module to the corresponding sandboxir::Module.
88
89 /// Type has a protected destructor to prohibit the user from managing the
90 /// lifetime of the Type objects. Context is friend of Type, and this custom
91 /// deleter can destroy Type.
92 struct TypeDeleter {
93 void operator()(Type *Ty) { delete Ty; }
94 };
95 /// Maps LLVM Type to the corresonding sandboxir::Type. Owns all Sandbox IR
96 /// Type objects.
98
99 /// Callbacks called when an IR instruction is about to get erased. CallbackID
100 /// is used as an identifier for deregistration.
102 /// Callbacks called when an IR instruction is about to get created.
103 /// CallbackID is used as an identifier for deregistration.
105 /// Callbacks called when an IR instruction is about to get moved. CallbackID
106 /// is used as an identifier for deregistration.
108 /// Callbacks called when a Use gets its source set. CallbackID is used as an
109 /// identifier for deregistration.
111
112 /// A counter used for assigning callback IDs during registration. The same
113 /// counter is used for all kinds of callbacks so we can detect mismatched
114 /// registration/deregistration.
116
117 /// Remove \p V from the maps and returns the unique_ptr.
118 std::unique_ptr<Value> detachLLVMValue(llvm::Value *V);
119 /// Remove \p SBV from all SandboxIR maps and stop owning it. This effectively
120 /// detaches \p V from the underlying IR.
121 std::unique_ptr<Value> detach(Value *V);
122 friend class Instruction; // For detach().
123 /// Take ownership of VPtr and store it in `LLVMValueToValueMap`.
124 Value *registerValue(std::unique_ptr<Value> &&VPtr);
125 friend class EraseFromParent; // For registerValue().
126 /// This is the actual function that creates sandboxir values for \p V,
127 /// and among others handles all instruction types.
129 /// Get or create a sandboxir::Argument for an existing LLVM IR \p LLVMArg.
131 /// Get or create a sandboxir::Value for an existing LLVM IR \p LLVMV.
133 return getOrCreateValueInternal(LLVMV, 0);
134 }
135 /// Get or create a sandboxir::Constant from an existing LLVM IR \p LLVMC.
136 Constant *getOrCreateConstant(llvm::Constant *LLVMC);
137 friend class ConstantDataSequential; // For getOrCreateConstant().
138 friend class Utils; // For getMemoryBase
139
142 void runMoveInstrCallbacks(Instruction *I, const BBIterator &Where);
143 void runSetUseCallbacks(const Use &U, Value *NewSrc);
144
145 friend class User; // For runSetUseCallbacks().
146 friend class Value; // For runSetUseCallbacks().
147
148 // Friends for getOrCreateConstant().
149#define DEF_CONST(ID, CLASS) friend class CLASS;
150#include "llvm/SandboxIR/Values.def"
151
152 /// Create a sandboxir::BasicBlock for an existing LLVM IR \p BB. This will
153 /// also create all contents of the block.
154 BasicBlock *createBasicBlock(llvm::BasicBlock *BB);
155 friend class BasicBlock; // For getOrCreateValue().
156
158 friend VAArgInst; // For createVAArgInst()
160 friend FreezeInst; // For createFreezeInst()
162 friend FenceInst; // For createFenceInst()
164 friend SelectInst; // For createSelectInst()
166 friend InsertElementInst; // For createInsertElementInst()
168 friend ExtractElementInst; // For createExtractElementInst()
170 friend ShuffleVectorInst; // For createShuffleVectorInst()
172 friend ExtractValueInst; // For createExtractValueInst()
174 friend InsertValueInst; // For createInsertValueInst()
176 friend UncondBrInst; // For createUncondBrInst()
178 friend CondBrInst; // For createCondBrInst()
180 friend LoadInst; // For createLoadInst()
182 friend StoreInst; // For createStoreInst()
184 friend ReturnInst; // For createReturnInst()
186 friend CallInst; // For createCallInst()
188 friend InvokeInst; // For createInvokeInst()
190 friend CallBrInst; // For createCallBrInst()
192 friend LandingPadInst; // For createLandingPadInst()
194 friend CatchPadInst; // For createCatchPadInst()
196 friend CleanupPadInst; // For createCleanupPadInst()
198 friend CatchReturnInst; // For createCatchReturnInst()
200 friend CleanupReturnInst; // For createCleanupReturnInst()
202 friend GetElementPtrInst; // For createGetElementPtrInst()
204 friend CatchSwitchInst; // For createCatchSwitchInst()
206 friend ResumeInst; // For createResumeInst()
208 friend SwitchInst; // For createSwitchInst()
210 friend UnaryOperator; // For createUnaryOperator()
212 friend BinaryOperator; // For createBinaryOperator()
214 friend AtomicRMWInst; // For createAtomicRMWInst()
216 friend AtomicCmpXchgInst; // For createAtomicCmpXchgInst()
218 friend AllocaInst; // For createAllocaInst()
220 friend CastInst; // For createCastInst()
222 friend PHINode; // For createPHINode()
224 friend UnreachableInst; // For createUnreachableInst()
226 friend CmpInst; // For createCmpInst()
228 friend ICmpInst; // For createICmpInst()
230 friend FCmpInst; // For createFCmpInst()
231
232public:
234 Context(const Context &) = delete;
235 Context &operator=(const Context &) = delete;
236 virtual ~Context();
237 /// Clears function-level state.
238 void clear();
239
241 return LLVMCtx.getLibraryOptions();
242 }
244 /// Convenience function for `getTracker().save()`
245 void save() { IRTracker.save(); }
246 /// Convenience function for `getTracker().revert()`
247 void revert(bool RevertAll = false) { IRTracker.revert(RevertAll); }
248 /// Convenience function for `getTracker().accept()`
249 void accept(bool AcceptAll = false) { IRTracker.accept(AcceptAll); }
250
252 const sandboxir::Value *getValue(const llvm::Value *V) const {
253 return getValue(const_cast<llvm::Value *>(V));
254 }
255
256 Module *getModule(llvm::Module *LLVMM) const;
257
258 Module *getOrCreateModule(llvm::Module *LLVMM);
259
261 if (LLVMTy == nullptr)
262 return nullptr;
263 auto Pair = LLVMTypeToTypeMap.try_emplace(LLVMTy);
264 auto It = Pair.first;
265 if (Pair.second)
266 It->second = std::unique_ptr<Type, TypeDeleter>(new Type(LLVMTy, *this));
267 return It->second.get();
268 }
269
270 /// Create a sandboxir::Function for an existing LLVM IR \p F, including all
271 /// blocks and instructions.
272 /// This is the main API function for creating Sandbox IR.
273 /// Note: this will not fully populate its parent module. The only globals
274 /// that will be available are those used within the function.
275 Function *createFunction(llvm::Function *F);
276
277 /// Create a sandboxir::Module corresponding to \p LLVMM.
278 Module *createModule(llvm::Module *LLVMM);
279
280 /// \Returns the number of values registered with Context.
281 size_t getNumValues() const { return LLVMValueToValueMap.size(); }
282
283private:
284 // An arbitrary limit, to check for accidental misuse. We expect a small
285 // number of callbacks to be registered at a time, but we can increase this
286 // number if we discover we needed more.
287 [[maybe_unused]] static constexpr int MaxRegisteredCallbacks = 16;
288
289 template <typename CBT, typename CBVecT>
290 CallbackID registerCallbackCommon(CBT CB, CBVecT &CBVec,
291 std::optional<CallbackID> BeforeID) {
292 assert(CBVec.size() <= MaxRegisteredCallbacks &&
293 "EraseInstrCallbacks size limit exceeded");
294 auto BeforeIt = CBVec.end();
295 if (BeforeID) {
296 BeforeIt = find_if(CBVec, [BeforeID](const auto &Pair) {
297 return Pair.first == *BeforeID;
298 });
299 assert(BeforeIt != CBVec.end() && "Not found!");
300 }
301 CallbackID ID{NextCallbackID++};
302 CBVec.insert(BeforeIt, {ID, std::move(CB)});
303 return ID;
304 }
305
306public:
307 /// Register a callback that gets called when a SandboxIR instruction is about
308 /// to be removed from its parent. Note that this will also be called when
309 /// reverting the creation of an instruction.
310 /// If \p BeforeID is specified, CB will be ordered just before \p BeforeID,
311 /// so it will be called first once the callbacks get executed.
312 /// \Returns a callback ID for later deregistration.
313 CallbackID
314 registerEraseInstrCallback(EraseInstrCallback CB,
315 std::optional<CallbackID> BeforeID = std::nullopt);
316 void unregisterEraseInstrCallback(CallbackID ID);
317
318 /// Register a callback that gets called right after a SandboxIR instruction
319 /// is created. Note that this will also be called when reverting the removal
320 /// of an instruction.
321 /// If \p BeforeID is specified, CB will be ordered just before \p BeforeID,
322 /// so it will be called first once the callbacks get executed.
323 /// \Returns a callback ID for later deregistration.
324 CallbackID registerCreateInstrCallback(
325 CreateInstrCallback CB,
326 std::optional<CallbackID> BeforeID = std::nullopt);
327 void unregisterCreateInstrCallback(CallbackID ID);
328
329 /// Register a callback that gets called when a SandboxIR instruction is about
330 /// to be moved. Note that this will also be called when reverting a move.
331 /// If \p BeforeID is specified, CB will be ordered just before \p BeforeID,
332 /// so it will be called first once the callbacks get executed.
333 /// \Returns a callback ID for later deregistration.
334 CallbackID
335 registerMoveInstrCallback(MoveInstrCallback CB,
336 std::optional<CallbackID> BeforeID = std::nullopt);
337 void unregisterMoveInstrCallback(CallbackID ID);
338
339 /// Register a callback that gets called when a Use gets set.
340 /// If \p BeforeID is specified, CB will be ordered just before \p BeforeID,
341 /// so it will be called first once the callbacks get executed.
342 /// \Returns a callback ID for later deregistration.
343 CallbackID
344 registerSetUseCallback(SetUseCallback CB,
345 std::optional<CallbackID> BeforeID = std::nullopt);
346 void unregisterSetUseCallback(CallbackID ID);
347};
348
349} // namespace sandboxir
350
351// DenseMap info for CallbackIDs
352template <> struct DenseMapInfo<sandboxir::Context::CallbackID> {
355
356 static unsigned getHashValue(const CallbackID &ID) {
357 return ReprInfo::getHashValue(ID.Val);
358 }
359 static bool isEqual(const CallbackID &LHS, const CallbackID &RHS) {
360 return ReprInfo::isEqual(LHS.Val, RHS.Val);
361 }
362};
363
364} // namespace llvm
365
366#endif // LLVM_SANDBOXIR_CONTEXT_H
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
unsigned uint64_t
#define LLVM_ABI
Definition Compiler.h:215
This file defines the DenseMap class.
static constexpr Value * getValue(Ty &ValueOrUse)
#define F(x, y, z)
Definition MD5.cpp:54
#define I(x, y, z)
Definition MD5.cpp:57
This file implements a map that provides insertion order iteration.
This file defines the SmallVector class.
Value * RHS
Value * LHS
an instruction to allocate memory on the stack
This class represents an incoming formal argument to a Function.
Definition Argument.h:32
An instruction that atomically checks whether a specified value is in a memory location,...
an instruction that atomically reads a memory location, combines it with another value,...
LLVM Basic Block Representation.
Definition BasicBlock.h:62
CallBr instruction, tracking function calls that may not return control but instead transfer it to a ...
This class represents a function call, abstracting a target machine's calling convention.
This is the base class for all instructions that perform data casts.
Definition InstrTypes.h:512
This class is the base class for the comparison instructions.
Definition InstrTypes.h:728
Conditional Branch instruction.
This is an important base class in LLVM.
Definition Constant.h:43
This instruction extracts a single (scalar) element from a VectorType value.
This instruction extracts a struct member or array element value from an aggregate value.
This instruction compares its operands according to the predicate given to the constructor.
An instruction for ordering other memory operations.
This class represents a freeze function that returns random concrete value if an operand is either a ...
an instruction for type-safe pointer arithmetic to access elements of arrays and structs
This instruction compares its operands according to the predicate given to the constructor.
This instruction inserts a single (scalar) element into a VectorType value.
This instruction inserts a struct field of array element value into an aggregate value.
Invoke instruction.
This is an important class for using LLVM in a threaded context.
Definition LLVMContext.h:71
The landingpad instruction holds all of the information necessary to generate correct exception handl...
An instruction for reading from memory.
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:68
Resume the propagation of an exception.
Return a value (possibly void), from a function.
This class represents the LLVM 'select' instruction.
This instruction constructs a fixed permutation of two input vectors.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
An instruction for storing to memory.
Multiway switch.
The instances of the Type class are immutable: once they are created, they are never changed.
Definition Type.h:46
Unconditional Branch instruction.
This function has undefined behavior.
This class represents the va_arg llvm instruction, which returns an argument of the specified type gi...
LLVM Value Representation.
Definition Value.h:75
Argument of a sandboxir::Function.
Definition Argument.h:18
An ID for a registered callback.
Definition Context.h:49
static constexpr ValTy InvalidVal
Definition Context.h:54
bool operator==(const CallbackID &Other) const
Definition Context.h:65
std::function< void(Instruction *)> CreateInstrCallback
Definition Context.h:38
GetElementPtrInst * createGetElementPtrInst(llvm::GetElementPtrInst *I)
Definition Context.cpp:585
friend class Type
MessagePack types as defined in the standard, with the exception of Integer being divided into a sign...
Definition Context.h:72
friend class EraseFromParent
Definition Context.h:125
CmpInst * createCmpInst(llvm::CmpInst *I)
CallBrInst * createCallBrInst(llvm::CallBrInst *I)
Definition Context.cpp:552
SmallVector< std::pair< CallbackID, EraseInstrCallback > > EraseInstrCallbacks
Callbacks called when an IR instruction is about to get erased.
Definition Context.h:101
std::function< void(const Use &, Value *)> SetUseCallback
Definition Context.h:44
Argument * getOrCreateArgument(llvm::Argument *LLVMArg)
Get or create a sandboxir::Argument for an existing LLVM IR LLVMArg.
Definition Context.cpp:441
void revert(bool RevertAll=false)
Convenience function for getTracker().revert()
Definition Context.h:247
friend class IRSnapshotChecker
Definition Context.h:78
Context & operator=(const Context &)=delete
SmallVector< std::pair< CallbackID, SetUseCallback > > SetUseCallbacks
Callbacks called when a Use gets its source set.
Definition Context.h:110
ReturnInst * createReturnInst(llvm::ReturnInst *I)
Definition Context.cpp:537
UncondBrInst * createUncondBrInst(llvm::UncondBrInst *UBI)
Definition Context.cpp:517
void runEraseInstrCallbacks(Instruction *I)
Definition Context.cpp:712
VAArgInst * createVAArgInst(llvm::VAArgInst *SI)
Definition Context.cpp:464
CleanupReturnInst * createCleanupReturnInst(llvm::CleanupReturnInst *I)
Definition Context.cpp:579
SmallVector< std::pair< CallbackID, CreateInstrCallback > > CreateInstrCallbacks
Callbacks called when an IR instruction is about to get created.
Definition Context.h:104
void accept(bool AcceptAll=false)
Convenience function for getTracker().accept()
Definition Context.h:249
AllocaInst * createAllocaInst(llvm::AllocaInst *I)
Definition Context.cpp:620
SmallVector< std::pair< CallbackID, MoveInstrCallback > > MoveInstrCallbacks
Callbacks called when an IR instruction is about to get moved.
Definition Context.h:107
Type * getType(llvm::Type *LLVMTy)
Definition Context.h:260
void runCreateInstrCallbacks(Instruction *I)
Definition Context.cpp:717
AtomicRMWInst * createAtomicRMWInst(llvm::AtomicRMWInst *I)
Definition Context.cpp:610
InsertValueInst * createInsertValueInst(llvm::InsertValueInst *IVI)
Definition Context.cpp:511
const sandboxir::Value * getValue(const llvm::Value *V) const
Definition Context.h:252
DenseMap< llvm::Type *, std::unique_ptr< Type, TypeDeleter > > LLVMTypeToTypeMap
Maps LLVM Type to the corresonding sandboxir::Type.
Definition Context.h:97
FCmpInst * createFCmpInst(llvm::FCmpInst *I)
Definition Context.cpp:636
std::function< void(Instruction *)> EraseInstrCallback
Definition Context.h:36
friend class ConstantDataSequential
Definition Context.h:137
CallbackID::ValTy NextCallbackID
A counter used for assigning callback IDs during registration.
Definition Context.h:115
ExtractElementInst * createExtractElementInst(llvm::ExtractElementInst *EEI)
Definition Context.cpp:485
ShuffleVectorInst * createShuffleVectorInst(llvm::ShuffleVectorInst *SVI)
Definition Context.cpp:499
BinaryOperator * createBinaryOperator(llvm::BinaryOperator *I)
Definition Context.cpp:606
friend class Instruction
Iterator for Instructions in a `BasicBlock.
Definition Context.h:122
LoadInst * createLoadInst(llvm::LoadInst *LI)
Definition Context.cpp:527
DenseMap< llvm::Value *, std::unique_ptr< Value > > LLVMValueToValueMap
Maps LLVM Value to the corresponding sandboxir::Value.
Definition Context.h:84
FreezeInst * createFreezeInst(llvm::FreezeInst *SI)
Definition Context.cpp:469
PHINode * createPHINode(llvm::PHINode *I)
Definition Context.cpp:628
Context(LLVMContext &LLVMCtx)
Definition Context.cpp:647
CatchPadInst * createCatchPadInst(llvm::CatchPadInst *I)
Definition Context.cpp:566
void clear()
Clears function-level state.
Definition Context.cpp:651
CondBrInst * createCondBrInst(llvm::CondBrInst *CBI)
Definition Context.cpp:522
friend class IntegerType
Definition Context.h:74
ICmpInst * createICmpInst(llvm::ICmpInst *I)
Definition Context.cpp:632
friend class Region
Definition Context.h:77
Context(const Context &)=delete
std::unique_ptr< Value > detach(Value *V)
Remove SBV from all SandboxIR maps and stop owning it.
Definition Context.cpp:28
ExtractValueInst * createExtractValueInst(llvm::ExtractValueInst *IVI)
Definition Context.cpp:505
CastInst * createCastInst(llvm::CastInst *I)
Definition Context.cpp:624
DenseMap< llvm::Module *, std::unique_ptr< Module > > LLVMModuleToModuleMap
Maps an LLVM Module to the corresponding sandboxir::Module.
Definition Context.h:87
friend class PointerType
Definition Context.h:73
StoreInst * createStoreInst(llvm::StoreInst *SI)
Definition Context.cpp:532
CatchReturnInst * createCatchReturnInst(llvm::CatchReturnInst *I)
Definition Context.cpp:574
CatchSwitchInst * createCatchSwitchInst(llvm::CatchSwitchInst *I)
Definition Context.cpp:590
std::function< void(Instruction *, const BBIterator &)> MoveInstrCallback
Definition Context.h:41
void save()
Convenience function for getTracker().save()
Definition Context.h:245
CleanupPadInst * createCleanupPadInst(llvm::CleanupPadInst *I)
Definition Context.cpp:570
Value * getOrCreateValue(llvm::Value *LLVMV)
Get or create a sandboxir::Value for an existing LLVM IR LLVMV.
Definition Context.h:132
cl::LibraryOptionsContext & getLibraryOptions() const
Definition Context.h:240
FenceInst * createFenceInst(llvm::FenceInst *SI)
Definition Context.cpp:474
CallInst * createCallInst(llvm::CallInst *I)
Definition Context.cpp:542
SwitchInst * createSwitchInst(llvm::SwitchInst *I)
Definition Context.cpp:598
void runMoveInstrCallbacks(Instruction *I, const BBIterator &Where)
Definition Context.cpp:722
UnaryOperator * createUnaryOperator(llvm::UnaryOperator *I)
Definition Context.cpp:602
Value * getOrCreateValueInternal(llvm::Value *V, llvm::User *U=nullptr)
This is the actual function that creates sandboxir values for V, and among others handles all instruc...
Definition Context.cpp:56
InvokeInst * createInvokeInst(llvm::InvokeInst *I)
Definition Context.cpp:547
Value * registerValue(std::unique_ptr< Value > &&VPtr)
Take ownership of VPtr and store it in LLVMValueToValueMap.
Definition Context.cpp:35
LandingPadInst * createLandingPadInst(llvm::LandingPadInst *I)
Definition Context.cpp:562
InsertElementInst * createInsertElementInst(llvm::InsertElementInst *IEI)
Definition Context.cpp:492
friend class StructType
Definition Context.h:76
SelectInst * createSelectInst(llvm::SelectInst *SI)
Definition Context.cpp:479
friend class ByteType
Definition Context.h:75
ResumeInst * createResumeInst(llvm::ResumeInst *I)
Definition Context.cpp:594
LLVMContext & LLVMCtx
Definition Context.h:71
Tracker & getTracker()
Definition Context.h:243
friend class BasicBlock
Various leaf nodes.
Definition Context.h:155
UnreachableInst * createUnreachableInst(llvm::UnreachableInst *UI)
Definition Context.cpp:557
AtomicCmpXchgInst * createAtomicCmpXchgInst(llvm::AtomicCmpXchgInst *I)
Definition Context.cpp:615
void runSetUseCallbacks(const Use &U, Value *NewSrc)
Definition Context.cpp:727
size_t getNumValues() const
\Returns the number of values registered with Context.
Definition Context.h:281
std::unique_ptr< Value > detachLLVMValue(llvm::Value *V)
Remove V from the maps and returns the unique_ptr.
Definition Context.cpp:17
In SandboxIR the Module is mainly used to access the list of global objects.
Definition Module.h:33
The tracker collects all the change objects and implements the main API for saving / reverting / acce...
Definition Tracker.h:450
Represents a Def-use/Use-def edge in SandboxIR.
Definition Use.h:43
A SandboxIR Value has users. This is the base class.
Definition Value.h:72
This is an optimization pass for GlobalISel generic memory operations.
@ Other
Any other memory.
Definition ModRef.h:68
auto find_if(R &&Range, UnaryPredicate P)
Provide wrappers to std::find_if which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1788
static unsigned getHashValue(const CallbackID &ID)
Definition Context.h:356
DenseMapInfo< CallbackID::ValTy > ReprInfo
Definition Context.h:354
sandboxir::Context::CallbackID CallbackID
Definition Context.h:353
static bool isEqual(const CallbackID &LHS, const CallbackID &RHS)
Definition Context.h:359
An information struct used to provide DenseMap with the various necessary components for a given valu...
Type has a protected destructor to prohibit the user from managing the lifetime of the Type objects.
Definition Context.h:92