Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
704d4ce3
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
704d4ce3
编写于
3月 11, 2014
作者:
M
minqi
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
601e30e0
61b4eae9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
22 addition
and
16 deletion
+22
-16
src/share/vm/opto/graphKit.cpp
src/share/vm/opto/graphKit.cpp
+22
-16
未找到文件。
src/share/vm/opto/graphKit.cpp
浏览文件 @
704d4ce3
...
...
@@ -2994,22 +2994,28 @@ Node* GraphKit::gen_checkcast(Node *obj, Node* superklass,
}
Node
*
cast_obj
=
NULL
;
const
TypeOopPtr
*
obj_type
=
_gvn
.
type
(
obj
)
->
is_oopptr
();
// We may not have profiling here or it may not help us. If we have
// a speculative type use it to perform an exact cast.
ciKlass
*
spec_obj_type
=
obj_type
->
speculative_type
();
if
(
spec_obj_type
!=
NULL
||
(
data
!=
NULL
&&
// Counter has never been decremented (due to cast failure).
// ...This is a reasonable thing to expect. It is true of
// all casts inserted by javac to implement generic types.
data
->
as_CounterData
()
->
count
()
>=
0
))
{
cast_obj
=
maybe_cast_profiled_receiver
(
not_null_obj
,
tk
->
klass
(),
spec_obj_type
,
safe_for_replace
);
if
(
cast_obj
!=
NULL
)
{
if
(
failure_control
!=
NULL
)
// failure is now impossible
(
*
failure_control
)
=
top
();
// adjust the type of the phi to the exact klass:
phi
->
raise_bottom_type
(
_gvn
.
type
(
cast_obj
)
->
meet_speculative
(
TypePtr
::
NULL_PTR
));
if
(
tk
->
klass_is_exact
())
{
// The following optimization tries to statically cast the speculative type of the object
// (for example obtained during profiling) to the type of the superklass and then do a
// dynamic check that the type of the object is what we expect. To work correctly
// for checkcast and aastore the type of superklass should be exact.
const
TypeOopPtr
*
obj_type
=
_gvn
.
type
(
obj
)
->
is_oopptr
();
// We may not have profiling here or it may not help us. If we have
// a speculative type use it to perform an exact cast.
ciKlass
*
spec_obj_type
=
obj_type
->
speculative_type
();
if
(
spec_obj_type
!=
NULL
||
(
data
!=
NULL
&&
// Counter has never been decremented (due to cast failure).
// ...This is a reasonable thing to expect. It is true of
// all casts inserted by javac to implement generic types.
data
->
as_CounterData
()
->
count
()
>=
0
))
{
cast_obj
=
maybe_cast_profiled_receiver
(
not_null_obj
,
tk
->
klass
(),
spec_obj_type
,
safe_for_replace
);
if
(
cast_obj
!=
NULL
)
{
if
(
failure_control
!=
NULL
)
// failure is now impossible
(
*
failure_control
)
=
top
();
// adjust the type of the phi to the exact klass:
phi
->
raise_bottom_type
(
_gvn
.
type
(
cast_obj
)
->
meet_speculative
(
TypePtr
::
NULL_PTR
));
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录