comparison src/share/vm/adlc/formssel.cpp @ 855:f9094a5e1c8a

6857159: local schedule failed with checkcast of Thread.currentThread() Reviewed-by: kvn
author never
date Tue, 21 Jul 2009 16:42:58 -0700
parents fbde8ec322d0
children 62001a362ce9
comparison
equal deleted inserted replaced
854:606c988ff684 855:f9094a5e1c8a
418 if( _matrule == NULL ) return Form::none; 418 if( _matrule == NULL ) return Form::none;
419 419
420 return _matrule->is_ideal_load(); 420 return _matrule->is_ideal_load();
421 } 421 }
422 422
423 // Return 'true' if this instruction matches an ideal 'LoadKlass' node
424 bool InstructForm::skip_antidep_check() const {
425 if( _matrule == NULL ) return false;
426
427 return _matrule->skip_antidep_check();
428 }
429
423 // Return 'true' if this instruction matches an ideal 'Load?' node 430 // Return 'true' if this instruction matches an ideal 'Load?' node
424 Form::DataType InstructForm::is_ideal_store() const { 431 Form::DataType InstructForm::is_ideal_store() const {
425 if( _matrule == NULL ) return Form::none; 432 if( _matrule == NULL ) return Form::none;
426 433
427 return _matrule->is_ideal_store(); 434 return _matrule->is_ideal_store();
565 return rematerialize; 572 return rematerialize;
566 } 573 }
567 574
568 // loads from memory, so must check for anti-dependence 575 // loads from memory, so must check for anti-dependence
569 bool InstructForm::needs_anti_dependence_check(FormDict &globals) const { 576 bool InstructForm::needs_anti_dependence_check(FormDict &globals) const {
577 if ( skip_antidep_check() ) return false;
578
570 // Machine independent loads must be checked for anti-dependences 579 // Machine independent loads must be checked for anti-dependences
571 if( is_ideal_load() != Form::none ) return true; 580 if( is_ideal_load() != Form::none ) return true;
572 581
573 // !!!!! !!!!! !!!!! 582 // !!!!! !!!!! !!!!!
574 // TEMPORARY 583 // TEMPORARY
3955 3964
3956 return ideal_load; 3965 return ideal_load;
3957 } 3966 }
3958 3967
3959 3968
3969 bool MatchRule::skip_antidep_check() const {
3970 // Some loads operate on what is effectively immutable memory so we
3971 // should skip the anti dep computations. For some of these nodes
3972 // the rewritable field keeps the anti dep logic from triggering but
3973 // for certain kinds of LoadKlass it does not since they are
3974 // actually reading memory which could be rewritten by the runtime,
3975 // though never by generated code. This disables it uniformly for
3976 // the nodes that behave like this: LoadKlass, LoadNKlass and
3977 // LoadRange.
3978 if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
3979 const char *opType = _rChild->_opType;
3980 if (strcmp("LoadKlass", opType) == 0 ||
3981 strcmp("LoadNKlass", opType) == 0 ||
3982 strcmp("LoadRange", opType) == 0) {
3983 return true;
3984 }
3985 }
3986
3987 return false;
3988 }
3989
3990
3960 Form::DataType MatchRule::is_ideal_store() const { 3991 Form::DataType MatchRule::is_ideal_store() const {
3961 Form::DataType ideal_store = Form::none; 3992 Form::DataType ideal_store = Form::none;
3962 3993
3963 if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) { 3994 if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
3964 const char *opType = _rChild->_opType; 3995 const char *opType = _rChild->_opType;