3374 }
3375
3376 int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
3377 static const char *needs_ideal_memory_list[] = {
3378 "StoreI","StoreL","StoreP","StoreN","StoreD","StoreF" ,
3379 "StoreB","StoreC","Store" ,"StoreFP",
3380 "LoadI", "LoadUI2L", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF" ,
3381 "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" ,
3382 "Store4I","Store2I","Store2L","Store2D","Store4F","Store2F","Store16B",
3383 "Store8B","Store4B","Store8C","Store4C","Store2C",
3384 "Load4I" ,"Load2I" ,"Load2L" ,"Load2D" ,"Load4F" ,"Load2F" ,"Load16B" ,
3385 "Load8B" ,"Load4B" ,"Load8C" ,"Load4C" ,"Load2C" ,"Load8S", "Load4S","Load2S",
3386 "LoadRange", "LoadKlass", "LoadNKlass", "LoadL_unaligned", "LoadD_unaligned",
3387 "LoadPLocked", "LoadLLocked",
3388 "StorePConditional", "StoreIConditional", "StoreLConditional",
3389 "CompareAndSwapI", "CompareAndSwapL", "CompareAndSwapP", "CompareAndSwapN",
3390 "StoreCM",
3391 "ClearArray"
3392 };
3393 int cnt = sizeof(needs_ideal_memory_list)/sizeof(char*);
3394 if( strcmp(_opType,"PrefetchRead")==0 || strcmp(_opType,"PrefetchWrite")==0 )
3395 return 1;
3396 if( _lChild ) {
3397 const char *opType = _lChild->_opType;
3398 for( int i=0; i<cnt; i++ )
3399 if( strcmp(opType,needs_ideal_memory_list[i]) == 0 )
3400 return 1;
3401 if( _lChild->needs_ideal_memory_edge(globals) )
3402 return 1;
3403 }
3404 if( _rChild ) {
3405 const char *opType = _rChild->_opType;
3406 for( int i=0; i<cnt; i++ )
3407 if( strcmp(opType,needs_ideal_memory_list[i]) == 0 )
3408 return 1;
3409 if( _rChild->needs_ideal_memory_edge(globals) )
3410 return 1;
3411 }
3412
3413 return 0;
3414 }
|
3374 }
3375
3376 int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
3377 static const char *needs_ideal_memory_list[] = {
3378 "StoreI","StoreL","StoreP","StoreN","StoreD","StoreF" ,
3379 "StoreB","StoreC","Store" ,"StoreFP",
3380 "LoadI", "LoadUI2L", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF" ,
3381 "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" ,
3382 "Store4I","Store2I","Store2L","Store2D","Store4F","Store2F","Store16B",
3383 "Store8B","Store4B","Store8C","Store4C","Store2C",
3384 "Load4I" ,"Load2I" ,"Load2L" ,"Load2D" ,"Load4F" ,"Load2F" ,"Load16B" ,
3385 "Load8B" ,"Load4B" ,"Load8C" ,"Load4C" ,"Load2C" ,"Load8S", "Load4S","Load2S",
3386 "LoadRange", "LoadKlass", "LoadNKlass", "LoadL_unaligned", "LoadD_unaligned",
3387 "LoadPLocked", "LoadLLocked",
3388 "StorePConditional", "StoreIConditional", "StoreLConditional",
3389 "CompareAndSwapI", "CompareAndSwapL", "CompareAndSwapP", "CompareAndSwapN",
3390 "StoreCM",
3391 "ClearArray"
3392 };
3393 int cnt = sizeof(needs_ideal_memory_list)/sizeof(char*);
3394 if( strcmp(_opType,"PrefetchRead")==0 ||
3395 strcmp(_opType,"PrefetchWrite")==0 ||
3396 strcmp(_opType,"PrefetchAllocation")==0 )
3397 return 1;
3398 if( _lChild ) {
3399 const char *opType = _lChild->_opType;
3400 for( int i=0; i<cnt; i++ )
3401 if( strcmp(opType,needs_ideal_memory_list[i]) == 0 )
3402 return 1;
3403 if( _lChild->needs_ideal_memory_edge(globals) )
3404 return 1;
3405 }
3406 if( _rChild ) {
3407 const char *opType = _rChild->_opType;
3408 for( int i=0; i<cnt; i++ )
3409 if( strcmp(opType,needs_ideal_memory_list[i]) == 0 )
3410 return 1;
3411 if( _rChild->needs_ideal_memory_edge(globals) )
3412 return 1;
3413 }
3414
3415 return 0;
3416 }
|