--- a/hotspot/src/share/vm/opto/parseHelper.cpp Tue Nov 29 14:44:44 2011 -0500
+++ b/hotspot/src/share/vm/opto/parseHelper.cpp Tue Dec 06 18:28:51 2011 -0500
@@ -230,7 +230,9 @@
Node* init_state_offset = _gvn.MakeConX(instanceKlass::init_state_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes());
adr_node = basic_plus_adr(kls, kls, init_state_offset);
- Node* init_state = make_load(NULL, adr_node, TypeInt::INT, T_INT);
+ // Use T_BOOLEAN for instanceKlass::_init_state so the compiler
+ // can generate code to load it as unsigned byte.
+ Node* init_state = make_load(NULL, adr_node, TypeInt::UBYTE, T_BOOLEAN);
Node* being_init = _gvn.intcon(instanceKlass::being_initialized);
tst = Bool( CmpI( init_state, being_init), BoolTest::eq);
iff = create_and_map_if(control(), tst, PROB_ALWAYS, COUNT_UNKNOWN);