LLVM 20.0.0git
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Friends | List of all members
llvm::sandboxir::User Class Referenceabstract

A sandboxir::User has operands. More...

#include "llvm/SandboxIR/User.h"

Inheritance diagram for llvm::sandboxir::User:
Inheritance graph
[legend]

Public Types

using op_iterator = OperandUseIterator
 
using const_op_iterator = OperandUseIterator
 
using op_range = iterator_range< op_iterator >
 
using const_op_range = iterator_range< const_op_iterator >
 
- Public Types inherited from llvm::sandboxir::Value
enum class  ClassID : unsigned { DEF_VALUE , DEF_USER , DEF_CONST , DEF_INSTR }
 
using use_iterator = UserUseIterator
 
using const_use_iterator = UserUseIterator
 
using user_iterator = mapped_iterator< sandboxir::UserUseIterator, UseToUser >
 
using const_user_iterator = user_iterator
 

Public Member Functions

virtual op_iterator op_begin ()
 
virtual op_iterator op_end ()
 
virtual const_op_iterator op_begin () const
 
virtual const_op_iterator op_end () const
 
op_range operands ()
 
const_op_range operands () const
 
ValuegetOperand (unsigned OpIdx) const
 
Use getOperandUse (unsigned OpIdx) const
 \Returns the operand edge for OpIdx.
 
virtual unsigned getNumOperands () const
 
virtual void setOperand (unsigned OperandIdx, Value *Operand)
 
bool replaceUsesOfWith (Value *FromV, Value *ToV)
 Replaces any operands that match FromV with ToV.
 
void verify () const override
 Should crash if there is something wrong with the instruction.
 
void dumpCommonHeader (raw_ostream &OS) const final
 
void dumpOS (raw_ostream &OS) const override
 
- Public Member Functions inherited from llvm::sandboxir::Value
virtual ~Value ()=default
 
ClassID getSubclassID () const
 
use_iterator use_begin ()
 
const_use_iterator use_begin () const
 
use_iterator use_end ()
 
const_use_iterator use_end () const
 
iterator_range< use_iteratoruses ()
 
iterator_range< const_use_iteratoruses () const
 
user_iterator user_begin ()
 
user_iterator user_end ()
 
const_user_iterator user_begin () const
 
const_user_iterator user_end () const
 
iterator_range< user_iteratorusers ()
 
iterator_range< const_user_iteratorusers () const
 
unsigned getNumUses () const
 \Returns the number of user edges (not necessarily to unique users).
 
bool hasNUsesOrMore (unsigned Num) const
 Return true if this value has N uses or more.
 
bool hasNUses (unsigned Num) const
 Return true if this Value has exactly N uses.
 
TypegetType () const
 
ContextgetContext () const
 
void replaceUsesWithIf (Value *OtherV, llvm::function_ref< bool(const Use &)> ShouldReplace)
 
void replaceAllUsesWith (Value *Other)
 
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.
 
std::string getUid () const
 Returns the unique id in the form 'SB<number>.' like 'SB1.'.
 
virtual void dumpCommonHeader (raw_ostream &OS) const
 
void dumpCommonFooter (raw_ostream &OS) const
 
void dumpCommonPrefix (raw_ostream &OS) const
 
void dumpCommonSuffix (raw_ostream &OS) const
 
void printAsOperandCommon (raw_ostream &OS) const
 
virtual void dumpOS (raw_ostream &OS) const =0
 
LLVM_DUMP_METHOD void dump () const
 

Static Public Member Functions

static bool classof (const Value *From)
 For isa/dyn_cast.
 

Protected Member Functions

 User (ClassID ID, llvm::Value *V, Context &Ctx)
 
Use getOperandUseDefault (unsigned OpIdx, bool Verify) const
 \Returns the Use edge that corresponds to OpIdx.
 
virtual Use getOperandUseInternal (unsigned OpIdx, bool Verify) const =0
 \Returns the Use for the OpIdx'th operand.
 
unsigned getUseOperandNoDefault (const Use &Use) const
 The default implementation works only for single-LLVMIR-instruction Users and only if they match exactly the LLVM instruction.
 
virtual unsigned getUseOperandNo (const Use &Use) const =0
 \Returns the operand index of Use.
 
void swapOperandsInternal (unsigned OpIdxA, unsigned OpIdxB)
 
void verifyUserOfLLVMUse (const llvm::Use &Use) const
 
- Protected Member Functions inherited from llvm::sandboxir::Value
void clearValue ()
 
 Value (ClassID SubclassID, llvm::Value *Val, Context &Ctx)
 
 Value (const Value &)=delete
 Disable copies.
 
Valueoperator= (const Value &)=delete
 

Friends

class OperandUseIterator
 
unsigned Use::getOperandNo () const
 

Additional Inherited Members

- Static Protected Member Functions inherited from llvm::sandboxir::Value
static const chargetSubclassIDStr (ClassID ID)
 
- Protected Attributes inherited from llvm::sandboxir::Value
ClassID SubclassID
 For isa/dyn_cast.
 
unsigned UID
 A unique ID used for forming the name (used for debugging).
 
llvm::ValueVal = nullptr
 The LLVM Value that corresponds to this SandboxIR Value.
 
ContextCtx
 All values point to the context.
 

Detailed Description

A sandboxir::User has operands.

Definition at line 58 of file User.h.

Member Typedef Documentation

◆ const_op_iterator

Definition at line 98 of file User.h.

◆ const_op_range

Definition at line 100 of file User.h.

◆ op_iterator

Definition at line 97 of file User.h.

◆ op_range

Definition at line 99 of file User.h.

Constructor & Destructor Documentation

◆ User()

llvm::sandboxir::User::User ( ClassID  ID,
llvm::Value V,
Context Ctx 
)
inlineprotected

Definition at line 60 of file User.h.

Member Function Documentation

◆ classof()

bool llvm::sandboxir::User::classof ( const Value From)
static

For isa/dyn_cast.

Definition at line 76 of file User.cpp.

References From.

◆ dumpCommonHeader()

void llvm::sandboxir::User::dumpCommonHeader ( raw_ostream OS) const
finalvirtual

Reimplemented from llvm::sandboxir::Value.

Definition at line 112 of file User.cpp.

References llvm::sandboxir::Value::dumpCommonHeader(), and OS.

◆ dumpOS()

void llvm::sandboxir::User::dumpOS ( raw_ostream OS) const
inlineoverridevirtual

Implements llvm::sandboxir::Value.

Reimplemented in llvm::sandboxir::SingleLLVMInstructionImpl< llvm::AtomicCmpXchgInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::AtomicRMWInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::BinaryOperator >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::BranchInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CallBase >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CatchReturnInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CatchSwitchInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CleanupReturnInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CmpInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::ExtractElementInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::FenceInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::FuncletPadInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::GetElementPtrInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::InsertElementInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::InsertValueInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::LandingPadInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::Instruction >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::PHINode >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::ResumeInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::ReturnInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::SelectInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::ShuffleVectorInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::StoreInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::SwitchInst >, and llvm::sandboxir::SingleLLVMInstructionImpl< llvm::UnaryInstruction >.

Definition at line 142 of file User.h.

◆ getNumOperands()

virtual unsigned llvm::sandboxir::User::getNumOperands ( ) const
inlinevirtual

◆ getOperand()

Value * llvm::sandboxir::User::getOperand ( unsigned  OpIdx) const
inline

Definition at line 122 of file User.h.

References llvm::sandboxir::Use::get(), and getOperandUse().

◆ getOperandUse()

Use llvm::sandboxir::User::getOperandUse ( unsigned  OpIdx) const
inline

\Returns the operand edge for OpIdx.

NOTE: This should also work for OpIdx == getNumOperands(), which is used for op_end().

Definition at line 125 of file User.h.

References getOperandUseInternal().

Referenced by llvm::sandboxir::ShuffleVectorInst::commute(), llvm::sandboxir::CallBase::getArgOperandUse(), llvm::User::getDescriptor(), getOperand(), setOperand(), swapOperandsInternal(), and llvm::sandboxir::SelectInst::swapValues().

◆ getOperandUseDefault()

Use llvm::sandboxir::User::getOperandUseDefault ( unsigned  OpIdx,
bool  Verify 
) const
protected

\Returns the Use edge that corresponds to OpIdx.

Note: This is the default implementation that works for instructions that match the underlying LLVM instruction. All others should use a different implementation.

Definition at line 58 of file User.cpp.

References assert(), llvm::sandboxir::Value::Ctx, getNumOperands(), llvm::sandboxir::Value::Use, llvm::sandboxir::Value::Val, and Verify.

Referenced by llvm::sandboxir::GlobalObject::getOperandUseInternal(), and llvm::sandboxir::Constant::getOperandUseInternal().

◆ getOperandUseInternal()

virtual Use llvm::sandboxir::User::getOperandUseInternal ( unsigned  OpIdx,
bool  Verify 
) const
protectedpure virtual

\Returns the Use for the OpIdx'th operand.

This is virtual to allow instructions to deviate from the LLVM IR operands, which is a requirement for sandboxir Instructions that consist of more than one LLVM Instruction.

Implemented in llvm::sandboxir::GlobalObject, and llvm::sandboxir::Constant.

Referenced by getOperandUse(), op_begin(), op_end(), llvm::sandboxir::OperandUseIterator::operator+(), llvm::sandboxir::OperandUseIterator::operator++(), and llvm::sandboxir::OperandUseIterator::operator-().

◆ getUseOperandNo()

virtual unsigned llvm::sandboxir::User::getUseOperandNo ( const Use Use) const
protectedpure virtual

\Returns the operand index of Use.

Implemented in llvm::sandboxir::ConstantFP, llvm::sandboxir::ConstantAggregateZero, llvm::sandboxir::ConstantPointerNull, llvm::sandboxir::UndefValue, llvm::sandboxir::GlobalObject, llvm::sandboxir::NoCFIValue, llvm::sandboxir::DSOLocalEquivalent, llvm::sandboxir::ConstantTokenNone, llvm::sandboxir::SingleLLVMInstructionImpl< LLVMT >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::AtomicCmpXchgInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::AtomicRMWInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::BinaryOperator >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::BranchInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CallBase >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CatchReturnInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CatchSwitchInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CleanupReturnInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CmpInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::ExtractElementInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::FenceInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::FuncletPadInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::GetElementPtrInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::InsertElementInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::InsertValueInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::LandingPadInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::Instruction >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::PHINode >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::ResumeInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::ReturnInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::SelectInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::ShuffleVectorInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::StoreInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::SwitchInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::UnaryInstruction >, llvm::sandboxir::UnreachableInst, llvm::sandboxir::Constant, and llvm::sandboxir::ConstantInt.

Referenced by llvm::sandboxir::Use::getOperandNo().

◆ getUseOperandNoDefault()

unsigned llvm::sandboxir::User::getUseOperandNoDefault ( const Use Use) const
inlineprotected

The default implementation works only for single-LLVMIR-instruction Users and only if they match exactly the LLVM instruction.

Definition at line 75 of file User.h.

Referenced by llvm::sandboxir::GlobalObject::getUseOperandNo(), llvm::sandboxir::NoCFIValue::getUseOperandNo(), llvm::sandboxir::SingleLLVMInstructionImpl< LLVMT >::getUseOperandNo(), and llvm::sandboxir::Constant::getUseOperandNo().

◆ op_begin() [1/2]

virtual op_iterator llvm::sandboxir::User::op_begin ( )
inlinevirtual

◆ op_begin() [2/2]

virtual const_op_iterator llvm::sandboxir::User::op_begin ( ) const
inlinevirtual

Definition at line 111 of file User.h.

References op_begin().

◆ op_end() [1/2]

virtual op_iterator llvm::sandboxir::User::op_end ( )
inlinevirtual

◆ op_end() [2/2]

virtual const_op_iterator llvm::sandboxir::User::op_end ( ) const
inlinevirtual

Definition at line 114 of file User.h.

References op_end().

◆ operands() [1/2]

op_range llvm::sandboxir::User::operands ( )
inline

Definition at line 118 of file User.h.

References op_begin(), and op_end().

Referenced by llvm::sandboxir::PHINode::incoming_values().

◆ operands() [2/2]

const_op_range llvm::sandboxir::User::operands ( ) const
inline

Definition at line 119 of file User.h.

References op_begin(), and op_end().

◆ replaceUsesOfWith()

bool llvm::sandboxir::User::replaceUsesOfWith ( Value FromV,
Value ToV 
)

Replaces any operands that match FromV with ToV.

Returns whether any operands were replaced.

Definition at line 98 of file User.cpp.

◆ setOperand()

void llvm::sandboxir::User::setOperand ( unsigned  OperandIdx,
Value Operand 
)
virtual

◆ swapOperandsInternal()

void llvm::sandboxir::User::swapOperandsInternal ( unsigned  OpIdxA,
unsigned  OpIdxB 
)
inlineprotected

◆ verify()

void llvm::sandboxir::User::verify ( ) const
inlineoverridevirtual

Should crash if there is something wrong with the instruction.

Implements llvm::sandboxir::Value.

Reimplemented in llvm::sandboxir::SingleLLVMInstructionImpl< llvm::AtomicCmpXchgInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::AtomicRMWInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::BinaryOperator >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::BranchInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CallBase >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CatchReturnInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CatchSwitchInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CleanupReturnInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::CmpInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::ExtractElementInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::FenceInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::FuncletPadInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::GetElementPtrInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::InsertElementInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::InsertValueInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::LandingPadInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::Instruction >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::PHINode >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::ResumeInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::ReturnInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::SelectInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::ShuffleVectorInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::StoreInst >, llvm::sandboxir::SingleLLVMInstructionImpl< llvm::SwitchInst >, and llvm::sandboxir::SingleLLVMInstructionImpl< llvm::UnaryInstruction >.

Definition at line 138 of file User.h.

References assert(), and llvm::sandboxir::Value::Val.

◆ verifyUserOfLLVMUse()

void llvm::sandboxir::User::verifyUserOfLLVMUse ( const llvm::Use Use) const
protected

Friends And Related Function Documentation

◆ OperandUseIterator

friend class OperandUseIterator
friend

Definition at line 71 of file User.h.

◆ Use::getOperandNo

unsigned Use::getOperandNo ( ) const
friend

The documentation for this class was generated from the following files: