Intel® Implicit SPMD Program Compiler (Intel® ISPC)  1.13.0
Public Member Functions | Static Public Member Functions | Private Attributes | List of all members
SymbolExpr Class Reference

Expression representing a symbol reference in the program. More...

#include <expr.h>

Inheritance diagram for SymbolExpr:
Inheritance graph
[legend]
Collaboration diagram for SymbolExpr:
Collaboration graph
[legend]

Public Member Functions

 SymbolExpr (Symbol *s, SourcePos p)
 
llvm::Value * GetValue (FunctionEmitContext *ctx) const
 
llvm::Value * GetLValue (FunctionEmitContext *ctx) const
 
const TypeGetType () const
 
const TypeGetLValueType () const
 
SymbolGetBaseSymbol () const
 
ExprTypeCheck ()
 
ExprOptimize ()
 
void Print () const
 
int EstimateCost () const
 
- Public Member Functions inherited from Expr
 Expr (SourcePos p, unsigned scid)
 
virtual std::pair< llvm::Constant *, bool > GetStorageConstant (const Type *type) const
 
virtual std::pair< llvm::Constant *, bool > GetConstant (const Type *type) const
 
- Public Member Functions inherited from ASTNode
 ASTNode (SourcePos p, unsigned scid)
 
virtual ~ASTNode ()
 
unsigned getValueID () const
 

Static Public Member Functions

static bool classof (SymbolExpr const *)
 
static bool classof (ASTNode const *N)
 
- Static Public Member Functions inherited from Expr
static bool classof (Expr const *)
 
static bool classof (ASTNode const *N)
 
- Static Public Member Functions inherited from ASTNode
static bool classof (ASTNode const *)
 

Private Attributes

Symbolsymbol
 

Additional Inherited Members

- Public Types inherited from ASTNode
enum  ASTNodeTy {
  AddressOfExprID, AssignExprID, BinaryExprID, ConstExprID,
  DerefExprID, PtrDerefExprID, RefDerefExprID, ExprListID,
  FunctionCallExprID, FunctionSymbolExprID, IndexExprID, StructMemberExprID,
  VectorMemberExprID, NewExprID, NullPointerExprID, ReferenceExprID,
  SelectExprID, SizeOfExprID, SymbolExprID, SyncExprID,
  TypeCastExprID, UnaryExprID, MaxExprID, AssertStmtID,
  BreakStmtID, CaseStmtID, ContinueStmtID, DeclStmtID,
  DefaultStmtID, DeleteStmtID, DoStmtID, ExprStmtID,
  ForeachActiveStmtID, ForeachStmtID, ForeachUniqueStmtID, ForStmtID,
  GotoStmtID, IfStmtID, LabeledStmtID, PrintStmtID,
  ReturnStmtID, StmtListID, SwitchStmtID, UnmaskedStmtID
}
 
- Public Attributes inherited from ASTNode
SourcePos pos
 

Detailed Description

Expression representing a symbol reference in the program.

Definition at line 631 of file expr.h.

Constructor & Destructor Documentation

◆ SymbolExpr()

SymbolExpr::SymbolExpr ( Symbol s,
SourcePos  p 
)

Definition at line 7595 of file expr.cpp.

References symbol.

Member Function Documentation

◆ classof() [1/2]

static bool SymbolExpr::classof ( SymbolExpr const *  )
inlinestatic

Definition at line 635 of file expr.h.

◆ classof() [2/2]

static bool SymbolExpr::classof ( ASTNode const *  N)
inlinestatic

◆ EstimateCost()

int SymbolExpr::EstimateCost ( ) const
virtual

Estimate the execution cost of the node (not including the cost of the children. The value returned should be based on the COST_* enumerant values defined in ispc.h.

Implements ASTNode.

Definition at line 7640 of file expr.cpp.

◆ GetBaseSymbol()

Symbol * SymbolExpr::GetBaseSymbol ( ) const
virtual

For expressions that have values based on a symbol (e.g. regular symbol references, array indexing, etc.), this returns a pointer to that symbol.

Reimplemented from Expr.

Definition at line 7624 of file expr.cpp.

References symbol.

◆ GetLValue()

llvm::Value * SymbolExpr::GetLValue ( FunctionEmitContext ctx) const
virtual

For expressions that can provide an lvalue (e.g. array indexing), this function should emit IR that computes the expression's lvalue and returns the corresponding llvm::Value. Expressions that can't provide an lvalue should leave this unimplemented; the default implementation returns NULL.

Reimplemented from Expr.

Definition at line 7607 of file expr.cpp.

References FunctionEmitContext::SetDebugPos(), Symbol::storagePtr, and symbol.

◆ GetLValueType()

const Type * SymbolExpr::GetLValueType ( ) const
virtual

Returns the type of the value returned by GetLValueType(); this should be a pointer type of some sort (uniform or varying).

Reimplemented from Expr.

Definition at line 7614 of file expr.cpp.

References Type::GetReferenceTarget(), PointerType::GetUniform(), symbol, and Symbol::type.

◆ GetType()

const Type * SymbolExpr::GetType ( ) const
virtual

Returns the Type of the expression.

Implements Expr.

Definition at line 7626 of file expr.cpp.

References symbol, and Symbol::type.

Referenced by Optimize(), and Print().

◆ GetValue()

llvm::Value * SymbolExpr::GetValue ( FunctionEmitContext ctx) const
virtual

This is the main method for Expr implementations to implement. It should call methods in the FunctionEmitContext to emit LLVM IR instructions to the current basic block in order to generate an llvm::Value that represents the expression's value.

Implements Expr.

Definition at line 7597 of file expr.cpp.

References FunctionEmitContext::LoadInst(), Symbol::name, FunctionEmitContext::SetDebugPos(), Symbol::storagePtr, symbol, and Symbol::type.

◆ Optimize()

Expr * SymbolExpr::Optimize ( )
virtual

This method should perform early optimizations of the expression (constant folding, etc.) and return a pointer to the resulting expression. If an error is encountered during optimization, NULL should be returned.

Implements Expr.

Definition at line 7630 of file expr.cpp.

References AssertPos, Symbol::constValue, GetType(), and symbol.

◆ Print()

void SymbolExpr::Print ( ) const
virtual

Prints the expression to standard output (used for debugging).

Implements Expr.

Definition at line 7646 of file expr.cpp.

References GetType(), Symbol::name, SourcePos::Print(), and symbol.

◆ TypeCheck()

Expr * SymbolExpr::TypeCheck ( )
virtual

This method should perform type checking of the expression and return a pointer to the resulting expression. If an error is encountered, NULL should be returned.

Implements Expr.

Definition at line 7628 of file expr.cpp.

Member Data Documentation

◆ symbol

Symbol* SymbolExpr::symbol
private

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