Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell11
提交
6f218753
D
dragonwell11
项目概览
openanolis
/
dragonwell11
通知
7
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell11
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6f218753
编写于
4月 16, 2009
作者:
N
never
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6828024: verification of fixed interval usage is too weak
Reviewed-by: kvn
上级
a0073357
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
62 addition
and
1 deletion
+62
-1
hotspot/src/share/vm/c1/c1_LinearScan.cpp
hotspot/src/share/vm/c1/c1_LinearScan.cpp
+61
-1
hotspot/src/share/vm/includeDB_compiler1
hotspot/src/share/vm/includeDB_compiler1
+1
-0
未找到文件。
hotspot/src/share/vm/c1/c1_LinearScan.cpp
浏览文件 @
6f218753
...
...
@@ -2956,9 +2956,11 @@ void LinearScan::do_linear_scan() {
NOT_PRODUCT
(
print_intervals
(
"After Register Allocation"
));
NOT_PRODUCT
(
print_lir
(
2
,
"LIR after register allocation:"
));
DEBUG_ONLY
(
verify
());
sort_intervals_after_allocation
();
DEBUG_ONLY
(
verify
());
eliminate_spill_moves
();
assign_reg_num
();
CHECK_BAILOUT
();
...
...
@@ -3147,6 +3149,16 @@ void LinearScan::verify_intervals() {
void
LinearScan
::
verify_no_oops_in_fixed_intervals
()
{
Interval
*
fixed_intervals
;
Interval
*
other_intervals
;
create_unhandled_lists
(
&
fixed_intervals
,
&
other_intervals
,
is_precolored_cpu_interval
,
NULL
);
// to ensure a walking until the last instruction id, add a dummy interval
// with a high operation id
other_intervals
=
new
Interval
(
any_reg
);
other_intervals
->
add_range
(
max_jint
-
2
,
max_jint
-
1
);
IntervalWalker
*
iw
=
new
IntervalWalker
(
this
,
fixed_intervals
,
other_intervals
);
LIR_OpVisitState
visitor
;
for
(
int
i
=
0
;
i
<
block_count
();
i
++
)
{
BlockBegin
*
block
=
block_at
(
i
);
...
...
@@ -3159,6 +3171,54 @@ void LinearScan::verify_no_oops_in_fixed_intervals() {
visitor
.
visit
(
op
);
if
(
visitor
.
info_count
()
>
0
)
{
iw
->
walk_before
(
op
->
id
());
bool
check_live
=
true
;
if
(
op
->
code
()
==
lir_move
)
{
LIR_Op1
*
move
=
(
LIR_Op1
*
)
op
;
check_live
=
(
move
->
patch_code
()
==
lir_patch_none
);
}
LIR_OpBranch
*
branch
=
op
->
as_OpBranch
();
if
(
branch
!=
NULL
&&
branch
->
stub
()
!=
NULL
&&
branch
->
stub
()
->
is_exception_throw_stub
())
{
// Don't bother checking the stub in this case since the
// exception stub will never return to normal control flow.
check_live
=
false
;
}
// Make sure none of the fixed registers is live across an
// oopmap since we can't handle that correctly.
if
(
check_live
)
{
for
(
Interval
*
interval
=
iw
->
active_first
(
fixedKind
);
interval
!=
Interval
::
end
();
interval
=
interval
->
next
())
{
if
(
interval
->
current_to
()
>
op
->
id
()
+
1
)
{
// This interval is live out of this op so make sure
// that this interval represents some value that's
// referenced by this op either as an input or output.
bool
ok
=
false
;
for_each_visitor_mode
(
mode
)
{
int
n
=
visitor
.
opr_count
(
mode
);
for
(
int
k
=
0
;
k
<
n
;
k
++
)
{
LIR_Opr
opr
=
visitor
.
opr_at
(
mode
,
k
);
if
(
opr
->
is_fixed_cpu
())
{
if
(
interval_at
(
reg_num
(
opr
))
==
interval
)
{
ok
=
true
;
break
;
}
int
hi
=
reg_numHi
(
opr
);
if
(
hi
!=
-
1
&&
interval_at
(
hi
)
==
interval
)
{
ok
=
true
;
break
;
}
}
}
}
assert
(
ok
,
"fixed intervals should never be live across an oopmap point"
);
}
}
}
}
// oop-maps at calls do not contain registers, so check is not needed
if
(
!
visitor
.
has_call
())
{
...
...
hotspot/src/share/vm/includeDB_compiler1
浏览文件 @
6f218753
...
...
@@ -270,6 +270,7 @@ c1_LIRGenerator_<arch>.cpp vmreg_<arch>.inline.hpp
c1_LinearScan.cpp bitMap.inline.hpp
c1_LinearScan.cpp c1_CFGPrinter.hpp
c1_LinearScan.cpp c1_CodeStubs.hpp
c1_LinearScan.cpp c1_Compilation.hpp
c1_LinearScan.cpp c1_FrameMap.hpp
c1_LinearScan.cpp c1_IR.hpp
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录