src/share/vm/opto/memnode.cpp

Print this page




2874     init_req(TypeFunc::Parms, precedent);
2875 }
2876 
2877 //------------------------------cmp--------------------------------------------
2878 uint MemBarNode::hash() const { return NO_HASH; }
2879 uint MemBarNode::cmp( const Node &n ) const {
2880   return (&n == this);          // Always fail except on self
2881 }
2882 
2883 //------------------------------make-------------------------------------------
2884 MemBarNode* MemBarNode::make(Compile* C, int opcode, int atp, Node* pn) {
2885   switch (opcode) {
2886   case Op_MemBarAcquire:     return new MemBarAcquireNode(C, atp, pn);
2887   case Op_LoadFence:         return new LoadFenceNode(C, atp, pn);
2888   case Op_MemBarRelease:     return new MemBarReleaseNode(C, atp, pn);
2889   case Op_StoreFence:        return new StoreFenceNode(C, atp, pn);
2890   case Op_MemBarAcquireLock: return new MemBarAcquireLockNode(C, atp, pn);
2891   case Op_MemBarReleaseLock: return new MemBarReleaseLockNode(C, atp, pn);
2892   case Op_MemBarVolatile:    return new MemBarVolatileNode(C, atp, pn);
2893   case Op_MemBarCPUOrder:    return new MemBarCPUOrderNode(C, atp, pn);

2894   case Op_Initialize:        return new InitializeNode(C, atp, pn);
2895   case Op_MemBarStoreStore:  return new MemBarStoreStoreNode(C, atp, pn);
2896   default: ShouldNotReachHere(); return NULL;
2897   }
2898 }
2899 
2900 //------------------------------Ideal------------------------------------------
2901 // Return a node which is more "ideal" than the current node.  Strip out
2902 // control copies
2903 Node *MemBarNode::Ideal(PhaseGVN *phase, bool can_reshape) {
2904   if (remove_dead_region(phase, can_reshape)) return this;
2905   // Don't bother trying to transform a dead node
2906   if (in(0) && in(0)->is_top()) {
2907     return NULL;
2908   }
2909 
2910   bool progress = false;
2911   // Eliminate volatile MemBars for scalar replaced objects.
2912   if (can_reshape && req() == (Precedent+1)) {
2913     bool eliminate = false;




2874     init_req(TypeFunc::Parms, precedent);
2875 }
2876 
2877 //------------------------------cmp--------------------------------------------
2878 uint MemBarNode::hash() const { return NO_HASH; }
2879 uint MemBarNode::cmp( const Node &n ) const {
2880   return (&n == this);          // Always fail except on self
2881 }
2882 
2883 //------------------------------make-------------------------------------------
2884 MemBarNode* MemBarNode::make(Compile* C, int opcode, int atp, Node* pn) {
2885   switch (opcode) {
2886   case Op_MemBarAcquire:     return new MemBarAcquireNode(C, atp, pn);
2887   case Op_LoadFence:         return new LoadFenceNode(C, atp, pn);
2888   case Op_MemBarRelease:     return new MemBarReleaseNode(C, atp, pn);
2889   case Op_StoreFence:        return new StoreFenceNode(C, atp, pn);
2890   case Op_MemBarAcquireLock: return new MemBarAcquireLockNode(C, atp, pn);
2891   case Op_MemBarReleaseLock: return new MemBarReleaseLockNode(C, atp, pn);
2892   case Op_MemBarVolatile:    return new MemBarVolatileNode(C, atp, pn);
2893   case Op_MemBarCPUOrder:    return new MemBarCPUOrderNode(C, atp, pn);
2894   case Op_OnSpinWait:        return new OnSpinWaitNode(C, atp, pn);
2895   case Op_Initialize:        return new InitializeNode(C, atp, pn);
2896   case Op_MemBarStoreStore:  return new MemBarStoreStoreNode(C, atp, pn);
2897   default: ShouldNotReachHere(); return NULL;
2898   }
2899 }
2900 
2901 //------------------------------Ideal------------------------------------------
2902 // Return a node which is more "ideal" than the current node.  Strip out
2903 // control copies
2904 Node *MemBarNode::Ideal(PhaseGVN *phase, bool can_reshape) {
2905   if (remove_dead_region(phase, can_reshape)) return this;
2906   // Don't bother trying to transform a dead node
2907   if (in(0) && in(0)->is_top()) {
2908     return NULL;
2909   }
2910 
2911   bool progress = false;
2912   // Eliminate volatile MemBars for scalar replaced objects.
2913   if (can_reshape && req() == (Precedent+1)) {
2914     bool eliminate = false;