7#include "OmpAttribute.h"
19 extern bool enable_accelerator;
31 int makeDataSharingExplicit(
SgFile* );
43 extern unsigned int nCounter;
46 typedef std::map<const SgVariableSymbol *, SgVariableSymbol *> VariableSymbolMap_t;
48 void commandLineProcessing(std::vector<std::string> &argvList);
194 ROSE_DLL_API std::string
toString(SgOmpClause::omp_schedule_kind_enum s_kind);
231 std::map<
SgSymbol*, std::vector< std::pair <SgExpression*, SgExpression*> > > & array_dimensions,
232 std::map<
SgSymbol*, std::vector< std::pair< SgOmpClause::omp_map_dist_data_enum, SgExpression * > > > & dist_data_policies,
236 std::map<
SgSymbol*, std::vector < std::pair <SgExpression*, SgExpression*> > >& array_dimensions,
237 std::set<SgSymbol*>& array_syms,
238 std::set<SgSymbol*>& atom_syms);
Class for traversing the AST.
A driver to traverse AST trees and invoke individual translators for OpenMP constructs,...
void visit(SgNode *)
this method is called at every traversed node.
This class represents the concept of a block (not a basic block from control flow analysis).
This class represents the notion of an expression. Expressions are derived from SgLocatedNodes,...
This class represents a source file for a project (which may contian many source files and or directo...
This class represents the concept of a function declaration statement.
This class represents the notion of a declared variable.
This class represents the notion of an initializer for a variable declaration or expression in a func...
This class represents the base class for all IR nodes within Sage III.
This class represents the notion of a statement.
This class represents the concept of a name within the compiler.
This class represents the base class for all types.
This class represents the variable refernece in expressions.
This class represents the concept of a C or C++ variable declaration.
This class represents the concept of a variable name within the compiler (a shared container for the ...
Types and functions to support OpenMP.
SgBasicBlock * getEnclosingRegionOrFuncDefinition(SgNode *)
Find an enclosing parallel region or function definition's body.
void transOmpCritical(SgNode *node)
Translate omp critical.
ROSE_DLL_API SgOmpClause::omp_reduction_operator_enum getReductionOperationType(SgInitializedName *init_name, SgOmpClauseBodyStatement *clause_stmt)
Return a reduction variable's reduction operation type.
void transOmpTarget(SgNode *node)
Translate Fortran omp do.
ROSE_DLL_API 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...
ROSE_DLL_API SgExpression * createInitialValueExp(SgOmpClause::omp_reduction_operator_enum r_operator)
Create an initial value according to reduction operator type.
void transOmpParallel(SgNode *node)
Translate omp parallel.
void transOmpAtomic(SgNode *node)
Translate omp atomic.
void transOmpBarrier(SgNode *node)
Translate omp barrier.
ROSE_DLL_API bool isThreadprivate(SgSymbol *var)
Check if a variable is a threadprivate variable. It will search for all threadprivate directives to f...
void transOmpTargetData(SgNode *node)
Translate "omp target data".
ROSE_DLL_API int patchUpPrivateVariables(SgFile *)
Patch up private variables for omp for of entire file. The reason is that loop indices should be priv...
void transOmpMaster(SgNode *node)
Translate omp master.
void insertRTLinitAndCleanCode(SgSourceFile *)
Insert runtime init and terminate routines to main() entry.
void categorizeMapClauseVariables(const SgInitializedNamePtrList &all_vars, std::map< SgSymbol *, std::vector< std::pair< SgExpression *, SgExpression * > > > &array_dimensions, std::set< SgSymbol * > &array_syms, std::set< SgSymbol * > &atom_syms)
Categorize mapped variables.
ROSE_DLL_API SgInitializedNamePtrList collectClauseVariables(SgOmpClauseBodyStatement *clause_stmt, const VariantT &vt)
Collect variables from a particular type of OpenMP clauses associated with an omp statement: private,...
ROSE_DLL_API SgInitializedNamePtrList collectAllClauseVariables(SgOmpClauseBodyStatement *clause_stmt)
Collect all variables from OpenMP clauses associated with an omp statement: private,...
void transOmpSections(SgNode *node)
Translate omp sections.
void extractMapClauses(Rose_STL_Container< SgOmpClause * > map_clauses, std::map< SgSymbol *, std::vector< std::pair< SgExpression *, SgExpression * > > > &array_dimensions, std::map< SgSymbol *, std::vector< std::pair< SgOmpClause::omp_map_dist_data_enum, SgExpression * > > > &dist_data_policies, SgOmpMapClause **map_alloc_clause, SgOmpMapClause **map_to_clause, SgOmpMapClause **map_from_clause, SgOmpMapClause **map_tofrom_clause)
Extract map clause information.
void transOmpTargetLoop_RoundRobin(SgNode *node)
Translate omp for or omp do loops affected by the "omp target" directive, using a round robin-schedul...
SgFunctionDeclaration * generateOutlinedTask(SgNode *node, std::string &wrapper_name, std::set< SgVariableSymbol * > &syms)
A helper function to generate implicit or explicit task for either omp parallel or omp task.
void transOmpTargetLoop(SgNode *node)
Translate omp for or omp do loops affected by the "omp target" directive, using naive 1-to-1 mapping ...
ROSE_DLL_API bool useStaticSchedule(SgOmpClauseBodyStatement *omp_loop)
Check if an omp for/do loop use static schedule or not, including: default schedule,...
int patchUpSharedVariables(SgFile *)
makeDataSharingExplicit() can call some of existing functions for some work in OmpSupport namespace b...
ROSE_DLL_API omp_construct_enum getDataSharingAttribute(SgSymbol *var, SgNode *anchor_node)
Return the data sharing attribute type of a variable, specified as a symbol and an anchor node (Must ...
ROSE_DLL_API Rose_STL_Container< SgOmpClause * > getClause(SgOmpClauseBodyStatement *clause_stmt, const VariantT &vt)
Get OpenMP clauses from an eligible OpenMP statement.
ROSE_DLL_API bool isInClauseVariableList(SgInitializedName *var, SgOmpClauseBodyStatement *clause_stmt, const VariantT &vt)
Check if a variable is in a variable list of a given clause type.
void transOmpLoop(SgNode *node)
Translate omp for or omp do loops.
void transOmpTaskwait(SgNode *node)
Translate omp taskwait.
ROSE_DLL_API bool hasClause(SgOmpClauseBodyStatement *clause_stmt, const VariantT &vt)
Check if an OpenMP statement has a clause of type vt.
ROSE_DLL_API std::string generateGOMPLoopStartFuncName(bool isOrdered, SgOmpClause::omp_schedule_kind_enum s_kind)
Generate GOMP loop schedule start function's name.
void transOmpThreadprivate(SgNode *node)
Translate omp threadprivate.
void transOmpOrdered(SgNode *node)
Translate the ordered directive (not the ordered clause)
ROSE_DLL_API int replaceVariableReferences(SgNode *root, SgVariableSymbol *oldVar, SgVariableSymbol *newVar)
Replace references to oldVar within root with references to newVar, return the number of references r...
ROSE_DLL_API void transOmpVariables(SgStatement *ompStmt, SgBasicBlock *bb1, SgExpression *orig_loop_upper=NULL, bool withinAcceleratorModel=false)
Translate OpenMP variables associated with an OpenMP pragma, such as private, firstprivate,...
void insertRTLHeaders(SgSourceFile *)
Insert #include "xxx.h", the interface of a runtime library to the compiler.
void lower_omp(SgSourceFile *)
The top level interface to translate OpenMP directives.
ROSE_DLL_API int removeClause(SgOmpClauseBodyStatement *clause_stmt, const VariantT &vt)
Remove one or more clauses of type vt.
void transOmpTargetParallel(SgNode *node)
Translate omp parallel under "omp target".
ROSE_DLL_API int patchUpFirstprivateVariables(SgFile *)
Patch up firstprivate variables for omp task. The reason is that the specification 3....
void transOmpSingle(SgNode *node)
Translate omp single.
int replaceVariablesWithPointerDereference(SgNode *root, std::set< SgVariableSymbol * > &vars)
Replace all variable references in a set by pointers to the variable.
std::string toString(omp_construct_enum omp_type)
Output omp_construct_enum to a string:
omp_rtl_enum
The type of target runtime libraries (not yet in use)
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 Open...
ROSE_DLL_API 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...
ROSE_DLL_API SgExpression * getClauseExpression(SgOmpClauseBodyStatement *clause_stmt, const VariantVector &vvt)
Collect expression from given types of OpenMP clauses associated with an omp statement: private,...
void transOmpFlush(SgNode *node)
Translate omp flush.
void transOmpTask(SgNode *node)
Translate omp task.
ROSE_DLL_API std::string generateGOMPLoopNextFuncName(bool isOrdered, SgOmpClause::omp_schedule_kind_enum s_kind)
Generate GOMP loop schedule next function's name.
std::set< SgInitializedName * > collectThreadprivateVariables()
Collect threadprivate variables within the current project, return a set to avoid duplicated elements...
ROSE_DLL_API bool isSharedAccess(SgVarRefExp *varRef)
Check if a variable access is a shared access , assuming it is already within an OpenMP region.