src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp
changeset 53519 74a5ef4c81cc
parent 53407 690aed53fef0
child 54048 744dc9c33676
equal deleted inserted replaced
53518:2181425e0460 53519:74a5ef4c81cc
   775 
   775 
   776 #ifdef _LP64
   776 #ifdef _LP64
   777     if (adr->bottom_type()->is_ptr_to_narrowoop()) {
   777     if (adr->bottom_type()->is_ptr_to_narrowoop()) {
   778       Node *newval_enc = kit->gvn().transform(new EncodePNode(new_val, new_val->bottom_type()->make_narrowoop()));
   778       Node *newval_enc = kit->gvn().transform(new EncodePNode(new_val, new_val->bottom_type()->make_narrowoop()));
   779       Node *oldval_enc = kit->gvn().transform(new EncodePNode(expected_val, expected_val->bottom_type()->make_narrowoop()));
   779       Node *oldval_enc = kit->gvn().transform(new EncodePNode(expected_val, expected_val->bottom_type()->make_narrowoop()));
   780       load_store = kit->gvn().transform(new ShenandoahCompareAndExchangeNNode(kit->control(), mem, adr, newval_enc, oldval_enc, adr_type, value_type->make_narrowoop(), mo));
   780       if (ShenandoahCASBarrier) {
       
   781         load_store = kit->gvn().transform(new ShenandoahCompareAndExchangeNNode(kit->control(), mem, adr, newval_enc, oldval_enc, adr_type, value_type->make_narrowoop(), mo));
       
   782       } else {
       
   783         load_store = kit->gvn().transform(new CompareAndExchangeNNode(kit->control(), mem, adr, newval_enc, oldval_enc, adr_type, value_type->make_narrowoop(), mo));
       
   784       }
   781     } else
   785     } else
   782 #endif
   786 #endif
   783     {
   787     {
   784       load_store = kit->gvn().transform(new ShenandoahCompareAndExchangePNode(kit->control(), mem, adr, new_val, expected_val, adr_type, value_type->is_oopptr(), mo));
   788       if (ShenandoahCASBarrier) {
       
   789         load_store = kit->gvn().transform(new ShenandoahCompareAndExchangePNode(kit->control(), mem, adr, new_val, expected_val, adr_type, value_type->is_oopptr(), mo));
       
   790       } else {
       
   791         load_store = kit->gvn().transform(new CompareAndExchangePNode(kit->control(), mem, adr, new_val, expected_val, adr_type, value_type->is_oopptr(), mo));
       
   792       }
   785     }
   793     }
   786 
   794 
   787     access.set_raw_access(load_store);
   795     access.set_raw_access(load_store);
   788     pin_atomic_op(access);
   796     pin_atomic_op(access);
   789 
   797 
   813     Node* adr = access.addr().node();
   821     Node* adr = access.addr().node();
   814 #ifdef _LP64
   822 #ifdef _LP64
   815     if (adr->bottom_type()->is_ptr_to_narrowoop()) {
   823     if (adr->bottom_type()->is_ptr_to_narrowoop()) {
   816       Node *newval_enc = kit->gvn().transform(new EncodePNode(new_val, new_val->bottom_type()->make_narrowoop()));
   824       Node *newval_enc = kit->gvn().transform(new EncodePNode(new_val, new_val->bottom_type()->make_narrowoop()));
   817       Node *oldval_enc = kit->gvn().transform(new EncodePNode(expected_val, expected_val->bottom_type()->make_narrowoop()));
   825       Node *oldval_enc = kit->gvn().transform(new EncodePNode(expected_val, expected_val->bottom_type()->make_narrowoop()));
   818       if (is_weak_cas) {
   826       if (ShenandoahCASBarrier) {
   819         load_store = kit->gvn().transform(new ShenandoahWeakCompareAndSwapNNode(kit->control(), mem, adr, newval_enc, oldval_enc, mo));
   827         if (is_weak_cas) {
       
   828           load_store = kit->gvn().transform(new ShenandoahWeakCompareAndSwapNNode(kit->control(), mem, adr, newval_enc, oldval_enc, mo));
       
   829         } else {
       
   830           load_store = kit->gvn().transform(new ShenandoahCompareAndSwapNNode(kit->control(), mem, adr, newval_enc, oldval_enc, mo));
       
   831         }
   820       } else {
   832       } else {
   821         load_store = kit->gvn().transform(new ShenandoahCompareAndSwapNNode(kit->control(), mem, adr, newval_enc, oldval_enc, mo));
   833         if (is_weak_cas) {
       
   834           load_store = kit->gvn().transform(new WeakCompareAndSwapNNode(kit->control(), mem, adr, newval_enc, oldval_enc, mo));
       
   835         } else {
       
   836           load_store = kit->gvn().transform(new CompareAndSwapNNode(kit->control(), mem, adr, newval_enc, oldval_enc, mo));
       
   837         }
   822       }
   838       }
   823     } else
   839     } else
   824 #endif
   840 #endif
   825     {
   841     {
   826       if (is_weak_cas) {
   842       if (ShenandoahCASBarrier) {
   827         load_store = kit->gvn().transform(new ShenandoahWeakCompareAndSwapPNode(kit->control(), mem, adr, new_val, expected_val, mo));
   843         if (is_weak_cas) {
       
   844           load_store = kit->gvn().transform(new ShenandoahWeakCompareAndSwapPNode(kit->control(), mem, adr, new_val, expected_val, mo));
       
   845         } else {
       
   846           load_store = kit->gvn().transform(new ShenandoahCompareAndSwapPNode(kit->control(), mem, adr, new_val, expected_val, mo));
       
   847         }
   828       } else {
   848       } else {
   829         load_store = kit->gvn().transform(new ShenandoahCompareAndSwapPNode(kit->control(), mem, adr, new_val, expected_val, mo));
   849         if (is_weak_cas) {
       
   850           load_store = kit->gvn().transform(new WeakCompareAndSwapPNode(kit->control(), mem, adr, new_val, expected_val, mo));
       
   851         } else {
       
   852           load_store = kit->gvn().transform(new CompareAndSwapPNode(kit->control(), mem, adr, new_val, expected_val, mo));
       
   853         }
   830       }
   854       }
   831     }
   855     }
   832     access.set_raw_access(load_store);
   856     access.set_raw_access(load_store);
   833     pin_atomic_op(access);
   857     pin_atomic_op(access);
   834     return load_store;
   858     return load_store;