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. | |
| OmpAttribute * | 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 | 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. | |
| OmpAttributeList * | getOmpAttributeList (SgNode *node) |
| Get OmpAttribute from a SgNode, return NULL if not found. | |
| OmpAttribute * | getOmpAttribute (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. | |
| SgFunctionDeclaration * | 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 | 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. | |
| SgOmpVariablesClause * | 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 | 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. | |
| SgExpression * | createInitialValueExp (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. | |
| SgVariableDeclaration * | 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 * | getEnclosingRegionOrFuncDefinition (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 std::map<const SgVariableSymbol *, SgVariableSymbol *> OmpSupport::VariableSymbolMap_t |
| 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.
| std::list<OmpAttribute* > OmpSupport::omp_comment_list |
| unsigned int OmpSupport::nCounter |
1.4.7