Mercurial > hg > graal-compiler
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( |