Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
e809d858
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看板
提交
e809d858
编写于
1月 14, 2009
作者:
N
never
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6788347: C2Compiler crash 6u7
Reviewed-by: kvn
上级
b2d24785
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
29 addition
and
0 deletion
+29
-0
src/share/vm/opto/cfgnode.cpp
src/share/vm/opto/cfgnode.cpp
+17
-0
src/share/vm/opto/type.cpp
src/share/vm/opto/type.cpp
+10
-0
src/share/vm/opto/type.hpp
src/share/vm/opto/type.hpp
+2
-0
未找到文件。
src/share/vm/opto/cfgnode.cpp
浏览文件 @
e809d858
...
@@ -858,12 +858,18 @@ const Type *PhiNode::Value( PhaseTransform *phase ) const {
...
@@ -858,12 +858,18 @@ const Type *PhiNode::Value( PhaseTransform *phase ) const {
// convert the one to the other.
// convert the one to the other.
const
TypePtr
*
ttp
=
_type
->
make_ptr
();
const
TypePtr
*
ttp
=
_type
->
make_ptr
();
const
TypeInstPtr
*
ttip
=
(
ttp
!=
NULL
)
?
ttp
->
isa_instptr
()
:
NULL
;
const
TypeInstPtr
*
ttip
=
(
ttp
!=
NULL
)
?
ttp
->
isa_instptr
()
:
NULL
;
const
TypeKlassPtr
*
ttkp
=
(
ttp
!=
NULL
)
?
ttp
->
isa_klassptr
()
:
NULL
;
bool
is_intf
=
false
;
bool
is_intf
=
false
;
if
(
ttip
!=
NULL
)
{
if
(
ttip
!=
NULL
)
{
ciKlass
*
k
=
ttip
->
klass
();
ciKlass
*
k
=
ttip
->
klass
();
if
(
k
->
is_loaded
()
&&
k
->
is_interface
())
if
(
k
->
is_loaded
()
&&
k
->
is_interface
())
is_intf
=
true
;
is_intf
=
true
;
}
}
if
(
ttkp
!=
NULL
)
{
ciKlass
*
k
=
ttkp
->
klass
();
if
(
k
->
is_loaded
()
&&
k
->
is_interface
())
is_intf
=
true
;
}
// Default case: merge all inputs
// Default case: merge all inputs
const
Type
*
t
=
Type
::
TOP
;
// Merged type starting value
const
Type
*
t
=
Type
::
TOP
;
// Merged type starting value
...
@@ -921,6 +927,8 @@ const Type *PhiNode::Value( PhaseTransform *phase ) const {
...
@@ -921,6 +927,8 @@ const Type *PhiNode::Value( PhaseTransform *phase ) const {
// uplift the type.
// uplift the type.
if
(
!
t
->
empty
()
&&
ttip
&&
ttip
->
is_loaded
()
&&
ttip
->
klass
()
->
is_interface
()
)
if
(
!
t
->
empty
()
&&
ttip
&&
ttip
->
is_loaded
()
&&
ttip
->
klass
()
->
is_interface
()
)
{
assert
(
ft
==
_type
,
""
);
}
// Uplift to interface
{
assert
(
ft
==
_type
,
""
);
}
// Uplift to interface
else
if
(
!
t
->
empty
()
&&
ttkp
&&
ttkp
->
is_loaded
()
&&
ttkp
->
klass
()
->
is_interface
()
)
{
assert
(
ft
==
_type
,
""
);
}
// Uplift to interface
// Otherwise it's something stupid like non-overlapping int ranges
// Otherwise it's something stupid like non-overlapping int ranges
// found on dying counted loops.
// found on dying counted loops.
else
else
...
@@ -936,6 +944,7 @@ const Type *PhiNode::Value( PhaseTransform *phase ) const {
...
@@ -936,6 +944,7 @@ const Type *PhiNode::Value( PhaseTransform *phase ) const {
// because the type system doesn't interact well with interfaces.
// because the type system doesn't interact well with interfaces.
const
TypePtr
*
jtp
=
jt
->
make_ptr
();
const
TypePtr
*
jtp
=
jt
->
make_ptr
();
const
TypeInstPtr
*
jtip
=
(
jtp
!=
NULL
)
?
jtp
->
isa_instptr
()
:
NULL
;
const
TypeInstPtr
*
jtip
=
(
jtp
!=
NULL
)
?
jtp
->
isa_instptr
()
:
NULL
;
const
TypeKlassPtr
*
jtkp
=
(
jtp
!=
NULL
)
?
jtp
->
isa_klassptr
()
:
NULL
;
if
(
jtip
&&
ttip
)
{
if
(
jtip
&&
ttip
)
{
if
(
jtip
->
is_loaded
()
&&
jtip
->
klass
()
->
is_interface
()
&&
if
(
jtip
->
is_loaded
()
&&
jtip
->
klass
()
->
is_interface
()
&&
ttip
->
is_loaded
()
&&
!
ttip
->
klass
()
->
is_interface
()
)
{
ttip
->
is_loaded
()
&&
!
ttip
->
klass
()
->
is_interface
()
)
{
...
@@ -945,6 +954,14 @@ const Type *PhiNode::Value( PhaseTransform *phase ) const {
...
@@ -945,6 +954,14 @@ const Type *PhiNode::Value( PhaseTransform *phase ) const {
jt
=
ft
;
jt
=
ft
;
}
}
}
}
if
(
jtkp
&&
ttkp
)
{
if
(
jtkp
->
is_loaded
()
&&
jtkp
->
klass
()
->
is_interface
()
&&
ttkp
->
is_loaded
()
&&
!
ttkp
->
klass
()
->
is_interface
()
)
{
assert
(
ft
==
ttkp
->
cast_to_ptr_type
(
jtkp
->
ptr
())
||
ft
->
isa_narrowoop
()
&&
ft
->
make_ptr
()
==
ttkp
->
cast_to_ptr_type
(
jtkp
->
ptr
()),
""
);
jt
=
ft
;
}
}
if
(
jt
!=
ft
&&
jt
->
base
()
==
ft
->
base
())
{
if
(
jt
!=
ft
&&
jt
->
base
()
==
ft
->
base
())
{
if
(
jt
->
isa_int
()
&&
if
(
jt
->
isa_int
()
&&
jt
->
is_int
()
->
_lo
==
ft
->
is_int
()
->
_lo
&&
jt
->
is_int
()
->
_lo
==
ft
->
is_int
()
->
_lo
&&
...
...
src/share/vm/opto/type.cpp
浏览文件 @
e809d858
...
@@ -2471,6 +2471,8 @@ const Type *TypeOopPtr::filter( const Type *kills ) const {
...
@@ -2471,6 +2471,8 @@ const Type *TypeOopPtr::filter( const Type *kills ) const {
const
Type
*
ft
=
join
(
kills
);
const
Type
*
ft
=
join
(
kills
);
const
TypeInstPtr
*
ftip
=
ft
->
isa_instptr
();
const
TypeInstPtr
*
ftip
=
ft
->
isa_instptr
();
const
TypeInstPtr
*
ktip
=
kills
->
isa_instptr
();
const
TypeInstPtr
*
ktip
=
kills
->
isa_instptr
();
const
TypeKlassPtr
*
ftkp
=
ft
->
isa_klassptr
();
const
TypeKlassPtr
*
ktkp
=
kills
->
isa_klassptr
();
if
(
ft
->
empty
())
{
if
(
ft
->
empty
())
{
// Check for evil case of 'this' being a class and 'kills' expecting an
// Check for evil case of 'this' being a class and 'kills' expecting an
...
@@ -2484,6 +2486,8 @@ const Type *TypeOopPtr::filter( const Type *kills ) const {
...
@@ -2484,6 +2486,8 @@ const Type *TypeOopPtr::filter( const Type *kills ) const {
// uplift the type.
// uplift the type.
if
(
!
empty
()
&&
ktip
!=
NULL
&&
ktip
->
is_loaded
()
&&
ktip
->
klass
()
->
is_interface
())
if
(
!
empty
()
&&
ktip
!=
NULL
&&
ktip
->
is_loaded
()
&&
ktip
->
klass
()
->
is_interface
())
return
kills
;
// Uplift to interface
return
kills
;
// Uplift to interface
if
(
!
empty
()
&&
ktkp
!=
NULL
&&
ktkp
->
klass
()
->
is_loaded
()
&&
ktkp
->
klass
()
->
is_interface
())
return
kills
;
// Uplift to interface
return
Type
::
TOP
;
// Canonical empty value
return
Type
::
TOP
;
// Canonical empty value
}
}
...
@@ -2499,6 +2503,12 @@ const Type *TypeOopPtr::filter( const Type *kills ) const {
...
@@ -2499,6 +2503,12 @@ const Type *TypeOopPtr::filter( const Type *kills ) const {
// Happens in a CTW of rt.jar, 320-341, no extra flags
// Happens in a CTW of rt.jar, 320-341, no extra flags
return
ktip
->
cast_to_ptr_type
(
ftip
->
ptr
());
return
ktip
->
cast_to_ptr_type
(
ftip
->
ptr
());
}
}
if
(
ftkp
!=
NULL
&&
ktkp
!=
NULL
&&
ftkp
->
is_loaded
()
&&
ftkp
->
klass
()
->
is_interface
()
&&
ktkp
->
is_loaded
()
&&
!
ktkp
->
klass
()
->
is_interface
())
{
// Happens in a CTW of rt.jar, 320-341, no extra flags
return
ktkp
->
cast_to_ptr_type
(
ftkp
->
ptr
());
}
return
ft
;
return
ft
;
}
}
...
...
src/share/vm/opto/type.hpp
浏览文件 @
e809d858
...
@@ -882,6 +882,8 @@ class TypeKlassPtr : public TypeOopPtr {
...
@@ -882,6 +882,8 @@ class TypeKlassPtr : public TypeOopPtr {
public:
public:
ciSymbol
*
name
()
const
{
return
_klass
->
name
();
}
ciSymbol
*
name
()
const
{
return
_klass
->
name
();
}
bool
is_loaded
()
const
{
return
_klass
->
is_loaded
();
}
// ptr to klass 'k'
// ptr to klass 'k'
static
const
TypeKlassPtr
*
make
(
ciKlass
*
k
)
{
return
make
(
TypePtr
::
Constant
,
k
,
0
);
}
static
const
TypeKlassPtr
*
make
(
ciKlass
*
k
)
{
return
make
(
TypePtr
::
Constant
,
k
,
0
);
}
// ptr to klass 'k' with offset
// ptr to klass 'k' with offset
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录