9#ifndef LLVM_SANDBOXIR_CONTEXT_H
10#define LLVM_SANDBOXIR_CONTEXT_H
148#define DEF_CONST(ID, CLASS) friend class CLASS;
149#include "llvm/SandboxIR/Values.def"
263 if (LLVMTy ==
nullptr)
266 auto It = Pair.first;
268 It->second = std::unique_ptr<Type, TypeDeleter>(
new Type(LLVMTy, *
this));
269 return It->second.get();
322 return CallbackID{ReprInfo::getTombstoneKey()};
325 return ReprInfo::getHashValue(
ID.Val);
328 return ReprInfo::isEqual(
LHS.Val,
RHS.Val);
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file defines the DenseMap class.
Machine Check Debug Module
This file implements a map that provides insertion order iteration.
StandardInstrumentations SI(Mod->getContext(), Debug, VerifyEach)
This file defines the SmallVector class.
an instruction to allocate memory on the stack
This class represents an incoming formal argument to a Function.
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.
Conditional or Unconditional Branch instruction.
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.
This class is the base class for the comparison instructions.
This is an important base class in LLVM.
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 provides a uniform API for creating instructions and inserting them into a basic block: either a...
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.
This is an important class for using LLVM in a threaded context.
The landingpad instruction holds all of the information necessary to generate correct exception handl...
An instruction for reading from memory.
This class implements a map that also provides access to all stored values in a deterministic order.
A Module instance is used to store all the information related to an LLVM module.
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.
An instruction for storing to memory.
The instances of the Type class are immutable: once they are created, they are never changed.
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.
Argument of a sandboxir::Function.
Iterator for Instructions in a `BasicBlock.
Contains a list of sandboxir::Instruction's.
ConstantDataSequential - A vector or array constant whose element type is a simple 1/2/4/8-byte integ...
An ID for a registered callback.
static constexpr const ValTy InvalidVal
LLVM_ABI BasicBlock * createBasicBlock(llvm::BasicBlock *BB)
Create a sandboxir::BasicBlock for an existing LLVM IR BB.
std::function< void(Instruction *)> CreateInstrCallback
LLVM_ABI GetElementPtrInst * createGetElementPtrInst(llvm::GetElementPtrInst *I)
MapVector< CallbackID, CreateInstrCallback > CreateInstrCallbacks
Callbacks called when an IR instruction is about to get created.
friend class Type
MessagePack types as defined in the standard, with the exception of Integer being divided into a sign...
LLVM_ABI CallBrInst * createCallBrInst(llvm::CallBrInst *I)
LLVM_ABI Module * createModule(llvm::Module *LLVMM)
Create a sandboxir::Module corresponding to LLVMM.
IRBuilder< ConstantFolder > LLVMIRBuilder
std::function< void(const Use &, Value *)> SetUseCallback
MapVector< CallbackID, EraseInstrCallback > EraseInstrCallbacks
Callbacks called when an IR instruction is about to get erased.
LLVM_ABI sandboxir::Value * getValue(llvm::Value *V) const
LLVM_ABI Argument * getOrCreateArgument(llvm::Argument *LLVMArg)
Get or create a sandboxir::Argument for an existing LLVM IR LLVMArg.
LLVM_ABI void unregisterSetUseCallback(CallbackID ID)
LLVM_ABI ReturnInst * createReturnInst(llvm::ReturnInst *I)
LLVM_ABI void runEraseInstrCallbacks(Instruction *I)
LLVM_ABI Module * getModule(llvm::Module *LLVMM) const
friend ExtractElementInst
LLVM_ABI VAArgInst * createVAArgInst(llvm::VAArgInst *SI)
auto & getLLVMIRBuilder()
LLVM_ABI CleanupReturnInst * createCleanupReturnInst(llvm::CleanupReturnInst *I)
LLVM_ABI AllocaInst * createAllocaInst(llvm::AllocaInst *I)
Type * getType(llvm::Type *LLVMTy)
LLVM_ABI void runCreateInstrCallbacks(Instruction *I)
LLVM_ABI AtomicRMWInst * createAtomicRMWInst(llvm::AtomicRMWInst *I)
LLVM_ABI InsertValueInst * createInsertValueInst(llvm::InsertValueInst *IVI)
const sandboxir::Value * getValue(const llvm::Value *V) const
DenseMap< llvm::Type *, std::unique_ptr< Type, TypeDeleter > > LLVMTypeToTypeMap
Maps LLVM Type to the corresonding sandboxir::Type.
void accept()
Convenience function for getTracker().accept()
LLVM_ABI FCmpInst * createFCmpInst(llvm::FCmpInst *I)
std::function< void(Instruction *)> EraseInstrCallback
CallbackID::ValTy NextCallbackID
A counter used for assigning callback IDs during registration.
std::function< void(Instruction *, const BBIterator &)> MoveInstrCallback
LLVM_ABI ExtractElementInst * createExtractElementInst(llvm::ExtractElementInst *EEI)
LLVM_ABI Constant * getOrCreateConstant(llvm::Constant *LLVMC)
Get or create a sandboxir::Constant from an existing LLVM IR LLVMC.
LLVM_ABI CallbackID registerSetUseCallback(SetUseCallback CB)
Register a callback that gets called when a Use gets set.
LLVM_ABI BranchInst * createBranchInst(llvm::BranchInst *I)
LLVM_ABI ShuffleVectorInst * createShuffleVectorInst(llvm::ShuffleVectorInst *SVI)
LLVM_ABI BinaryOperator * createBinaryOperator(llvm::BinaryOperator *I)
LLVM_ABI Module * getOrCreateModule(llvm::Module *LLVMM)
LLVM_ABI LoadInst * createLoadInst(llvm::LoadInst *LI)
DenseMap< llvm::Value *, std::unique_ptr< Value > > LLVMValueToValueMap
Maps LLVM Value to the corresponding sandboxir::Value.
LLVM_ABI FreezeInst * createFreezeInst(llvm::FreezeInst *SI)
LLVM_ABI PHINode * createPHINode(llvm::PHINode *I)
LLVM_ABI CallbackID registerCreateInstrCallback(CreateInstrCallback CB)
Register a callback that gets called right after a SandboxIR instruction is created.
LLVM_ABI CatchPadInst * createCatchPadInst(llvm::CatchPadInst *I)
LLVM_ABI void clear()
Clears function-level state.
LLVM_ABI ICmpInst * createICmpInst(llvm::ICmpInst *I)
MapVector< CallbackID, MoveInstrCallback > MoveInstrCallbacks
Callbacks called when an IR instruction is about to get moved.
LLVM_ABI std::unique_ptr< Value > detach(Value *V)
Remove SBV from all SandboxIR maps and stop owning it.
LLVM_ABI void unregisterCreateInstrCallback(CallbackID ID)
LLVM_ABI ExtractValueInst * createExtractValueInst(llvm::ExtractValueInst *IVI)
void revert()
Convenience function for getTracker().revert()
LLVM_ABI CastInst * createCastInst(llvm::CastInst *I)
DenseMap< llvm::Module *, std::unique_ptr< Module > > LLVMModuleToModuleMap
Maps an LLVM Module to the corresponding sandboxir::Module.
LLVM_ABI StoreInst * createStoreInst(llvm::StoreInst *SI)
LLVM_ABI CatchReturnInst * createCatchReturnInst(llvm::CatchReturnInst *I)
LLVM_ABI CatchSwitchInst * createCatchSwitchInst(llvm::CatchSwitchInst *I)
LLVM_ABI void unregisterMoveInstrCallback(CallbackID ID)
void save()
Convenience function for getTracker().save()
LLVM_ABI CleanupPadInst * createCleanupPadInst(llvm::CleanupPadInst *I)
Value * getOrCreateValue(llvm::Value *LLVMV)
Get or create a sandboxir::Value for an existing LLVM IR LLVMV.
LLVM_ABI FenceInst * createFenceInst(llvm::FenceInst *SI)
LLVM_ABI CallInst * createCallInst(llvm::CallInst *I)
LLVM_ABI SwitchInst * createSwitchInst(llvm::SwitchInst *I)
LLVM_ABI void runMoveInstrCallbacks(Instruction *I, const BBIterator &Where)
LLVM_ABI UnaryOperator * createUnaryOperator(llvm::UnaryOperator *I)
LLVM_ABI 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...
LLVM_ABI InvokeInst * createInvokeInst(llvm::InvokeInst *I)
LLVM_ABI Value * registerValue(std::unique_ptr< Value > &&VPtr)
Take ownership of VPtr and store it in LLVMValueToValueMap.
LLVM_ABI LandingPadInst * createLandingPadInst(llvm::LandingPadInst *I)
LLVM_ABI InsertElementInst * createInsertElementInst(llvm::InsertElementInst *IEI)
LLVM_ABI CmpInst * createCmpInst(llvm::CmpInst *I)
LLVM_ABI Function * createFunction(llvm::Function *F)
Create a sandboxir::Function for an existing LLVM IR F, including all blocks and instructions.
LLVM_ABI SelectInst * createSelectInst(llvm::SelectInst *SI)
LLVM_ABI ResumeInst * createResumeInst(llvm::ResumeInst *I)
LLVM_ABI void unregisterEraseInstrCallback(CallbackID ID)
MapVector< CallbackID, SetUseCallback > SetUseCallbacks
Callbacks called when a Use gets its source set.
friend class BasicBlock
Various leaf nodes.
LLVM_ABI CallbackID registerMoveInstrCallback(MoveInstrCallback CB)
Register a callback that gets called when a SandboxIR instruction is about to be moved.
LLVM_ABI UnreachableInst * createUnreachableInst(llvm::UnreachableInst *UI)
LLVM_ABI AtomicCmpXchgInst * createAtomicCmpXchgInst(llvm::AtomicCmpXchgInst *I)
LLVM_ABI void runSetUseCallbacks(const Use &U, Value *NewSrc)
LLVM_ABI CallbackID registerEraseInstrCallback(EraseInstrCallback CB)
Register a callback that gets called when a SandboxIR instruction is about to be removed from its par...
size_t getNumValues() const
\Returns the number of values registered with Context.
LLVM_ABI std::unique_ptr< Value > detachLLVMValue(llvm::Value *V)
Remove V from the maps and returns the unique_ptr.
A class that saves hashes and textual IR snapshots of functions in a SandboxIR Context,...
A sandboxir::User with operands, opcode and linked with previous/next instructions in an instruction ...
Class to represent integer types.
In SandboxIR the Module is mainly used to access the list of global objects.
The main job of the Region is to point to new instructions generated by vectorization passes.
The tracker collects all the change objects and implements the main API for saving / reverting / acce...
LLVM_ABI void revert()
Stops tracking and reverts to saved state.
LLVM_ABI void save()
Turns on IR tracking.
LLVM_ABI void accept()
Stops tracking and accept changes.
Just like llvm::Type these are immutable, unique, never get freed and can only be created via static ...
Represents a Def-use/Use-def edge in SandboxIR.
A sandboxir::User has operands.
A SandboxIR Value has users. This is the base class.
NodeAddr< UseNode * > Use
This is an optimization pass for GlobalISel generic memory operations.
static unsigned getHashValue(const CallbackID &ID)
static CallbackID getEmptyKey()
static CallbackID getTombstoneKey()
static bool isEqual(const CallbackID &LHS, const CallbackID &RHS)
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.
void operator()(Type *Ty)