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