Open64 (mfef90, whirl2f, and IR tools)
TAG: version-openad; SVN changeset: 916
|
00001 /* 00002 00003 Copyright (C) 2000, 2001 Silicon Graphics, Inc. All Rights Reserved. 00004 00005 This program is free software; you can redistribute it and/or modify it 00006 under the terms of version 2 of the GNU General Public License as 00007 published by the Free Software Foundation. 00008 00009 This program is distributed in the hope that it would be useful, but 00010 WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 00013 Further, this software is distributed without any warranty that it is 00014 free of the rightful claim of any third person regarding infringement 00015 or the like. Any license provided herein, whether implied or 00016 otherwise, applies only to this software file. Patent licenses, if 00017 any, provided herein do not apply to combinations of this program with 00018 other software, or any other product whatsoever. 00019 00020 You should have received a copy of the GNU General Public License along 00021 with this program; if not, write the Free Software Foundation, Inc., 59 00022 Temple Place - Suite 330, Boston MA 02111-1307, USA. 00023 00024 Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pky, 00025 Mountain View, CA 94043, or: 00026 00027 http://www.sgi.com 00028 00029 For further information regarding this notice, see: 00030 00031 http://oss.sgi.com/projects/GenInfo/NoticeExplan 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 * Description: 00047 * 00048 * This header file is for support of WHIRL's OPC_PRAGMA. In OPC_PRAGMA, 00049 * the offset field stores the enumerated pragma id; the ST pointer field, 00050 * if non-null, points to the symbol table field to give the symbol 00051 * associated with the pragma. The constval field, which overlaps with 00052 * kid[0] and kid[1], can be used to store additional values, depending 00053 * on the pragma. 00054 * 00055 * Pragmas what affect only the front-ends are not represented in WHIRL. 00056 * Pragmas that deal with properties of symbol table objects also do not 00057 * need to be represented as WHIRL pragmas, and should be entered into the 00058 * symbol table as attributes for the objects. Only pragmas associated with 00059 * program text need to be represented in WHIRL's OPC_PRAGMA. Some of these 00060 * pragmas can actually be encoded in WHIRL nodes (e.g. the flags in the 00061 * call instructions), and also do not need to be represented by OPC_PRAGMA. 00062 * 00063 * Pragmas in general are generated due to one of the following: 00064 * 1. #pragmas in the source program; 00065 * 2. c$ directives in fortran source code; 00066 * 3. cc/f77 command line options; 00067 * 4. compiler to pass information to later compilation phases. 00068 * 00069 * Pragmas have scope. Since WHIRL is organized and compiled on a per-PU 00070 * basis, the scope of WHIRL pragmas is at most the current PU. The scope 00071 * of a WHIRL pragma can be one of the following: 00072 * 00073 * 1. PU scope: These pragmas must appear right after the OPC_BLOCK underneath 00074 * the OPC_FUNC_ENTRY. This allows a component to learn about the pragmas 00075 * without scanning the entire PU. 00076 * 00077 * 2. WN node scope: These pragmas take advantage of the hierarchical nature of 00078 * structured control flow WHIRL nodes in defining its scope. A pragma with 00079 * WN scope must be specified before a WHIRL statement node, and it only affects 00080 * that node. If the node is an SCF node, it affects all the code underneath 00081 * it. More than one of such pragmas can appear before a statement node. 00082 * (The reason they must be specified before the WN node, and not within 00083 * it, is to allow phases to learn about the pragmas without having to look 00084 * inside the node.) 00085 * 00086 * 3. Point scope: These pragmas do not really have scope. They are for 00087 * placing a mark at a specific point of the code. They are not associated 00088 * with any other WHIRL nodes. 00089 * 00090 * 4. Enclosed scope: For these pragmas, the scope begins at the "on" pragma, 00091 * and ends at the "off" pragma. The matching on/off pragmas must belong 00092 * to the same OPC_BLOCK. These pragmas can have either statement or 00093 * basic block granularity. For basic block granularity, the scope begins 00094 * at the basic block containing the "on" pragma, and ends at the basic block 00095 * containing the "off" pragma. The same on/off pragmas can be perfectly 00096 * nested one inside another. 00097 * 00098 * 5. Pragma-specific scope: These pragmas have unique scope rules according 00099 * to the definition of the pragmas. 00100 * 00101 * Note that because we require the OPC_PRAGMAs to be positioned at specific 00102 * places, this may require the front-ends to do extra work in processing 00103 * pragmas in the source code and generating the OPC_PRAGMAs at the right 00104 * place. But we feel this simplifies the backends' processing of pragmas 00105 * by making it unnecessary for them to search for the pragmas. 00106 * 00107 * ==================================================================== 00108 * ==================================================================== 00109 */ 00110 00111 00112 #ifdef _KEEP_RCS_ID 00113 #endif /* _KEEP_RCS_ID */ 00114 00115 /* Pragma IDs: */ 00116 /* make sure you update WN_pragmas[] table in wn_pragmas.c */ 00117 typedef enum { 00118 WN_PRAGMA_UNDEFINED, /* pragma 0 is undefined to make sure */ 00119 /* the front-ends send a valid pragma */ 00120 00121 WN_PRAGMA_INLINE_BODY_START, /* mark start of an inlined function body */ 00122 WN_PRAGMA_INLINE_BODY_END, /* mark end of an inlined function body */ 00123 WN_PRAGMA_INLINE_DEPTH, 00124 WN_PRAGMA_INLINE_LOOPLEVEL, /* TODO: remove at next WHIRL change */ 00125 00126 WN_PRAGMA_AGGRESSIVE_INNER_LOOP_FISSION, 00127 WN_PRAGMA_FISSION, /* fission the surrounding l loops here */ 00128 WN_PRAGMA_FISSIONABLE, /* fission the surrounding l loops here */ 00129 WN_PRAGMA_FUSE, /* fuse the next n loops for l levels */ 00130 WN_PRAGMA_FUSEABLE, /* fuse the next n loops for l levels */ 00131 WN_PRAGMA_NO_FISSION, /* do not fission the next n loops */ 00132 WN_PRAGMA_NO_FUSION, /* do not fuse the next n loops */ 00133 WN_PRAGMA_INTERCHANGE, /* interchange the surrounding loops 00134 * based on the loop indices specified. 00135 */ 00136 WN_PRAGMA_NO_INTERCHANGE, /* do not interchange loops */ 00137 WN_PRAGMA_BLOCKING_SIZE, /* specify sizes for blocking */ 00138 WN_PRAGMA_NO_BLOCKING, /* do not block loop */ 00139 WN_PRAGMA_UNROLL, /* unroll loop n times */ 00140 WN_PRAGMA_BLOCKABLE, /* block loops as specified by indices */ 00141 WN_PRAGMA_PREFETCH, /* specify prefetch for each cache level*/ 00142 WN_PRAGMA_PREFETCH_MANUAL, /* specify handling of manual prefetches*/ 00143 WN_PRAGMA_PREFETCH_REF, /* generate prefetch node for array ref */ 00144 WN_PRAGMA_PREFETCH_REF_DISABLE, 00145 /* disable specified array prefetches */ 00146 WN_PRAGMA_IVDEP, /* force mem ref indep */ 00147 00148 WN_PRAGMA_OPTIONS, /* specifies compilation options */ 00149 WN_PRAGMA_OPAQUE, /* cannot move code across region boundary */ 00150 00151 WN_PRAGMA_MIPS_FREQUENCY_HINT,/* provide hints regarding execution */ 00152 WN_PRAGMA_DISTRIBUTE, 00153 WN_PRAGMA_REDISTRIBUTE, 00154 WN_PRAGMA_DISTRIBUTE_RESHAPE, 00155 WN_PRAGMA_DYNAMIC, 00156 00157 WN_PRAGMA_ACCESSED_ID, /* an assumed access to a variable */ 00158 00159 /* mpc pragmas */ 00160 00161 00162 WN_PRAGMA_PFOR_BEGIN, 00163 WN_PRAGMA_ENTER_GATE, 00164 WN_PRAGMA_EXIT_GATE, 00165 00166 /* fortran 77 mp pragmas */ 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, /* TODO: remove at next WHIRL change */ 00181 WN_PRAGMA_PARALLEL_DO, 00182 WN_PRAGMA_PDO_BEGIN, 00183 WN_PRAGMA_PDO_END, /* TODO: remove at next WHIRL change */ 00184 WN_PRAGMA_PSECTION_BEGIN, 00185 WN_PRAGMA_PSECTION_END, /* TODO: remove at next WHIRL change */ 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 /* to be removed */ 00203 #endif 00204 WN_PRAGMA_ONTO, 00205 WN_PRAGMA_LASTTHREAD, 00206 00207 /* cray directives */ 00208 00209 WN_PRAGMA_NORECURRENCE, 00210 WN_PRAGMA_NEXT_SCALAR, 00211 00212 /* purple pragmas */ 00213 00214 WN_PRAGMA_PURPLE_CONDITIONAL, 00215 WN_PRAGMA_PURPLE_UNCONDITIONAL, 00216 00217 /* wopt pragmas */ 00218 00219 WN_PRAGMA_WOPT_FINISHED_OPT, 00220 00221 /* KAP pragmas */ 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 /* Pragmas used to hide code from whirl2f (-flist) and whirl2c (-clist) 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 /* lego */ 00281 WN_PRAGMA_FILL, 00282 WN_PRAGMA_ALIGN, 00283 00284 /* mp */ 00285 WN_PRAGMA_INDEPENDENT_BEGIN, 00286 WN_PRAGMA_INDEPENDENT_END, 00287 00288 /* inline (move up to group with WN_PRAGMA_KAP_INLINE_FILE et al. ) */ 00289 WN_PRAGMA_KAP_OPTION_INLINE, /* from KAP C*$* OPTION inline= */ 00290 WN_PRAGMA_KAP_OPTION_NOINLINE, 00291 00292 /* CRAY pragmas */ 00293 00294 /* vectorization directives */ 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 /* tasking directives */ 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, /* align instructions */ 00327 WN_PRAGMA_CRI_BL, /* bottomloading */ 00328 WN_PRAGMA_CRI_CNCALL, /* concurrent call */ 00329 00330 WN_PRAGMA_MPNUM, 00331 WN_PRAGMA_COPYIN_BOUND, /* variable used to store parameter in 00332 * array bound variable/expression. 00333 */ 00334 WN_PRAGMA_SYNC_DOACROSS, /* associate an MP region with true doacross */ 00335 /* i.e., doacross with explicit sync */ 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, /* Internal XPRAGMA, store loop lower bnd */ 00343 WN_PRAGMA_ORDERED_STRIDE, /* Internal XPRAGMA, store loop stride */ 00344 WN_PRAGMA_END_MARKER, 00345 WN_PRAGMA_PARALLEL_SECTIONS, /* !$OMP parallel sections */ 00346 WN_PRAGMA_PARALLEL_WORKSHARE, /* !$OMP parallel workshare */ 00347 WN_PRAGMA_WORKSHARE, /* !$OMP workshare */ 00348 WN_PRAGMA_COPYPRIVATE, 00349 WN_PRAGMA_FLUSH, /* !$OMP flush */ 00350 00351 WN_PRAGMA_START_STMT_CLUMP, /* start/end of body of code that must be placed */ 00352 WN_PRAGMA_END_STMT_CLUMP, /* within a single region. ie: region processing */ 00353 /* can't split it. F90 IO for now */ 00354 00355 WN_PRAGMA_TYPE_OF_RESHAPED_ARRAY, /* ty_idx of distribute_reshaped globals */ 00356 00357 /* "asm" support */ 00358 WN_PRAGMA_ASM_CONSTRAINT, /* constraint string for an ASM operand */ 00359 WN_PRAGMA_ASM_CLOBBER, /* clobber string for an ASM statement */ 00360 00361 /* "upc" specific pragmas */ 00362 WN_PRAGMA_UPC_STRICT_CONSISTENCY_START, /* strict consistency */ 00363 WN_PRAGMA_UPC_STRICT_CONSISTENCY_STOP, 00364 WN_PRAGMA_UPC_RELAXED_CONSISTENCY_START, /* relaxed */ 00365 WN_PRAGMA_UPC_RELAXED_CONSISTENCY_STOP, 00366 WN_PRAGMA_UPC_FORALL, /* forall loop - marks the whole loop body */ 00367 WN_PRAGMA_UPC_FORALL_AFFINITY, /* marks the affinity test for a forall loop */ 00368 00369 /* eraxxon: OpenAD specific pragmas */ 00370 WN_PRAGMA_OPENAD_XXX, /* pass pragma text to back-end */ 00371 WN_PRAGMA_OPENAD_DEPENDENT, /* identify dependent variable */ 00372 WN_PRAGMA_OPENAD_INDEPENDENT, /* identify independent variable */ 00373 WN_PRAGMA_OPENAD_SIMPLE_LOOP, /* identify simple DO loop */ 00374 00375 MAX_WN_PRAGMA /* last one in enum */ 00376 } WN_PRAGMA_ID; 00377 00378 /* Pragma scopes: */ 00379 typedef enum { 00380 WN_PRAGMA_SCOPE_UNKNOWN, 00381 WN_PRAGMA_SCOPE_PU, /* Affects entire current program unit */ 00382 WN_PRAGMA_SCOPE_WN, /* Affects next whirl statement node */ 00383 WN_PRAGMA_SCOPE_POINT, /* Affects this point of the code */ 00384 00385 /* matching on/off pragmas must belong to the same block */ 00386 WN_PRAGMA_SCOPE_ON, /* Start of affected scope */ 00387 WN_PRAGMA_SCOPE_OFF, /* End of affected scope */ 00388 00389 WN_PRAGMA_SCOPE_SPECIAL, /* pragma-specific rule for scope */ 00390 00391 MAX_SCOPE_PRAGMA /* last one in enum */ 00392 } WN_PRAGMA_SCOPE; 00393 00394 /* schedtypes (for WN_PRAGMA_MPSCHEDTYPE) */ 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 /* Possible values for the default clause */ 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 /* which components are affected by a pragma */ 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 /* flags for ACCESSED_ID pragma */ 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 /* flags for SHARED pragma */ 00440 typedef enum { 00441 SHARED_DEADIN = 0x1, 00442 SHARED_DEADOUT = 0x2 00443 } WN_PRAGMA_SHARED_FLAGS; 00444 00445 /* enumeration for mips_frequency_hint */ 00446 typedef enum { 00447 FREQUENCY_HINT_NEVER = 0x1, 00448 FREQUENCY_HINT_INIT = 0x2, 00449 FREQUENCY_HINT_FREQUENT = 0x3 00450 } MIPS_FREQUENCY_HINT; 00451 00452 /* enumeration for distribute/redistribute/distribute_reshape type */ 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 /* enumeration for assert_do/assert_doprefer */ 00462 typedef enum { 00463 ASSERT_DO_NONE = 0x0, /* not used, just used to mark errors */ 00464 ASSERT_DO_SERIAL = 0x1, 00465 ASSERT_DO_CONCURRENT = 0x2, 00466 ASSERT_DO_VECTOR = 0x3 00467 } ASSERT_DO_TYPE; 00468 00469 /* enumeration for assert_dependence */ 00470 typedef enum { 00471 ASSERT_DEPENDENCE_SAFE = 0x1, 00472 ASSERT_DEPENDENCE_UNSAFE = 0x2 00473 } ASSERT_DEPENDENCE_TYPE; 00474 00475 /* non-integer values for assert_frequency */ 00476 enum { 00477 ASSERT_FREQUENCY_ERROR = -3, 00478 ASSERT_FREQUENCY_RARELY = -2, 00479 ASSERT_FREQUENCY_USUALLY = -1 00480 }; 00481 00482 /* ==================================================================== 00483 * 00484 * WN_PRAGMA_DESC: Pragma descriptors 00485 * 00486 * These describe the characteristics of the WHIRL pragmas 00487 * 00488 * ==================================================================== 00489 */ 00490 00491 /* Pragma descriptors: */ 00492 typedef struct wn_pragma_desc { 00493 WN_PRAGMA_USERS users; /* The components that use this pragma */ 00494 WN_PRAGMA_SCOPE scope; /* Pragma scope */ 00495 char *name; /* Pragma name */ 00496 } WN_PRAGMA_DESC; 00497 00498 extern WN_PRAGMA_DESC WN_pragmas[]; 00499 00500 /* I suspect this is not needed anymore, so set it to NULL 00501 * for now for testing. 00502 */ 00503 #define IS_AFFINITY_XPRAGMA(wn) (FALSE) 00504 00505 00506 #ifdef __cplusplus 00507 } 00508 #endif 00509 #endif /* pragmas_INCLUDED */