1//===--- OpenMPKinds.def - OpenMP directives and clauses list ---*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9/// \file 10/// \brief This file defines the list of supported OpenMP directives and 11/// clauses. 12/// 13//===----------------------------------------------------------------------===// 14 15#ifndef OPENMP_DIRECTIVE 16# define OPENMP_DIRECTIVE(Name) 17#endif 18#ifndef OPENMP_DIRECTIVE_EXT 19#define OPENMP_DIRECTIVE_EXT(Name, Str) 20#endif 21#ifndef OPENMP_CLAUSE 22# define OPENMP_CLAUSE(Name, Class) 23#endif 24#ifndef OPENMP_PARALLEL_CLAUSE 25# define OPENMP_PARALLEL_CLAUSE(Name) 26#endif 27#ifndef OPENMP_SIMD_CLAUSE 28# define OPENMP_SIMD_CLAUSE(Name) 29#endif 30#ifndef OPENMP_FOR_CLAUSE 31# define OPENMP_FOR_CLAUSE(Name) 32#endif 33#ifndef OPENMP_SECTIONS_CLAUSE 34# define OPENMP_SECTIONS_CLAUSE(Name) 35#endif 36#ifndef OPENMP_SINGLE_CLAUSE 37# define OPENMP_SINGLE_CLAUSE(Name) 38#endif 39#ifndef OPENMP_PARALLEL_FOR_CLAUSE 40# define OPENMP_PARALLEL_FOR_CLAUSE(Name) 41#endif 42#ifndef OPENMP_PARALLEL_SECTIONS_CLAUSE 43# define OPENMP_PARALLEL_SECTIONS_CLAUSE(Name) 44#endif 45#ifndef OPENMP_DEFAULT_KIND 46# define OPENMP_DEFAULT_KIND(Name) 47#endif 48#ifndef OPENMP_PROC_BIND_KIND 49# define OPENMP_PROC_BIND_KIND(Name) 50#endif 51#ifndef OPENMP_SCHEDULE_KIND 52#define OPENMP_SCHEDULE_KIND(Name) 53#endif 54 55// OpenMP directives. 56OPENMP_DIRECTIVE(threadprivate) 57OPENMP_DIRECTIVE(parallel) 58OPENMP_DIRECTIVE(task) 59OPENMP_DIRECTIVE(simd) 60OPENMP_DIRECTIVE(for) 61OPENMP_DIRECTIVE(sections) 62OPENMP_DIRECTIVE(section) 63OPENMP_DIRECTIVE(single) 64OPENMP_DIRECTIVE_EXT(parallel_for, "parallel for") 65OPENMP_DIRECTIVE_EXT(parallel_sections, "parallel sections") 66 67// OpenMP clauses. 68OPENMP_CLAUSE(if, OMPIfClause) 69OPENMP_CLAUSE(num_threads, OMPNumThreadsClause) 70OPENMP_CLAUSE(safelen, OMPSafelenClause) 71OPENMP_CLAUSE(collapse, OMPCollapseClause) 72OPENMP_CLAUSE(default, OMPDefaultClause) 73OPENMP_CLAUSE(private, OMPPrivateClause) 74OPENMP_CLAUSE(firstprivate, OMPFirstprivateClause) 75OPENMP_CLAUSE(lastprivate, OMPLastprivateClause) 76OPENMP_CLAUSE(shared, OMPSharedClause) 77OPENMP_CLAUSE(reduction, OMPReductionClause) 78OPENMP_CLAUSE(linear, OMPLinearClause) 79OPENMP_CLAUSE(aligned, OMPAlignedClause) 80OPENMP_CLAUSE(copyin, OMPCopyinClause) 81OPENMP_CLAUSE(copyprivate, OMPCopyprivateClause) 82OPENMP_CLAUSE(proc_bind, OMPProcBindClause) 83OPENMP_CLAUSE(schedule, OMPScheduleClause) 84OPENMP_CLAUSE(ordered, OMPOrderedClause) 85OPENMP_CLAUSE(nowait, OMPNowaitClause) 86 87// Clauses allowed for OpenMP directive 'parallel'. 88OPENMP_PARALLEL_CLAUSE(if) 89OPENMP_PARALLEL_CLAUSE(num_threads) 90OPENMP_PARALLEL_CLAUSE(default) 91OPENMP_PARALLEL_CLAUSE(proc_bind) 92OPENMP_PARALLEL_CLAUSE(private) 93OPENMP_PARALLEL_CLAUSE(firstprivate) 94OPENMP_PARALLEL_CLAUSE(shared) 95OPENMP_PARALLEL_CLAUSE(reduction) 96OPENMP_PARALLEL_CLAUSE(copyin) 97 98// Clauses allowed for directive 'omp simd'. 99OPENMP_SIMD_CLAUSE(private) 100OPENMP_SIMD_CLAUSE(lastprivate) 101OPENMP_SIMD_CLAUSE(linear) 102OPENMP_SIMD_CLAUSE(aligned) 103OPENMP_SIMD_CLAUSE(safelen) 104OPENMP_SIMD_CLAUSE(collapse) 105OPENMP_SIMD_CLAUSE(reduction) 106 107// TODO more clauses allowed for directive 'omp for'. 108OPENMP_FOR_CLAUSE(private) 109OPENMP_FOR_CLAUSE(lastprivate) 110OPENMP_FOR_CLAUSE(firstprivate) 111OPENMP_FOR_CLAUSE(reduction) 112OPENMP_FOR_CLAUSE(collapse) 113OPENMP_FOR_CLAUSE(schedule) 114OPENMP_FOR_CLAUSE(ordered) 115OPENMP_FOR_CLAUSE(nowait) 116 117// Clauses allowed for OpenMP directive 'omp sections'. 118OPENMP_SECTIONS_CLAUSE(private) 119OPENMP_SECTIONS_CLAUSE(lastprivate) 120OPENMP_SECTIONS_CLAUSE(firstprivate) 121OPENMP_SECTIONS_CLAUSE(reduction) 122OPENMP_SECTIONS_CLAUSE(nowait) 123 124// TODO more clauses allowed for directive 'omp single'. 125OPENMP_SINGLE_CLAUSE(private) 126OPENMP_SINGLE_CLAUSE(firstprivate) 127OPENMP_SINGLE_CLAUSE(copyprivate) 128OPENMP_SINGLE_CLAUSE(nowait) 129 130// Static attributes for 'default' clause. 131OPENMP_DEFAULT_KIND(none) 132OPENMP_DEFAULT_KIND(shared) 133 134// Static attributes for 'proc_bind' clause. 135OPENMP_PROC_BIND_KIND(master) 136OPENMP_PROC_BIND_KIND(close) 137OPENMP_PROC_BIND_KIND(spread) 138 139// Static attributes for 'schedule' clause. 140OPENMP_SCHEDULE_KIND(static) 141OPENMP_SCHEDULE_KIND(dynamic) 142OPENMP_SCHEDULE_KIND(guided) 143OPENMP_SCHEDULE_KIND(auto) 144OPENMP_SCHEDULE_KIND(runtime) 145 146// Clauses allowed for OpenMP directive 'parallel for'. 147OPENMP_PARALLEL_FOR_CLAUSE(if) 148OPENMP_PARALLEL_FOR_CLAUSE(num_threads) 149OPENMP_PARALLEL_FOR_CLAUSE(default) 150OPENMP_PARALLEL_FOR_CLAUSE(proc_bind) 151OPENMP_PARALLEL_FOR_CLAUSE(private) 152OPENMP_PARALLEL_FOR_CLAUSE(firstprivate) 153OPENMP_PARALLEL_FOR_CLAUSE(shared) 154OPENMP_PARALLEL_FOR_CLAUSE(reduction) 155OPENMP_PARALLEL_FOR_CLAUSE(copyin) 156OPENMP_PARALLEL_FOR_CLAUSE(lastprivate) 157OPENMP_PARALLEL_FOR_CLAUSE(collapse) 158OPENMP_PARALLEL_FOR_CLAUSE(schedule) 159OPENMP_PARALLEL_FOR_CLAUSE(ordered) 160 161// Clauses allowed for OpenMP directive 'parallel sections'. 162OPENMP_PARALLEL_SECTIONS_CLAUSE(if) 163OPENMP_PARALLEL_SECTIONS_CLAUSE(num_threads) 164OPENMP_PARALLEL_SECTIONS_CLAUSE(default) 165OPENMP_PARALLEL_SECTIONS_CLAUSE(proc_bind) 166OPENMP_PARALLEL_SECTIONS_CLAUSE(private) 167OPENMP_PARALLEL_SECTIONS_CLAUSE(firstprivate) 168OPENMP_PARALLEL_SECTIONS_CLAUSE(shared) 169OPENMP_PARALLEL_SECTIONS_CLAUSE(reduction) 170OPENMP_PARALLEL_SECTIONS_CLAUSE(copyin) 171OPENMP_PARALLEL_SECTIONS_CLAUSE(lastprivate) 172 173#undef OPENMP_SCHEDULE_KIND 174#undef OPENMP_PROC_BIND_KIND 175#undef OPENMP_DEFAULT_KIND 176#undef OPENMP_DIRECTIVE 177#undef OPENMP_DIRECTIVE_EXT 178#undef OPENMP_CLAUSE 179#undef OPENMP_SINGLE_CLAUSE 180#undef OPENMP_SECTIONS_CLAUSE 181#undef OPENMP_PARALLEL_CLAUSE 182#undef OPENMP_PARALLEL_FOR_CLAUSE 183#undef OPENMP_PARALLEL_SECTIONS_CLAUSE 184#undef OPENMP_SIMD_CLAUSE 185#undef OPENMP_FOR_CLAUSE 186 187