< prev index next >

src/hotspot/share/adlc/formssel.cpp

Print this page




 758 }
 759 
 760 
 761 // This instruction captures the machine-independent bottom_type
 762 // Expected use is for pointer vs oop determination for LoadP
 763 bool InstructForm::captures_bottom_type(FormDict &globals) const {
 764   if (_matrule && _matrule->_rChild &&
 765       (!strcmp(_matrule->_rChild->_opType,"CastPP")       ||  // new result type
 766        !strcmp(_matrule->_rChild->_opType,"CastX2P")      ||  // new result type
 767        !strcmp(_matrule->_rChild->_opType,"DecodeN")      ||
 768        !strcmp(_matrule->_rChild->_opType,"EncodeP")      ||
 769        !strcmp(_matrule->_rChild->_opType,"DecodeNKlass") ||
 770        !strcmp(_matrule->_rChild->_opType,"EncodePKlass") ||
 771        !strcmp(_matrule->_rChild->_opType,"LoadN")        ||
 772        !strcmp(_matrule->_rChild->_opType,"LoadNKlass")   ||
 773        !strcmp(_matrule->_rChild->_opType,"CreateEx")     ||  // type of exception
 774        !strcmp(_matrule->_rChild->_opType,"CheckCastPP")  ||
 775        !strcmp(_matrule->_rChild->_opType,"GetAndSetP")   ||
 776        !strcmp(_matrule->_rChild->_opType,"GetAndSetN")   ||
 777        !strcmp(_matrule->_rChild->_opType,"CompareAndExchangeP") ||
 778        !strcmp(_matrule->_rChild->_opType,"CompareAndExchangeN")))  return true;



 779   else if ( is_ideal_load() == Form::idealP )                return true;
 780   else if ( is_ideal_store() != Form::none  )                return true;
 781 
 782   if (needs_base_oop_edge(globals)) return true;
 783 
 784   if (is_vector()) return true;
 785   if (is_mach_constant()) return true;
 786 
 787   return  false;
 788 }
 789 
 790 
 791 // Access instr_cost attribute or return NULL.
 792 const char* InstructForm::cost() {
 793   for (Attribute* cur = _attribs; cur != NULL; cur = (Attribute*)cur->_next) {
 794     if( strcmp(cur->_ident,AttributeForm::_ins_cost) == 0 ) {
 795       return cur->_val;
 796     }
 797   }
 798   return NULL;


3481     fprintf(fp," (%s ",_name);  // " (opcodeName "
3482     if(_lChild) _lChild->output(fp); //               left operand
3483     if(_rChild) _rChild->output(fp); //                    right operand
3484     fprintf(fp,")");                 //                                 ")"
3485   }
3486 }
3487 
3488 int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
3489   static const char *needs_ideal_memory_list[] = {
3490     "StoreI","StoreL","StoreP","StoreN","StoreNKlass","StoreD","StoreF" ,
3491     "StoreB","StoreC","Store" ,"StoreFP",
3492     "LoadI", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF"  ,
3493     "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" ,
3494     "StoreVector", "LoadVector",
3495     "LoadRange", "LoadKlass", "LoadNKlass", "LoadL_unaligned", "LoadD_unaligned",
3496     "LoadPLocked",
3497     "StorePConditional", "StoreIConditional", "StoreLConditional",
3498     "CompareAndSwapB", "CompareAndSwapS", "CompareAndSwapI", "CompareAndSwapL", "CompareAndSwapP", "CompareAndSwapN",
3499     "WeakCompareAndSwapB", "WeakCompareAndSwapS", "WeakCompareAndSwapI", "WeakCompareAndSwapL", "WeakCompareAndSwapP", "WeakCompareAndSwapN",
3500     "CompareAndExchangeB", "CompareAndExchangeS", "CompareAndExchangeI", "CompareAndExchangeL", "CompareAndExchangeP", "CompareAndExchangeN",

3501     "StoreCM",
3502     "ClearArray",
3503     "GetAndSetB", "GetAndSetS", "GetAndAddI", "GetAndSetI", "GetAndSetP",
3504     "GetAndAddB", "GetAndAddS", "GetAndAddL", "GetAndSetL", "GetAndSetN",

3505     "LoadBarrierSlowReg", "LoadBarrierWeakSlowReg"
3506   };
3507   int cnt = sizeof(needs_ideal_memory_list)/sizeof(char*);
3508   if( strcmp(_opType,"PrefetchAllocation")==0 )
3509     return 1;
3510   if( _lChild ) {
3511     const char *opType = _lChild->_opType;
3512     for( int i=0; i<cnt; i++ )
3513       if( strcmp(opType,needs_ideal_memory_list[i]) == 0 )
3514         return 1;
3515     if( _lChild->needs_ideal_memory_edge(globals) )
3516       return 1;
3517   }
3518   if( _rChild ) {
3519     const char *opType = _rChild->_opType;
3520     for( int i=0; i<cnt; i++ )
3521       if( strcmp(opType,needs_ideal_memory_list[i]) == 0 )
3522         return 1;
3523     if( _rChild->needs_ideal_memory_edge(globals) )
3524       return 1;




 758 }
 759 
 760 
 761 // This instruction captures the machine-independent bottom_type
 762 // Expected use is for pointer vs oop determination for LoadP
 763 bool InstructForm::captures_bottom_type(FormDict &globals) const {
 764   if (_matrule && _matrule->_rChild &&
 765       (!strcmp(_matrule->_rChild->_opType,"CastPP")       ||  // new result type
 766        !strcmp(_matrule->_rChild->_opType,"CastX2P")      ||  // new result type
 767        !strcmp(_matrule->_rChild->_opType,"DecodeN")      ||
 768        !strcmp(_matrule->_rChild->_opType,"EncodeP")      ||
 769        !strcmp(_matrule->_rChild->_opType,"DecodeNKlass") ||
 770        !strcmp(_matrule->_rChild->_opType,"EncodePKlass") ||
 771        !strcmp(_matrule->_rChild->_opType,"LoadN")        ||
 772        !strcmp(_matrule->_rChild->_opType,"LoadNKlass")   ||
 773        !strcmp(_matrule->_rChild->_opType,"CreateEx")     ||  // type of exception
 774        !strcmp(_matrule->_rChild->_opType,"CheckCastPP")  ||
 775        !strcmp(_matrule->_rChild->_opType,"GetAndSetP")   ||
 776        !strcmp(_matrule->_rChild->_opType,"GetAndSetN")   ||
 777        !strcmp(_matrule->_rChild->_opType,"CompareAndExchangeP") ||
 778        !strcmp(_matrule->_rChild->_opType,"CompareAndExchangeN") ||
 779        !strcmp(_matrule->_rChild->_opType,"ShenandoahCompareAndExchangeP") ||
 780        !strcmp(_matrule->_rChild->_opType,"ShenandoahCompareAndExchangeN") ||
 781        !strcmp(_matrule->_rChild->_opType,"ShenandoahReadBarrier")))  return true;
 782   else if ( is_ideal_load() == Form::idealP )                return true;
 783   else if ( is_ideal_store() != Form::none  )                return true;
 784 
 785   if (needs_base_oop_edge(globals)) return true;
 786 
 787   if (is_vector()) return true;
 788   if (is_mach_constant()) return true;
 789 
 790   return  false;
 791 }
 792 
 793 
 794 // Access instr_cost attribute or return NULL.
 795 const char* InstructForm::cost() {
 796   for (Attribute* cur = _attribs; cur != NULL; cur = (Attribute*)cur->_next) {
 797     if( strcmp(cur->_ident,AttributeForm::_ins_cost) == 0 ) {
 798       return cur->_val;
 799     }
 800   }
 801   return NULL;


3484     fprintf(fp," (%s ",_name);  // " (opcodeName "
3485     if(_lChild) _lChild->output(fp); //               left operand
3486     if(_rChild) _rChild->output(fp); //                    right operand
3487     fprintf(fp,")");                 //                                 ")"
3488   }
3489 }
3490 
3491 int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
3492   static const char *needs_ideal_memory_list[] = {
3493     "StoreI","StoreL","StoreP","StoreN","StoreNKlass","StoreD","StoreF" ,
3494     "StoreB","StoreC","Store" ,"StoreFP",
3495     "LoadI", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF"  ,
3496     "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" ,
3497     "StoreVector", "LoadVector",
3498     "LoadRange", "LoadKlass", "LoadNKlass", "LoadL_unaligned", "LoadD_unaligned",
3499     "LoadPLocked",
3500     "StorePConditional", "StoreIConditional", "StoreLConditional",
3501     "CompareAndSwapB", "CompareAndSwapS", "CompareAndSwapI", "CompareAndSwapL", "CompareAndSwapP", "CompareAndSwapN",
3502     "WeakCompareAndSwapB", "WeakCompareAndSwapS", "WeakCompareAndSwapI", "WeakCompareAndSwapL", "WeakCompareAndSwapP", "WeakCompareAndSwapN",
3503     "CompareAndExchangeB", "CompareAndExchangeS", "CompareAndExchangeI", "CompareAndExchangeL", "CompareAndExchangeP", "CompareAndExchangeN",
3504     "ShenandoahCompareAndSwapN", "ShenandoahCompareAndSwapP", "ShenandoahWeakCompareAndSwapP", "ShenandoahWeakCompareAndSwapN", "ShenandoahCompareAndExchangeP", "ShenandoahCompareAndExchangeN",
3505     "StoreCM",
3506     "ClearArray",
3507     "GetAndSetB", "GetAndSetS", "GetAndAddI", "GetAndSetI", "GetAndSetP",
3508     "GetAndAddB", "GetAndAddS", "GetAndAddL", "GetAndSetL", "GetAndSetN",
3509     "ShenandoahReadBarrier",
3510     "LoadBarrierSlowReg", "LoadBarrierWeakSlowReg"
3511   };
3512   int cnt = sizeof(needs_ideal_memory_list)/sizeof(char*);
3513   if( strcmp(_opType,"PrefetchAllocation")==0 )
3514     return 1;
3515   if( _lChild ) {
3516     const char *opType = _lChild->_opType;
3517     for( int i=0; i<cnt; i++ )
3518       if( strcmp(opType,needs_ideal_memory_list[i]) == 0 )
3519         return 1;
3520     if( _lChild->needs_ideal_memory_edge(globals) )
3521       return 1;
3522   }
3523   if( _rChild ) {
3524     const char *opType = _rChild->_opType;
3525     for( int i=0; i<cnt; i++ )
3526       if( strcmp(opType,needs_ideal_memory_list[i]) == 0 )
3527         return 1;
3528     if( _rChild->needs_ideal_memory_edge(globals) )
3529       return 1;


< prev index next >