Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
2d52ec7b
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看板
提交
2d52ec7b
编写于
12月 13, 2010
作者:
N
never
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7004940: CTW: assert(!def_outside->member(r)) failed: Use of external LRG overlaps the same LRG
Reviewed-by: kvn, twisti
上级
7888ef8c
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
33 addition
and
15 deletion
+33
-15
src/share/vm/opto/chaitin.cpp
src/share/vm/opto/chaitin.cpp
+17
-13
src/share/vm/opto/chaitin.hpp
src/share/vm/opto/chaitin.hpp
+5
-1
src/share/vm/opto/reg_split.cpp
src/share/vm/opto/reg_split.cpp
+11
-1
未找到文件。
src/share/vm/opto/chaitin.cpp
浏览文件 @
2d52ec7b
...
...
@@ -1782,7 +1782,7 @@ void PhaseChaitin::dump() const {
for
(
uint
i2
=
1
;
i2
<
_maxlrg
;
i2
++
)
{
tty
->
print
(
"L%d: "
,
i2
);
if
(
i2
<
_ifg
->
_maxlrg
)
lrgs
(
i2
).
dump
(
);
else
tty
->
print
(
"new LRG"
);
else
tty
->
print
_cr
(
"new LRG"
);
}
tty
->
print_cr
(
""
);
...
...
@@ -1993,7 +1993,7 @@ void PhaseChaitin::dump_bb( uint pre_order ) const {
}
//------------------------------dump_lrg---------------------------------------
void
PhaseChaitin
::
dump_lrg
(
uint
lidx
)
const
{
void
PhaseChaitin
::
dump_lrg
(
uint
lidx
,
bool
defs_only
)
const
{
tty
->
print_cr
(
"---dump of L%d---"
,
lidx
);
if
(
_ifg
)
{
...
...
@@ -2002,9 +2002,11 @@ void PhaseChaitin::dump_lrg( uint lidx ) const {
return
;
}
tty
->
print
(
"L%d: "
,
lidx
);
lrgs
(
lidx
).
dump
(
);
if
(
lidx
<
_ifg
->
_maxlrg
)
lrgs
(
lidx
).
dump
(
);
else
tty
->
print_cr
(
"new LRG"
);
}
if
(
_ifg
)
{
tty
->
print
(
"Neighbors: %d - "
,
_ifg
->
neighbor_cnt
(
lidx
));
if
(
_ifg
&&
lidx
<
_ifg
->
_maxlrg
)
{
tty
->
print
(
"Neighbors: %d - "
,
_ifg
->
neighbor_cnt
(
lidx
));
_ifg
->
neighbors
(
lidx
)
->
dump
();
tty
->
cr
();
}
...
...
@@ -2024,16 +2026,18 @@ void PhaseChaitin::dump_lrg( uint lidx ) const {
dump
(
n
);
continue
;
}
uint
cnt
=
n
->
req
();
for
(
uint
k
=
1
;
k
<
cnt
;
k
++
)
{
Node
*
m
=
n
->
in
(
k
);
if
(
!
m
)
continue
;
// be robust in the dumper
if
(
Find_const
(
m
)
==
lidx
)
{
if
(
!
dump_once
++
)
{
tty
->
cr
();
b
->
dump_head
(
&
_cfg
.
_bbs
);
if
(
!
defs_only
)
{
uint
cnt
=
n
->
req
();
for
(
uint
k
=
1
;
k
<
cnt
;
k
++
)
{
Node
*
m
=
n
->
in
(
k
);
if
(
!
m
)
continue
;
// be robust in the dumper
if
(
Find_const
(
m
)
==
lidx
)
{
if
(
!
dump_once
++
)
{
tty
->
cr
();
b
->
dump_head
(
&
_cfg
.
_bbs
);
}
dump
(
n
);
}
dump
(
n
);
}
}
}
...
...
src/share/vm/opto/chaitin.hpp
浏览文件 @
2d52ec7b
...
...
@@ -512,7 +512,11 @@ private:
void
dump
(
const
Block
*
b
)
const
;
void
dump_degree_lists
()
const
;
void
dump_simplified
()
const
;
void
dump_lrg
(
uint
lidx
)
const
;
void
dump_lrg
(
uint
lidx
,
bool
defs_only
)
const
;
void
dump_lrg
(
uint
lidx
)
const
{
// dump defs and uses by default
dump_lrg
(
lidx
,
false
);
}
void
dump_bb
(
uint
pre_order
)
const
;
// Verify that base pointers and derived pointers are still sane
...
...
src/share/vm/opto/reg_split.cpp
浏览文件 @
2d52ec7b
...
...
@@ -1239,6 +1239,7 @@ uint PhaseChaitin::Split( uint maxlrg ) {
// Cycle through this block's predecessors, collecting Reaches
// info for each spilled LRG and update edges.
// Walk the phis list to patch inputs, split phis, and name phis
uint
lrgs_before_phi_split
=
maxlrg
;
for
(
insidx
=
0
;
insidx
<
phis
->
size
();
insidx
++
)
{
Node
*
phi
=
phis
->
at
(
insidx
);
assert
(
phi
->
is_Phi
(),
"This list must only contain Phi Nodes"
);
...
...
@@ -1273,7 +1274,16 @@ uint PhaseChaitin::Split( uint maxlrg ) {
assert
(
def
,
"must have reaching def"
);
// If input up/down sense and reg-pressure DISagree
if
(
def
->
rematerialize
()
)
{
def
=
split_Rematerialize
(
def
,
pred
,
pred
->
end_idx
(),
maxlrg
,
splits
,
slidx
,
lrg2reach
,
Reachblock
,
false
);
// Place the rematerialized node above any MSCs created during
// phi node splitting. end_idx points at the insertion point
// so look at the node before it.
int
insert
=
pred
->
end_idx
();
while
(
insert
>=
1
&&
pred
->
_nodes
[
insert
-
1
]
->
is_SpillCopy
()
&&
Find
(
pred
->
_nodes
[
insert
-
1
])
>=
lrgs_before_phi_split
)
{
insert
--
;
}
def
=
split_Rematerialize
(
def
,
pred
,
insert
,
maxlrg
,
splits
,
slidx
,
lrg2reach
,
Reachblock
,
false
);
if
(
!
def
)
return
0
;
// Bail out
}
// Update the Phi's input edge array
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录