Polly 22.0.0git
polly::VirtualUse Class Referencefinal

Determine the nature of a value's use within a statement. More...

#include <VirtualInstruction.h>

Public Types

enum  UseKind {
  Constant , Block , Synthesizable , Hoisted ,
  ReadOnly , Intra , Inter
}
 The different types of uses. More...

Public Member Functions

bool isConstant () const
bool isBlock () const
bool isSynthesizable () const
bool isHoisted () const
bool isReadOnly () const
bool isIntra () const
bool isInter () const
ScopStmtgetUser () const
 Return user statement.
llvm::Value * getValue () const
 Return the used value.
UseKind getKind () const
 Return the type of use.
const SCEV * getScevExpr () const
 Return the ScalarEvolution representation of Val.
MemoryAccessgetMemoryAccess () const
 Return the MemoryAccess that makes the value available in this statement, if any.
void print (raw_ostream &OS, bool Reproducible=true) const
 Print a description of this object.
void dump () const

Static Public Member Functions

static VirtualUse create (Scop *S, const Use &U, LoopInfo *LI, bool Virtual)
 Get a VirtualUse for an llvm::Use.
static VirtualUse create (Scop *S, ScopStmt *UserStmt, Loop *UserScope, Value *Val, bool Virtual)
 Get a VirtualUse for uses within statements.
static VirtualUse create (ScopStmt *UserStmt, Loop *UserScope, Value *Val, bool Virtual)

Private Member Functions

 VirtualUse (ScopStmt *User, Value *Val, UseKind Kind, const SCEV *ScevExpr, MemoryAccess *InputMA)

Private Attributes

ScopStmtUser
 The statement where a value is used.
ValueVal
 The value that is used.
UseKind Kind
 The type of value use.
const SCEV * ScevExpr
 The value represented as llvm::SCEV expression.
MemoryAccessInputMA
 If this is an inter-statement (or read-only) use, contains the MemoryAccess that makes the value available in this statement.

Detailed Description

Determine the nature of a value's use within a statement.

These are not always representable by llvm::Use. For instance, scalar write MemoryAccesses do use a value, but are not associated with an instruction's argument.

Despite its name it is not tied to virtual instructions (although it works fine with them), but to promote consistent handling of values used in statements.

Definition at line 31 of file VirtualInstruction.h.

Member Enumeration Documentation

◆ UseKind

The different types of uses.

Handling usually differentiates a lot between these; one can use a switch to handle each case (and get warned by the compiler if one is not handled).

Enumerator
Constant 
Block 
Synthesizable 
Hoisted 
ReadOnly 
Intra 
Inter 

Definition at line 36 of file VirtualInstruction.h.

Constructor & Destructor Documentation

◆ VirtualUse()

polly::VirtualUse::VirtualUse ( ScopStmt * User,
Value * Val,
UseKind Kind,
const SCEV * ScevExpr,
MemoryAccess * InputMA )
inlineprivate

Definition at line 85 of file VirtualInstruction.h.

References InputMA, Kind, ScevExpr, User, Val, and polly::Value.

Referenced by create(), create(), and create().

Member Function Documentation

◆ create() [1/3]

VirtualUse VirtualUse::create ( Scop * S,
const Use & U,
LoopInfo * LI,
bool Virtual )
static

Get a VirtualUse for an llvm::Use.

Parameters
SThe Scop object.
UThe llvm::Use the get information for.
LIThe LoopInfo analysis. Needed to determine whether the value is synthesizable.
VirtualWhether to ignore existing MemoryAccess.
Returns
The VirtualUse representing the same use as U.

Definition at line 19 of file VirtualInstruction.cpp.

References assert, create(), polly::ScopStmt::getEntryBlock(), polly::MemoryAccess::getStatement(), polly::getUseBlock(), Inter, Intra, polly::PHI, and VirtualUse().

Referenced by create(), create(), polly::ScopBuilder::ensureValueRead(), findReferencesByUse(), polly::BlockGenerator::getNewValue(), polly::ZoneAlgorithm::makeValInst(), polly::VirtualOperandIterator::operator*(), verifyUse(), verifyUses(), and walkReachable().

◆ create() [2/3]

VirtualUse VirtualUse::create ( Scop * S,
ScopStmt * UserStmt,
Loop * UserScope,
Value * Val,
bool Virtual )
static

Get a VirtualUse for uses within statements.

It is assumed that the user is not a PHINode. Such uses are always VirtualUse::Inter unless in a regions statement.

Parameters
SThe Scop object.
UserStmtThe statement in which Val is used. Can be nullptr, in which case it assumed that the statement has been removed, which is only possible if no instruction in it had side-effects or computes a value used by another statement.
UserScopeLoop scope in which the value is used. Needed to determine whether the value is synthesizable.
ValThe value being used.
VirtualWhether to use (and prioritize over instruction location) information about MemoryAccesses.
Returns
A VirtualUse object that gives information about Val's use in UserStmt.

Definition at line 52 of file VirtualInstruction.cpp.

References assert, Block, polly::canSynthesize(), Constant, polly::ScopStmt::getParent(), Hoisted, InputMA, Inter, Intra, polly::ScopStmt::lookupValueReadOf(), ReadOnly, ScevExpr, Synthesizable, Val, polly::Value, and VirtualUse().

◆ create() [3/3]

VirtualUse polly::VirtualUse::create ( ScopStmt * UserStmt,
Loop * UserScope,
Value * Val,
bool Virtual )
inlinestatic

◆ dump()

LLVM_DUMP_METHOD void VirtualUse::dump ( ) const

Definition at line 148 of file VirtualInstruction.cpp.

References print().

◆ getKind()

UseKind polly::VirtualUse::getKind ( ) const
inline

Return the type of use.

Definition at line 144 of file VirtualInstruction.h.

References Kind.

Referenced by findReferencesByUse().

◆ getMemoryAccess()

MemoryAccess * polly::VirtualUse::getMemoryAccess ( ) const
inline

Return the MemoryAccess that makes the value available in this statement, if any.

Definition at line 151 of file VirtualInstruction.h.

References InputMA.

◆ getScevExpr()

const SCEV * polly::VirtualUse::getScevExpr ( ) const
inline

Return the ScalarEvolution representation of Val.

Definition at line 147 of file VirtualInstruction.h.

References ScevExpr.

Referenced by findReferencesByUse().

◆ getUser()

ScopStmt * polly::VirtualUse::getUser ( ) const
inline

Return user statement.

Definition at line 138 of file VirtualInstruction.h.

References User.

◆ getValue()

llvm::Value * polly::VirtualUse::getValue ( ) const
inline

Return the used value.

Definition at line 141 of file VirtualInstruction.h.

References Val.

◆ isBlock()

bool polly::VirtualUse::isBlock ( ) const
inline

Definition at line 130 of file VirtualInstruction.h.

References Block, and Kind.

◆ isConstant()

bool polly::VirtualUse::isConstant ( ) const
inline

Definition at line 129 of file VirtualInstruction.h.

References Constant, and Kind.

◆ isHoisted()

bool polly::VirtualUse::isHoisted ( ) const
inline

Definition at line 132 of file VirtualInstruction.h.

References Hoisted, and Kind.

◆ isInter()

bool polly::VirtualUse::isInter ( ) const
inline

Definition at line 135 of file VirtualInstruction.h.

References Inter, and Kind.

◆ isIntra()

bool polly::VirtualUse::isIntra ( ) const
inline

Definition at line 134 of file VirtualInstruction.h.

References Intra, and Kind.

◆ isReadOnly()

bool polly::VirtualUse::isReadOnly ( ) const
inline

Definition at line 133 of file VirtualInstruction.h.

References Kind, and ReadOnly.

◆ isSynthesizable()

bool polly::VirtualUse::isSynthesizable ( ) const
inline

Definition at line 131 of file VirtualInstruction.h.

References Kind, and Synthesizable.

◆ print()

void VirtualUse::print ( raw_ostream & OS,
bool Reproducible = true ) const

Print a description of this object.

Parameters
OSStream to print to.
ReproducibleIf true, ensures that the output is stable between runs and is suitable to check in regression tests. This excludes printing e.g. pointer values. If false, the output should not be used for regression tests, but may contain more information useful in debugger sessions.

Definition at line 106 of file VirtualInstruction.cpp.

References Block, Constant, Hoisted, InputMA, Inter, Intra, Kind, ReadOnly, ScevExpr, Synthesizable, User, and Val.

Referenced by dump().

Member Data Documentation

◆ InputMA

MemoryAccess* polly::VirtualUse::InputMA
private

If this is an inter-statement (or read-only) use, contains the MemoryAccess that makes the value available in this statement.

In case of intra-statement uses, can contain a MemoryKind::Array access. In all other cases, it is a nullptr.

Definition at line 83 of file VirtualInstruction.h.

Referenced by create(), getMemoryAccess(), print(), and VirtualUse().

◆ Kind

UseKind polly::VirtualUse::Kind
private

The type of value use.

Definition at line 74 of file VirtualInstruction.h.

Referenced by getKind(), isBlock(), isConstant(), isHoisted(), isInter(), isIntra(), isReadOnly(), isSynthesizable(), print(), and VirtualUse().

◆ ScevExpr

const SCEV* polly::VirtualUse::ScevExpr
private

The value represented as llvm::SCEV expression.

Definition at line 77 of file VirtualInstruction.h.

Referenced by create(), getScevExpr(), print(), and VirtualUse().

◆ User

ScopStmt* polly::VirtualUse::User
private

The statement where a value is used.

Definition at line 68 of file VirtualInstruction.h.

Referenced by getUser(), print(), and VirtualUse().

◆ Val

Value* polly::VirtualUse::Val
private

The value that is used.

Definition at line 71 of file VirtualInstruction.h.

Referenced by create(), create(), getValue(), print(), and VirtualUse().


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