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