Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/parseHelper.cpp @ 4771:22cee0ee8927
Merge
author | kvn |
---|---|
date | Fri, 06 Jan 2012 20:09:20 -0800 |
parents | 52b5d32fbfaf 069ab3f976d3 |
children | 9a28ddfc1f4a |
comparison
equal
deleted
inserted
replaced
4755:2b3acb34791f | 4771:22cee0ee8927 |
---|---|
198 } | 198 } |
199 | 199 |
200 // Come here for polymorphic array klasses | 200 // Come here for polymorphic array klasses |
201 | 201 |
202 // Extract the array element class | 202 // Extract the array element class |
203 int element_klass_offset = objArrayKlass::element_klass_offset_in_bytes() + sizeof(oopDesc); | 203 int element_klass_offset = in_bytes(objArrayKlass::element_klass_offset()); |
204 Node *p2 = basic_plus_adr(array_klass, array_klass, element_klass_offset); | 204 Node *p2 = basic_plus_adr(array_klass, array_klass, element_klass_offset); |
205 Node *a_e_klass = _gvn.transform( LoadKlassNode::make(_gvn, immutable_memory(), p2, tak) ); | 205 Node *a_e_klass = _gvn.transform( LoadKlassNode::make(_gvn, immutable_memory(), p2, tak) ); |
206 | 206 |
207 // Check (the hard way) and throw if not a subklass. | 207 // Check (the hard way) and throw if not a subklass. |
208 // Result is ignored, we just need the CFG effects. | 208 // Result is ignored, we just need the CFG effects. |
218 Node* cur_thread = _gvn.transform( new (C, 1) ThreadLocalNode() ); | 218 Node* cur_thread = _gvn.transform( new (C, 1) ThreadLocalNode() ); |
219 Node* merge = new (C, 3) RegionNode(3); | 219 Node* merge = new (C, 3) RegionNode(3); |
220 _gvn.set_type(merge, Type::CONTROL); | 220 _gvn.set_type(merge, Type::CONTROL); |
221 Node* kls = makecon(TypeKlassPtr::make(klass)); | 221 Node* kls = makecon(TypeKlassPtr::make(klass)); |
222 | 222 |
223 Node* init_thread_offset = _gvn.MakeConX(instanceKlass::init_thread_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes()); | 223 Node* init_thread_offset = _gvn.MakeConX(in_bytes(instanceKlass::init_thread_offset())); |
224 Node* adr_node = basic_plus_adr(kls, kls, init_thread_offset); | 224 Node* adr_node = basic_plus_adr(kls, kls, init_thread_offset); |
225 Node* init_thread = make_load(NULL, adr_node, TypeRawPtr::BOTTOM, T_ADDRESS); | 225 Node* init_thread = make_load(NULL, adr_node, TypeRawPtr::BOTTOM, T_ADDRESS); |
226 Node *tst = Bool( CmpP( init_thread, cur_thread), BoolTest::eq); | 226 Node *tst = Bool( CmpP( init_thread, cur_thread), BoolTest::eq); |
227 IfNode* iff = create_and_map_if(control(), tst, PROB_ALWAYS, COUNT_UNKNOWN); | 227 IfNode* iff = create_and_map_if(control(), tst, PROB_ALWAYS, COUNT_UNKNOWN); |
228 set_control(IfTrue(iff)); | 228 set_control(IfTrue(iff)); |
229 merge->set_req(1, IfFalse(iff)); | 229 merge->set_req(1, IfFalse(iff)); |
230 | 230 |
231 Node* init_state_offset = _gvn.MakeConX(instanceKlass::init_state_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes()); | 231 Node* init_state_offset = _gvn.MakeConX(in_bytes(instanceKlass::init_state_offset())); |
232 adr_node = basic_plus_adr(kls, kls, init_state_offset); | 232 adr_node = basic_plus_adr(kls, kls, init_state_offset); |
233 // Use T_BOOLEAN for instanceKlass::_init_state so the compiler | 233 // Use T_BOOLEAN for instanceKlass::_init_state so the compiler |
234 // can generate code to load it as unsigned byte. | 234 // can generate code to load it as unsigned byte. |
235 Node* init_state = make_load(NULL, adr_node, TypeInt::UBYTE, T_BOOLEAN); | 235 Node* init_state = make_load(NULL, adr_node, TypeInt::UBYTE, T_BOOLEAN); |
236 Node* being_init = _gvn.intcon(instanceKlass::being_initialized); | 236 Node* being_init = _gvn.intcon(instanceKlass::being_initialized); |