src/share/vm/opto/memnode.cpp

Print this page




2911     init_req(TypeFunc::Parms, precedent);
2912 }
2913 
2914 //------------------------------cmp--------------------------------------------
2915 uint MemBarNode::hash() const { return NO_HASH; }
2916 uint MemBarNode::cmp( const Node &n ) const {
2917   return (&n == this);          // Always fail except on self
2918 }
2919 
2920 //------------------------------make-------------------------------------------
2921 MemBarNode* MemBarNode::make(Compile* C, int opcode, int atp, Node* pn) {
2922   switch (opcode) {
2923   case Op_MemBarAcquire:     return new MemBarAcquireNode(C, atp, pn);
2924   case Op_LoadFence:         return new LoadFenceNode(C, atp, pn);
2925   case Op_MemBarRelease:     return new MemBarReleaseNode(C, atp, pn);
2926   case Op_StoreFence:        return new StoreFenceNode(C, atp, pn);
2927   case Op_MemBarAcquireLock: return new MemBarAcquireLockNode(C, atp, pn);
2928   case Op_MemBarReleaseLock: return new MemBarReleaseLockNode(C, atp, pn);
2929   case Op_MemBarVolatile:    return new MemBarVolatileNode(C, atp, pn);
2930   case Op_MemBarCPUOrder:    return new MemBarCPUOrderNode(C, atp, pn);

2931   case Op_Initialize:        return new InitializeNode(C, atp, pn);
2932   case Op_MemBarStoreStore:  return new MemBarStoreStoreNode(C, atp, pn);
2933   default: ShouldNotReachHere(); return NULL;
2934   }
2935 }
2936 
2937 //------------------------------Ideal------------------------------------------
2938 // Return a node which is more "ideal" than the current node.  Strip out
2939 // control copies
2940 Node *MemBarNode::Ideal(PhaseGVN *phase, bool can_reshape) {
2941   if (remove_dead_region(phase, can_reshape)) return this;
2942   // Don't bother trying to transform a dead node
2943   if (in(0) && in(0)->is_top()) {
2944     return NULL;
2945   }
2946 
2947   bool progress = false;
2948   // Eliminate volatile MemBars for scalar replaced objects.
2949   if (can_reshape && req() == (Precedent+1)) {
2950     bool eliminate = false;




2911     init_req(TypeFunc::Parms, precedent);
2912 }
2913 
2914 //------------------------------cmp--------------------------------------------
2915 uint MemBarNode::hash() const { return NO_HASH; }
2916 uint MemBarNode::cmp( const Node &n ) const {
2917   return (&n == this);          // Always fail except on self
2918 }
2919 
2920 //------------------------------make-------------------------------------------
2921 MemBarNode* MemBarNode::make(Compile* C, int opcode, int atp, Node* pn) {
2922   switch (opcode) {
2923   case Op_MemBarAcquire:     return new MemBarAcquireNode(C, atp, pn);
2924   case Op_LoadFence:         return new LoadFenceNode(C, atp, pn);
2925   case Op_MemBarRelease:     return new MemBarReleaseNode(C, atp, pn);
2926   case Op_StoreFence:        return new StoreFenceNode(C, atp, pn);
2927   case Op_MemBarAcquireLock: return new MemBarAcquireLockNode(C, atp, pn);
2928   case Op_MemBarReleaseLock: return new MemBarReleaseLockNode(C, atp, pn);
2929   case Op_MemBarVolatile:    return new MemBarVolatileNode(C, atp, pn);
2930   case Op_MemBarCPUOrder:    return new MemBarCPUOrderNode(C, atp, pn);
2931   case Op_OnSpinWait:        return new OnSpinWaitNode(C, atp, pn);
2932   case Op_Initialize:        return new InitializeNode(C, atp, pn);
2933   case Op_MemBarStoreStore:  return new MemBarStoreStoreNode(C, atp, pn);
2934   default: ShouldNotReachHere(); return NULL;
2935   }
2936 }
2937 
2938 //------------------------------Ideal------------------------------------------
2939 // Return a node which is more "ideal" than the current node.  Strip out
2940 // control copies
2941 Node *MemBarNode::Ideal(PhaseGVN *phase, bool can_reshape) {
2942   if (remove_dead_region(phase, can_reshape)) return this;
2943   // Don't bother trying to transform a dead node
2944   if (in(0) && in(0)->is_top()) {
2945     return NULL;
2946   }
2947 
2948   bool progress = false;
2949   // Eliminate volatile MemBars for scalar replaced objects.
2950   if (can_reshape && req() == (Precedent+1)) {
2951     bool eliminate = false;