3468
3469 void MatchNode::dump() {
3470 output(stderr);
3471 }
3472
3473 void MatchNode::output(FILE *fp) {
3474 if (_lChild==0 && _rChild==0) {
3475 fprintf(fp," %s",_name); // operand
3476 }
3477 else {
3478 fprintf(fp," (%s ",_name); // " (opcodeName "
3479 if(_lChild) _lChild->output(fp); // left operand
3480 if(_rChild) _rChild->output(fp); // right operand
3481 fprintf(fp,")"); // ")"
3482 }
3483 }
3484
3485 int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
3486 static const char *needs_ideal_memory_list[] = {
3487 "StoreI","StoreL","StoreP","StoreN","StoreNKlass","StoreD","StoreF" ,
3488 "StoreB","StoreC","Store" ,"StoreFP",
3489 "LoadI", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF" ,
3490 "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" ,
3491 "StoreVector", "LoadVector",
3492 "LoadRange", "LoadKlass", "LoadNKlass", "LoadL_unaligned", "LoadD_unaligned",
3493 "LoadPLocked",
3494 "StorePConditional", "StoreIConditional", "StoreLConditional",
3495 "CompareAndSwapB", "CompareAndSwapS", "CompareAndSwapI", "CompareAndSwapL", "CompareAndSwapP", "CompareAndSwapN",
3496 "WeakCompareAndSwapB", "WeakCompareAndSwapS", "WeakCompareAndSwapI", "WeakCompareAndSwapL", "WeakCompareAndSwapP", "WeakCompareAndSwapN",
3497 "CompareAndExchangeB", "CompareAndExchangeS", "CompareAndExchangeI", "CompareAndExchangeL", "CompareAndExchangeP", "CompareAndExchangeN",
3498 "StoreCM",
3499 "ClearArray",
3500 "GetAndSetB", "GetAndSetS", "GetAndAddI", "GetAndSetI", "GetAndSetP",
3501 "GetAndAddB", "GetAndAddS", "GetAndAddL", "GetAndSetL", "GetAndSetN",
3502 "LoadBarrierSlowReg", "LoadBarrierWeakSlowReg"
3503 };
3504 int cnt = sizeof(needs_ideal_memory_list)/sizeof(char*);
3505 if( strcmp(_opType,"PrefetchAllocation")==0 )
3506 return 1;
3507 if( _lChild ) {
3508 const char *opType = _lChild->_opType;
|
3468
3469 void MatchNode::dump() {
3470 output(stderr);
3471 }
3472
3473 void MatchNode::output(FILE *fp) {
3474 if (_lChild==0 && _rChild==0) {
3475 fprintf(fp," %s",_name); // operand
3476 }
3477 else {
3478 fprintf(fp," (%s ",_name); // " (opcodeName "
3479 if(_lChild) _lChild->output(fp); // left operand
3480 if(_rChild) _rChild->output(fp); // right operand
3481 fprintf(fp,")"); // ")"
3482 }
3483 }
3484
3485 int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
3486 static const char *needs_ideal_memory_list[] = {
3487 "StoreI","StoreL","StoreP","StoreN","StoreNKlass","StoreD","StoreF" ,
3488 "StoreZ0", "StoreZ1", "StoreB","StoreC","Store" ,"StoreFP",
3489 "LoadI", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF" ,
3490 "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" ,
3491 "StoreVector", "LoadVector",
3492 "LoadRange", "LoadKlass", "LoadNKlass", "LoadL_unaligned", "LoadD_unaligned",
3493 "LoadPLocked",
3494 "StorePConditional", "StoreIConditional", "StoreLConditional",
3495 "CompareAndSwapB", "CompareAndSwapS", "CompareAndSwapI", "CompareAndSwapL", "CompareAndSwapP", "CompareAndSwapN",
3496 "WeakCompareAndSwapB", "WeakCompareAndSwapS", "WeakCompareAndSwapI", "WeakCompareAndSwapL", "WeakCompareAndSwapP", "WeakCompareAndSwapN",
3497 "CompareAndExchangeB", "CompareAndExchangeS", "CompareAndExchangeI", "CompareAndExchangeL", "CompareAndExchangeP", "CompareAndExchangeN",
3498 "StoreCM",
3499 "ClearArray",
3500 "GetAndSetB", "GetAndSetS", "GetAndAddI", "GetAndSetI", "GetAndSetP",
3501 "GetAndAddB", "GetAndAddS", "GetAndAddL", "GetAndSetL", "GetAndSetN",
3502 "LoadBarrierSlowReg", "LoadBarrierWeakSlowReg"
3503 };
3504 int cnt = sizeof(needs_ideal_memory_list)/sizeof(char*);
3505 if( strcmp(_opType,"PrefetchAllocation")==0 )
3506 return 1;
3507 if( _lChild ) {
3508 const char *opType = _lChild->_opType;
|