Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
936bd9ae
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看板
提交
936bd9ae
编写于
7月 28, 2011
作者:
N
never
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7060619: C1 should respect inline and dontinline directives from CompilerOracle
Reviewed-by: kvn, iveresov
上级
3a843adf
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
30 addition
and
22 deletion
+30
-22
src/share/vm/c1/c1_GraphBuilder.cpp
src/share/vm/c1/c1_GraphBuilder.cpp
+30
-22
未找到文件。
src/share/vm/c1/c1_GraphBuilder.cpp
浏览文件 @
936bd9ae
...
@@ -3033,6 +3033,9 @@ bool GraphBuilder::try_inline(ciMethod* callee, bool holder_known) {
...
@@ -3033,6 +3033,9 @@ bool GraphBuilder::try_inline(ciMethod* callee, bool holder_known) {
if
(
callee
->
should_exclude
())
{
if
(
callee
->
should_exclude
())
{
// callee is excluded
// callee is excluded
INLINE_BAILOUT
(
"excluded by CompilerOracle"
)
INLINE_BAILOUT
(
"excluded by CompilerOracle"
)
}
else
if
(
callee
->
should_not_inline
())
{
// callee is excluded
INLINE_BAILOUT
(
"disallowed by CompilerOracle"
)
}
else
if
(
!
callee
->
can_be_compiled
())
{
}
else
if
(
!
callee
->
can_be_compiled
())
{
// callee is not compilable (prob. has breakpoints)
// callee is not compilable (prob. has breakpoints)
INLINE_BAILOUT
(
"not compilable"
)
INLINE_BAILOUT
(
"not compilable"
)
...
@@ -3410,24 +3413,6 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known) {
...
@@ -3410,24 +3413,6 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known) {
// Proper inlining of methods with jsrs requires a little more work.
// Proper inlining of methods with jsrs requires a little more work.
if
(
callee
->
has_jsrs
()
)
INLINE_BAILOUT
(
"jsrs not handled properly by inliner yet"
);
if
(
callee
->
has_jsrs
()
)
INLINE_BAILOUT
(
"jsrs not handled properly by inliner yet"
);
// now perform tests that are based on flag settings
if
(
inline_level
()
>
MaxInlineLevel
)
INLINE_BAILOUT
(
"too-deep inlining"
);
if
(
recursive_inline_level
(
callee
)
>
MaxRecursiveInlineLevel
)
INLINE_BAILOUT
(
"too-deep recursive inlining"
);
if
(
callee
->
code_size
()
>
max_inline_size
()
)
INLINE_BAILOUT
(
"callee is too large"
);
// don't inline throwable methods unless the inlining tree is rooted in a throwable class
if
(
callee
->
name
()
==
ciSymbol
::
object_initializer_name
()
&&
callee
->
holder
()
->
is_subclass_of
(
ciEnv
::
current
()
->
Throwable_klass
()))
{
// Throwable constructor call
IRScope
*
top
=
scope
();
while
(
top
->
caller
()
!=
NULL
)
{
top
=
top
->
caller
();
}
if
(
!
top
->
method
()
->
holder
()
->
is_subclass_of
(
ciEnv
::
current
()
->
Throwable_klass
()))
{
INLINE_BAILOUT
(
"don't inline Throwable constructors"
);
}
}
// When SSE2 is used on intel, then no special handling is needed
// When SSE2 is used on intel, then no special handling is needed
// for strictfp because the enum-constant is fixed at compile time,
// for strictfp because the enum-constant is fixed at compile time,
// the check for UseSSE2 is needed here
// the check for UseSSE2 is needed here
...
@@ -3435,13 +3420,36 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known) {
...
@@ -3435,13 +3420,36 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known) {
INLINE_BAILOUT
(
"caller and callee have different strict fp requirements"
);
INLINE_BAILOUT
(
"caller and callee have different strict fp requirements"
);
}
}
if
(
compilation
()
->
env
()
->
num_inlined_bytecodes
()
>
DesiredMethodLimit
)
{
INLINE_BAILOUT
(
"total inlining greater than DesiredMethodLimit"
);
}
if
(
is_profiling
()
&&
!
callee
->
ensure_method_data
())
{
if
(
is_profiling
()
&&
!
callee
->
ensure_method_data
())
{
INLINE_BAILOUT
(
"mdo allocation failed"
);
INLINE_BAILOUT
(
"mdo allocation failed"
);
}
}
// now perform tests that are based on flag settings
if
(
callee
->
should_inline
())
{
// ignore heuristic controls on inlining
}
else
{
if
(
inline_level
()
>
MaxInlineLevel
)
INLINE_BAILOUT
(
"too-deep inlining"
);
if
(
recursive_inline_level
(
callee
)
>
MaxRecursiveInlineLevel
)
INLINE_BAILOUT
(
"too-deep recursive inlining"
);
if
(
callee
->
code_size
()
>
max_inline_size
()
)
INLINE_BAILOUT
(
"callee is too large"
);
// don't inline throwable methods unless the inlining tree is rooted in a throwable class
if
(
callee
->
name
()
==
ciSymbol
::
object_initializer_name
()
&&
callee
->
holder
()
->
is_subclass_of
(
ciEnv
::
current
()
->
Throwable_klass
()))
{
// Throwable constructor call
IRScope
*
top
=
scope
();
while
(
top
->
caller
()
!=
NULL
)
{
top
=
top
->
caller
();
}
if
(
!
top
->
method
()
->
holder
()
->
is_subclass_of
(
ciEnv
::
current
()
->
Throwable_klass
()))
{
INLINE_BAILOUT
(
"don't inline Throwable constructors"
);
}
}
if
(
compilation
()
->
env
()
->
num_inlined_bytecodes
()
>
DesiredMethodLimit
)
{
INLINE_BAILOUT
(
"total inlining greater than DesiredMethodLimit"
);
}
}
#ifndef PRODUCT
#ifndef PRODUCT
// printing
// printing
if
(
PrintInlining
)
{
if
(
PrintInlining
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录