Intel SPMD Program Compiler  1.9.1
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
ConstExpr Class Reference

Expression representing a compile-time constant value. More...

#include <expr.h>

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

Public Member Functions

 ConstExpr (const Type *t, int8_t i, SourcePos p)
 
 ConstExpr (const Type *t, int8_t *i, SourcePos p)
 
 ConstExpr (const Type *t, uint8_t u, SourcePos p)
 
 ConstExpr (const Type *t, uint8_t *u, SourcePos p)
 
 ConstExpr (const Type *t, int16_t i, SourcePos p)
 
 ConstExpr (const Type *t, int16_t *i, SourcePos p)
 
 ConstExpr (const Type *t, uint16_t u, SourcePos p)
 
 ConstExpr (const Type *t, uint16_t *u, SourcePos p)
 
 ConstExpr (const Type *t, int32_t i, SourcePos p)
 
 ConstExpr (const Type *t, int32_t *i, SourcePos p)
 
 ConstExpr (const Type *t, uint32_t u, SourcePos p)
 
 ConstExpr (const Type *t, uint32_t *u, SourcePos p)
 
 ConstExpr (const Type *t, float f, SourcePos p)
 
 ConstExpr (const Type *t, float *f, SourcePos p)
 
 ConstExpr (const Type *t, double d, SourcePos p)
 
 ConstExpr (const Type *t, double *d, SourcePos p)
 
 ConstExpr (const Type *t, int64_t i, SourcePos p)
 
 ConstExpr (const Type *t, int64_t *i, SourcePos p)
 
 ConstExpr (const Type *t, uint64_t i, SourcePos p)
 
 ConstExpr (const Type *t, uint64_t *i, SourcePos p)
 
 ConstExpr (const Type *t, bool b, SourcePos p)
 
 ConstExpr (const Type *t, bool *b, SourcePos p)
 
 ConstExpr (ConstExpr *old, double *values)
 
 ConstExpr (ConstExpr *old, SourcePos pos)
 
llvm::Value * GetValue (FunctionEmitContext *ctx) const
 
const TypeGetType () const
 
void Print () const
 
llvm::Constant * GetConstant (const Type *type) const
 
ExprTypeCheck ()
 
ExprOptimize ()
 
int EstimateCost () const
 
int GetValues (bool *, bool forceVarying=false) const
 
int GetValues (int8_t *, bool forceVarying=false) const
 
int GetValues (uint8_t *, bool forceVarying=false) const
 
int GetValues (int16_t *, bool forceVarying=false) const
 
int GetValues (uint16_t *, bool forceVarying=false) const
 
int GetValues (int32_t *, bool forceVarying=false) const
 
int GetValues (uint32_t *, bool forceVarying=false) const
 
int GetValues (float *, bool forceVarying=false) const
 
int GetValues (int64_t *, bool forceVarying=false) const
 
int GetValues (uint64_t *, bool forceVarying=false) const
 
int GetValues (double *, bool forceVarying=false) const
 
int Count () const
 
- Public Member Functions inherited from Expr
 Expr (SourcePos p, unsigned scid)
 
virtual llvm::Value * GetLValue (FunctionEmitContext *ctx) const
 
virtual const TypeGetLValueType () const
 
virtual SymbolGetBaseSymbol () const
 
- Public Member Functions inherited from ASTNode
 ASTNode (SourcePos p, unsigned scid)
 
virtual ~ASTNode ()
 
unsigned getValueID () const
 

Static Public Member Functions

static bool classof (ConstExpr 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 Member Functions

AtomicType::BasicType getBasicType () const
 

Private Attributes

const Typetype
 
union {
   int8_t   int8Val [ISPC_MAX_NVEC]
 
   uint8_t   uint8Val [ISPC_MAX_NVEC]
 
   int16_t   int16Val [ISPC_MAX_NVEC]
 
   uint16_t   uint16Val [ISPC_MAX_NVEC]
 
   int32_t   int32Val [ISPC_MAX_NVEC]
 
   uint32_t   uint32Val [ISPC_MAX_NVEC]
 
   bool   boolVal [ISPC_MAX_NVEC]
 
   float   floatVal [ISPC_MAX_NVEC]
 
   double   doubleVal [ISPC_MAX_NVEC]
 
   int64_t   int64Val [ISPC_MAX_NVEC]
 
   uint64_t   uint64Val [ISPC_MAX_NVEC]
 
}; 
 

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 compile-time constant value.

This class can currently represent compile-time constants of anything that is an AtomicType or an EnumType; for anything more complex, we don't currently have a representation of a compile-time constant that can be further reasoned about.

Definition at line 390 of file expr.h.

Constructor & Destructor Documentation

ConstExpr::ConstExpr ( const Type t,
int8_t  i,
SourcePos  p 
)

Create a ConstExpr from a uniform int8 value

Definition at line 5351 of file expr.cpp.

References AssertPos, Type::Equal(), Type::GetAsConstType(), int8Val, type, and AtomicType::UniformInt8.

ConstExpr::ConstExpr ( const Type t,
int8_t *  i,
SourcePos  p 
)

Create a ConstExpr from a varying int8 value

Definition at line 5360 of file expr.cpp.

References AssertPos, Count(), Type::Equal(), Type::GetAsConstType(), int8Val, type, AtomicType::UniformInt8, and AtomicType::VaryingInt8.

ConstExpr::ConstExpr ( const Type t,
uint8_t  u,
SourcePos  p 
)

Create a ConstExpr from a uniform uint8 value

Definition at line 5371 of file expr.cpp.

References AssertPos, Type::Equal(), Type::GetAsConstType(), type, uint8Val, and AtomicType::UniformUInt8.

ConstExpr::ConstExpr ( const Type t,
uint8_t *  u,
SourcePos  p 
)

Create a ConstExpr from a varying uint8 value

Definition at line 5380 of file expr.cpp.

References AssertPos, Count(), Type::Equal(), Type::GetAsConstType(), type, uint8Val, AtomicType::UniformUInt8, and AtomicType::VaryingUInt8.

ConstExpr::ConstExpr ( const Type t,
int16_t  i,
SourcePos  p 
)

Create a ConstExpr from a uniform int16 value

Definition at line 5391 of file expr.cpp.

References AssertPos, Type::Equal(), Type::GetAsConstType(), int16Val, type, and AtomicType::UniformInt16.

ConstExpr::ConstExpr ( const Type t,
int16_t *  i,
SourcePos  p 
)

Create a ConstExpr from a varying int16 value

Definition at line 5400 of file expr.cpp.

References AssertPos, Count(), Type::Equal(), Type::GetAsConstType(), int16Val, type, AtomicType::UniformInt16, and AtomicType::VaryingInt16.

ConstExpr::ConstExpr ( const Type t,
uint16_t  u,
SourcePos  p 
)

Create a ConstExpr from a uniform uint16 value

Definition at line 5411 of file expr.cpp.

References AssertPos, Type::Equal(), Type::GetAsConstType(), type, uint16Val, and AtomicType::UniformUInt16.

ConstExpr::ConstExpr ( const Type t,
uint16_t *  u,
SourcePos  p 
)

Create a ConstExpr from a varying uint16 value

Definition at line 5420 of file expr.cpp.

References AssertPos, Count(), Type::Equal(), Type::GetAsConstType(), type, uint16Val, AtomicType::UniformUInt16, and AtomicType::VaryingUInt16.

ConstExpr::ConstExpr ( const Type t,
int32_t  i,
SourcePos  p 
)

Create a ConstExpr from a uniform int32 value

Definition at line 5431 of file expr.cpp.

References AssertPos, Type::Equal(), Type::GetAsConstType(), int32Val, type, and AtomicType::UniformInt32.

ConstExpr::ConstExpr ( const Type t,
int32_t *  i,
SourcePos  p 
)

Create a ConstExpr from a varying int32 value

Definition at line 5440 of file expr.cpp.

References AssertPos, Count(), Type::Equal(), Type::GetAsConstType(), int32Val, type, AtomicType::UniformInt32, and AtomicType::VaryingInt32.

ConstExpr::ConstExpr ( const Type t,
uint32_t  u,
SourcePos  p 
)

Create a ConstExpr from a uniform uint32 value

Definition at line 5451 of file expr.cpp.

References AssertPos, Type::Equal(), Type::GetAsConstType(), Type::IsUniformType(), type, uint32Val, and AtomicType::UniformUInt32.

ConstExpr::ConstExpr ( const Type t,
uint32_t *  u,
SourcePos  p 
)

Create a ConstExpr from a varying uint32 value

Definition at line 5462 of file expr.cpp.

References AssertPos, Count(), Type::Equal(), Type::GetAsConstType(), type, uint32Val, AtomicType::UniformUInt32, and AtomicType::VaryingUInt32.

ConstExpr::ConstExpr ( const Type t,
float  f,
SourcePos  p 
)

Create a ConstExpr from a uniform float value

Definition at line 5474 of file expr.cpp.

References AssertPos, Type::Equal(), floatVal, Type::GetAsConstType(), type, and AtomicType::UniformFloat.

ConstExpr::ConstExpr ( const Type t,
float *  f,
SourcePos  p 
)

Create a ConstExpr from a varying float value

Definition at line 5483 of file expr.cpp.

References AssertPos, Count(), Type::Equal(), floatVal, Type::GetAsConstType(), type, AtomicType::UniformFloat, and AtomicType::VaryingFloat.

ConstExpr::ConstExpr ( const Type t,
double  d,
SourcePos  p 
)

Create a ConstExpr from a uniform double value

Definition at line 5534 of file expr.cpp.

References AssertPos, doubleVal, Type::Equal(), Type::GetAsConstType(), type, and AtomicType::UniformDouble.

ConstExpr::ConstExpr ( const Type t,
double *  d,
SourcePos  p 
)

Create a ConstExpr from a varying double value

Definition at line 5543 of file expr.cpp.

References AssertPos, Count(), doubleVal, Type::Equal(), Type::GetAsConstType(), type, AtomicType::UniformDouble, and AtomicType::VaryingDouble.

ConstExpr::ConstExpr ( const Type t,
int64_t  i,
SourcePos  p 
)

Create a ConstExpr from a uniform int64 value

Definition at line 5494 of file expr.cpp.

References AssertPos, Type::Equal(), Type::GetAsConstType(), int64Val, type, and AtomicType::UniformInt64.

ConstExpr::ConstExpr ( const Type t,
int64_t *  i,
SourcePos  p 
)

Create a ConstExpr from a varying int64 value

Definition at line 5503 of file expr.cpp.

References AssertPos, Count(), Type::Equal(), Type::GetAsConstType(), int64Val, type, AtomicType::UniformInt64, and AtomicType::VaryingInt64.

ConstExpr::ConstExpr ( const Type t,
uint64_t  i,
SourcePos  p 
)

Create a ConstExpr from a uniform uint64 value

Definition at line 5514 of file expr.cpp.

References AssertPos, Type::Equal(), Type::GetAsConstType(), type, uint64Val, and AtomicType::UniformUInt64.

ConstExpr::ConstExpr ( const Type t,
uint64_t *  i,
SourcePos  p 
)

Create a ConstExpr from a varying uint64 value

Definition at line 5523 of file expr.cpp.

References AssertPos, Count(), Type::Equal(), Type::GetAsConstType(), type, uint64Val, AtomicType::UniformUInt64, and AtomicType::VaryingUInt64.

ConstExpr::ConstExpr ( const Type t,
bool  b,
SourcePos  p 
)

Create a ConstExpr from a uniform bool value

Definition at line 5554 of file expr.cpp.

References AssertPos, boolVal, Type::Equal(), Type::GetAsConstType(), type, and AtomicType::UniformBool.

ConstExpr::ConstExpr ( const Type t,
bool *  b,
SourcePos  p 
)

Create a ConstExpr from a varying bool value

Definition at line 5563 of file expr.cpp.

References AssertPos, boolVal, Count(), Type::Equal(), Type::GetAsConstType(), type, AtomicType::UniformBool, and AtomicType::VaryingBool.

ConstExpr::ConstExpr ( ConstExpr old,
double *  values 
)
ConstExpr::ConstExpr ( ConstExpr old,
SourcePos  pos 
)

Member Function Documentation

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

Definition at line 451 of file expr.h.

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

Definition at line 452 of file expr.h.

References ASTNode::ConstExprID, and ASTNode::getValueID().

int ConstExpr::Count ( ) const

Return the number of values in the ConstExpr; should be either 1, if it has uniform type, or the target's vector width if it's varying.

Definition at line 6023 of file expr.cpp.

References g, GetType(), Target::getVectorWidth(), Type::IsVaryingType(), and Globals::target.

Referenced by ConstExpr(), GetConstant(), GetValues(), lConstFoldBinaryArithOp(), lConstFoldBinaryIntOp(), lConstFoldBinaryLogicalOp(), lConstFoldBoolBinaryOp(), and Print().

int ConstExpr::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 6177 of file expr.cpp.

AtomicType::BasicType ConstExpr::getBasicType ( ) const
private

Definition at line 5676 of file expr.cpp.

References AssertPos, AtomicType::basicType, type, and AtomicType::TYPE_UINT32.

Referenced by ConstExpr(), GetValue(), GetValues(), and Print().

llvm::Constant * ConstExpr::GetConstant ( const Type type) const
virtual
const Type * ConstExpr::GetType ( ) const
virtual

Returns the Type of the expression.

Implements Expr.

Definition at line 5688 of file expr.cpp.

References type.

Referenced by Count(), lConstFoldBinaryArithOp(), lConstFoldBinaryIntOp(), lConstFoldBinaryLogicalOp(), lConstFoldBoolBinaryOp(), UnaryExpr::Optimize(), SelectExpr::Optimize(), and Print().

llvm::Value * ConstExpr::GetValue ( FunctionEmitContext ctx) const
virtual
int ConstExpr::GetValues ( bool *  b,
bool  forceVarying = false 
) const
int ConstExpr::GetValues ( int8_t *  ip,
bool  forceVarying = false 
) const
int ConstExpr::GetValues ( uint8_t *  up,
bool  forceVarying = false 
) const
int ConstExpr::GetValues ( int16_t *  ip,
bool  forceVarying = false 
) const
int ConstExpr::GetValues ( uint16_t *  up,
bool  forceVarying = false 
) const
int ConstExpr::GetValues ( int32_t *  ip,
bool  forceVarying = false 
) const
int ConstExpr::GetValues ( uint32_t *  up,
bool  forceVarying = false 
) const
int ConstExpr::GetValues ( float *  fp,
bool  forceVarying = false 
) const
int ConstExpr::GetValues ( int64_t *  ip,
bool  forceVarying = false 
) const
int ConstExpr::GetValues ( uint64_t *  up,
bool  forceVarying = false 
) const
int ConstExpr::GetValues ( double *  d,
bool  forceVarying = false 
) const
Expr * ConstExpr::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 6165 of file expr.cpp.

void ConstExpr::Print ( ) const
virtual
Expr * ConstExpr::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 6171 of file expr.cpp.

Member Data Documentation

union { ... }
bool ConstExpr::boolVal[ISPC_MAX_NVEC]

Definition at line 498 of file expr.h.

Referenced by ConstExpr(), GetValue(), GetValues(), and Print().

double ConstExpr::doubleVal[ISPC_MAX_NVEC]

Definition at line 500 of file expr.h.

Referenced by ConstExpr(), GetValue(), GetValues(), and Print().

float ConstExpr::floatVal[ISPC_MAX_NVEC]

Definition at line 499 of file expr.h.

Referenced by ConstExpr(), GetValue(), GetValues(), and Print().

int16_t ConstExpr::int16Val[ISPC_MAX_NVEC]

Definition at line 494 of file expr.h.

Referenced by ConstExpr(), GetValue(), GetValues(), and Print().

int32_t ConstExpr::int32Val[ISPC_MAX_NVEC]

Definition at line 496 of file expr.h.

Referenced by ConstExpr(), GetValue(), GetValues(), and Print().

int64_t ConstExpr::int64Val[ISPC_MAX_NVEC]

Definition at line 501 of file expr.h.

Referenced by ConstExpr(), GetValue(), GetValues(), and Print().

int8_t ConstExpr::int8Val[ISPC_MAX_NVEC]

Definition at line 492 of file expr.h.

Referenced by ConstExpr(), GetValue(), GetValues(), and Print().

const Type* ConstExpr::type
private

Definition at line 490 of file expr.h.

Referenced by ConstExpr(), getBasicType(), GetType(), and GetValue().

uint16_t ConstExpr::uint16Val[ISPC_MAX_NVEC]

Definition at line 495 of file expr.h.

Referenced by ConstExpr(), GetValue(), GetValues(), and Print().

uint32_t ConstExpr::uint32Val[ISPC_MAX_NVEC]

Definition at line 497 of file expr.h.

Referenced by ConstExpr(), GetValue(), GetValues(), and Print().

uint64_t ConstExpr::uint64Val[ISPC_MAX_NVEC]

Definition at line 502 of file expr.h.

Referenced by ConstExpr(), GetValue(), GetValues(), and Print().

uint8_t ConstExpr::uint8Val[ISPC_MAX_NVEC]

Definition at line 493 of file expr.h.

Referenced by ConstExpr(), GetValue(), GetValues(), and Print().


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