< prev index next >

src/hotspot/share/opto/graphKit.cpp

Print this page




3574   MemBarNode* mb = MemBarNode::make(C, Op_MemBarVolatile, Compile::AliasIdxRaw);
3575   mb->init_req(TypeFunc::Control, control());
3576   mb->init_req(TypeFunc::Memory, mem);
3577   Node* membar = _gvn.transform(mb);
3578   set_control(_gvn.transform(new ProjNode(membar, TypeFunc::Control)));
3579   Node* newmem = _gvn.transform(new ProjNode(membar, TypeFunc::Memory));
3580   set_all_memory(mem);
3581   set_memory(newmem, Compile::AliasIdxRaw);
3582 }
3583 
3584 //------------------------------shared_lock------------------------------------
3585 // Emit locking code.
3586 FastLockNode* GraphKit::shared_lock(Node* obj) {
3587   // bci is either a monitorenter bc or InvocationEntryBci
3588   // %%% SynchronizationEntryBCI is redundant; use InvocationEntryBci in interfaces
3589   assert(SynchronizationEntryBCI == InvocationEntryBci, "");
3590 
3591   if( !GenerateSynchronizationCode )
3592     return NULL;                // Not locking things?
3593 
3594   // We cannot lock on a value type
3595   const TypeOopPtr* objptr = _gvn.type(obj)->make_oopptr();
3596   if (objptr->can_be_value_type()) {
3597     gen_value_type_guard(obj, 1);
3598   }
3599 
3600   if (stopped())                // Dead monitor?
3601     return NULL;
3602 
3603   assert(dead_locals_are_killed(), "should kill locals before sync. point");
3604 
3605   obj = access_resolve(obj, ACCESS_READ | ACCESS_WRITE);
3606 
3607   // Box the stack location
3608   Node* box = _gvn.transform(new BoxLockNode(next_monitor()));
3609   Node* mem = reset_memory();
3610 
3611   FastLockNode * flock = _gvn.transform(new FastLockNode(0, obj, box) )->as_FastLock();
3612   if (UseBiasedLocking && PrintPreciseBiasedLockingStatistics) {
3613     // Create the counters for this fast lock.
3614     flock->create_lock_counter(sync_jvms()); // sync_jvms used to get current bci
3615   }
3616 
3617   // Create the rtm counters for this fast lock if needed.
3618   flock->create_rtm_lock_counter(sync_jvms()); // sync_jvms used to get current bci
3619 




3574   MemBarNode* mb = MemBarNode::make(C, Op_MemBarVolatile, Compile::AliasIdxRaw);
3575   mb->init_req(TypeFunc::Control, control());
3576   mb->init_req(TypeFunc::Memory, mem);
3577   Node* membar = _gvn.transform(mb);
3578   set_control(_gvn.transform(new ProjNode(membar, TypeFunc::Control)));
3579   Node* newmem = _gvn.transform(new ProjNode(membar, TypeFunc::Memory));
3580   set_all_memory(mem);
3581   set_memory(newmem, Compile::AliasIdxRaw);
3582 }
3583 
3584 //------------------------------shared_lock------------------------------------
3585 // Emit locking code.
3586 FastLockNode* GraphKit::shared_lock(Node* obj) {
3587   // bci is either a monitorenter bc or InvocationEntryBci
3588   // %%% SynchronizationEntryBCI is redundant; use InvocationEntryBci in interfaces
3589   assert(SynchronizationEntryBCI == InvocationEntryBci, "");
3590 
3591   if( !GenerateSynchronizationCode )
3592     return NULL;                // Not locking things?
3593 






3594   if (stopped())                // Dead monitor?
3595     return NULL;
3596 
3597   assert(dead_locals_are_killed(), "should kill locals before sync. point");
3598 
3599   obj = access_resolve(obj, ACCESS_READ | ACCESS_WRITE);
3600 
3601   // Box the stack location
3602   Node* box = _gvn.transform(new BoxLockNode(next_monitor()));
3603   Node* mem = reset_memory();
3604 
3605   FastLockNode * flock = _gvn.transform(new FastLockNode(0, obj, box) )->as_FastLock();
3606   if (UseBiasedLocking && PrintPreciseBiasedLockingStatistics) {
3607     // Create the counters for this fast lock.
3608     flock->create_lock_counter(sync_jvms()); // sync_jvms used to get current bci
3609   }
3610 
3611   // Create the rtm counters for this fast lock if needed.
3612   flock->create_rtm_lock_counter(sync_jvms()); // sync_jvms used to get current bci
3613 


< prev index next >