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 int parallel_do_count;
00036
00037
00038
00039 static struct {
00040 int fe_enum;
00041 WN_PRAGMA_ID wn_pragma_id;
00042 } map_asserts[] = {
00043 { 0, WN_PRAGMA_UNDEFINED } ,
00044 {MIPS_ASSERT_ARGUMENTALIASING, WN_PRAGMA_KAP_ASSERT_ARGUMENT_ALIASING},
00045 {MIPS_ASSERT_NOARGUMENTALIASING, WN_PRAGMA_KAP_ASSERT_NO_ARGUMENT_ALIASING},
00046 {MIPS_ASSERT_BOUNDSVIOLATIONS, WN_PRAGMA_KAP_ASSERT_BOUNDS_VIOLATIONS},
00047 {MIPS_ASSERT_NOBOUNDSVIOLATIONS, WN_PRAGMA_KAP_ASSERT_NOBOUNDS_VIOLATIONS},
00048 {MIPS_ASSERT_CONCURRENTCALL, WN_PRAGMA_KAP_ASSERT_CONCURRENT_CALL},
00049 {MIPS_ASSERT_NOCONCURRENTCALL, WN_PRAGMA_KAP_ASSERT_NO_CONCURRENT_CALL},
00050 {MIPS_ASSERT_NORECURRENCE, WN_PRAGMA_KAP_ASSERT_NORECURRENCE},
00051 {MIPS_ASSERT_DOPREFER, WN_PRAGMA_KAP_ASSERT_DOPREFER},
00052 {MIPS_ASSERT_EQUIVALENCEHAZARD, WN_PRAGMA_KAP_ASSERT_EQUIVALENCE_HAZARD},
00053 {MIPS_ASSERT_NOEQUIVALENCEHAZARD, WN_PRAGMA_KAP_ASSERT_NOEQUIVALENCE_HAZARD},
00054 {MIPS_ASSERT_LASTVALUENEEDED, WN_PRAGMA_KAP_ASSERT_LAST_VALUE_NEEDED},
00055 {MIPS_ASSERT_LASTVALUESNEEDED, WN_PRAGMA_KAP_ASSERT_LAST_VALUE_NEEDED},
00056 {MIPS_ASSERT_NOLASTVALUENEEDED, WN_PRAGMA_KAP_ASSERT_NOLAST_VALUE_NEEDED},
00057 {MIPS_ASSERT_NOLASTVALUESNEEDED, WN_PRAGMA_KAP_ASSERT_NOLAST_VALUE_NEEDED},
00058 {MIPS_ASSERT_PERMUTATION, WN_PRAGMA_KAP_ASSERT_PERMUTATION},
00059 {MIPS_ASSERT_RELATION, WN_PRAGMA_KAP_ASSERT_RELATION},
00060 {MIPS_ASSERT_NOSYNC, WN_PRAGMA_KAP_ASSERT_NOSYNC},
00061 {MIPS_ASSERT_TEMPORARIESFORCONSTANTARGUMENTS, WN_PRAGMA_KAP_ASSERT_TEMPORARIES_FOR_CONSTANT_ARGUMENTS},
00062 {MIPS_ASSERT_NOTEMPORARIESFORCONSTANTARGUMENTS, WN_PRAGMA_KAP_ASSERT_NOTEMPORARIES_FOR_CONSTANT_ARGUMENTS},
00063 {MIPS_ASSERT_DO, WN_PRAGMA_KAP_ASSERT_DO},
00064 {MIPS_ASSERT_BENIGN, WN_PRAGMA_KAP_ASSERT_BENIGN},
00065 {MIPS_ASSERT_DEPENDENCE, WN_PRAGMA_KAP_ASSERT_DEPENDENCE},
00066 {MIPS_ASSERT_FREQUENCY, WN_PRAGMA_KAP_ASSERT_FREQUENCY},
00067 {MIPS_ASSERT_IGNOREANYDEPENDENCES, WN_PRAGMA_KAP_ASSERT_IGNORE_ANY_DEPENDENCE},
00068 {MIPS_ASSERT_IGNOREANYDEPENDENCE, WN_PRAGMA_KAP_ASSERT_IGNORE_ANY_DEPENDENCE},
00069 {MIPS_ASSERT_IGNOREASSUMEDDEPENDENCES, WN_PRAGMA_KAP_ASSERT_IGNORE_ASSUMED_DEPENDENCE},
00070 {MIPS_ASSERT_IGNOREASSUMEDDEPENDENCE, WN_PRAGMA_KAP_ASSERT_IGNORE_ASSUMED_DEPENDENCE},
00071 {MIPS_ASSERT_NOINTERCHANGE, WN_PRAGMA_KAP_ASSERT_NO_INTERCHANGE},
00072 {MIPS_ASSERT_USECOMPRESS, WN_PRAGMA_KAP_ASSERT_USE_COMPRESS},
00073 {MIPS_ASSERT_USEEXPAND, WN_PRAGMA_KAP_ASSERT_USE_EXPAND},
00074 {MIPS_ASSERT_USECONTROLLEDSTORE, WN_PRAGMA_KAP_ASSERT_USE_CONTROLLED_STORE},
00075 {MIPS_ASSERT_USEGATHER, WN_PRAGMA_KAP_ASSERT_USE_GATHER},
00076 {MIPS_ASSERT_USESCATTER, WN_PRAGMA_KAP_ASSERT_USE_SCATTER}
00077 };
00078
00079
00080 static WN * do_loop_directive_block=NULL;
00081 static void cwh_directive_pragma_to_region(WN * prag, WN * region) ;
00082 static void cwh_directive_set_PU_flags(BOOL nested);
00083 static void cwh_directive_set_LNO_flags(void);
00084 static void cwh_directive_pop_and_nowait( BOOL nowait, BOOL is_omp);
00085 static void cwh_directive_pop_and_nowait_or_copyprivate( BOOL nowait);
00086 static void cwh_directive_add_pragma_to_loop(WN * wn, BOOL is_omp);
00087 static void cwh_directive_work_dist(INT32 work_dist, INT32 work_dist_opnd) ;
00088 static void cwh_directive_load_value_pragma(INT32 item, WN_PRAGMA_ID pragma, BOOL is_omp = FALSE);
00089 static void cwh_directive_fill_align(INT32 count,INT32 C_value, WN_PRAGMA_ID pragma ) ;
00090
00091
00092