9#ifndef LLVM_SANDBOXIR_VALUE_H
10#define LLVM_SANDBOXIR_VALUE_H
20#define DEF_INSTR(ID, OPC, CLASS) class CLASS;
21#define DEF_CONST(ID, CLASS) class CLASS;
22#define DEF_USER(ID, CLASS) class CLASS;
23#include "llvm/SandboxIR/Values.def"
30class UnaryInstruction;
34class OverflowingBinaryOperator;
40class UserUseIterator {
57 return Use ==
Other.Use;
60 return !(*
this ==
Other);
69#define DEF_VALUE(ID, CLASS) ID,
70#define DEF_USER(ID, CLASS) ID,
71#define DEF_CONST(ID, CLASS) ID,
72#define DEF_INSTR(ID, OPC, CLASS) ID,
73#include "llvm/SandboxIR/Values.def"
79#define DEF_VALUE(ID, CLASS) \
82#define DEF_USER(ID, CLASS) \
85#define DEF_CONST(ID, CLASS) \
88#define DEF_INSTR(ID, OPC, CLASS) \
91#include "llvm/SandboxIR/Values.def"
277 std::string
getUid()
const;
305 "Expected Metadata or InlineAssembly!");
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
#define LLVM_DUMP_METHOD
Mark debug helper function definitions like dump() that should not be stripped from debug builds.
Machine Check Debug Module
StringRef - Represent a constant reference to a string, i.e.
LLVM Value Representation.
An efficient, type-erasing, non-owning reference to a callable.
A range adaptor for a pair of iterators.
This class implements an extremely fast bulk output stream that can only output to a stream.
static bool classof(const Value *From)
void dumpOS(raw_ostream &OS) const override
void verify() const override
Should crash if there is something wrong with the instruction.
OpaqueValue(llvm::Value *V, Context &Ctx)
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.
Iterator for the Use edges of a Value's users.
const sandboxir::Use & getUse() const
std::input_iterator_tag iterator_category
std::ptrdiff_t difference_type
bool operator!=(const UserUseIterator &Other) const
value_type operator*() const
bool operator==(const UserUseIterator &Other) const
LLVM_ABI UserUseIterator & operator++()
sandboxir::Use value_type
UserUseIterator()=default
A SandboxIR Value has users. This is the base class.
mapped_iterator< sandboxir::UserUseIterator, UseToUser > user_iterator
friend class InsertElementInst
friend class CatchReturnInst
friend class UnreachableInst
friend class UnaryOperator
llvm::Value * Val
The LLVM Value that corresponds to this SandboxIR Value.
void dumpCommonFooter(raw_ostream &OS) const
virtual void dumpCommonHeader(raw_ostream &OS) const
friend class ConstantStruct
friend class OverflowingBinaryOperator
const_use_iterator use_end() const
friend class ConstantVector
friend class FPMathOperator
friend class IntrinsicInst
ClassID getSubclassID() const
friend class ConstantDataVector
void dumpCommonSuffix(raw_ostream &OS) const
StringRef getName() const
\Returns the LLVM IR name of the bottom-most LLVM value.
virtual void verify() const =0
Should crash if there is something wrong with the instruction.
LLVM_ABI void replaceAllUsesWith(Value *Other)
friend class ExtractElementInst
LLVM_ABI unsigned getNumUses() const
\Returns the number of user edges (not necessarily to unique users).
UserUseIterator use_iterator
void printAsOperandCommon(raw_ostream &OS) const
Context & Ctx
All values point to the context.
friend class ShuffleVectorInst
friend class ExtractValueInst
ClassID SubclassID
For isa/dyn_cast.
friend class ConstantPointerNull
LLVM_DUMP_METHOD void dump() const
friend class ConstantPtrAuth
LLVM_ABI Type * getType() const
friend class InsertValueInst
LLVM_ABI Value(ClassID SubclassID, llvm::Value *Val, Context &Ctx)
friend class CatchSwitchInst
friend class BinaryOperator
user_iterator const_user_iterator
friend class LLVMOpUserItToSBTy
const_use_iterator use_begin() const
friend class ConstantExpr
Context & getContext() const
const_user_iterator user_begin() const
friend class CatchPadInst
bool hasNUsesOrMore(unsigned Num) const
Return true if this value has N uses or more.
UserUseIterator const_use_iterator
friend class AtomicRMWInst
Value & operator=(const Value &)=delete
iterator_range< const_user_iterator > users() const
iterator_range< user_iterator > users()
friend class GlobalVariable
std::string getUid() const
Returns the unique id in the form 'SB<number>.' like 'SB1.'.
LLVM_ABI void replaceUsesWithIf(Value *OtherV, llvm::function_ref< bool(const Use &)> ShouldReplace)
friend class BlockAddress
friend class ConstantArray
bool hasNUses(unsigned Num) const
Return true if this Value has exactly N uses.
unsigned UID
A unique ID used for forming the name (used for debugging).
friend class GlobalObject
friend class GetElementPtrInst
virtual void dumpOS(raw_ostream &OS) const =0
friend class ConstantDataArray
friend class CleanupPadInst
void dumpCommonPrefix(raw_ostream &OS) const
iterator_range< use_iterator > uses()
const_user_iterator user_end() const
friend class FuncletPadInst
friend class AtomicCmpXchgInst
friend class CatchSwitchAddHandler
friend class LandingPadInst
static const char * getSubclassIDStr(ClassID ID)
Value(const Value &)=delete
Disable copies.
friend class CleanupReturnInst
friend class ConstantAggregateZero
friend raw_ostream & operator<<(raw_ostream &OS, const sandboxir::Value &V)
LLVM_ABI use_iterator use_begin()
LLVM_ABI user_iterator user_begin()
friend class DSOLocalEquivalent
iterator_range< const_use_iterator > uses() const
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
FunctionAddr VTableAddr Value
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
Helper for mapped_iterator.
User * operator()(const Use &Use) const