Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
2d191657
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看板
提交
2d191657
编写于
12月 10, 2015
作者:
V
vlivanov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8144935: C2: safepoint is pruned from a non-counted loop
Reviewed-by: roland
上级
77a3acc8
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
28 addition
and
3 deletion
+28
-3
src/share/vm/opto/loopnode.cpp
src/share/vm/opto/loopnode.cpp
+16
-3
src/share/vm/opto/node.cpp
src/share/vm/opto/node.cpp
+11
-0
src/share/vm/opto/node.hpp
src/share/vm/opto/node.hpp
+1
-0
未找到文件。
src/share/vm/opto/loopnode.cpp
浏览文件 @
2d191657
...
...
@@ -1811,10 +1811,9 @@ void PhaseIdealLoop::replace_parallel_iv(IdealLoopTree *loop) {
}
void
IdealLoopTree
::
remove_safepoints
(
PhaseIdealLoop
*
phase
,
bool
keep_one
)
{
// Look for a safepoint on the idom-path.
Node
*
keep
=
NULL
;
if
(
keep_one
)
{
//
Keep one if possible
//
Look for a safepoint on the idom-path.
for
(
Node
*
i
=
tail
();
i
!=
_head
;
i
=
phase
->
idom
(
i
))
{
if
(
i
->
Opcode
()
==
Op_SafePoint
&&
phase
->
get_loop
(
i
)
==
this
)
{
keep
=
i
;
...
...
@@ -1823,9 +1822,14 @@ void IdealLoopTree::remove_safepoints(PhaseIdealLoop* phase, bool keep_one) {
}
}
// Don't remove any safepoints if it is requested to keep a single safepoint and
// no safepoint was found on idom-path. It is not safe to remove any safepoint
// in this case since there's no safepoint dominating all paths in the loop body.
bool
prune
=
!
keep_one
||
keep
!=
NULL
;
// Delete other safepoints in this loop.
Node_List
*
sfpts
=
_safepts
;
if
(
sfpts
!=
NULL
)
{
if
(
prune
&&
sfpts
!=
NULL
)
{
assert
(
keep
==
NULL
||
keep
->
Opcode
()
==
Op_SafePoint
,
"not safepoint"
);
for
(
uint
i
=
0
;
i
<
sfpts
->
size
();
i
++
)
{
Node
*
n
=
sfpts
->
at
(
i
);
...
...
@@ -1918,6 +1922,15 @@ void IdealLoopTree::dump_head( ) const {
if
(
cl
->
is_main_loop
())
tty
->
print
(
" main"
);
if
(
cl
->
is_post_loop
())
tty
->
print
(
" post"
);
}
if
(
_has_call
)
tty
->
print
(
" has_call"
);
if
(
_has_sfpt
)
tty
->
print
(
" has_sfpt"
);
if
(
_rce_candidate
)
tty
->
print
(
" rce"
);
if
(
_safepts
!=
NULL
&&
_safepts
->
size
()
>
0
)
{
tty
->
print
(
" sfpts={"
);
_safepts
->
dump_simple
();
tty
->
print
(
" }"
);
}
if
(
_required_safept
!=
NULL
&&
_required_safept
->
size
()
>
0
)
{
tty
->
print
(
" req={"
);
_required_safept
->
dump_simple
();
tty
->
print
(
" }"
);
}
tty
->
cr
();
}
...
...
src/share/vm/opto/node.cpp
浏览文件 @
2d191657
...
...
@@ -2107,6 +2107,17 @@ void Node_List::dump() const {
#endif
}
void
Node_List
::
dump_simple
()
const
{
#ifndef PRODUCT
for
(
uint
i
=
0
;
i
<
_cnt
;
i
++
)
if
(
_nodes
[
i
]
)
{
tty
->
print
(
" %d"
,
_nodes
[
i
]
->
_idx
);
}
else
{
tty
->
print
(
" NULL"
);
}
#endif
}
//=============================================================================
//------------------------------remove-----------------------------------------
void
Unique_Node_List
::
remove
(
Node
*
n
)
{
...
...
src/share/vm/opto/node.hpp
浏览文件 @
2d191657
...
...
@@ -1374,6 +1374,7 @@ public:
void
clear
()
{
_cnt
=
0
;
Node_Array
::
clear
();
}
// retain storage
uint
size
()
const
{
return
_cnt
;
}
void
dump
()
const
;
void
dump_simple
()
const
;
};
//------------------------------Unique_Node_List-------------------------------
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录