@@ -519,7 +519,33 @@ void ShenandoahBarrierSetC2::post_barrier(GraphKit* kit,
519519
520520#undef __
521521
522- const TypeFunc* ShenandoahBarrierSetC2::write_barrier_pre_Type () {
522+ const TypeFunc* ShenandoahBarrierSetC2::_write_barrier_pre_Type = nullptr ;
523+ const TypeFunc* ShenandoahBarrierSetC2::_clone_barrier_Type = nullptr ;
524+ const TypeFunc* ShenandoahBarrierSetC2::_load_reference_barrier_Type = nullptr ;
525+
526+ inline const TypeFunc* ShenandoahBarrierSetC2::write_barrier_pre_Type () {
527+ assert (ShenandoahBarrierSetC2::_write_barrier_pre_Type != nullptr , " should be initialized" );
528+ return ShenandoahBarrierSetC2::_write_barrier_pre_Type;
529+ }
530+
531+ inline const TypeFunc* ShenandoahBarrierSetC2::clone_barrier_Type () {
532+ assert (ShenandoahBarrierSetC2::_clone_barrier_Type != nullptr , " should be initialized" );
533+ return ShenandoahBarrierSetC2::_clone_barrier_Type;
534+ }
535+
536+ const TypeFunc* ShenandoahBarrierSetC2::load_reference_barrier_Type () {
537+ assert (ShenandoahBarrierSetC2::_load_reference_barrier_Type != nullptr , " should be initialized" );
538+ return ShenandoahBarrierSetC2::_load_reference_barrier_Type;
539+ }
540+
541+ void ShenandoahBarrierSetC2::init () {
542+ ShenandoahBarrierSetC2::make_write_barrier_pre_Type ();
543+ ShenandoahBarrierSetC2::make_clone_barrier_Type ();
544+ ShenandoahBarrierSetC2::make_load_reference_barrier_Type ();
545+ }
546+
547+ void ShenandoahBarrierSetC2::make_write_barrier_pre_Type () {
548+ assert (ShenandoahBarrierSetC2::_write_barrier_pre_Type == nullptr , " should be" );
523549 const Type **fields = TypeTuple::fields (1 );
524550 fields[TypeFunc::Parms+0 ] = TypeInstPtr::NOTNULL; // original field value
525551 const TypeTuple *domain = TypeTuple::make (TypeFunc::Parms+1 , fields);
@@ -528,10 +554,11 @@ const TypeFunc* ShenandoahBarrierSetC2::write_barrier_pre_Type() {
528554 fields = TypeTuple::fields (0 );
529555 const TypeTuple *range = TypeTuple::make (TypeFunc::Parms+0 , fields);
530556
531- return TypeFunc::make (domain, range);
557+ ShenandoahBarrierSetC2::_write_barrier_pre_Type = TypeFunc::make (domain, range);
532558}
533559
534- const TypeFunc* ShenandoahBarrierSetC2::clone_barrier_Type () {
560+ void ShenandoahBarrierSetC2::make_clone_barrier_Type () {
561+ assert (ShenandoahBarrierSetC2::_clone_barrier_Type == nullptr , " should be" );
535562 const Type **fields = TypeTuple::fields (1 );
536563 fields[TypeFunc::Parms+0 ] = TypeOopPtr::NOTNULL; // src oop
537564 const TypeTuple *domain = TypeTuple::make (TypeFunc::Parms+1 , fields);
@@ -540,10 +567,11 @@ const TypeFunc* ShenandoahBarrierSetC2::clone_barrier_Type() {
540567 fields = TypeTuple::fields (0 );
541568 const TypeTuple *range = TypeTuple::make (TypeFunc::Parms+0 , fields);
542569
543- return TypeFunc::make (domain, range);
570+ ShenandoahBarrierSetC2::_clone_barrier_Type = TypeFunc::make (domain, range);
544571}
545572
546- const TypeFunc* ShenandoahBarrierSetC2::load_reference_barrier_Type () {
573+ void ShenandoahBarrierSetC2::make_load_reference_barrier_Type () {
574+ assert (ShenandoahBarrierSetC2::_load_reference_barrier_Type == nullptr , " should be" );
547575 const Type **fields = TypeTuple::fields (2 );
548576 fields[TypeFunc::Parms+0 ] = TypeOopPtr::BOTTOM; // original field value
549577 fields[TypeFunc::Parms+1 ] = TypeRawPtr::BOTTOM; // original load address
@@ -555,7 +583,7 @@ const TypeFunc* ShenandoahBarrierSetC2::load_reference_barrier_Type() {
555583 fields[TypeFunc::Parms+0 ] = TypeOopPtr::BOTTOM;
556584 const TypeTuple *range = TypeTuple::make (TypeFunc::Parms+1 , fields);
557585
558- return TypeFunc::make (domain, range);
586+ ShenandoahBarrierSetC2::_load_reference_barrier_Type = TypeFunc::make (domain, range);
559587}
560588
561589Node* ShenandoahBarrierSetC2::store_at_resolved (C2Access& access, C2AccessValue& val) const {
0 commit comments