提交 09fc97f8 编写于 作者: S shade

8131782: C1 Class.cast optimization breaks when Class is loaded from static final

Summary: change as_ValueType() to return InstanceConstant when appropriate
Reviewed-by: jrose
上级 05155074
......@@ -153,7 +153,19 @@ ValueType* as_ValueType(ciConstant value) {
case T_FLOAT : return new FloatConstant (value.as_float ());
case T_DOUBLE : return new DoubleConstant(value.as_double());
case T_ARRAY : // fall through (ciConstant doesn't have an array accessor)
case T_OBJECT : return new ObjectConstant(value.as_object());
case T_OBJECT : {
// TODO: Common the code with GraphBuilder::load_constant?
ciObject* obj = value.as_object();
if (obj->is_null_object())
return objectNull;
if (obj->is_loaded()) {
if (obj->is_array())
return new ArrayConstant(obj->as_array());
else if (obj->is_instance())
return new InstanceConstant(obj->as_instance());
}
return new ObjectConstant(obj);
}
}
ShouldNotReachHere();
return illegalType;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册