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;
|