00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef pragmas_INCLUDED
00037 #define pragmas_INCLUDED
00038 #ifdef __cplusplus
00039 extern "C" {
00040 #endif
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112 #ifdef _KEEP_RCS_ID
00113 #endif
00114
00115
00116
00117 typedef enum {
00118 WN_PRAGMA_UNDEFINED,
00119
00120
00121 WN_PRAGMA_INLINE_BODY_START,
00122 WN_PRAGMA_INLINE_BODY_END,
00123 WN_PRAGMA_INLINE_DEPTH,
00124 WN_PRAGMA_INLINE_LOOPLEVEL,
00125
00126 WN_PRAGMA_AGGRESSIVE_INNER_LOOP_FISSION,
00127 WN_PRAGMA_FISSION,
00128 WN_PRAGMA_FISSIONABLE,
00129 WN_PRAGMA_FUSE,
00130 WN_PRAGMA_FUSEABLE,
00131 WN_PRAGMA_NO_FISSION,
00132 WN_PRAGMA_NO_FUSION,
00133 WN_PRAGMA_INTERCHANGE,
00134
00135
00136 WN_PRAGMA_NO_INTERCHANGE,
00137 WN_PRAGMA_BLOCKING_SIZE,
00138 WN_PRAGMA_NO_BLOCKING,
00139 WN_PRAGMA_UNROLL,
00140 WN_PRAGMA_BLOCKABLE,
00141 WN_PRAGMA_PREFETCH,
00142 WN_PRAGMA_PREFETCH_MANUAL,
00143 WN_PRAGMA_PREFETCH_REF,
00144 WN_PRAGMA_PREFETCH_REF_DISABLE,
00145
00146 WN_PRAGMA_IVDEP,
00147
00148 WN_PRAGMA_OPTIONS,
00149 WN_PRAGMA_OPAQUE,
00150
00151 WN_PRAGMA_MIPS_FREQUENCY_HINT,
00152 WN_PRAGMA_DISTRIBUTE,
00153 WN_PRAGMA_REDISTRIBUTE,
00154 WN_PRAGMA_DISTRIBUTE_RESHAPE,
00155 WN_PRAGMA_DYNAMIC,
00156
00157 WN_PRAGMA_ACCESSED_ID,
00158
00159
00160
00161
00162 WN_PRAGMA_PFOR_BEGIN,
00163 WN_PRAGMA_ENTER_GATE,
00164 WN_PRAGMA_EXIT_GATE,
00165
00166
00167
00168 WN_PRAGMA_BARRIER,
00169 WN_PRAGMA_CHUNKSIZE,
00170 WN_PRAGMA_COPYIN,
00171 WN_PRAGMA_CRITICAL_SECTION_BEGIN,
00172 WN_PRAGMA_CRITICAL_SECTION_END,
00173 WN_PRAGMA_DOACROSS,
00174 WN_PRAGMA_IF,
00175 WN_PRAGMA_LASTLOCAL,
00176 WN_PRAGMA_LOCAL,
00177 WN_PRAGMA_MPSCHEDTYPE,
00178 WN_PRAGMA_ORDERED,
00179 WN_PRAGMA_PARALLEL_BEGIN,
00180 WN_PRAGMA_PARALLEL_END,
00181 WN_PRAGMA_PARALLEL_DO,
00182 WN_PRAGMA_PDO_BEGIN,
00183 WN_PRAGMA_PDO_END,
00184 WN_PRAGMA_PSECTION_BEGIN,
00185 WN_PRAGMA_PSECTION_END,
00186 WN_PRAGMA_REDUCTION,
00187 WN_PRAGMA_SECTION,
00188 WN_PRAGMA_SHARED,
00189 WN_PRAGMA_SINGLE_PROCESS_BEGIN,
00190 WN_PRAGMA_SINGLE_PROCESS_END,
00191 WN_PRAGMA_ITERATE_VAR,
00192 WN_PRAGMA_ITERATE_INIT,
00193 WN_PRAGMA_ITERATE_COUNT,
00194 WN_PRAGMA_ITERATE_STEP,
00195 WN_PRAGMA_AFFINITY,
00196 WN_PRAGMA_DATA_AFFINITY,
00197 WN_PRAGMA_THREAD_AFFINITY,
00198 WN_PRAGMA_NUMTHREADS,
00199 WN_PRAGMA_NOWAIT,
00200 WN_PRAGMA_PAGE_PLACE,
00201 #if 0
00202 #define WN_PRAGMA_PAGE_ALLOCATE WN_PRAGMA_PAGE_PLACE
00203 #endif
00204 WN_PRAGMA_ONTO,
00205 WN_PRAGMA_LASTTHREAD,
00206
00207
00208
00209 WN_PRAGMA_NORECURRENCE,
00210 WN_PRAGMA_NEXT_SCALAR,
00211
00212
00213
00214 WN_PRAGMA_PURPLE_CONDITIONAL,
00215 WN_PRAGMA_PURPLE_UNCONDITIONAL,
00216
00217
00218
00219 WN_PRAGMA_WOPT_FINISHED_OPT,
00220
00221
00222
00223 WN_PRAGMA_KAP_ARCLIMIT,
00224 WN_PRAGMA_KAP_CONCURRENTIZE,
00225 WN_PRAGMA_KAP_INLINE_FILE,
00226 WN_PRAGMA_KAP_INLINE_PU,
00227 WN_PRAGMA_KAP_LIMIT,
00228 WN_PRAGMA_KAP_MINCONCURRENT,
00229 WN_PRAGMA_KAP_NOCONCURRENTIZE,
00230 WN_PRAGMA_KAP_NOINLINE_FILE,
00231 WN_PRAGMA_KAP_NOINLINE_PU,
00232 WN_PRAGMA_KAP_OPTIMIZE,
00233 WN_PRAGMA_KAP_ROUNDOFF,
00234 WN_PRAGMA_KAP_SCALAR_OPTIMIZE,
00235 WN_PRAGMA_KAP_CTHRESHOLD,
00236 WN_PRAGMA_KAP_EACH_INVARIANT_IF_GROWTH,
00237 WN_PRAGMA_KAP_MAX_INVARIANT_IF_GROWTH,
00238 WN_PRAGMA_KAP_STORAGE_ORDER,
00239
00240 WN_PRAGMA_KAP_ASSERT_BOUNDS_VIOLATIONS,
00241 WN_PRAGMA_KAP_ASSERT_NOBOUNDS_VIOLATIONS,
00242 WN_PRAGMA_KAP_ASSERT_CONCURRENT_CALL,
00243 WN_PRAGMA_KAP_ASSERT_DO,
00244 WN_PRAGMA_KAP_ASSERT_DOPREFER,
00245 WN_PRAGMA_KAP_ASSERT_EQUIVALENCE_HAZARD,
00246 WN_PRAGMA_KAP_ASSERT_NOEQUIVALENCE_HAZARD,
00247 WN_PRAGMA_KAP_ASSERT_LAST_VALUE_NEEDED,
00248 WN_PRAGMA_KAP_ASSERT_NOLAST_VALUE_NEEDED,
00249 WN_PRAGMA_KAP_ASSERT_PERMUTATION,
00250 WN_PRAGMA_KAP_ASSERT_NORECURRENCE,
00251 WN_PRAGMA_KAP_ASSERT_RELATION,
00252 WN_PRAGMA_KAP_ASSERT_NOSYNC,
00253 WN_PRAGMA_KAP_ASSERT_TEMPORARIES_FOR_CONSTANT_ARGUMENTS,
00254 WN_PRAGMA_KAP_ASSERT_NOTEMPORARIES_FOR_CONSTANT_ARGUMENTS,
00255 WN_PRAGMA_KAP_ASSERT_ARGUMENT_ALIASING,
00256 WN_PRAGMA_KAP_ASSERT_BENIGN,
00257 WN_PRAGMA_KAP_ASSERT_DEPENDENCE,
00258 WN_PRAGMA_KAP_ASSERT_FREQUENCY,
00259 WN_PRAGMA_KAP_ASSERT_IGNORE_ANY_DEPENDENCE,
00260 WN_PRAGMA_KAP_ASSERT_IGNORE_ASSUMED_DEPENDENCE,
00261 WN_PRAGMA_KAP_ASSERT_NO_ARGUMENT_ALIASING,
00262 WN_PRAGMA_KAP_ASSERT_NO_CONCURRENT_CALL,
00263 WN_PRAGMA_KAP_ASSERT_NO_INTERCHANGE,
00264 WN_PRAGMA_KAP_ASSERT_USE_COMPRESS,
00265 WN_PRAGMA_KAP_ASSERT_USE_EXPAND,
00266 WN_PRAGMA_KAP_ASSERT_USE_CONTROLLED_STORE,
00267 WN_PRAGMA_KAP_ASSERT_USE_GATHER,
00268 WN_PRAGMA_KAP_ASSERT_USE_SCATTER,
00269 WN_PRAGMA_KAP_OPTIONS,
00270
00271 WN_PRAGMA_PREAMBLE_END,
00272
00273
00274
00275 WN_PRAGMA_FLIST_SKIP_BEGIN,
00276 WN_PRAGMA_FLIST_SKIP_END,
00277 WN_PRAGMA_CLIST_SKIP_BEGIN,
00278 WN_PRAGMA_CLIST_SKIP_END,
00279
00280
00281 WN_PRAGMA_FILL,
00282 WN_PRAGMA_ALIGN,
00283
00284
00285 WN_PRAGMA_INDEPENDENT_BEGIN,
00286 WN_PRAGMA_INDEPENDENT_END,
00287
00288
00289 WN_PRAGMA_KAP_OPTION_INLINE,
00290 WN_PRAGMA_KAP_OPTION_NOINLINE,
00291
00292
00293
00294
00295
00296 WN_PRAGMA_CRI_IVDEP,
00297 WN_PRAGMA_CRI_NOVECTOR,
00298 WN_PRAGMA_CRI_NOVSEARCH,
00299 WN_PRAGMA_CRI_PREFERVECTOR,
00300 WN_PRAGMA_CRI_SHORTLOOP,
00301
00302
00303
00304 WN_PRAGMA_CRI_CASE,
00305 WN_PRAGMA_CRI_ENDCASE,
00306 WN_PRAGMA_CRI_COMMON,
00307 WN_PRAGMA_CRI_GUARD,
00308 WN_PRAGMA_CRI_ENDGUARD,
00309 WN_PRAGMA_CRI_ENDLOOP,
00310 WN_PRAGMA_CRI_PARALLEL,
00311 WN_PRAGMA_CRI_ENDPARALLEL,
00312 WN_PRAGMA_CRI_PREFERTASK,
00313 WN_PRAGMA_CRI_TASKCOMMON,
00314 WN_PRAGMA_CRI_TASKLOOP,
00315 WN_PRAGMA_CRI_SHARED,
00316 WN_PRAGMA_CRI_PRIVATE,
00317 WN_PRAGMA_CRI_VALUE,
00318 WN_PRAGMA_CRI_DEFAULTS,
00319 WN_PRAGMA_CRI_MAXCPUS,
00320 WN_PRAGMA_CRI_SAVELAST,
00321 WN_PRAGMA_CRI_CHUNKSIZE,
00322 WN_PRAGMA_CRI_NUMCHUNKS,
00323
00324 WN_PRAGMA_CRI_TASK,
00325 WN_PRAGMA_CRI_NOTASK,
00326 WN_PRAGMA_CRI_ALIGN,
00327 WN_PRAGMA_CRI_BL,
00328 WN_PRAGMA_CRI_CNCALL,
00329
00330 WN_PRAGMA_MPNUM,
00331 WN_PRAGMA_COPYIN_BOUND,
00332
00333
00334 WN_PRAGMA_SYNC_DOACROSS,
00335
00336 WN_PRAGMA_DEFAULT,
00337 WN_PRAGMA_FIRSTPRIVATE,
00338 WN_PRAGMA_MASTER_BEGIN,
00339 WN_PRAGMA_ORDERED_BEGIN,
00340 WN_PRAGMA_ORDERED_END,
00341 WN_PRAGMA_ATOMIC,
00342 WN_PRAGMA_ORDERED_LOWER_BOUND,
00343 WN_PRAGMA_ORDERED_STRIDE,
00344 WN_PRAGMA_END_MARKER,
00345 WN_PRAGMA_PARALLEL_SECTIONS,
00346 WN_PRAGMA_PARALLEL_WORKSHARE,
00347 WN_PRAGMA_WORKSHARE,
00348 WN_PRAGMA_COPYPRIVATE,
00349 WN_PRAGMA_FLUSH,
00350
00351 WN_PRAGMA_START_STMT_CLUMP,
00352 WN_PRAGMA_END_STMT_CLUMP,
00353
00354
00355 WN_PRAGMA_TYPE_OF_RESHAPED_ARRAY,
00356
00357
00358 WN_PRAGMA_ASM_CONSTRAINT,
00359 WN_PRAGMA_ASM_CLOBBER,
00360
00361
00362 WN_PRAGMA_UPC_STRICT_CONSISTENCY_START,
00363 WN_PRAGMA_UPC_STRICT_CONSISTENCY_STOP,
00364 WN_PRAGMA_UPC_RELAXED_CONSISTENCY_START,
00365 WN_PRAGMA_UPC_RELAXED_CONSISTENCY_STOP,
00366 WN_PRAGMA_UPC_FORALL,
00367 WN_PRAGMA_UPC_FORALL_AFFINITY,
00368
00369
00370 WN_PRAGMA_OPENAD_XXX,
00371 WN_PRAGMA_OPENAD_DEPENDENT,
00372 WN_PRAGMA_OPENAD_INDEPENDENT,
00373 WN_PRAGMA_OPENAD_SIMPLE_LOOP,
00374
00375 MAX_WN_PRAGMA
00376 } WN_PRAGMA_ID;
00377
00378
00379 typedef enum {
00380 WN_PRAGMA_SCOPE_UNKNOWN,
00381 WN_PRAGMA_SCOPE_PU,
00382 WN_PRAGMA_SCOPE_WN,
00383 WN_PRAGMA_SCOPE_POINT,
00384
00385
00386 WN_PRAGMA_SCOPE_ON,
00387 WN_PRAGMA_SCOPE_OFF,
00388
00389 WN_PRAGMA_SCOPE_SPECIAL,
00390
00391 MAX_SCOPE_PRAGMA
00392 } WN_PRAGMA_SCOPE;
00393
00394
00395 typedef enum {
00396 WN_PRAGMA_SCHEDTYPE_UNKNOWN,
00397 WN_PRAGMA_SCHEDTYPE_RUNTIME,
00398 WN_PRAGMA_SCHEDTYPE_SIMPLE,
00399 WN_PRAGMA_SCHEDTYPE_INTERLEAVE,
00400 WN_PRAGMA_SCHEDTYPE_DYNAMIC,
00401 WN_PRAGMA_SCHEDTYPE_GSS,
00402 WN_PRAGMA_SCHEDTYPE_PSEUDOLOWERED,
00403 MAX_PRAGMA_SCHEDTYPE
00404 } WN_PRAGMA_SCHEDTYPE_KIND;
00405
00406
00407 typedef enum {
00408 WN_PRAGMA_DEFAULT_UNKNOWN,
00409 WN_PRAGMA_DEFAULT_NONE,
00410 WN_PRAGMA_DEFAULT_SHARED,
00411 WN_PRAGMA_DEFAULT_PRIVATE,
00412 MAX_PRAGMA_DEFAULT
00413 } WN_PRAGMA_DEFAULT_KIND;
00414
00415
00416 typedef enum {
00417 PUSER_NULL = 0x0,
00418 PUSER_IPA = 0x1,
00419 PUSER_LNO = 0x2,
00420 PUSER_WOPT = 0x4,
00421 PUSER_CG = 0x8,
00422 PUSER_MP = 0x10,
00423 PUSER_NONE = 0x20,
00424 PUSER_PURPLE = 0x40,
00425 PUSER_W2C = 0x80,
00426 PUSER_W2F = 0x100,
00427 PUSER_REGION = 0x200
00428 } WN_PRAGMA_USERS;
00429
00430
00431 typedef enum {
00432 ACCESSED_LOAD = 0x1,
00433 ACCESSED_STORE = 0x2,
00434 ACCESSED_ILOAD = 0x4,
00435 ACCESSED_ISTORE = 0x8,
00436 ACCESSED_PSTORE = 0x16
00437 } WN_PRAGMA_ACCESSED_FLAGS;
00438
00439
00440 typedef enum {
00441 SHARED_DEADIN = 0x1,
00442 SHARED_DEADOUT = 0x2
00443 } WN_PRAGMA_SHARED_FLAGS;
00444
00445
00446 typedef enum {
00447 FREQUENCY_HINT_NEVER = 0x1,
00448 FREQUENCY_HINT_INIT = 0x2,
00449 FREQUENCY_HINT_FREQUENT = 0x3
00450 } MIPS_FREQUENCY_HINT;
00451
00452
00453 typedef enum {
00454 DISTRIBUTE_STAR = 0x1,
00455 DISTRIBUTE_BLOCK = 0x2,
00456 DISTRIBUTE_CYCLIC_EXPR = 0x3,
00457 DISTRIBUTE_CYCLIC_CONST = 0x4
00458 } DISTRIBUTE_TYPE;
00459
00460
00461
00462 typedef enum {
00463 ASSERT_DO_NONE = 0x0,
00464 ASSERT_DO_SERIAL = 0x1,
00465 ASSERT_DO_CONCURRENT = 0x2,
00466 ASSERT_DO_VECTOR = 0x3
00467 } ASSERT_DO_TYPE;
00468
00469
00470 typedef enum {
00471 ASSERT_DEPENDENCE_SAFE = 0x1,
00472 ASSERT_DEPENDENCE_UNSAFE = 0x2
00473 } ASSERT_DEPENDENCE_TYPE;
00474
00475
00476 enum {
00477 ASSERT_FREQUENCY_ERROR = -3,
00478 ASSERT_FREQUENCY_RARELY = -2,
00479 ASSERT_FREQUENCY_USUALLY = -1
00480 };
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492 typedef struct wn_pragma_desc {
00493 WN_PRAGMA_USERS users;
00494 WN_PRAGMA_SCOPE scope;
00495 char *name;
00496 } WN_PRAGMA_DESC;
00497
00498 extern WN_PRAGMA_DESC WN_pragmas[];
00499
00500
00501
00502
00503 #define IS_AFFINITY_XPRAGMA(wn) (FALSE)
00504
00505
00506 #ifdef __cplusplus
00507 }
00508 #endif
00509 #endif