Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
23466ea5
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看板
提交
23466ea5
编写于
5月 20, 2008
作者:
R
rasbold
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
528bd45c
ba102b38
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
30 addition
and
15 deletion
+30
-15
src/share/vm/ci/bcEscapeAnalyzer.cpp
src/share/vm/ci/bcEscapeAnalyzer.cpp
+7
-0
src/share/vm/opto/c2_globals.hpp
src/share/vm/opto/c2_globals.hpp
+3
-0
src/share/vm/opto/memnode.cpp
src/share/vm/opto/memnode.cpp
+7
-8
src/share/vm/opto/node.cpp
src/share/vm/opto/node.cpp
+13
-7
未找到文件。
src/share/vm/ci/bcEscapeAnalyzer.cpp
浏览文件 @
23466ea5
...
@@ -218,6 +218,13 @@ void BCEscapeAnalyzer::invoke(StateInfo &state, Bytecodes::Code code, ciMethod*
...
@@ -218,6 +218,13 @@ void BCEscapeAnalyzer::invoke(StateInfo &state, Bytecodes::Code code, ciMethod*
ciInstanceKlass
*
callee_holder
=
ciEnv
::
get_instance_klass_for_declared_method_holder
(
holder
);
ciInstanceKlass
*
callee_holder
=
ciEnv
::
get_instance_klass_for_declared_method_holder
(
holder
);
ciInstanceKlass
*
actual_recv
=
callee_holder
;
ciInstanceKlass
*
actual_recv
=
callee_holder
;
// some methods are obviously bindable without any type checks so
// convert them directly to an invokespecial.
if
(
target
->
is_loaded
()
&&
!
target
->
is_abstract
()
&&
target
->
can_be_statically_bound
()
&&
code
==
Bytecodes
::
_invokevirtual
)
{
code
=
Bytecodes
::
_invokespecial
;
}
// compute size of arguments
// compute size of arguments
int
arg_size
=
target
->
arg_size
();
int
arg_size
=
target
->
arg_size
();
if
(
!
target
->
is_loaded
()
&&
code
==
Bytecodes
::
_invokestatic
)
{
if
(
!
target
->
is_loaded
()
&&
code
==
Bytecodes
::
_invokestatic
)
{
...
...
src/share/vm/opto/c2_globals.hpp
浏览文件 @
23466ea5
...
@@ -390,5 +390,8 @@
...
@@ -390,5 +390,8 @@
\
\
product(intx, MaxLabelRootDepth, 1100, \
product(intx, MaxLabelRootDepth, 1100, \
"Maximum times call Label_Root to prevent stack overflow") \
"Maximum times call Label_Root to prevent stack overflow") \
\
diagnostic(intx, DominatorSearchLimit, 1000, \
"Iterations limit in Node::dominates") \
C2_FLAGS
(
DECLARE_DEVELOPER_FLAG
,
DECLARE_PD_DEVELOPER_FLAG
,
DECLARE_PRODUCT_FLAG
,
DECLARE_PD_PRODUCT_FLAG
,
DECLARE_DIAGNOSTIC_FLAG
,
DECLARE_NOTPRODUCT_FLAG
)
C2_FLAGS
(
DECLARE_DEVELOPER_FLAG
,
DECLARE_PD_DEVELOPER_FLAG
,
DECLARE_PRODUCT_FLAG
,
DECLARE_PD_PRODUCT_FLAG
,
DECLARE_DIAGNOSTIC_FLAG
,
DECLARE_NOTPRODUCT_FLAG
)
src/share/vm/opto/memnode.cpp
浏览文件 @
23466ea5
...
@@ -256,7 +256,7 @@ bool MemNode::all_controls_dominate(Node* dom, Node* sub) {
...
@@ -256,7 +256,7 @@ bool MemNode::all_controls_dominate(Node* dom, Node* sub) {
if
(
dom
==
NULL
||
dom
->
is_top
())
if
(
dom
==
NULL
||
dom
->
is_top
())
return
false
;
// Conservative answer for dead code
return
false
;
// Conservative answer for dead code
if
(
dom
->
is_Start
()
||
dom
->
is_Root
()
||
dom
==
sub
)
if
(
dom
->
is_
Con
()
||
dom
->
is_
Start
()
||
dom
->
is_Root
()
||
dom
==
sub
)
return
true
;
return
true
;
// 'dom' dominates 'sub' if its control edge and control edges
// 'dom' dominates 'sub' if its control edge and control edges
...
@@ -298,7 +298,7 @@ bool MemNode::all_controls_dominate(Node* dom, Node* sub) {
...
@@ -298,7 +298,7 @@ bool MemNode::all_controls_dominate(Node* dom, Node* sub) {
return
false
;
// Conservative answer for dead code
return
false
;
// Conservative answer for dead code
assert
(
n
->
is_CFG
(),
"expecting control"
);
assert
(
n
->
is_CFG
(),
"expecting control"
);
}
}
if
(
n
->
is_Start
()
||
n
->
is_Root
())
{
if
(
n
->
is_
Con
()
||
n
->
is_
Start
()
||
n
->
is_Root
())
{
only_dominating_controls
=
true
;
only_dominating_controls
=
true
;
}
else
if
(
n
->
is_CFG
())
{
}
else
if
(
n
->
is_CFG
())
{
if
(
n
->
dominates
(
sub
,
nlist
))
if
(
n
->
dominates
(
sub
,
nlist
))
...
@@ -308,12 +308,11 @@ bool MemNode::all_controls_dominate(Node* dom, Node* sub) {
...
@@ -308,12 +308,11 @@ bool MemNode::all_controls_dominate(Node* dom, Node* sub) {
}
else
{
}
else
{
// First, own control edge.
// First, own control edge.
Node
*
m
=
n
->
find_exact_control
(
n
->
in
(
0
));
Node
*
m
=
n
->
find_exact_control
(
n
->
in
(
0
));
if
(
m
==
NULL
)
if
(
m
!=
NULL
)
{
continue
;
if
(
m
->
is_top
())
if
(
m
->
is_top
())
return
false
;
// Conservative answer for dead code
return
false
;
// Conservative answer for dead code
dom_list
.
push
(
m
);
dom_list
.
push
(
m
);
}
// Now, the rest of edges.
// Now, the rest of edges.
uint
cnt
=
n
->
req
();
uint
cnt
=
n
->
req
();
for
(
uint
i
=
1
;
i
<
cnt
;
i
++
)
{
for
(
uint
i
=
1
;
i
<
cnt
;
i
++
)
{
...
...
src/share/vm/opto/node.cpp
浏览文件 @
23466ea5
...
@@ -1043,6 +1043,9 @@ bool Node::dominates(Node* sub, Node_List &nlist) {
...
@@ -1043,6 +1043,9 @@ bool Node::dominates(Node* sub, Node_List &nlist) {
assert
(
this
->
is_CFG
(),
"expecting control"
);
assert
(
this
->
is_CFG
(),
"expecting control"
);
assert
(
sub
!=
NULL
&&
sub
->
is_CFG
(),
"expecting control"
);
assert
(
sub
!=
NULL
&&
sub
->
is_CFG
(),
"expecting control"
);
// detect dead cycle without regions
int
iterations_without_region_limit
=
DominatorSearchLimit
;
Node
*
orig_sub
=
sub
;
Node
*
orig_sub
=
sub
;
nlist
.
clear
();
nlist
.
clear
();
bool
this_dominates
=
false
;
bool
this_dominates
=
false
;
...
@@ -1057,6 +1060,7 @@ bool Node::dominates(Node* sub, Node_List &nlist) {
...
@@ -1057,6 +1060,7 @@ bool Node::dominates(Node* sub, Node_List &nlist) {
// Region nodes were visited. Continue walk up to Start or Root
// Region nodes were visited. Continue walk up to Start or Root
// to make sure that it did not walk in a cycle.
// to make sure that it did not walk in a cycle.
this_dominates
=
true
;
// first time meet
this_dominates
=
true
;
// first time meet
iterations_without_region_limit
=
DominatorSearchLimit
;
// Reset
}
else
{
}
else
{
return
false
;
// already met before: walk in a cycle
return
false
;
// already met before: walk in a cycle
}
}
...
@@ -1069,19 +1073,20 @@ bool Node::dominates(Node* sub, Node_List &nlist) {
...
@@ -1069,19 +1073,20 @@ bool Node::dominates(Node* sub, Node_List &nlist) {
return
false
;
// Conservative answer for dead code
return
false
;
// Conservative answer for dead code
if
(
sub
==
up
&&
sub
->
is_Loop
())
{
if
(
sub
==
up
&&
sub
->
is_Loop
())
{
up
=
sub
->
in
(
0
);
// in(LoopNode::EntryControl);
up
=
sub
->
in
(
1
);
// in(LoopNode::EntryControl);
}
else
if
(
sub
==
up
&&
sub
->
is_Region
())
{
}
else
if
(
sub
==
up
&&
sub
->
is_Region
()
&&
sub
->
req
()
==
3
)
{
iterations_without_region_limit
=
DominatorSearchLimit
;
// Reset
uint
i
=
1
;
uint
i
=
1
;
if
(
nlist
.
size
()
==
0
)
{
uint
size
=
nlist
.
size
();
if
(
size
==
0
)
{
// No Region nodes (except Loops) were visited before.
// No Region nodes (except Loops) were visited before.
// Take first valid path on the way up to 'this'.
// Take first valid path on the way up to 'this'.
}
else
if
(
nlist
.
at
(
nlist
.
size
()
-
1
)
==
sub
)
{
}
else
if
(
nlist
.
at
(
size
-
1
)
==
sub
)
{
// This Region node was just visited. Take other path.
// This Region node was just visited. Take other path.
i
=
region_input
+
1
;
i
=
region_input
+
1
;
nlist
.
pop
();
nlist
.
pop
();
}
else
{
}
else
{
// Was this Region node visited before?
// Was this Region node visited before?
uint
size
=
nlist
.
size
();
for
(
uint
j
=
0
;
j
<
size
;
j
++
)
{
for
(
uint
j
=
0
;
j
<
size
;
j
++
)
{
if
(
nlist
.
at
(
j
)
==
sub
)
{
if
(
nlist
.
at
(
j
)
==
sub
)
{
return
false
;
// The Region node was visited before. Give up.
return
false
;
// The Region node was visited before. Give up.
...
@@ -1104,8 +1109,9 @@ bool Node::dominates(Node* sub, Node_List &nlist) {
...
@@ -1104,8 +1109,9 @@ bool Node::dominates(Node* sub, Node_List &nlist) {
}
}
if
(
sub
==
up
)
if
(
sub
==
up
)
return
false
;
// some kind of tight cycle
return
false
;
// some kind of tight cycle
if
(
orig_sub
==
up
)
return
false
;
// walk in a cycle
if
(
--
iterations_without_region_limit
<
0
)
return
false
;
// dead cycle
sub
=
up
;
sub
=
up
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录