Intel® Implicit SPMD Program Compiler (Intel® ISPC)
1.13.0
|
Representation of a print() statement in the program. More...
#include <stmt.h>
Public Member Functions | |
PrintStmt (const std::string &f, Expr *v, SourcePos p) | |
void | EmitCode (FunctionEmitContext *ctx) const |
void | Print (int indent) const |
Stmt * | TypeCheck () |
int | EstimateCost () const |
Public Member Functions inherited from Stmt | |
Stmt (SourcePos p, unsigned scid) | |
virtual Stmt * | Optimize () |
Public Member Functions inherited from ASTNode | |
ASTNode (SourcePos p, unsigned scid) | |
virtual | ~ASTNode () |
unsigned | getValueID () const |
Static Public Member Functions | |
static bool | classof (PrintStmt const *) |
static bool | classof (ASTNode const *N) |
Static Public Member Functions inherited from Stmt | |
static bool | classof (Stmt const *) |
static bool | classof (ASTNode const *N) |
Static Public Member Functions inherited from ASTNode | |
static bool | classof (ASTNode const *) |
Public Attributes | |
const std::string | format |
Expr * | values |
Public Attributes inherited from ASTNode | |
SourcePos | pos |
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 } |
Representation of a print() statement in the program.
It's currently necessary to have a special statement type for print() since strings aren't supported as first-class types in the language, but we need to be able to pass a formatting string as the first argument to print(). We also need this to be a variable argument function, which also isn't supported. Representing print() as a statement lets us work around both of those ugly little issues...
|
inlinestatic |
|
inlinestatic |
Definition at line 475 of file stmt.h.
References Stmt::EmitCode(), ASTNode::EstimateCost(), ASTNode::getValueID(), Stmt::Print(), ASTNode::PrintStmtID, and Stmt::TypeCheck().
|
virtual |
Emit LLVM IR for the statement, using the FunctionEmitContext to create the necessary instructions.
Implements Stmt.
Definition at line 2705 of file stmt.cpp.
References FunctionEmitContext::AddElementOffset(), FunctionEmitContext::AllocaInst(), AssertPos, FunctionEmitContext::BitCastInst(), FunctionEmitContext::CallInst(), ExprList::exprs, format, g, FunctionEmitContext::GetCurrentBasicBlock(), FunctionEmitContext::GetFullMask(), FunctionEmitContext::GetStringPtr(), Target::getVectorWidth(), FunctionEmitContext::LaneMask(), LLVMInt32(), lProcessPrintArg(), m, Module::module, ASTNode::pos, FunctionEmitContext::SetDebugPos(), FunctionEmitContext::StoreInst(), Globals::target, values, and LLVMTypes::VoidPointerType.
|
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 2783 of file stmt.cpp.
References COST_FUNCALL.
|
virtual |
|
virtual |
const std::string PrintStmt::format |
Format string for the print() statement.
Definition at line 484 of file stmt.h.
Referenced by EmitCode(), and Print().
Expr* PrintStmt::values |
This holds the arguments passed to the print() statement. If more than one was provided, this will be an ExprList.
Definition at line 487 of file stmt.h.
Referenced by EmitCode(), and WalkAST().