LLVM  mainline
llvm::Use Class Reference

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

#include <Use.h>

List of all members.

Public Types

typedef PointerIntPair< User
*, 1, unsigned
UserRef

Public Member Functions

void swap (Use &RHS)
Provide a fast substitute to std::swap<Use> that also works with less standard-compliant compilers.
operator Value * () const
Valueget () const
UsergetUser () const
Returns the User that contains this Use.
void set (Value *Val)
Valueoperator= (Value *RHS)
const Useoperator= (const Use &RHS)
Valueoperator-> ()
const Valueoperator-> () const
UsegetNext () const
unsigned getOperandNo () const
Return the operand # of this use in its User.

Static Public Member Functions

static UseinitTags (Use *Start, Use *Stop)
Initializes the waymarking tags on an array of Uses.
static void zap (Use *Start, const Use *Stop, bool del=false)
Destroys Use operands when the number of operands of a User changes.

class Value

Detailed Description

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

This is notionally a two-dimensional linked list. It supports traversing all of the uses for a particular value definition. It also supports jumping directly to the used value when we arrive from the User's operands, and jumping directly to the User when we arrive from the Value's uses.

The pointer to the used Value is explicit, and the pointer to the User is implicit. The implicit pointer is found via a waymarking algorithm described in the programmer's manual:

http://www.llvm.org/docs/ProgrammersManual.html#the-waymarking-algorithm

This is essentially the single most memory intensive object in LLVM because of the number of uses in the system. At the same time, the constant time operations it allows are essential to many optimizations having reasonable time complexity.

Definition at line 68 of file Use.h.

Member Typedef Documentation

 typedef PointerIntPair llvm::Use::UserRef

Definition at line 76 of file Use.h.

Member Function Documentation

 Value* llvm::Use::get ( ) const [inline]

Definition at line 94 of file Use.h.

 Use* llvm::Use::getNext ( ) const [inline]

Definition at line 116 of file Use.h.

 unsigned llvm::Use::getOperandNo ( ) const

Return the operand # of this use in its User.

Definition at line 48 of file Use.cpp.

References getUser(), and llvm::User::op_begin().

 User * llvm::Use::getUser ( ) const

Returns the User that contains this Use.

For an instruction operand, for example, this will return the instruction.

Definition at line 41 of file Use.cpp.

 Use * llvm::Use::initTags ( Use * Start, Use * Stop )  [static]

Initializes the waymarking tags on an array of Uses.

This sets up the array of Uses such that getUser() can find the User from any of those Uses.

Definition at line 57 of file Use.cpp.

Referenced by llvm::User::allocHungoffUses().

 llvm::Use::operator Value * ( ) const [inline]

Definition at line 93 of file Use.h.

 Value* llvm::Use::operator-> ( )  [inline]

Definition at line 113 of file Use.h.

 const Value* llvm::Use::operator-> ( ) const [inline]

Definition at line 114 of file Use.h.

 Value* llvm::Use::operator= ( Value * RHS )  [inline]

Definition at line 104 of file Use.h.

 const Use& llvm::Use::operator= ( const Use & RHS )  [inline]

Definition at line 108 of file Use.h.

 void llvm::Use::set ( Value * Val )  [inline]

Definition at line 599 of file Value.h.

 void llvm::Use::swap ( Use & RHS )

Provide a fast substitute to std::swap<Use> that also works with less standard-compliant compilers.

Definition at line 17 of file Use.cpp.

 void llvm::Use::zap ( Use * Start, const Use * Stop, bool del = false )  [static]

Destroys Use operands when the number of operands of a User changes.

Definition at line 87 of file Use.cpp.

Referenced by llvm::User::growHungoffUses(), and llvm::User::operator delete().

Friends And Related Function Documentation

 friend class Value [friend]

Definition at line 153 of file Use.h.

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