< prev index next >
src/hotspot/share/opto/macro.cpp
Print this page
*** 2707,2731 ****
float unlikely = PROB_UNLIKELY(0.999);
float likely = PROB_LIKELY(0.999);
const Type* in_val_maybe_null_t = _igvn.type(in_val);
- Node* bad_mask = NULL;
- Node* good_mask = NULL;
#ifdef SPARC
! bad_mask = _igvn.transform(new AddrBadBitNode());
#else
- if (C->directive()->UseR15TestInLoadBarrierOption) {
Node* jthread = _igvn.transform(new ThreadLocalNode());
Node* adr = basic_plus_adr(jthread, in_bytes(JavaThread::zaddress_bad_mask_offset()));
! bad_mask = _igvn.transform(LoadNode::make(_igvn, in_ctrl, in_mem, adr, TypeRawPtr::BOTTOM, TypeX_X, TypeX_X->basic_type(), MemNode::unordered));
! } else {
! bad_mask = _igvn.transform(LoadNode::make(_igvn, in_ctrl, in_mem, makecon(TypeRawPtr::make((address)addr_bad_bit)),
! TypeRawPtr::BOTTOM, TypeX_X, TypeX_X->basic_type(), MemNode::unordered));
! }
#endif
-
Node* cast = _igvn.transform(new CastP2XNode(in_ctrl, in_val));
Node* obj_masked = _igvn.transform(new AndXNode(cast, bad_mask));
Node* cmp = _igvn.transform(new CmpXNode(obj_masked, _igvn.zerocon(TypeX_X->basic_type())));
Node *bol = _igvn.transform(new BoolNode(cmp, BoolTest::ne))->as_Bool();
IfNode* iff = _igvn.transform(new IfNode(in_ctrl, bol, unlikely, COUNT_UNKNOWN))->as_If();
--- 2707,2723 ----
float unlikely = PROB_UNLIKELY(0.999);
float likely = PROB_LIKELY(0.999);
const Type* in_val_maybe_null_t = _igvn.type(in_val);
#ifdef SPARC
! Node* bad_mask = _igvn.transform(new AddrBadBitNode());
#else
Node* jthread = _igvn.transform(new ThreadLocalNode());
Node* adr = basic_plus_adr(jthread, in_bytes(JavaThread::zaddress_bad_mask_offset()));
! Node* bad_mask = _igvn.transform(LoadNode::make(_igvn, in_ctrl, in_mem, adr, TypeRawPtr::BOTTOM, TypeX_X, TypeX_X->basic_type(), MemNode::unordered));
#endif
Node* cast = _igvn.transform(new CastP2XNode(in_ctrl, in_val));
Node* obj_masked = _igvn.transform(new AndXNode(cast, bad_mask));
Node* cmp = _igvn.transform(new CmpXNode(obj_masked, _igvn.zerocon(TypeX_X->basic_type())));
Node *bol = _igvn.transform(new BoolNode(cmp, BoolTest::ne))->as_Bool();
IfNode* iff = _igvn.transform(new IfNode(in_ctrl, bol, unlikely, COUNT_UNKNOWN))->as_If();
*** 2818,2837 ****
float unlikely = PROB_UNLIKELY(0.999);
float likely = PROB_LIKELY(0.999);
const Type* in_val_not_null_t = _igvn.type(in_val);
- Node* bad_mask = NULL;
- if (C->directive()->UseR15TestInLoadBarrierOption) {
Node* jthread = _igvn.transform(new ThreadLocalNode());
Node* adr = basic_plus_adr(jthread, in_bytes(JavaThread::zaddress_bad_mask_offset()));
! bad_mask = _igvn.transform(LoadNode::make(_igvn, in_ctrl, in_mem, adr, TypeRawPtr::BOTTOM, TypeX_X, TypeX_X->basic_type(), MemNode::unordered));
! } else {
! bad_mask = _igvn.transform(LoadNode::make(_igvn, in_ctrl, in_mem, makecon(TypeRawPtr::make((address)addr_bad_bit)),
! TypeRawPtr::BOTTOM, TypeX_X, TypeX_X->basic_type(), MemNode::unordered));
! }
!
Node* cast = _igvn.transform(new CastP2XNode(in_ctrl, in_val));
Node* obj_masked = _igvn.transform(new AndXNode(cast, bad_mask));
Node* cmp = _igvn.transform(new CmpXNode(obj_masked, _igvn.zerocon(TypeX_X->basic_type())));
Node *bol = _igvn.transform(new BoolNode(cmp, BoolTest::ne))->as_Bool();
IfNode* iff = _igvn.transform(new IfNode(in_ctrl, bol, unlikely, COUNT_UNKNOWN))->as_If();
--- 2810,2822 ----
float unlikely = PROB_UNLIKELY(0.999);
float likely = PROB_LIKELY(0.999);
const Type* in_val_not_null_t = _igvn.type(in_val);
Node* jthread = _igvn.transform(new ThreadLocalNode());
Node* adr = basic_plus_adr(jthread, in_bytes(JavaThread::zaddress_bad_mask_offset()));
! Node* bad_mask = _igvn.transform(LoadNode::make(_igvn, in_ctrl, in_mem, adr, TypeRawPtr::BOTTOM, TypeX_X, TypeX_X->basic_type(), MemNode::unordered));
Node* cast = _igvn.transform(new CastP2XNode(in_ctrl, in_val));
Node* obj_masked = _igvn.transform(new AndXNode(cast, bad_mask));
Node* cmp = _igvn.transform(new CmpXNode(obj_masked, _igvn.zerocon(TypeX_X->basic_type())));
Node *bol = _igvn.transform(new BoolNode(cmp, BoolTest::ne))->as_Bool();
IfNode* iff = _igvn.transform(new IfNode(in_ctrl, bol, unlikely, COUNT_UNKNOWN))->as_If();
< prev index next >