Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
ef8f14db
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ef8f14db
编写于
7月 26, 2012
作者:
J
jmasa
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
0356f6e9
20cf7369
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
87 addition
and
40 deletion
+87
-40
make/solaris/makefiles/fastdebug.make
make/solaris/makefiles/fastdebug.make
+5
-0
make/solaris/makefiles/optimized.make
make/solaris/makefiles/optimized.make
+5
-0
make/solaris/makefiles/product.make
make/solaris/makefiles/product.make
+5
-0
src/share/vm/opto/phaseX.cpp
src/share/vm/opto/phaseX.cpp
+66
-37
src/share/vm/opto/phaseX.hpp
src/share/vm/opto/phaseX.hpp
+4
-2
test/runtime/7020373/Test7020373.sh
test/runtime/7020373/Test7020373.sh
+2
-1
test/runtime/7020373/testcase.jar
test/runtime/7020373/testcase.jar
+0
-0
未找到文件。
make/solaris/makefiles/fastdebug.make
浏览文件 @
ef8f14db
...
@@ -36,6 +36,11 @@ OPT_CFLAGS/BYFILE = $(OPT_CFLAGS/$@)$(OPT_CFLAGS/DEFAULT$(OPT_CFLAGS/$@))
...
@@ -36,6 +36,11 @@ OPT_CFLAGS/BYFILE = $(OPT_CFLAGS/$@)$(OPT_CFLAGS/DEFAULT$(OPT_CFLAGS/$@))
ifeq
("${Platform_compiler}", "sparcWorks")
ifeq
("${Platform_compiler}", "sparcWorks")
OPT_CFLAGS/
SLOWER
=
-xO2
OPT_CFLAGS/
SLOWER
=
-xO2
ifeq
($(COMPILER_REV_NUMERIC), 510)
# CC 5.10 has bug XXXXX with -xO4
OPT_CFLAGS/
jvmtiClassFileReconstituter.o
=
$
(
OPT_CFLAGS/SLOWER
)
endif
# COMPILER_REV_NUMERIC == 510
ifeq
($(COMPILER_REV_NUMERIC), 509)
ifeq
($(COMPILER_REV_NUMERIC), 509)
# To avoid jvm98 crash
# To avoid jvm98 crash
OPT_CFLAGS/
instanceKlass.o
=
$
(
OPT_CFLAGS/SLOWER
)
OPT_CFLAGS/
instanceKlass.o
=
$
(
OPT_CFLAGS/SLOWER
)
...
...
make/solaris/makefiles/optimized.make
浏览文件 @
ef8f14db
...
@@ -32,6 +32,11 @@ OPT_CFLAGS/BYFILE = $(OPT_CFLAGS/$@)$(OPT_CFLAGS/DEFAULT$(OPT_CFLAGS/$@))
...
@@ -32,6 +32,11 @@ OPT_CFLAGS/BYFILE = $(OPT_CFLAGS/$@)$(OPT_CFLAGS/DEFAULT$(OPT_CFLAGS/$@))
# (OPT_CFLAGS/SLOWER is also available, to alter compilation of buggy files)
# (OPT_CFLAGS/SLOWER is also available, to alter compilation of buggy files)
ifeq
("${Platform_compiler}", "sparcWorks")
ifeq
("${Platform_compiler}", "sparcWorks")
ifeq
($(COMPILER_REV_NUMERIC), 510)
# CC 5.10 has bug XXXXX with -xO4
OPT_CFLAGS/
jvmtiClassFileReconstituter.o
=
$
(
OPT_CFLAGS/O2
)
endif
# COMPILER_REV_NUMERIC == 510
ifeq
($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1)
ifeq
($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1)
# dtrace cannot handle tail call optimization (6672627, 6693876)
# dtrace cannot handle tail call optimization (6672627, 6693876)
OPT_CFLAGS/
jni.o
=
$
(
OPT_CFLAGS/DEFAULT
)
$
(
OPT_CCFLAGS/NO_TAIL_CALL_OPT
)
OPT_CFLAGS/
jni.o
=
$
(
OPT_CFLAGS/DEFAULT
)
$
(
OPT_CCFLAGS/NO_TAIL_CALL_OPT
)
...
...
make/solaris/makefiles/product.make
浏览文件 @
ef8f14db
...
@@ -40,6 +40,11 @@ endif
...
@@ -40,6 +40,11 @@ endif
# (OPT_CFLAGS/SLOWER is also available, to alter compilation of buggy files)
# (OPT_CFLAGS/SLOWER is also available, to alter compilation of buggy files)
ifeq
("${Platform_compiler}", "sparcWorks")
ifeq
("${Platform_compiler}", "sparcWorks")
ifeq
($(COMPILER_REV_NUMERIC), 510)
# CC 5.10 has bug XXXXX with -xO4
OPT_CFLAGS/
jvmtiClassFileReconstituter.o
=
$
(
OPT_CFLAGS/O2
)
endif
# COMPILER_REV_NUMERIC == 510
ifeq
($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1)
ifeq
($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1)
# dtrace cannot handle tail call optimization (6672627, 6693876)
# dtrace cannot handle tail call optimization (6672627, 6693876)
OPT_CFLAGS/
jni.o
=
$
(
OPT_CFLAGS/DEFAULT
)
$
(
OPT_CCFLAGS/NO_TAIL_CALL_OPT
)
OPT_CFLAGS/
jni.o
=
$
(
OPT_CFLAGS/DEFAULT
)
$
(
OPT_CCFLAGS/NO_TAIL_CALL_OPT
)
...
...
src/share/vm/opto/phaseX.cpp
浏览文件 @
ef8f14db
...
@@ -757,6 +757,7 @@ void PhaseGVN::dead_loop_check( Node *n ) {
...
@@ -757,6 +757,7 @@ void PhaseGVN::dead_loop_check( Node *n ) {
//------------------------------PhaseIterGVN-----------------------------------
//------------------------------PhaseIterGVN-----------------------------------
// Initialize hash table to fresh and clean for +VerifyOpto
// Initialize hash table to fresh and clean for +VerifyOpto
PhaseIterGVN
::
PhaseIterGVN
(
PhaseIterGVN
*
igvn
,
const
char
*
dummy
)
:
PhaseGVN
(
igvn
,
dummy
),
_worklist
(
),
PhaseIterGVN
::
PhaseIterGVN
(
PhaseIterGVN
*
igvn
,
const
char
*
dummy
)
:
PhaseGVN
(
igvn
,
dummy
),
_worklist
(
),
_stack
(
C
->
unique
()
>>
1
),
_delay_transform
(
false
)
{
_delay_transform
(
false
)
{
}
}
...
@@ -764,6 +765,7 @@ PhaseIterGVN::PhaseIterGVN( PhaseIterGVN *igvn, const char *dummy ) : PhaseGVN(i
...
@@ -764,6 +765,7 @@ PhaseIterGVN::PhaseIterGVN( PhaseIterGVN *igvn, const char *dummy ) : PhaseGVN(i
// Initialize with previous PhaseIterGVN info; used by PhaseCCP
// Initialize with previous PhaseIterGVN info; used by PhaseCCP
PhaseIterGVN
::
PhaseIterGVN
(
PhaseIterGVN
*
igvn
)
:
PhaseGVN
(
igvn
),
PhaseIterGVN
::
PhaseIterGVN
(
PhaseIterGVN
*
igvn
)
:
PhaseGVN
(
igvn
),
_worklist
(
igvn
->
_worklist
),
_worklist
(
igvn
->
_worklist
),
_stack
(
igvn
->
_stack
),
_delay_transform
(
igvn
->
_delay_transform
)
_delay_transform
(
igvn
->
_delay_transform
)
{
{
}
}
...
@@ -772,6 +774,7 @@ PhaseIterGVN::PhaseIterGVN( PhaseIterGVN *igvn ) : PhaseGVN(igvn),
...
@@ -772,6 +774,7 @@ PhaseIterGVN::PhaseIterGVN( PhaseIterGVN *igvn ) : PhaseGVN(igvn),
// Initialize with previous PhaseGVN info from Parser
// Initialize with previous PhaseGVN info from Parser
PhaseIterGVN
::
PhaseIterGVN
(
PhaseGVN
*
gvn
)
:
PhaseGVN
(
gvn
),
PhaseIterGVN
::
PhaseIterGVN
(
PhaseGVN
*
gvn
)
:
PhaseGVN
(
gvn
),
_worklist
(
*
C
->
for_igvn
()),
_worklist
(
*
C
->
for_igvn
()),
_stack
(
C
->
unique
()
>>
1
),
_delay_transform
(
false
)
_delay_transform
(
false
)
{
{
uint
max
;
uint
max
;
...
@@ -1138,51 +1141,77 @@ const Type* PhaseIterGVN::saturate(const Type* new_type, const Type* old_type,
...
@@ -1138,51 +1141,77 @@ const Type* PhaseIterGVN::saturate(const Type* new_type, const Type* old_type,
// Kill a globally dead Node. All uses are also globally dead and are
// Kill a globally dead Node. All uses are also globally dead and are
// aggressively trimmed.
// aggressively trimmed.
void
PhaseIterGVN
::
remove_globally_dead_node
(
Node
*
dead
)
{
void
PhaseIterGVN
::
remove_globally_dead_node
(
Node
*
dead
)
{
assert
(
dead
!=
C
->
root
(),
"killing root, eh?"
);
enum
DeleteProgress
{
if
(
dead
->
is_top
())
return
;
PROCESS_INPUTS
,
NOT_PRODUCT
(
set_progress
();
)
PROCESS_OUTPUTS
// Remove from iterative worklist
};
_worklist
.
remove
(
dead
);
assert
(
_stack
.
is_empty
(),
"not empty"
);
if
(
!
dead
->
is_Con
())
{
// Don't kill cons but uses
_stack
.
push
(
dead
,
PROCESS_INPUTS
);
// Remove from hash table
_table
.
hash_delete
(
dead
);
while
(
_stack
.
is_nonempty
())
{
// Smash all inputs to 'dead', isolating him completely
dead
=
_stack
.
node
();
for
(
uint
i
=
0
;
i
<
dead
->
req
();
i
++
)
{
uint
progress_state
=
_stack
.
index
();
Node
*
in
=
dead
->
in
(
i
);
assert
(
dead
!=
C
->
root
(),
"killing root, eh?"
);
if
(
in
)
{
// Points to something?
assert
(
!
dead
->
is_top
(),
"add check for top when pushing"
);
dead
->
set_req
(
i
,
NULL
);
// Kill the edge
NOT_PRODUCT
(
set_progress
();
)
if
(
in
->
outcnt
()
==
0
&&
in
!=
C
->
top
())
{
// Made input go dead?
if
(
progress_state
==
PROCESS_INPUTS
)
{
remove_dead_node
(
in
);
// Recursively remove
// After following inputs, continue to outputs
}
else
if
(
in
->
outcnt
()
==
1
&&
_stack
.
set_index
(
PROCESS_OUTPUTS
);
in
->
has_special_unique_user
())
{
// Remove from iterative worklist
_worklist
.
push
(
in
->
unique_out
());
_worklist
.
remove
(
dead
);
}
else
if
(
in
->
outcnt
()
<=
2
&&
dead
->
is_Phi
())
{
if
(
!
dead
->
is_Con
())
{
// Don't kill cons but uses
if
(
in
->
Opcode
()
==
Op_Region
)
bool
recurse
=
false
;
_worklist
.
push
(
in
);
// Remove from hash table
else
if
(
in
->
is_Store
()
)
{
_table
.
hash_delete
(
dead
);
DUIterator_Fast
imax
,
i
=
in
->
fast_outs
(
imax
);
// Smash all inputs to 'dead', isolating him completely
_worklist
.
push
(
in
->
fast_out
(
i
));
for
(
uint
i
=
0
;
i
<
dead
->
req
();
i
++
)
{
i
++
;
Node
*
in
=
dead
->
in
(
i
);
if
(
in
->
outcnt
()
==
2
)
{
if
(
in
)
{
// Points to something?
_worklist
.
push
(
in
->
fast_out
(
i
));
dead
->
set_req
(
i
,
NULL
);
// Kill the edge
i
++
;
if
(
in
->
outcnt
()
==
0
&&
in
!=
C
->
top
())
{
// Made input go dead?
_stack
.
push
(
in
,
PROCESS_INPUTS
);
// Recursively remove
recurse
=
true
;
}
else
if
(
in
->
outcnt
()
==
1
&&
in
->
has_special_unique_user
())
{
_worklist
.
push
(
in
->
unique_out
());
}
else
if
(
in
->
outcnt
()
<=
2
&&
dead
->
is_Phi
())
{
if
(
in
->
Opcode
()
==
Op_Region
)
_worklist
.
push
(
in
);
else
if
(
in
->
is_Store
()
)
{
DUIterator_Fast
imax
,
i
=
in
->
fast_outs
(
imax
);
_worklist
.
push
(
in
->
fast_out
(
i
));
i
++
;
if
(
in
->
outcnt
()
==
2
)
{
_worklist
.
push
(
in
->
fast_out
(
i
));
i
++
;
}
assert
(
!
(
i
<
imax
),
"sanity"
);
}
}
}
assert
(
!
(
i
<
imax
),
"sanity"
);
}
}
}
}
if
(
dead
->
is_macro
())
{
C
->
remove_macro_node
(
dead
);
}
if
(
recurse
)
{
continue
;
}
}
}
}
}
if
(
dead
->
is_macro
())
{
// Aggressively kill globally dead uses
C
->
remove_macro_node
(
dead
);
// (Rather than pushing all the outs at once, we push one at a time,
// plus the parent to resume later, because of the indefinite number
// of edge deletions per loop trip.)
if
(
dead
->
outcnt
()
>
0
)
{
// Recursively remove
_stack
.
push
(
dead
->
raw_out
(
0
),
PROCESS_INPUTS
);
}
else
{
_stack
.
pop
();
}
}
}
}
// Aggressively kill globally dead uses
// (Cannot use DUIterator_Last because of the indefinite number
// of edge deletions per loop trip.)
while
(
dead
->
outcnt
()
>
0
)
{
remove_globally_dead_node
(
dead
->
raw_out
(
0
));
}
}
}
//------------------------------subsume_node-----------------------------------
//------------------------------subsume_node-----------------------------------
...
...
src/share/vm/opto/phaseX.hpp
浏览文件 @
ef8f14db
...
@@ -403,6 +403,8 @@ class PhaseIterGVN : public PhaseGVN {
...
@@ -403,6 +403,8 @@ class PhaseIterGVN : public PhaseGVN {
// Subsume users of node 'old' into node 'nn'
// Subsume users of node 'old' into node 'nn'
void
subsume_node
(
Node
*
old
,
Node
*
nn
);
void
subsume_node
(
Node
*
old
,
Node
*
nn
);
Node_Stack
_stack
;
// Stack used to avoid recursion
protected:
protected:
// Idealize new Node 'n' with respect to its inputs and its value
// Idealize new Node 'n' with respect to its inputs and its value
...
@@ -438,8 +440,8 @@ public:
...
@@ -438,8 +440,8 @@ public:
// It is significant only for debugging and profiling.
// It is significant only for debugging and profiling.
Node
*
register_new_node_with_optimizer
(
Node
*
n
,
Node
*
orig
=
NULL
);
Node
*
register_new_node_with_optimizer
(
Node
*
n
,
Node
*
orig
=
NULL
);
// Kill a globally dead Node.
It is allowed to have uses which
are
// Kill a globally dead Node.
All uses are also globally dead and
are
// a
ssumed dead and left 'in limbo'
.
// a
ggressively trimmed
.
void
remove_globally_dead_node
(
Node
*
dead
);
void
remove_globally_dead_node
(
Node
*
dead
);
// Kill all inputs to a dead node, recursively making more dead nodes.
// Kill all inputs to a dead node, recursively making more dead nodes.
...
...
test/runtime/7020373/Test7020373.sh
浏览文件 @
ef8f14db
...
@@ -2,9 +2,10 @@
...
@@ -2,9 +2,10 @@
##
##
## @test
## @test
## @bug 7020373 7055247 7053586
## @bug 7020373 7055247 7053586
7185550
## @key cte_test
## @key cte_test
## @summary JSR rewriting can overflow memory address size variables
## @summary JSR rewriting can overflow memory address size variables
## @ignore Ignore it as 7053586 test uses lots of memory. See bug report for detail.
## @run shell Test7020373.sh
## @run shell Test7020373.sh
##
##
...
...
test/runtime/7020373/testcase.jar
0 → 100644
浏览文件 @
ef8f14db
文件已添加
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录