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