Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
6ca4a45d
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看板
提交
6ca4a45d
编写于
2月 16, 2017
作者:
A
asaha
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
c05e897a
b9ab6157
变更
9
显示空白变更内容
内联
并排
Showing
9 changed file
with
39 addition
and
9 deletion
+39
-9
.hgtags
.hgtags
+4
-0
src/cpu/sparc/vm/macroAssembler_sparc.cpp
src/cpu/sparc/vm/macroAssembler_sparc.cpp
+1
-0
src/cpu/sparc/vm/vm_version_sparc.cpp
src/cpu/sparc/vm/vm_version_sparc.cpp
+2
-2
src/share/vm/classfile/systemDictionary.cpp
src/share/vm/classfile/systemDictionary.cpp
+4
-1
src/share/vm/opto/cfgnode.hpp
src/share/vm/opto/cfgnode.hpp
+9
-1
src/share/vm/opto/macro.cpp
src/share/vm/opto/macro.cpp
+2
-2
src/share/vm/opto/memnode.cpp
src/share/vm/opto/memnode.cpp
+2
-2
src/share/vm/opto/phaseX.cpp
src/share/vm/opto/phaseX.cpp
+14
-0
src/share/vm/opto/type.hpp
src/share/vm/opto/type.hpp
+1
-1
未找到文件。
.hgtags
浏览文件 @
6ca4a45d
...
...
@@ -931,6 +931,8 @@ c2c4db2a42a215c98a4f027edb8bbb00dd62d9b9 jdk8u112-b14
b28d012a24cab8f4ceeee0c9d3252969757423ed jdk8u112-b15
e134dc1879b72124e478be01680b0646a2fbf585 jdk8u112-b16
87440ed4e1de7753a436f957d35555d8b4e26f1d jdk8u112-b31
ba25f5833a128b8062e597f794efda26b30f095d jdk8u112-b32
919ffdca10c2721ee0f6f233e704709174556510 jdk8u112-b33
3b0e5f01891f5ebbf67797b1aae786196f1bb4f6 jdk8u121-b00
251a2493b1857f2ff4f11eab2dfd8b2fe8ed441b jdk8u121-b01
70c4a50f576a01ec975d0a02b3642ee33db39ed8 jdk8u121-b02
...
...
@@ -945,6 +947,8 @@ f26f6895c9dfb32dfb4c228d69b371d8ab118536 jdk8u121-b10
11f91811e4d7e5ddfaf938dcf386ec8fe5bf7b7c jdk8u121-b11
b132b08b28bf23a26329928cf6b4ffda5857f4d3 jdk8u121-b12
90f94521c3515e5f27af0ab9b31d036e88bb322a jdk8u121-b13
351bf1d4ff9a41137f91e2ec97ec59ed29a38d8b jdk8u121-b31
41daac438a2ac5a80755dc3de88b76e4ac66750a jdk8u121-b32
c0a1ba0df20fda10ddb8599e888eb56ad98b3874 jdk8u131-b00
0b85ccd6240991e1a501602ff5addec6b88ae0af jdk8u131-b01
ef90c721a4e59b01ca36f25619010a1afe9ed4d5 jdk8u131-b02
...
...
src/cpu/sparc/vm/macroAssembler_sparc.cpp
浏览文件 @
6ca4a45d
...
...
@@ -4261,6 +4261,7 @@ void MacroAssembler::bis_zeroing(Register to, Register count, Register temp, Lab
assert
(
UseBlockZeroing
&&
VM_Version
::
has_block_zeroing
(),
"only works with BIS zeroing"
);
Register
end
=
count
;
int
cache_line_size
=
VM_Version
::
prefetch_data_size
();
assert
(
cache_line_size
>
0
,
"cache line size should be known for this code"
);
// Minimum count when BIS zeroing can be used since
// it needs membar which is expensive.
int
block_zero_size
=
MAX2
(
cache_line_size
*
3
,
(
int
)
BlockZeroingLowLimit
);
...
...
src/cpu/sparc/vm/vm_version_sparc.cpp
浏览文件 @
6ca4a45d
...
...
@@ -74,7 +74,7 @@ void VM_Version::initialize() {
AllocatePrefetchDistance
=
AllocatePrefetchStepSize
;
}
if
(
AllocatePrefetchStyle
==
3
&&
!
has_blk_init
(
))
{
if
(
AllocatePrefetchStyle
==
3
&&
(
!
has_blk_init
()
||
cache_line_size
<=
0
))
{
warning
(
"BIS instructions are not available on this CPU"
);
FLAG_SET_DEFAULT
(
AllocatePrefetchStyle
,
1
);
}
...
...
@@ -138,7 +138,7 @@ void VM_Version::initialize() {
FLAG_SET_DEFAULT
(
InteriorEntryAlignment
,
4
);
}
if
(
is_niagara_plus
())
{
if
(
has_blk_init
()
&&
UseTLAB
&&
if
(
has_blk_init
()
&&
(
cache_line_size
>
0
)
&&
UseTLAB
&&
FLAG_IS_DEFAULT
(
AllocatePrefetchInstr
))
{
// Use BIS instruction for TLAB allocation prefetch.
FLAG_SET_ERGO
(
intx
,
AllocatePrefetchInstr
,
1
);
...
...
src/share/vm/classfile/systemDictionary.cpp
浏览文件 @
6ca4a45d
...
...
@@ -1084,15 +1084,18 @@ Klass* SystemDictionary::resolve_from_stream(Symbol* class_name,
THREAD
);
const
char
*
pkg
=
"java/"
;
size_t
pkglen
=
strlen
(
pkg
);
if
(
!
HAS_PENDING_EXCEPTION
&&
!
class_loader
.
is_null
()
&&
parsed_name
!=
NULL
&&
!
strncmp
((
const
char
*
)
parsed_name
->
bytes
(),
pkg
,
strlen
(
pkg
)))
{
parsed_name
->
utf8_length
()
>=
(
int
)
pkglen
&&
!
strncmp
((
const
char
*
)
parsed_name
->
bytes
(),
pkg
,
pkglen
))
{
// It is illegal to define classes in the "java." package from
// JVM_DefineClass or jni_DefineClass unless you're the bootclassloader
ResourceMark
rm
(
THREAD
);
char
*
name
=
parsed_name
->
as_C_string
();
char
*
index
=
strrchr
(
name
,
'/'
);
assert
(
index
!=
NULL
,
"must be"
);
*
index
=
'\0'
;
// chop to just the package name
while
((
index
=
strchr
(
name
,
'/'
))
!=
NULL
)
{
*
index
=
'.'
;
// replace '/' with '.' in package name
...
...
src/share/vm/opto/cfgnode.hpp
浏览文件 @
6ca4a45d
...
...
@@ -119,6 +119,9 @@ class JProjNode : public ProjNode {
// input in slot 0.
class
PhiNode
:
public
TypeNode
{
const
TypePtr
*
const
_adr_type
;
// non-null only for Type::MEMORY nodes.
// The following fields are only used for data PhiNodes to indicate
// that the PhiNode represents the value of a known instance field.
int
_inst_mem_id
;
// Instance memory id (node index of the memory Phi)
const
int
_inst_id
;
// Instance id of the memory slice.
const
int
_inst_index
;
// Alias index of the instance memory slice.
// Array elements references have the same alias_idx but different offset.
...
...
@@ -138,11 +141,13 @@ public:
};
PhiNode
(
Node
*
r
,
const
Type
*
t
,
const
TypePtr
*
at
=
NULL
,
const
int
imid
=
-
1
,
const
int
iid
=
TypeOopPtr
::
InstanceTop
,
const
int
iidx
=
Compile
::
AliasIdxTop
,
const
int
ioffs
=
Type
::
OffsetTop
)
:
TypeNode
(
t
,
r
->
req
()),
_adr_type
(
at
),
_inst_mem_id
(
imid
),
_inst_id
(
iid
),
_inst_index
(
iidx
),
_inst_offset
(
ioffs
)
...
...
@@ -187,11 +192,14 @@ public:
virtual
bool
pinned
()
const
{
return
in
(
0
)
!=
0
;
}
virtual
const
TypePtr
*
adr_type
()
const
{
verify_adr_type
(
true
);
return
_adr_type
;
}
void
set_inst_mem_id
(
int
inst_mem_id
)
{
_inst_mem_id
=
inst_mem_id
;
}
const
int
inst_mem_id
()
const
{
return
_inst_mem_id
;
}
const
int
inst_id
()
const
{
return
_inst_id
;
}
const
int
inst_index
()
const
{
return
_inst_index
;
}
const
int
inst_offset
()
const
{
return
_inst_offset
;
}
bool
is_same_inst_field
(
const
Type
*
tp
,
int
id
,
int
index
,
int
offset
)
{
bool
is_same_inst_field
(
const
Type
*
tp
,
int
mem_id
,
int
id
,
int
index
,
int
offset
)
{
return
type
()
->
basic_type
()
==
tp
->
basic_type
()
&&
inst_mem_id
()
==
mem_id
&&
inst_id
()
==
id
&&
inst_index
()
==
index
&&
inst_offset
()
==
offset
&&
...
...
src/share/vm/opto/macro.cpp
浏览文件 @
6ca4a45d
...
...
@@ -401,7 +401,7 @@ Node *PhaseMacroExpand::value_from_mem_phi(Node *mem, BasicType ft, const Type *
for
(
DUIterator_Fast
kmax
,
k
=
region
->
fast_outs
(
kmax
);
k
<
kmax
;
k
++
)
{
Node
*
phi
=
region
->
fast_out
(
k
);
if
(
phi
->
is_Phi
()
&&
phi
!=
mem
&&
phi
->
as_Phi
()
->
is_same_inst_field
(
phi_type
,
instance_id
,
alias_idx
,
offset
))
{
phi
->
as_Phi
()
->
is_same_inst_field
(
phi_type
,
(
int
)
mem
->
_idx
,
instance_id
,
alias_idx
,
offset
))
{
return
phi
;
}
}
...
...
@@ -420,7 +420,7 @@ Node *PhaseMacroExpand::value_from_mem_phi(Node *mem, BasicType ft, const Type *
GrowableArray
<
Node
*>
values
(
length
,
length
,
NULL
,
false
);
// create a new Phi for the value
PhiNode
*
phi
=
new
(
C
)
PhiNode
(
mem
->
in
(
0
),
phi_type
,
NULL
,
instance_id
,
alias_idx
,
offset
);
PhiNode
*
phi
=
new
(
C
)
PhiNode
(
mem
->
in
(
0
),
phi_type
,
NULL
,
mem
->
_idx
,
instance_id
,
alias_idx
,
offset
);
transform_later
(
phi
);
value_phis
->
push
(
phi
,
mem
->
_idx
);
...
...
src/share/vm/opto/memnode.cpp
浏览文件 @
6ca4a45d
...
...
@@ -1155,7 +1155,7 @@ Node *LoadNode::Identity( PhaseTransform *phase ) {
for
(
DUIterator_Fast
imax
,
i
=
region
->
fast_outs
(
imax
);
i
<
imax
;
i
++
)
{
Node
*
phi
=
region
->
fast_out
(
i
);
if
(
phi
->
is_Phi
()
&&
phi
!=
mem
&&
phi
->
as_Phi
()
->
is_same_inst_field
(
this_type
,
this_iid
,
this_index
,
this_offset
))
{
phi
->
as_Phi
()
->
is_same_inst_field
(
this_type
,
(
int
)
mem
->
_idx
,
this_iid
,
this_index
,
this_offset
))
{
return
phi
;
}
}
...
...
@@ -1400,7 +1400,7 @@ Node *LoadNode::split_through_phi(PhaseGVN *phase) {
this_iid
=
base
->
_idx
;
}
PhaseIterGVN
*
igvn
=
phase
->
is_IterGVN
();
Node
*
phi
=
new
(
C
)
PhiNode
(
region
,
this_type
,
NULL
,
this_iid
,
this_index
,
this_offset
);
Node
*
phi
=
new
(
C
)
PhiNode
(
region
,
this_type
,
NULL
,
mem
->
_idx
,
this_iid
,
this_index
,
this_offset
);
for
(
uint
i
=
1
;
i
<
region
->
req
();
i
++
)
{
Node
*
x
;
Node
*
the_clone
=
NULL
;
...
...
src/share/vm/opto/phaseX.cpp
浏览文件 @
6ca4a45d
...
...
@@ -481,6 +481,8 @@ PhaseRenumberLive::PhaseRenumberLive(PhaseGVN* gvn,
uint
current_idx
=
0
;
// The current new node ID. Incremented after every assignment.
for
(
uint
i
=
0
;
i
<
_useful
.
size
();
i
++
)
{
Node
*
n
=
_useful
.
at
(
i
);
// Sanity check that fails if we ever decide to execute this phase after EA
assert
(
!
n
->
is_Phi
()
||
n
->
as_Phi
()
->
inst_mem_id
()
==
-
1
,
"should not be linked to data Phi"
);
const
Type
*
type
=
gvn
->
type_or_null
(
n
);
new_type_array
.
map
(
current_idx
,
type
);
...
...
@@ -1378,6 +1380,18 @@ void PhaseIterGVN::subsume_node( Node *old, Node *nn ) {
i
-=
num_edges
;
// we deleted 1 or more copies of this edge
}
// Search for instance field data PhiNodes in the same region pointing to the old
// memory PhiNode and update their instance memory ids to point to the new node.
if
(
old
->
is_Phi
()
&&
old
->
as_Phi
()
->
type
()
->
has_memory
()
&&
old
->
in
(
0
)
!=
NULL
)
{
Node
*
region
=
old
->
in
(
0
);
for
(
DUIterator_Fast
imax
,
i
=
region
->
fast_outs
(
imax
);
i
<
imax
;
i
++
)
{
PhiNode
*
phi
=
region
->
fast_out
(
i
)
->
isa_Phi
();
if
(
phi
!=
NULL
&&
phi
->
inst_mem_id
()
==
(
int
)
old
->
_idx
)
{
phi
->
set_inst_mem_id
((
int
)
nn
->
_idx
);
}
}
}
// Smash all inputs to 'old', isolating him completely
Node
*
temp
=
new
(
C
)
Node
(
1
);
temp
->
init_req
(
0
,
nn
);
// Add a use to nn to prevent him from dying
...
...
src/share/vm/opto/type.hpp
浏览文件 @
6ca4a45d
...
...
@@ -882,7 +882,7 @@ protected:
// If not InstanceTop or InstanceBot, indicates that this is
// a particular instance of this type which is distinct.
// This is the
the
node index of the allocation node creating this instance.
// This is the node index of the allocation node creating this instance.
int
_instance_id
;
// Extra type information profiling gave us. We propagate it the
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录