OmpSupport Namespace Reference


Detailed Description

Translation (directive lowering) support for OpenMP 3.0 C/C++

Like other OpenMP related work within ROSE, all things go to the OmpSupport namespace to avoid conflicts Liao, 8/10/2009


Classes

class  OmpAttributeList
class  OmpAttribute
class  translationDriver
 A driver to traverse AST trees and invoke individual translators for OpenMP constructs, (not in use) Postorder is preferred. More...

Typedefs

typedef std::map< const SgVariableSymbol *,
SgVariableSymbol * > 
VariableSymbolMap_t

Enumerations

enum  omp_construct_enum {
  e_unknown = 0,
  e_parallel,
  e_for,
  e_do,
  e_workshare,
  e_sections,
  e_section,
  e_single,
  e_master,
  e_critical,
  e_barrier,
  e_atomic,
  e_flush,
  e_threadprivate,
  e_parallel_for,
  e_parallel_do,
  e_parallel_sections,
  e_parallel_workshare,
  e_task,
  e_taskwait,
  e_ordered_directive,
  e_end_critical,
  e_end_do,
  e_end_master,
  e_end_ordered,
  e_end_parallel_do,
  e_end_parallel_sections,
  e_end_parallel_workshare,
  e_end_parallel,
  e_end_sections,
  e_end_single,
  e_end_task,
  e_end_workshare,
  e_default,
  e_shared,
  e_private,
  e_firstprivate,
  e_lastprivate,
  e_copyin,
  e_copyprivate,
  e_if,
  e_num_threads,
  e_nowait,
  e_ordered_clause,
  e_reduction,
  e_schedule,
  e_collapse,
  e_untied,
  e_default_none,
  e_default_shared,
  e_default_private,
  e_default_firstprivate,
  e_reduction_plus,
  e_reduction_mul,
  e_reduction_minus,
  e_reduction_bitand,
  e_reduction_bitor,
  e_reduction_bitxor,
  e_reduction_logand,
  e_reduction_logor,
  e_reduction_and,
  e_reduction_or,
  e_reduction_eqv,
  e_reduction_neqv,
  e_reduction_max,
  e_reduction_min,
  e_reduction_iand,
  e_reduction_ior,
  e_reduction_ieor,
  e_schedule_none,
  e_schedule_static,
  e_schedule_dynamic,
  e_schedule_guided,
  e_schedule_auto,
  e_schedule_runtime,
  e_not_omp
}
enum  omp_rtl_enum {
  e_gomp,
  e_omni,
  e_last_rtl
}
 The type of target runtime libraries (not yet in use). More...

Functions

void processOpenMP (SgSourceFile *sageFilePtr)
std::string toString (omp_construct_enum omp_type)
 Output omp_construct_enum to a string:.
bool isFortranEndDirective (omp_construct_enum omp_type)
 Check if the construct is a Fortran END ... directive.
bool isFortranBeginDirective (omp_construct_enum omp_type)
 Check if the construct is a Fortran directive which can (optionally) have a corresponding END directive.
bool isDirective (omp_construct_enum omp_type)
 Check if an OpenMP construct is a directive.
bool isDirectiveWithBody (omp_construct_enum omp_type)
 Check if an OpenMP directive has a structured body.
bool isClause (omp_construct_enum omp_type)
 Check if an OpenMP construct is a clause.
bool isReductionOperator (omp_construct_enum omp_type)
 Check if an OpenMP construct is a reduction operator.
OmpAttributebuildOmpAttribute (enum omp_construct_enum directive_type, SgNode *context_node, bool useDefined)
 A builder for OmpAttribute, useDefined indicates if the directive is added by programmer or not (by autoParallelization).
void addOmpAttribute (OmpAttribute *ompattribute, SgNode *node)
 Add OmpAttribute to a SgNode.
void removeOmpAttribute (OmpAttribute *ompattribute, SgNode *node)
 Remove OmpAttribute from a SgNode.
bool isEquivalentOmpAttribute (OmpAttribute *a1, OmpAttribute *a2)
 Check if two OmpAttributes are semantically equivalent to each other.
OmpAttributeListgetOmpAttributeList (SgNode *node)
 Get OmpAttribute from a SgNode, return NULL if not found.
OmpAttributegetOmpAttribute (SgNode *node)
 Get the first OmpAttribute from a SgNode, return NULL if not found.
omp_construct_enum getOmpConstructEnum (SgPragmaDeclaration *decl)
 Get omp enum from an OpenMP pragma attached with OmpAttribute.
omp_construct_enum getBeginOmpConstructEnum (omp_construct_enum end_enum)
 Get the corresponding begin construct enum from an end construct enum.
omp_construct_enum getEndOmpConstructEnum (omp_construct_enum begin_enum)
 Get the corresponding end construct enum from a begin construct enum.
void generatePragmaFromOmpAttribute (SgNode *sg_node)
 Generate a pragma declaration from OmpAttribute attached to a statement.
std::string generateDiffTextFromOmpAttribute (SgNode *sg_node)
 Generate diff text from OmpAttribute attached to a statement.
void commandLineProcessing (std::vector< std::string > &argvList)
void lower_omp (SgSourceFile *)
 The top level interface to translate OpenMP directives.
void insertRTLHeaders (SgSourceFile *)
 Insert include "xxx.h", the interface of a runtime library to the compiler.
void insertRTLinitAndCleanCode (SgSourceFile *)
 Insert runtime init and terminate routines to main() entry.
void transOmpParallel (SgNode *node)
 Translate omp parallel.
void transOmpSections (SgNode *node)
 Translate omp sections.
void transOmpTask (SgNode *node)
 Translate omp task.
void transOmpLoop (SgNode *node)
 Translate omp for or omp do loops.
void transOmpBarrier (SgNode *node)
 Translate omp barrier.
void transOmpFlush (SgNode *node)
 Translate omp flush.
void transOmpTaskwait (SgNode *node)
 Translate omp taskwait.
void transOmpThreadprivate (SgNode *node)
 Translate omp threadprivate.
void transOmpOrdered (SgNode *node)
 Translate the ordered directive (not the ordered clause).
void transOmpAtomic (SgNode *node)
 Translate omp atomic.
void transOmpCritical (SgNode *node)
 Translate omp critical.
void transOmpMaster (SgNode *node)
 Translate omp master.
void transOmpSingle (SgNode *node)
 Translate omp single.
SgFunctionDeclarationgenerateOutlinedTask (SgNode *node, std::string &wrapper_name, std::set< SgVariableSymbol * > &syms, std::set< SgInitializedName * > &readOnlyVars)
 A helper function to generate implicit or explicit task for either omp parallel or omp task.
void transOmpVariables (SgStatement *ompStmt, SgBasicBlock *bb1, SgExpression *orig_loop_upper=NULL)
 Translate OpenMP variables associated with an OpenMP pragma, such as private, firstprivate, lastprivate, reduction, etc. bb1 is the translation generated code block in which the variable handling statements will be inserted. Original loop upper bound is needed for implementing lastprivate (check if it is the last iteration).
SgInitializedNamePtrList collectAllClauseVariables (SgOmpClauseBodyStatement *clause_stmt)
 Collect all variables from OpenMP clauses associated with an omp statement: private, reduction, etc.
SgInitializedNamePtrList collectClauseVariables (SgOmpClauseBodyStatement *clause_stmt, const VariantT &vt)
 Collect variables from a particular type of OpenMP clauses associated with an omp statement: private, reduction, etc.
SgInitializedNamePtrList collectClauseVariables (SgOmpClauseBodyStatement *clause_stmt, const VariantVector &vvt)
 Collect variables from given types of OpenMP clauses associated with an omp statement: private, reduction, etc.
bool isInClauseVariableList (SgInitializedName *var, SgOmpClauseBodyStatement *clause_stmt, const VariantT &vt)
 Check if a variable is in a variable list of a given clause type.
bool isInClauseVariableList (SgInitializedName *var, SgOmpClauseBodyStatement *clause_stmt, const VariantVector &vvt)
 Check if a variable is in variable lists of given clause types.
int replaceVariableReferences (SgNode *root, SgVariableSymbol *oldVar, SgVariableSymbol *newVar)
 Replace references to oldVar within root with references to newVar, return the number of references replaced.
int replaceVariableReferences (SgNode *root, VariableSymbolMap_t varRemap)
 Replace variable references within root based on a map from old symbols to new symbols.
void addClauseVariable (SgInitializedName *var, SgOmpClauseBodyStatement *clause_stmt, const VariantT &vt)
 Add a variable into a non-reduction clause of an OpenMP statement, create the clause transparently if it does not exist.
SgOmpVariablesClausebuildOmpVariableClause (SgOmpClauseBodyStatement *clause_stmt, const VariantT &vt)
 Build a non-reduction variable clause for a given OpenMP directive. It directly returns the clause if the clause already exists.
bool hasClause (SgOmpClauseBodyStatement *clause_stmt, const VariantT &vt)
 Check if an OpenMP statement has a clause of type vt.
Rose_STL_Container< SgOmpClause * > getClause (SgOmpClauseBodyStatement *clause_stmt, const VariantT &vt)
 Get OpenMP clauses from an eligible OpenMP statement.
bool useStaticSchedule (SgOmpClauseBodyStatement *omp_loop)
 Check if an omp for/do loop use static schedule or not, including: default schedule, or schedule(static[,chunk_size]).
SgOmpClause::omp_reduction_operator_enum getReductionOperationType (SgInitializedName *init_name, SgOmpClauseBodyStatement *clause_stmt)
 Return a reduction variable's reduction operation type.
SgExpressioncreateInitialValueExp (SgOmpClause::omp_reduction_operator_enum r_operator)
 Create an initial value according to reduction operator type.
std::string generateGOMPLoopStartFuncName (bool isOrdered, SgOmpClause::omp_schedule_kind_enum s_kind)
 Generate GOMP loop schedule start function's name.
std::string generateGOMPLoopNextFuncName (bool isOrdered, SgOmpClause::omp_schedule_kind_enum s_kind)
 Generate GOMP loop schedule next function's name.
std::string toString (SgOmpClause::omp_schedule_kind_enum s_kind)
 Convert a schedule kind enum value to a small case string.
int patchUpPrivateVariables (SgFile *)
 Patch up private variables for omp for. The reason is that loop indices should be private by default and this function will make this explicit.
int patchUpFirstprivateVariables (SgFile *)
 Patch up firstprivate variables for omp task. The reason is that the specification 3.0 defines rules for implicitly determined data-sharing attributes and this function will make the firstprivate variable of omp task explicit.
std::set< SgInitializedName * > collectThreadprivateVariables ()
 Collect threadprivate variables within the current project, return a set to avoid duplicated elements. No input parameters are needed since it finds match from memory pools.
SgVariableDeclarationbuildAndInsertDeclarationForOmp (const std::string &name, SgType *type, SgInitializer *varInit, SgBasicBlock *orig_scope)
 Special handling when trying to build and insert a variable declaration into a BB within Fortran OpenMP code.
SgBasicBlockgetEnclosingRegionOrFuncDefinition (SgNode *)
 Find an enclosing parallel region or function definition's body.

Variables

std::list< OmpAttribute * > omp_comment_list
unsigned int nCounter
omp_rtl_enum rtl_type


Typedef Documentation

typedef std::map<const SgVariableSymbol *, SgVariableSymbol *> OmpSupport::VariableSymbolMap_t


Enumeration Type Documentation

enum OmpSupport::omp_construct_enum

Enumerator:
e_unknown 
e_parallel 
e_for 
e_do 
e_workshare 
e_sections 
e_section 
e_single 
e_master 
e_critical 
e_barrier 
e_atomic 
e_flush 
e_threadprivate 
e_parallel_for 
e_parallel_do 
e_parallel_sections 
e_parallel_workshare 
e_task 
e_taskwait 
e_ordered_directive 
e_end_critical 
e_end_do 
e_end_master 
e_end_ordered 
e_end_parallel_do 
e_end_parallel_sections 
e_end_parallel_workshare 
e_end_parallel 
e_end_sections 
e_end_single 
e_end_task 
e_end_workshare 
e_default 
e_shared 
e_private 
e_firstprivate 
e_lastprivate 
e_copyin 
e_copyprivate 
e_if 
e_num_threads 
e_nowait 
e_ordered_clause 
e_reduction 
e_schedule 
e_collapse 
e_untied 
e_default_none 
e_default_shared 
e_default_private 
e_default_firstprivate 
e_reduction_plus 
e_reduction_mul 
e_reduction_minus 
e_reduction_bitand 
e_reduction_bitor 
e_reduction_bitxor 
e_reduction_logand 
e_reduction_logor 
e_reduction_and 
e_reduction_or 
e_reduction_eqv 
e_reduction_neqv 
e_reduction_max 
e_reduction_min 
e_reduction_iand 
e_reduction_ior 
e_reduction_ieor 
e_schedule_none 
e_schedule_static 
e_schedule_dynamic 
e_schedule_guided 
e_schedule_auto 
e_schedule_runtime 
e_not_omp 

enum OmpSupport::omp_rtl_enum

The type of target runtime libraries (not yet in use).

Enumerator:
e_gomp 
e_omni 
e_last_rtl 


Function Documentation

void OmpSupport::processOpenMP ( SgSourceFile sageFilePtr  ) 

std::string OmpSupport::toString ( omp_construct_enum  omp_type  ) 

Output omp_construct_enum to a string:.

bool OmpSupport::isFortranEndDirective ( omp_construct_enum  omp_type  ) 

Check if the construct is a Fortran END ... directive.

bool OmpSupport::isFortranBeginDirective ( omp_construct_enum  omp_type  ) 

Check if the construct is a Fortran directive which can (optionally) have a corresponding END directive.

bool OmpSupport::isDirective ( omp_construct_enum  omp_type  ) 

Check if an OpenMP construct is a directive.

bool OmpSupport::isDirectiveWithBody ( omp_construct_enum  omp_type  ) 

Check if an OpenMP directive has a structured body.

bool OmpSupport::isClause ( omp_construct_enum  omp_type  ) 

Check if an OpenMP construct is a clause.

bool OmpSupport::isReductionOperator ( omp_construct_enum  omp_type  ) 

Check if an OpenMP construct is a reduction operator.

OmpAttribute* OmpSupport::buildOmpAttribute ( enum omp_construct_enum  directive_type,
SgNode context_node,
bool  useDefined 
)

A builder for OmpAttribute, useDefined indicates if the directive is added by programmer or not (by autoParallelization).

void OmpSupport::addOmpAttribute ( OmpAttribute *  ompattribute,
SgNode node 
)

Add OmpAttribute to a SgNode.

void OmpSupport::removeOmpAttribute ( OmpAttribute *  ompattribute,
SgNode node 
)

Remove OmpAttribute from a SgNode.

bool OmpSupport::isEquivalentOmpAttribute ( OmpAttribute *  a1,
OmpAttribute *  a2 
)

Check if two OmpAttributes are semantically equivalent to each other.

OmpAttributeList* OmpSupport::getOmpAttributeList ( SgNode node  ) 

Get OmpAttribute from a SgNode, return NULL if not found.

OmpAttribute* OmpSupport::getOmpAttribute ( SgNode node  ) 

Get the first OmpAttribute from a SgNode, return NULL if not found.

omp_construct_enum OmpSupport::getOmpConstructEnum ( SgPragmaDeclaration decl  ) 

Get omp enum from an OpenMP pragma attached with OmpAttribute.

omp_construct_enum OmpSupport::getBeginOmpConstructEnum ( omp_construct_enum  end_enum  ) 

Get the corresponding begin construct enum from an end construct enum.

omp_construct_enum OmpSupport::getEndOmpConstructEnum ( omp_construct_enum  begin_enum  ) 

Get the corresponding end construct enum from a begin construct enum.

void OmpSupport::generatePragmaFromOmpAttribute ( SgNode sg_node  ) 

Generate a pragma declaration from OmpAttribute attached to a statement.

std::string OmpSupport::generateDiffTextFromOmpAttribute ( SgNode sg_node  ) 

Generate diff text from OmpAttribute attached to a statement.

void OmpSupport::commandLineProcessing ( std::vector< std::string > &  argvList  ) 

void OmpSupport::lower_omp ( SgSourceFile  ) 

The top level interface to translate OpenMP directives.

void OmpSupport::insertRTLHeaders ( SgSourceFile  ) 

Insert include "xxx.h", the interface of a runtime library to the compiler.

void OmpSupport::insertRTLinitAndCleanCode ( SgSourceFile  ) 

Insert runtime init and terminate routines to main() entry.

void OmpSupport::transOmpParallel ( SgNode node  ) 

Translate omp parallel.

void OmpSupport::transOmpSections ( SgNode node  ) 

Translate omp sections.

void OmpSupport::transOmpTask ( SgNode node  ) 

Translate omp task.

void OmpSupport::transOmpLoop ( SgNode node  ) 

Translate omp for or omp do loops.

void OmpSupport::transOmpBarrier ( SgNode node  ) 

Translate omp barrier.

void OmpSupport::transOmpFlush ( SgNode node  ) 

Translate omp flush.

void OmpSupport::transOmpTaskwait ( SgNode node  ) 

Translate omp taskwait.

void OmpSupport::transOmpThreadprivate ( SgNode node  ) 

Translate omp threadprivate.

void OmpSupport::transOmpOrdered ( SgNode node  ) 

Translate the ordered directive (not the ordered clause).

void OmpSupport::transOmpAtomic ( SgNode node  ) 

Translate omp atomic.

void OmpSupport::transOmpCritical ( SgNode node  ) 

Translate omp critical.

void OmpSupport::transOmpMaster ( SgNode node  ) 

Translate omp master.

void OmpSupport::transOmpSingle ( SgNode node  ) 

Translate omp single.

SgFunctionDeclaration* OmpSupport::generateOutlinedTask ( SgNode node,
std::string &  wrapper_name,
std::set< SgVariableSymbol * > &  syms,
std::set< SgInitializedName * > &  readOnlyVars 
)

A helper function to generate implicit or explicit task for either omp parallel or omp task.

void OmpSupport::transOmpVariables ( SgStatement ompStmt,
SgBasicBlock bb1,
SgExpression orig_loop_upper = NULL 
)

Translate OpenMP variables associated with an OpenMP pragma, such as private, firstprivate, lastprivate, reduction, etc. bb1 is the translation generated code block in which the variable handling statements will be inserted. Original loop upper bound is needed for implementing lastprivate (check if it is the last iteration).

SgInitializedNamePtrList OmpSupport::collectAllClauseVariables ( SgOmpClauseBodyStatement clause_stmt  ) 

Collect all variables from OpenMP clauses associated with an omp statement: private, reduction, etc.

SgInitializedNamePtrList OmpSupport::collectClauseVariables ( SgOmpClauseBodyStatement clause_stmt,
const VariantT vt 
)

Collect variables from a particular type of OpenMP clauses associated with an omp statement: private, reduction, etc.

SgInitializedNamePtrList OmpSupport::collectClauseVariables ( SgOmpClauseBodyStatement clause_stmt,
const VariantVector &  vvt 
)

Collect variables from given types of OpenMP clauses associated with an omp statement: private, reduction, etc.

bool OmpSupport::isInClauseVariableList ( SgInitializedName var,
SgOmpClauseBodyStatement clause_stmt,
const VariantT vt 
)

Check if a variable is in a variable list of a given clause type.

bool OmpSupport::isInClauseVariableList ( SgInitializedName var,
SgOmpClauseBodyStatement clause_stmt,
const VariantVector &  vvt 
)

Check if a variable is in variable lists of given clause types.

int OmpSupport::replaceVariableReferences ( SgNode root,
SgVariableSymbol oldVar,
SgVariableSymbol newVar 
)

Replace references to oldVar within root with references to newVar, return the number of references replaced.

int OmpSupport::replaceVariableReferences ( SgNode root,
VariableSymbolMap_t  varRemap 
)

Replace variable references within root based on a map from old symbols to new symbols.

void OmpSupport::addClauseVariable ( SgInitializedName var,
SgOmpClauseBodyStatement clause_stmt,
const VariantT vt 
)

Add a variable into a non-reduction clause of an OpenMP statement, create the clause transparently if it does not exist.

SgOmpVariablesClause* OmpSupport::buildOmpVariableClause ( SgOmpClauseBodyStatement clause_stmt,
const VariantT vt 
)

Build a non-reduction variable clause for a given OpenMP directive. It directly returns the clause if the clause already exists.

bool OmpSupport::hasClause ( SgOmpClauseBodyStatement clause_stmt,
const VariantT vt 
)

Check if an OpenMP statement has a clause of type vt.

Rose_STL_Container<SgOmpClause*> OmpSupport::getClause ( SgOmpClauseBodyStatement clause_stmt,
const VariantT vt 
)

Get OpenMP clauses from an eligible OpenMP statement.

bool OmpSupport::useStaticSchedule ( SgOmpClauseBodyStatement omp_loop  ) 

Check if an omp for/do loop use static schedule or not, including: default schedule, or schedule(static[,chunk_size]).

SgOmpClause::omp_reduction_operator_enum OmpSupport::getReductionOperationType ( SgInitializedName init_name,
SgOmpClauseBodyStatement clause_stmt 
)

Return a reduction variable's reduction operation type.

SgExpression* OmpSupport::createInitialValueExp ( SgOmpClause::omp_reduction_operator_enum  r_operator  ) 

Create an initial value according to reduction operator type.

std::string OmpSupport::generateGOMPLoopStartFuncName ( bool  isOrdered,
SgOmpClause::omp_schedule_kind_enum  s_kind 
)

Generate GOMP loop schedule start function's name.

std::string OmpSupport::generateGOMPLoopNextFuncName ( bool  isOrdered,
SgOmpClause::omp_schedule_kind_enum  s_kind 
)

Generate GOMP loop schedule next function's name.

std::string OmpSupport::toString ( SgOmpClause::omp_schedule_kind_enum  s_kind  ) 

Convert a schedule kind enum value to a small case string.

int OmpSupport::patchUpPrivateVariables ( SgFile  ) 

Patch up private variables for omp for. The reason is that loop indices should be private by default and this function will make this explicit.

int OmpSupport::patchUpFirstprivateVariables ( SgFile  ) 

Patch up firstprivate variables for omp task. The reason is that the specification 3.0 defines rules for implicitly determined data-sharing attributes and this function will make the firstprivate variable of omp task explicit.

std::set<SgInitializedName*> OmpSupport::collectThreadprivateVariables (  ) 

Collect threadprivate variables within the current project, return a set to avoid duplicated elements. No input parameters are needed since it finds match from memory pools.

SgVariableDeclaration* OmpSupport::buildAndInsertDeclarationForOmp ( const std::string &  name,
SgType type,
SgInitializer varInit,
SgBasicBlock orig_scope 
)

Special handling when trying to build and insert a variable declaration into a BB within Fortran OpenMP code.

SgBasicBlock* OmpSupport::getEnclosingRegionOrFuncDefinition ( SgNode  ) 

Find an enclosing parallel region or function definition's body.


Variable Documentation

std::list<OmpAttribute* > OmpSupport::omp_comment_list

unsigned int OmpSupport::nCounter

omp_rtl_enum OmpSupport::rtl_type


Generated on Tue Jan 31 05:46:16 2012 for ROSE by  doxygen 1.4.7