Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
58ad32d6
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看板
提交
58ad32d6
编写于
5月 22, 2013
作者:
K
kvn
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
faa26185
14cecfd4
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
13 addition
and
5 deletion
+13
-5
src/share/vm/opto/loopnode.hpp
src/share/vm/opto/loopnode.hpp
+1
-1
src/share/vm/opto/loopopts.cpp
src/share/vm/opto/loopopts.cpp
+12
-4
未找到文件。
src/share/vm/opto/loopnode.hpp
浏览文件 @
58ad32d6
...
@@ -965,7 +965,7 @@ public:
...
@@ -965,7 +965,7 @@ public:
// Has use internal to the vector set (ie. not in a phi at the loop head)
// Has use internal to the vector set (ie. not in a phi at the loop head)
bool
has_use_internal_to_set
(
Node
*
n
,
VectorSet
&
vset
,
IdealLoopTree
*
loop
);
bool
has_use_internal_to_set
(
Node
*
n
,
VectorSet
&
vset
,
IdealLoopTree
*
loop
);
// clone "n" for uses that are outside of loop
// clone "n" for uses that are outside of loop
void
clone_for_use_outside_loop
(
IdealLoopTree
*
loop
,
Node
*
n
,
Node_List
&
worklist
);
int
clone_for_use_outside_loop
(
IdealLoopTree
*
loop
,
Node
*
n
,
Node_List
&
worklist
);
// clone "n" for special uses that are in the not_peeled region
// clone "n" for special uses that are in the not_peeled region
void
clone_for_special_use_inside_loop
(
IdealLoopTree
*
loop
,
Node
*
n
,
void
clone_for_special_use_inside_loop
(
IdealLoopTree
*
loop
,
Node
*
n
,
VectorSet
&
not_peel
,
Node_List
&
sink_list
,
Node_List
&
worklist
);
VectorSet
&
not_peel
,
Node_List
&
sink_list
,
Node_List
&
worklist
);
...
...
src/share/vm/opto/loopopts.cpp
浏览文件 @
58ad32d6
...
@@ -1939,8 +1939,8 @@ bool PhaseIdealLoop::has_use_internal_to_set( Node* n, VectorSet& vset, IdealLoo
...
@@ -1939,8 +1939,8 @@ bool PhaseIdealLoop::has_use_internal_to_set( Node* n, VectorSet& vset, IdealLoo
//------------------------------ clone_for_use_outside_loop -------------------------------------
//------------------------------ clone_for_use_outside_loop -------------------------------------
// clone "n" for uses that are outside of loop
// clone "n" for uses that are outside of loop
void
PhaseIdealLoop
::
clone_for_use_outside_loop
(
IdealLoopTree
*
loop
,
Node
*
n
,
Node_List
&
worklist
)
{
int
PhaseIdealLoop
::
clone_for_use_outside_loop
(
IdealLoopTree
*
loop
,
Node
*
n
,
Node_List
&
worklist
)
{
int
cloned
=
0
;
assert
(
worklist
.
size
()
==
0
,
"should be empty"
);
assert
(
worklist
.
size
()
==
0
,
"should be empty"
);
for
(
DUIterator_Fast
jmax
,
j
=
n
->
fast_outs
(
jmax
);
j
<
jmax
;
j
++
)
{
for
(
DUIterator_Fast
jmax
,
j
=
n
->
fast_outs
(
jmax
);
j
<
jmax
;
j
++
)
{
Node
*
use
=
n
->
fast_out
(
j
);
Node
*
use
=
n
->
fast_out
(
j
);
...
@@ -1960,6 +1960,7 @@ void PhaseIdealLoop::clone_for_use_outside_loop( IdealLoopTree *loop, Node* n, N
...
@@ -1960,6 +1960,7 @@ void PhaseIdealLoop::clone_for_use_outside_loop( IdealLoopTree *loop, Node* n, N
// clone "n" and insert it between the inputs of "n" and the use outside the loop
// clone "n" and insert it between the inputs of "n" and the use outside the loop
Node
*
n_clone
=
n
->
clone
();
Node
*
n_clone
=
n
->
clone
();
_igvn
.
replace_input_of
(
use
,
j
,
n_clone
);
_igvn
.
replace_input_of
(
use
,
j
,
n_clone
);
cloned
++
;
Node
*
use_c
;
Node
*
use_c
;
if
(
!
use
->
is_Phi
())
{
if
(
!
use
->
is_Phi
())
{
use_c
=
has_ctrl
(
use
)
?
get_ctrl
(
use
)
:
use
->
in
(
0
);
use_c
=
has_ctrl
(
use
)
?
get_ctrl
(
use
)
:
use
->
in
(
0
);
...
@@ -1977,6 +1978,7 @@ void PhaseIdealLoop::clone_for_use_outside_loop( IdealLoopTree *loop, Node* n, N
...
@@ -1977,6 +1978,7 @@ void PhaseIdealLoop::clone_for_use_outside_loop( IdealLoopTree *loop, Node* n, N
}
}
#endif
#endif
}
}
return
cloned
;
}
}
...
@@ -2495,6 +2497,7 @@ bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) {
...
@@ -2495,6 +2497,7 @@ bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) {
// Evacuate nodes in peel region into the not_peeled region if possible
// Evacuate nodes in peel region into the not_peeled region if possible
uint
new_phi_cnt
=
0
;
uint
new_phi_cnt
=
0
;
uint
cloned_for_outside_use
=
0
;
for
(
i
=
0
;
i
<
peel_list
.
size
();)
{
for
(
i
=
0
;
i
<
peel_list
.
size
();)
{
Node
*
n
=
peel_list
.
at
(
i
);
Node
*
n
=
peel_list
.
at
(
i
);
#if !defined(PRODUCT)
#if !defined(PRODUCT)
...
@@ -2513,8 +2516,7 @@ bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) {
...
@@ -2513,8 +2516,7 @@ bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) {
// if not pinned and not a load (which maybe anti-dependent on a store)
// if not pinned and not a load (which maybe anti-dependent on a store)
// and not a CMove (Matcher expects only bool->cmove).
// and not a CMove (Matcher expects only bool->cmove).
if
(
n
->
in
(
0
)
==
NULL
&&
!
n
->
is_Load
()
&&
!
n
->
is_CMove
()
)
{
if
(
n
->
in
(
0
)
==
NULL
&&
!
n
->
is_Load
()
&&
!
n
->
is_CMove
()
)
{
clone_for_use_outside_loop
(
loop
,
n
,
worklist
);
cloned_for_outside_use
+=
clone_for_use_outside_loop
(
loop
,
n
,
worklist
);
sink_list
.
push
(
n
);
sink_list
.
push
(
n
);
peel
>>=
n
->
_idx
;
// delete n from peel set.
peel
>>=
n
->
_idx
;
// delete n from peel set.
not_peel
<<=
n
->
_idx
;
// add n to not_peel set.
not_peel
<<=
n
->
_idx
;
// add n to not_peel set.
...
@@ -2551,6 +2553,12 @@ bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) {
...
@@ -2551,6 +2553,12 @@ bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) {
// Inhibit more partial peeling on this loop
// Inhibit more partial peeling on this loop
assert
(
!
head
->
is_partial_peel_loop
(),
"not partial peeled"
);
assert
(
!
head
->
is_partial_peel_loop
(),
"not partial peeled"
);
head
->
mark_partial_peel_failed
();
head
->
mark_partial_peel_failed
();
if
(
cloned_for_outside_use
>
0
)
{
// Terminate this round of loop opts because
// the graph outside this loop was changed.
C
->
set_major_progress
();
return
true
;
}
return
false
;
return
false
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录