Open64 (mfef90, whirl2f, and IR tools)  TAG: version-openad; SVN changeset: 916
wn_pragmas.h
Go to the documentation of this file.
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 */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines