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 wn_map_INCLUDED
00037 #define wn_map_INCLUDED
00038 #ifdef __cplusplus
00039 extern "C" {
00040 #endif
00041
00042 #ifdef _KEEP_RCS_ID
00043 static char *wn_map_rcs_id = "$Source$ $Revision$";
00044 #endif
00045
00046
00282 struct mem_pool;
00283
00284
00285 typedef INT32 WN_MAP;
00286
00287
00288 #define WN_MAP_UNDEFINED (-1)
00289 #define WN_MAP_DEPGRAPH 0
00290 #define WN_MAP_PREFETCH 1
00291 #define WN_MAP_FEEDBACK 2
00292 #define WN_MAP_AC_INTERNAL 3
00293 #define WN_MAP_ALIAS_CLASS 4
00294
00295
00296 #define WN_MAP_RESERVED 5
00297 #define WN_MAP_MAX 32
00298
00299 typedef enum {
00300 WN_MAP_KIND_VOIDP = 1,
00301 WN_MAP_KIND_INT32 = 2,
00302 WN_MAP_KIND_INT64 = 3
00303 } WN_MAP_KIND;
00304
00305 typedef struct wn_map_tab {
00306 struct mem_pool *_free_list_pool;
00307 struct mem_pool *_pool[WN_MAP_MAX];
00308 WN_MAP_KIND _kind[WN_MAP_MAX];
00309 void **_mapping[WN_MAP_CATEGORIES][WN_MAP_MAX];
00310 BOOL _is_used[WN_MAP_MAX];
00311 BOOL _dont_copy[WN_MAP_MAX];
00312 INT32 _last_map_id[WN_MAP_CATEGORIES];
00313 INT32 _map_size[WN_MAP_CATEGORIES][WN_MAP_MAX];
00314
00315
00316 WN_MAP_ID *_free_list[WN_MAP_CATEGORIES];
00317 INT32 _free_list_count[WN_MAP_CATEGORIES];
00318 INT32 _free_list_size[WN_MAP_CATEGORIES];
00319 } WN_MAP_TAB;
00320
00321
00322 extern WN_MAP_TAB *Current_Map_Tab;
00323
00324
00325 extern WN_MAP_TAB *WN_MAP_TAB_Create(
00326 struct mem_pool *pool
00327 );
00328
00329 extern void WN_MAP_TAB_Delete(
00330 WN_MAP_TAB *maptab
00331 );
00332
00333 #define WN_MAP_TAB_Last_ID(maptab,category) \
00334 (maptab)->_last_map_id[(category)]
00335
00336
00337 extern WN_MAP WN_MAP_Do_Create(
00338 WN_MAP_TAB *maptab,
00339 struct mem_pool *pool,
00340 WN_MAP_KIND kind
00341 );
00342
00343 #define WN_MAP_Create(pool) \
00344 WN_MAP_Do_Create(Current_Map_Tab, (pool), WN_MAP_KIND_VOIDP)
00345 #define WN_MAP32_Create(pool) \
00346 WN_MAP_Do_Create(Current_Map_Tab, (pool), WN_MAP_KIND_INT32)
00347 #define WN_MAP64_Create(pool) \
00348 WN_MAP_Do_Create(Current_Map_Tab, (pool), WN_MAP_KIND_INT64)
00349
00350 #define IPA_WN_MAP_Create(maptab, pool) \
00351 WN_MAP_Do_Create((maptab), (pool), WN_MAP_KIND_VOIDP)
00352 #define IPA_WN_MAP32_Create(maptab, pool) \
00353 WN_MAP_Do_Create((maptab), (pool), WN_MAP_KIND_INT32)
00354 #define IPA_WN_MAP64_Create(maptab, pool) \
00355 WN_MAP_Do_Create((maptab), (pool), WN_MAP_KIND_INT64)
00356
00357 extern WN_MAP_ID IPA_WN_MAP_Status(
00358 WN_MAP_TAB *maptab
00359 );
00360
00361 #define WN_MAP_Status() \
00362 IPA_WN_MAP_Status(Current_Map_Tab)
00363
00364 extern void IPA_WN_MAP_Delete(
00365 WN_MAP_TAB *maptab,
00366 WN_MAP wn_map
00367 );
00368
00369 #define WN_MAP_Delete(wn_map) \
00370 IPA_WN_MAP_Delete(Current_Map_Tab, (wn_map))
00371
00372
00373 extern void IPA_WN_MAP_Set(
00374 WN_MAP_TAB *maptab,
00375 WN_MAP wn_map,
00376 WN *wn,
00377 void *thing
00378 );
00379 extern void IPA_WN_MAP32_Set(
00380 WN_MAP_TAB *maptab,
00381 WN_MAP wn_map,
00382 WN *wn,
00383 INT32 thing
00384 );
00385 extern void IPA_WN_MAP64_Set(
00386 WN_MAP_TAB *maptab,
00387 WN_MAP wn_map,
00388 WN *wn,
00389 INT64 thing
00390 );
00391
00392 #define WN_MAP_Set(wn_map,wn,thing) \
00393 IPA_WN_MAP_Set(Current_Map_Tab, (wn_map), (wn), (thing))
00394 #define WN_MAP32_Set(wn_map,wn,thing) \
00395 IPA_WN_MAP32_Set(Current_Map_Tab, (wn_map), (wn), (thing))
00396 #define WN_MAP64_Set(wn_map,wn,thing) \
00397 IPA_WN_MAP64_Set(Current_Map_Tab, (wn_map), (wn), (thing))
00398
00399
00400 extern void *IPA_WN_MAP_Get(
00401 WN_MAP_TAB *maptab,
00402 WN_MAP wn_map,
00403 const WN *wn
00404 );
00405 extern INT32 IPA_WN_MAP32_Get(
00406 WN_MAP_TAB *maptab,
00407 WN_MAP wn_map,
00408 const WN *wn
00409 );
00410 extern INT64 IPA_WN_MAP64_Get(
00411 WN_MAP_TAB *maptab,
00412 WN_MAP wn_map,
00413 const WN *wn
00414 );
00415
00416 #define WN_MAP_Get(wn_map,wn) \
00417 IPA_WN_MAP_Get(Current_Map_Tab, (wn_map), (wn))
00418 #define WN_MAP32_Get(wn_map,wn) \
00419 IPA_WN_MAP32_Get(Current_Map_Tab, (wn_map), (wn))
00420 #define WN_MAP64_Get(wn_map,wn) \
00421 IPA_WN_MAP64_Get(Current_Map_Tab, (wn_map), (wn))
00422
00423
00424 #define WN_MAP_Size(wn_map,category) \
00425 IPA_WN_MAP_Size(Current_Map_Tab, (wn_map), (category))
00426 #define IPA_WN_MAP_Size(maptab,wn_map,category) \
00427 (maptab)->_map_size[(category)][(wn_map)]
00428
00429
00430 extern void WN_MAP_Add_Free_List(
00431 WN_MAP_TAB *maptab,
00432 WN *wn
00433 );
00434
00435 extern void WN_MAP_Set_ID(
00436 WN_MAP_TAB *maptab,
00437 WN *wn
00438 );
00439
00440 #define WN_MAP_Get_Kind(wn_map) (Current_Map_Tab->_kind[(wn_map)])
00441
00442 #define WN_MAP_Get_dont_copy(wn_map) (Current_Map_Tab->_dont_copy[(wn_map)])
00443
00444 #define WN_MAP_Set_dont_copy(wn_map, dont_copy) \
00445 (Current_Map_Tab->_dont_copy[(wn_map)] = (dont_copy))
00446
00447 #ifdef __cplusplus
00448 }
00449 #endif
00450 #endif