comparison src/share/vm/c1/c1_LIR.cpp @ 6739:8a02ca5e5576

7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere Summary: C1 needs knowledge of T_METADATA at the LIR level. Reviewed-by: kvn, coleenp
author roland
date Tue, 11 Sep 2012 16:20:57 +0200
parents da91efe96a93
children 7eca5de9e0b6
comparison
equal deleted inserted replaced
6738:ec98e58952b2 6739:8a02ca5e5576
87 switch (tag) { 87 switch (tag) {
88 case metaDataTag : { 88 case metaDataTag : {
89 ClassConstant* c = type->as_ClassConstant(); 89 ClassConstant* c = type->as_ClassConstant();
90 if (c != NULL && !c->value()->is_loaded()) { 90 if (c != NULL && !c->value()->is_loaded()) {
91 return LIR_OprFact::metadataConst(NULL); 91 return LIR_OprFact::metadataConst(NULL);
92 } else if (c != NULL) {
93 return LIR_OprFact::metadataConst(c->value()->constant_encoding());
92 } else { 94 } else {
93 return LIR_OprFact::metadataConst(c->value()->constant_encoding()); 95 MethodConstant* m = type->as_MethodConstant();
96 assert (m != NULL, "not a class or a method?");
97 return LIR_OprFact::metadataConst(m->value()->constant_encoding());
94 } 98 }
95 } 99 }
96 case objectTag : { 100 case objectTag : {
97 return LIR_OprFact::oopConst(type->as_ObjectType()->encoding()); 101 return LIR_OprFact::oopConst(type->as_ObjectType()->encoding());
98 } 102 }
1164 buffer->finish(); 1168 buffer->finish();
1165 } 1169 }
1166 1170
1167 1171
1168 void LIR_List::oop2reg_patch(jobject o, LIR_Opr reg, CodeEmitInfo* info) { 1172 void LIR_List::oop2reg_patch(jobject o, LIR_Opr reg, CodeEmitInfo* info) {
1173 assert(reg->type() == T_OBJECT, "bad reg");
1169 append(new LIR_Op1(lir_move, LIR_OprFact::oopConst(o), reg, T_OBJECT, lir_patch_normal, info)); 1174 append(new LIR_Op1(lir_move, LIR_OprFact::oopConst(o), reg, T_OBJECT, lir_patch_normal, info));
1170 } 1175 }
1171 1176
1172 void LIR_List::klass2reg_patch(Metadata* o, LIR_Opr reg, CodeEmitInfo* info) { 1177 void LIR_List::klass2reg_patch(Metadata* o, LIR_Opr reg, CodeEmitInfo* info) {
1178 assert(reg->type() == T_METADATA, "bad reg");
1173 append(new LIR_Op1(lir_move, LIR_OprFact::metadataConst(o), reg, T_METADATA, lir_patch_normal, info)); 1179 append(new LIR_Op1(lir_move, LIR_OprFact::metadataConst(o), reg, T_METADATA, lir_patch_normal, info));
1174 } 1180 }
1175 1181
1176 void LIR_List::load(LIR_Address* addr, LIR_Opr src, CodeEmitInfo* info, LIR_PatchCode patch_code) { 1182 void LIR_List::load(LIR_Address* addr, LIR_Opr src, CodeEmitInfo* info, LIR_PatchCode patch_code) {
1177 append(new LIR_Op1( 1183 append(new LIR_Op1(