Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
0135bec0
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看板
提交
0135bec0
编写于
1月 23, 2014
作者:
R
rbackman
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8027754: Enable loop optimizations for loops with MathExact inside
Reviewed-by: kvn, iveresov
上级
33ffc6ee
变更
73
隐藏空白更改
内联
并排
Showing
73 changed file
with
625 addition
and
1107 deletion
+625
-1107
src/cpu/sparc/vm/sparc.ad
src/cpu/sparc/vm/sparc.ad
+0
-13
src/cpu/x86/vm/x86_32.ad
src/cpu/x86/vm/x86_32.ad
+85
-139
src/cpu/x86/vm/x86_64.ad
src/cpu/x86/vm/x86_64.ad
+168
-267
src/share/vm/adlc/archDesc.cpp
src/share/vm/adlc/archDesc.cpp
+6
-9
src/share/vm/opto/c2_globals.hpp
src/share/vm/opto/c2_globals.hpp
+1
-1
src/share/vm/opto/classes.hpp
src/share/vm/opto/classes.hpp
+6
-12
src/share/vm/opto/compile.cpp
src/share/vm/opto/compile.cpp
+0
-36
src/share/vm/opto/ifnode.cpp
src/share/vm/opto/ifnode.cpp
+0
-1
src/share/vm/opto/lcm.cpp
src/share/vm/opto/lcm.cpp
+0
-7
src/share/vm/opto/library_call.cpp
src/share/vm/opto/library_call.cpp
+32
-98
src/share/vm/opto/loopTransform.cpp
src/share/vm/opto/loopTransform.cpp
+0
-8
src/share/vm/opto/loopopts.cpp
src/share/vm/opto/loopopts.cpp
+1
-8
src/share/vm/opto/matcher.cpp
src/share/vm/opto/matcher.cpp
+0
-1
src/share/vm/opto/matcher.hpp
src/share/vm/opto/matcher.hpp
+0
-4
src/share/vm/opto/mathexactnode.cpp
src/share/vm/opto/mathexactnode.cpp
+165
-338
src/share/vm/opto/mathexactnode.hpp
src/share/vm/opto/mathexactnode.hpp
+62
-79
src/share/vm/opto/multnode.cpp
src/share/vm/opto/multnode.cpp
+0
-5
src/share/vm/opto/node.hpp
src/share/vm/opto/node.hpp
+0
-6
src/share/vm/opto/subnode.cpp
src/share/vm/opto/subnode.cpp
+5
-1
src/share/vm/opto/type.cpp
src/share/vm/opto/type.cpp
+4
-0
src/share/vm/opto/type.hpp
src/share/vm/opto/type.hpp
+11
-0
src/share/vm/runtime/vmStructs.cpp
src/share/vm/runtime/vmStructs.cpp
+9
-9
test/compiler/intrinsics/mathexact/AddExactICondTest.java
test/compiler/intrinsics/mathexact/AddExactICondTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactIConstantTest.java
.../compiler/intrinsics/mathexact/AddExactIConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactILoadTest.java
test/compiler/intrinsics/mathexact/AddExactILoadTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactILoopDependentTest.java
...iler/intrinsics/mathexact/AddExactILoopDependentTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactINonConstantTest.java
...mpiler/intrinsics/mathexact/AddExactINonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java
test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactLConstantTest.java
.../compiler/intrinsics/mathexact/AddExactLConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/AddExactLNonConstantTest.java
...mpiler/intrinsics/mathexact/AddExactLNonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/CompareTest.java
test/compiler/intrinsics/mathexact/CompareTest.java
+1
-1
test/compiler/intrinsics/mathexact/DecExactITest.java
test/compiler/intrinsics/mathexact/DecExactITest.java
+1
-1
test/compiler/intrinsics/mathexact/DecExactLTest.java
test/compiler/intrinsics/mathexact/DecExactLTest.java
+1
-1
test/compiler/intrinsics/mathexact/GVNTest.java
test/compiler/intrinsics/mathexact/GVNTest.java
+1
-1
test/compiler/intrinsics/mathexact/IncExactITest.java
test/compiler/intrinsics/mathexact/IncExactITest.java
+1
-1
test/compiler/intrinsics/mathexact/IncExactLTest.java
test/compiler/intrinsics/mathexact/IncExactLTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactICondTest.java
test/compiler/intrinsics/mathexact/MulExactICondTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactIConstantTest.java
.../compiler/intrinsics/mathexact/MulExactIConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactILoadTest.java
test/compiler/intrinsics/mathexact/MulExactILoadTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactILoopDependentTest.java
...iler/intrinsics/mathexact/MulExactILoopDependentTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactINonConstantTest.java
...mpiler/intrinsics/mathexact/MulExactINonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactIRepeatTest.java
test/compiler/intrinsics/mathexact/MulExactIRepeatTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactLConstantTest.java
.../compiler/intrinsics/mathexact/MulExactLConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/MulExactLNonConstantTest.java
...mpiler/intrinsics/mathexact/MulExactLNonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/NegExactIConstantTest.java
.../compiler/intrinsics/mathexact/NegExactIConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/NegExactILoadTest.java
test/compiler/intrinsics/mathexact/NegExactILoadTest.java
+3
-3
test/compiler/intrinsics/mathexact/NegExactILoopDependentTest.java
...iler/intrinsics/mathexact/NegExactILoopDependentTest.java
+1
-1
test/compiler/intrinsics/mathexact/NegExactINonConstantTest.java
...mpiler/intrinsics/mathexact/NegExactINonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/NegExactLConstantTest.java
.../compiler/intrinsics/mathexact/NegExactLConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/NegExactLNonConstantTest.java
...mpiler/intrinsics/mathexact/NegExactLNonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/NestedMathExactTest.java
test/compiler/intrinsics/mathexact/NestedMathExactTest.java
+1
-1
test/compiler/intrinsics/mathexact/SplitThruPhiTest.java
test/compiler/intrinsics/mathexact/SplitThruPhiTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactICondTest.java
test/compiler/intrinsics/mathexact/SubExactICondTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactIConstantTest.java
.../compiler/intrinsics/mathexact/SubExactIConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactILoadTest.java
test/compiler/intrinsics/mathexact/SubExactILoadTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactILoopDependentTest.java
...iler/intrinsics/mathexact/SubExactILoopDependentTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactINonConstantTest.java
...mpiler/intrinsics/mathexact/SubExactINonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactIRepeatTest.java
test/compiler/intrinsics/mathexact/SubExactIRepeatTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactLConstantTest.java
.../compiler/intrinsics/mathexact/SubExactLConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/SubExactLNonConstantTest.java
...mpiler/intrinsics/mathexact/SubExactLNonConstantTest.java
+1
-1
test/compiler/intrinsics/mathexact/Verify.java
test/compiler/intrinsics/mathexact/Verify.java
+5
-0
test/compiler/intrinsics/mathexact/sanity/AddExactIntTest.java
...compiler/intrinsics/mathexact/sanity/AddExactIntTest.java
+2
-2
test/compiler/intrinsics/mathexact/sanity/AddExactLongTest.java
...ompiler/intrinsics/mathexact/sanity/AddExactLongTest.java
+2
-2
test/compiler/intrinsics/mathexact/sanity/DecrementExactIntTest.java
...er/intrinsics/mathexact/sanity/DecrementExactIntTest.java
+2
-2
test/compiler/intrinsics/mathexact/sanity/DecrementExactLongTest.java
...r/intrinsics/mathexact/sanity/DecrementExactLongTest.java
+3
-3
test/compiler/intrinsics/mathexact/sanity/IncrementExactIntTest.java
...er/intrinsics/mathexact/sanity/IncrementExactIntTest.java
+2
-2
test/compiler/intrinsics/mathexact/sanity/IncrementExactLongTest.java
...r/intrinsics/mathexact/sanity/IncrementExactLongTest.java
+2
-2
test/compiler/intrinsics/mathexact/sanity/MultiplyExactIntTest.java
...ler/intrinsics/mathexact/sanity/MultiplyExactIntTest.java
+2
-2
test/compiler/intrinsics/mathexact/sanity/MultiplyExactLongTest.java
...er/intrinsics/mathexact/sanity/MultiplyExactLongTest.java
+2
-2
test/compiler/intrinsics/mathexact/sanity/NegateExactIntTest.java
...piler/intrinsics/mathexact/sanity/NegateExactIntTest.java
+2
-2
test/compiler/intrinsics/mathexact/sanity/NegateExactLongTest.java
...iler/intrinsics/mathexact/sanity/NegateExactLongTest.java
+2
-2
test/compiler/intrinsics/mathexact/sanity/SubtractExactIntTest.java
...ler/intrinsics/mathexact/sanity/SubtractExactIntTest.java
+2
-2
test/compiler/intrinsics/mathexact/sanity/SubtractExactLongTest.java
...er/intrinsics/mathexact/sanity/SubtractExactLongTest.java
+2
-2
未找到文件。
src/cpu/sparc/vm/sparc.ad
浏览文件 @
0135bec0
...
@@ -2029,19 +2029,6 @@ const RegMask Matcher::method_handle_invoke_SP_save_mask() {
...
@@ -2029,19 +2029,6 @@ const RegMask Matcher::method_handle_invoke_SP_save_mask() {
return L7_REGP_mask();
return L7_REGP_mask();
}
}
const RegMask Matcher::mathExactI_result_proj_mask() {
return G1_REGI_mask();
}
const RegMask Matcher::mathExactL_result_proj_mask() {
return G1_REGL_mask();
}
const RegMask Matcher::mathExactI_flags_proj_mask() {
return INT_FLAGS_mask();
}
%}
%}
...
...
src/cpu/x86/vm/x86_32.ad
浏览文件 @
0135bec0
...
@@ -1534,19 +1534,6 @@ const RegMask Matcher::method_handle_invoke_SP_save_mask() {
...
@@ -1534,19 +1534,6 @@ const RegMask Matcher::method_handle_invoke_SP_save_mask() {
return EBP_REG_mask();
return EBP_REG_mask();
}
}
const RegMask Matcher::mathExactI_result_proj_mask() {
return EAX_REG_mask();
}
const RegMask Matcher::mathExactL_result_proj_mask() {
ShouldNotReachHere();
return RegMask();
}
const RegMask Matcher::mathExactI_flags_proj_mask() {
return INT_FLAGS_mask();
}
// Returns true if the high 32 bits of the value is known to be zero.
// Returns true if the high 32 bits of the value is known to be zero.
bool is_operand_hi32_zero(Node* n) {
bool is_operand_hi32_zero(Node* n) {
int opc = n->Opcode();
int opc = n->Opcode();
...
@@ -6999,44 +6986,6 @@ instruct cmovL_regUCF(cmpOpUCF cop, eFlagsRegUCF cr, eRegL dst, eRegL src) %{
...
@@ -6999,44 +6986,6 @@ instruct cmovL_regUCF(cmpOpUCF cop, eFlagsRegUCF cr, eRegL dst, eRegL src) %{
//----------Arithmetic Instructions--------------------------------------------
//----------Arithmetic Instructions--------------------------------------------
//----------Addition Instructions----------------------------------------------
//----------Addition Instructions----------------------------------------------
instruct addExactI_eReg(eAXRegI dst, rRegI src, eFlagsReg cr)
%{
match(AddExactI dst src);
effect(DEF cr);
format %{ "ADD $dst, $src\t# addExact int" %}
ins_encode %{
__ addl($dst$$Register, $src$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct addExactI_eReg_imm(eAXRegI dst, immI src, eFlagsReg cr)
%{
match(AddExactI dst src);
effect(DEF cr);
format %{ "ADD $dst, $src\t# addExact int" %}
ins_encode %{
__ addl($dst$$Register, $src$$constant);
%}
ins_pipe(ialu_reg_reg);
%}
instruct addExactI_eReg_mem(eAXRegI dst, memory src, eFlagsReg cr)
%{
match(AddExactI dst (LoadI src));
effect(DEF cr);
ins_cost(125);
format %{ "ADD $dst,$src\t# addExact int" %}
ins_encode %{
__ addl($dst$$Register, $src$$Address);
%}
ins_pipe( ialu_reg_mem );
%}
// Integer Addition Instructions
// Integer Addition Instructions
instruct addI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{
instruct addI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{
match(Set dst (AddI dst src));
match(Set dst (AddI dst src));
...
@@ -7346,43 +7295,6 @@ instruct xchgP( memory mem, pRegP newval) %{
...
@@ -7346,43 +7295,6 @@ instruct xchgP( memory mem, pRegP newval) %{
//----------Subtraction Instructions-------------------------------------------
//----------Subtraction Instructions-------------------------------------------
instruct subExactI_eReg(eAXRegI dst, rRegI src, eFlagsReg cr)
%{
match(SubExactI dst src);
effect(DEF cr);
format %{ "SUB $dst, $src\t# subExact int" %}
ins_encode %{
__ subl($dst$$Register, $src$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct subExactI_eReg_imm(eAXRegI dst, immI src, eFlagsReg cr)
%{
match(SubExactI dst src);
effect(DEF cr);
format %{ "SUB $dst, $src\t# subExact int" %}
ins_encode %{
__ subl($dst$$Register, $src$$constant);
%}
ins_pipe(ialu_reg_reg);
%}
instruct subExactI_eReg_mem(eAXRegI dst, memory src, eFlagsReg cr)
%{
match(SubExactI dst (LoadI src));
effect(DEF cr);
ins_cost(125);
format %{ "SUB $dst,$src\t# subExact int" %}
ins_encode %{
__ subl($dst$$Register, $src$$Address);
%}
ins_pipe( ialu_reg_mem );
%}
// Integer Subtraction Instructions
// Integer Subtraction Instructions
instruct subI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{
instruct subI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{
match(Set dst (SubI dst src));
match(Set dst (SubI dst src));
...
@@ -7451,17 +7363,6 @@ instruct negI_eReg(rRegI dst, immI0 zero, eFlagsReg cr) %{
...
@@ -7451,17 +7363,6 @@ instruct negI_eReg(rRegI dst, immI0 zero, eFlagsReg cr) %{
ins_pipe( ialu_reg );
ins_pipe( ialu_reg );
%}
%}
instruct negExactI_eReg(eAXRegI dst, eFlagsReg cr) %{
match(NegExactI dst);
effect(DEF cr);
format %{ "NEG $dst\t# negExact int"%}
ins_encode %{
__ negl($dst$$Register);
%}
ins_pipe(ialu_reg);
%}
//----------Multiplication/Division Instructions-------------------------------
//----------Multiplication/Division Instructions-------------------------------
// Integer Multiplication Instructions
// Integer Multiplication Instructions
// Multiply Register
// Multiply Register
...
@@ -7673,46 +7574,6 @@ instruct mulL_eReg_con(eADXRegL dst, immL_127 src, rRegI tmp, eFlagsReg cr) %{
...
@@ -7673,46 +7574,6 @@ instruct mulL_eReg_con(eADXRegL dst, immL_127 src, rRegI tmp, eFlagsReg cr) %{
ins_pipe( pipe_slow );
ins_pipe( pipe_slow );
%}
%}
instruct mulExactI_eReg(eAXRegI dst, rRegI src, eFlagsReg cr)
%{
match(MulExactI dst src);
effect(DEF cr);
ins_cost(300);
format %{ "IMUL $dst, $src\t# mulExact int" %}
ins_encode %{
__ imull($dst$$Register, $src$$Register);
%}
ins_pipe(ialu_reg_reg_alu0);
%}
instruct mulExactI_eReg_imm(eAXRegI dst, rRegI src, immI imm, eFlagsReg cr)
%{
match(MulExactI src imm);
effect(DEF cr);
ins_cost(300);
format %{ "IMUL $dst, $src, $imm\t# mulExact int" %}
ins_encode %{
__ imull($dst$$Register, $src$$Register, $imm$$constant);
%}
ins_pipe(ialu_reg_reg_alu0);
%}
instruct mulExactI_eReg_mem(eAXRegI dst, memory src, eFlagsReg cr)
%{
match(MulExactI dst (LoadI src));
effect(DEF cr);
ins_cost(350);
format %{ "IMUL $dst, $src\t# mulExact int" %}
ins_encode %{
__ imull($dst$$Register, $src$$Address);
%}
ins_pipe(ialu_reg_mem_alu0);
%}
// Integer DIV with Register
// Integer DIV with Register
instruct divI_eReg(eAXRegI rax, eDXRegI rdx, eCXRegI div, eFlagsReg cr) %{
instruct divI_eReg(eAXRegI rax, eDXRegI rdx, eCXRegI div, eFlagsReg cr) %{
match(Set rax (DivI rax div));
match(Set rax (DivI rax div));
...
@@ -8578,6 +8439,91 @@ instruct and_cmpLTMask(rRegI p, rRegI q, rRegI y, eFlagsReg cr) %{
...
@@ -8578,6 +8439,91 @@ instruct and_cmpLTMask(rRegI p, rRegI q, rRegI y, eFlagsReg cr) %{
instruct cadd_cmpLTMask_mem(ncxRegI p, ncxRegI q, memory y, eCXRegI tmp, eFlagsReg cr) %{
instruct cadd_cmpLTMask_mem(ncxRegI p, ncxRegI q, memory y, eCXRegI tmp, eFlagsReg cr) %{
match(Set p (AddI (AndI (CmpLTMask p q) (LoadI y)) (SubI p q)));
match(Set p (AddI (AndI (CmpLTMask p q) (LoadI y)) (SubI p q)));
*/
*/
//----------Overflow Math Instructions-----------------------------------------
instruct overflowAddI_eReg(eFlagsReg cr, eAXRegI op1, rRegI op2)
%{
match(Set cr (OverflowAddI op1 op2));
effect(DEF cr, USE_KILL op1, USE op2);
format %{ "ADD $op1, $op2\t# overflow check int" %}
ins_encode %{
__ addl($op1$$Register, $op2$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowAddI_rReg_imm(eFlagsReg cr, eAXRegI op1, immI op2)
%{
match(Set cr (OverflowAddI op1 op2));
effect(DEF cr, USE_KILL op1, USE op2);
format %{ "ADD $op1, $op2\t# overflow check int" %}
ins_encode %{
__ addl($op1$$Register, $op2$$constant);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowSubI_rReg(eFlagsReg cr, rRegI op1, rRegI op2)
%{
match(Set cr (OverflowSubI op1 op2));
format %{ "CMP $op1, $op2\t# overflow check int" %}
ins_encode %{
__ cmpl($op1$$Register, $op2$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowSubI_rReg_imm(eFlagsReg cr, rRegI op1, immI op2)
%{
match(Set cr (OverflowSubI op1 op2));
format %{ "CMP $op1, $op2\t# overflow check int" %}
ins_encode %{
__ cmpl($op1$$Register, $op2$$constant);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowNegI_rReg(eFlagsReg cr, immI0 zero, eAXRegI op2)
%{
match(Set cr (OverflowSubI zero op2));
effect(DEF cr, USE_KILL op2);
format %{ "NEG $op2\t# overflow check int" %}
ins_encode %{
__ negl($op2$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowMulI_rReg(eFlagsReg cr, eAXRegI op1, rRegI op2)
%{
match(Set cr (OverflowMulI op1 op2));
effect(DEF cr, USE_KILL op1, USE op2);
format %{ "IMUL $op1, $op2\t# overflow check int" %}
ins_encode %{
__ imull($op1$$Register, $op2$$Register);
%}
ins_pipe(ialu_reg_reg_alu0);
%}
instruct overflowMulI_rReg_imm(eFlagsReg cr, rRegI op1, immI op2, rRegI tmp)
%{
match(Set cr (OverflowMulI op1 op2));
effect(DEF cr, TEMP tmp, USE op1, USE op2);
format %{ "IMUL $tmp, $op1, $op2\t# overflow check int" %}
ins_encode %{
__ imull($tmp$$Register, $op1$$Register, $op2$$constant);
%}
ins_pipe(ialu_reg_reg_alu0);
%}
//----------Long Instructions------------------------------------------------
//----------Long Instructions------------------------------------------------
// Add Long Register with Register
// Add Long Register with Register
...
...
src/cpu/x86/vm/x86_64.ad
浏览文件 @
0135bec0
...
@@ -1649,18 +1649,6 @@ const RegMask Matcher::method_handle_invoke_SP_save_mask() {
...
@@ -1649,18 +1649,6 @@ const RegMask Matcher::method_handle_invoke_SP_save_mask() {
return PTR_RBP_REG_mask();
return PTR_RBP_REG_mask();
}
}
const RegMask Matcher::mathExactI_result_proj_mask() {
return INT_RAX_REG_mask();
}
const RegMask Matcher::mathExactL_result_proj_mask() {
return LONG_RAX_REG_mask();
}
const RegMask Matcher::mathExactI_flags_proj_mask() {
return INT_FLAGS_mask();
}
%}
%}
//----------ENCODING BLOCK-----------------------------------------------------
//----------ENCODING BLOCK-----------------------------------------------------
...
@@ -6728,82 +6716,6 @@ instruct cmovD_regUCF(cmpOpUCF cop, rFlagsRegUCF cr, regD dst, regD src) %{
...
@@ -6728,82 +6716,6 @@ instruct cmovD_regUCF(cmpOpUCF cop, rFlagsRegUCF cr, regD dst, regD src) %{
//----------Arithmetic Instructions--------------------------------------------
//----------Arithmetic Instructions--------------------------------------------
//----------Addition Instructions----------------------------------------------
//----------Addition Instructions----------------------------------------------
instruct addExactI_rReg(rax_RegI dst, rRegI src, rFlagsReg cr)
%{
match(AddExactI dst src);
effect(DEF cr);
format %{ "addl $dst, $src\t# addExact int" %}
ins_encode %{
__ addl($dst$$Register, $src$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct addExactI_rReg_imm(rax_RegI dst, immI src, rFlagsReg cr)
%{
match(AddExactI dst src);
effect(DEF cr);
format %{ "addl $dst, $src\t# addExact int" %}
ins_encode %{
__ addl($dst$$Register, $src$$constant);
%}
ins_pipe(ialu_reg_reg);
%}
instruct addExactI_rReg_mem(rax_RegI dst, memory src, rFlagsReg cr)
%{
match(AddExactI dst (LoadI src));
effect(DEF cr);
ins_cost(125); // XXX
format %{ "addl $dst, $src\t# addExact int" %}
ins_encode %{
__ addl($dst$$Register, $src$$Address);
%}
ins_pipe(ialu_reg_mem);
%}
instruct addExactL_rReg(rax_RegL dst, rRegL src, rFlagsReg cr)
%{
match(AddExactL dst src);
effect(DEF cr);
format %{ "addq $dst, $src\t# addExact long" %}
ins_encode %{
__ addq($dst$$Register, $src$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct addExactL_rReg_imm(rax_RegL dst, immL32 src, rFlagsReg cr)
%{
match(AddExactL dst src);
effect(DEF cr);
format %{ "addq $dst, $src\t# addExact long" %}
ins_encode %{
__ addq($dst$$Register, $src$$constant);
%}
ins_pipe(ialu_reg_reg);
%}
instruct addExactL_rReg_mem(rax_RegL dst, memory src, rFlagsReg cr)
%{
match(AddExactL dst (LoadL src));
effect(DEF cr);
ins_cost(125); // XXX
format %{ "addq $dst, $src\t# addExact long" %}
ins_encode %{
__ addq($dst$$Register, $src$$Address);
%}
ins_pipe(ialu_reg_mem);
%}
instruct addI_rReg(rRegI dst, rRegI src, rFlagsReg cr)
instruct addI_rReg(rRegI dst, rRegI src, rFlagsReg cr)
%{
%{
match(Set dst (AddI dst src));
match(Set dst (AddI dst src));
...
@@ -7416,80 +7328,6 @@ instruct subI_mem_imm(memory dst, immI src, rFlagsReg cr)
...
@@ -7416,80 +7328,6 @@ instruct subI_mem_imm(memory dst, immI src, rFlagsReg cr)
ins_pipe(ialu_mem_imm);
ins_pipe(ialu_mem_imm);
%}
%}
instruct subExactI_rReg(rax_RegI dst, rRegI src, rFlagsReg cr)
%{
match(SubExactI dst src);
effect(DEF cr);
format %{ "subl $dst, $src\t# subExact int" %}
ins_encode %{
__ subl($dst$$Register, $src$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct subExactI_rReg_imm(rax_RegI dst, immI src, rFlagsReg cr)
%{
match(SubExactI dst src);
effect(DEF cr);
format %{ "subl $dst, $src\t# subExact int" %}
ins_encode %{
__ subl($dst$$Register, $src$$constant);
%}
ins_pipe(ialu_reg_reg);
%}
instruct subExactI_rReg_mem(rax_RegI dst, memory src, rFlagsReg cr)
%{
match(SubExactI dst (LoadI src));
effect(DEF cr);
ins_cost(125);
format %{ "subl $dst, $src\t# subExact int" %}
ins_encode %{
__ subl($dst$$Register, $src$$Address);
%}
ins_pipe(ialu_reg_mem);
%}
instruct subExactL_rReg(rax_RegL dst, rRegL src, rFlagsReg cr)
%{
match(SubExactL dst src);
effect(DEF cr);
format %{ "subq $dst, $src\t# subExact long" %}
ins_encode %{
__ subq($dst$$Register, $src$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct subExactL_rReg_imm(rax_RegL dst, immL32 src, rFlagsReg cr)
%{
match(SubExactL dst (LoadL src));
effect(DEF cr);
format %{ "subq $dst, $src\t# subExact long" %}
ins_encode %{
__ subq($dst$$Register, $src$$constant);
%}
ins_pipe(ialu_reg_reg);
%}
instruct subExactL_rReg_mem(rax_RegI dst, memory src, rFlagsReg cr)
%{
match(SubExactI dst src);
effect(DEF cr);
ins_cost(125);
format %{ "subq $dst, $src\t# subExact long" %}
ins_encode %{
__ subq($dst$$Register, $src$$Address);
%}
ins_pipe(ialu_reg_mem);
%}
instruct subL_rReg(rRegL dst, rRegL src, rFlagsReg cr)
instruct subL_rReg(rRegL dst, rRegL src, rFlagsReg cr)
%{
%{
match(Set dst (SubL dst src));
match(Set dst (SubL dst src));
...
@@ -7606,31 +7444,6 @@ instruct negL_mem(memory dst, immL0 zero, rFlagsReg cr)
...
@@ -7606,31 +7444,6 @@ instruct negL_mem(memory dst, immL0 zero, rFlagsReg cr)
ins_pipe(ialu_reg);
ins_pipe(ialu_reg);
%}
%}
instruct negExactI_rReg(rax_RegI dst, rFlagsReg cr)
%{
match(NegExactI dst);
effect(KILL cr);
format %{ "negl $dst\t# negExact int" %}
ins_encode %{
__ negl($dst$$Register);
%}
ins_pipe(ialu_reg);
%}
instruct negExactL_rReg(rax_RegL dst, rFlagsReg cr)
%{
match(NegExactL dst);
effect(KILL cr);
format %{ "negq $dst\t# negExact long" %}
ins_encode %{
__ negq($dst$$Register);
%}
ins_pipe(ialu_reg);
%}
//----------Multiplication/Division Instructions-------------------------------
//----------Multiplication/Division Instructions-------------------------------
// Integer Multiplication Instructions
// Integer Multiplication Instructions
// Multiply Register
// Multiply Register
...
@@ -7747,86 +7560,6 @@ instruct mulHiL_rReg(rdx_RegL dst, no_rax_RegL src, rax_RegL rax, rFlagsReg cr)
...
@@ -7747,86 +7560,6 @@ instruct mulHiL_rReg(rdx_RegL dst, no_rax_RegL src, rax_RegL rax, rFlagsReg cr)
ins_pipe(ialu_reg_reg_alu0);
ins_pipe(ialu_reg_reg_alu0);
%}
%}
instruct mulExactI_rReg(rax_RegI dst, rRegI src, rFlagsReg cr)
%{
match(MulExactI dst src);
effect(DEF cr);
ins_cost(300);
format %{ "imull $dst, $src\t# mulExact int" %}
ins_encode %{
__ imull($dst$$Register, $src$$Register);
%}
ins_pipe(ialu_reg_reg_alu0);
%}
instruct mulExactI_rReg_imm(rax_RegI dst, rRegI src, immI imm, rFlagsReg cr)
%{
match(MulExactI src imm);
effect(DEF cr);
ins_cost(300);
format %{ "imull $dst, $src, $imm\t# mulExact int" %}
ins_encode %{
__ imull($dst$$Register, $src$$Register, $imm$$constant);
%}
ins_pipe(ialu_reg_reg_alu0);
%}
instruct mulExactI_rReg_mem(rax_RegI dst, memory src, rFlagsReg cr)
%{
match(MulExactI dst (LoadI src));
effect(DEF cr);
ins_cost(350);
format %{ "imull $dst, $src\t# mulExact int" %}
ins_encode %{
__ imull($dst$$Register, $src$$Address);
%}
ins_pipe(ialu_reg_mem_alu0);
%}
instruct mulExactL_rReg(rax_RegL dst, rRegL src, rFlagsReg cr)
%{
match(MulExactL dst src);
effect(DEF cr);
ins_cost(300);
format %{ "imulq $dst, $src\t# mulExact long" %}
ins_encode %{
__ imulq($dst$$Register, $src$$Register);
%}
ins_pipe(ialu_reg_reg_alu0);
%}
instruct mulExactL_rReg_imm(rax_RegL dst, rRegL src, immL32 imm, rFlagsReg cr)
%{
match(MulExactL src imm);
effect(DEF cr);
ins_cost(300);
format %{ "imulq $dst, $src, $imm\t# mulExact long" %}
ins_encode %{
__ imulq($dst$$Register, $src$$Register, $imm$$constant);
%}
ins_pipe(ialu_reg_reg_alu0);
%}
instruct mulExactL_rReg_mem(rax_RegL dst, memory src, rFlagsReg cr)
%{
match(MulExactL dst (LoadL src));
effect(DEF cr);
ins_cost(350);
format %{ "imulq $dst, $src\t# mulExact long" %}
ins_encode %{
__ imulq($dst$$Register, $src$$Address);
%}
ins_pipe(ialu_reg_mem_alu0);
%}
instruct divI_rReg(rax_RegI rax, rdx_RegI rdx, no_rax_rdx_RegI div,
instruct divI_rReg(rax_RegI rax, rdx_RegI rdx, no_rax_rdx_RegI div,
rFlagsReg cr)
rFlagsReg cr)
%{
%{
...
@@ -10435,6 +10168,174 @@ instruct encode_iso_array(rsi_RegP src, rdi_RegP dst, rdx_RegI len,
...
@@ -10435,6 +10168,174 @@ instruct encode_iso_array(rsi_RegP src, rdi_RegP dst, rdx_RegI len,
ins_pipe( pipe_slow );
ins_pipe( pipe_slow );
%}
%}
//----------Overflow Math Instructions-----------------------------------------
instruct overflowAddI_rReg(rFlagsReg cr, rax_RegI op1, rRegI op2)
%{
match(Set cr (OverflowAddI op1 op2));
effect(DEF cr, USE_KILL op1, USE op2);
format %{ "addl $op1, $op2\t# overflow check int" %}
ins_encode %{
__ addl($op1$$Register, $op2$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowAddI_rReg_imm(rFlagsReg cr, rax_RegI op1, immI op2)
%{
match(Set cr (OverflowAddI op1 op2));
effect(DEF cr, USE_KILL op1, USE op2);
format %{ "addl $op1, $op2\t# overflow check int" %}
ins_encode %{
__ addl($op1$$Register, $op2$$constant);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowAddL_rReg(rFlagsReg cr, rax_RegL op1, rRegL op2)
%{
match(Set cr (OverflowAddL op1 op2));
effect(DEF cr, USE_KILL op1, USE op2);
format %{ "addq $op1, $op2\t# overflow check long" %}
ins_encode %{
__ addq($op1$$Register, $op2$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowAddL_rReg_imm(rFlagsReg cr, rax_RegL op1, immL32 op2)
%{
match(Set cr (OverflowAddL op1 op2));
effect(DEF cr, USE_KILL op1, USE op2);
format %{ "addq $op1, $op2\t# overflow check long" %}
ins_encode %{
__ addq($op1$$Register, $op2$$constant);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowSubI_rReg(rFlagsReg cr, rRegI op1, rRegI op2)
%{
match(Set cr (OverflowSubI op1 op2));
format %{ "cmpl $op1, $op2\t# overflow check int" %}
ins_encode %{
__ cmpl($op1$$Register, $op2$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowSubI_rReg_imm(rFlagsReg cr, rRegI op1, immI op2)
%{
match(Set cr (OverflowSubI op1 op2));
format %{ "cmpl $op1, $op2\t# overflow check int" %}
ins_encode %{
__ cmpl($op1$$Register, $op2$$constant);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowSubL_rReg(rFlagsReg cr, rRegL op1, rRegL op2)
%{
match(Set cr (OverflowSubL op1 op2));
format %{ "cmpq $op1, $op2\t# overflow check long" %}
ins_encode %{
__ cmpq($op1$$Register, $op2$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowSubL_rReg_imm(rFlagsReg cr, rRegL op1, immL32 op2)
%{
match(Set cr (OverflowSubL op1 op2));
format %{ "cmpq $op1, $op2\t# overflow check long" %}
ins_encode %{
__ cmpq($op1$$Register, $op2$$constant);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowNegI_rReg(rFlagsReg cr, immI0 zero, rax_RegI op2)
%{
match(Set cr (OverflowSubI zero op2));
effect(DEF cr, USE_KILL op2);
format %{ "negl $op2\t# overflow check int" %}
ins_encode %{
__ negl($op2$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowNegL_rReg(rFlagsReg cr, immL0 zero, rax_RegL op2)
%{
match(Set cr (OverflowSubL zero op2));
effect(DEF cr, USE_KILL op2);
format %{ "negq $op2\t# overflow check long" %}
ins_encode %{
__ negq($op2$$Register);
%}
ins_pipe(ialu_reg_reg);
%}
instruct overflowMulI_rReg(rFlagsReg cr, rax_RegI op1, rRegI op2)
%{
match(Set cr (OverflowMulI op1 op2));
effect(DEF cr, USE_KILL op1, USE op2);
format %{ "imull $op1, $op2\t# overflow check int" %}
ins_encode %{
__ imull($op1$$Register, $op2$$Register);
%}
ins_pipe(ialu_reg_reg_alu0);
%}
instruct overflowMulI_rReg_imm(rFlagsReg cr, rRegI op1, immI op2, rRegI tmp)
%{
match(Set cr (OverflowMulI op1 op2));
effect(DEF cr, TEMP tmp, USE op1, USE op2);
format %{ "imull $tmp, $op1, $op2\t# overflow check int" %}
ins_encode %{
__ imull($tmp$$Register, $op1$$Register, $op2$$constant);
%}
ins_pipe(ialu_reg_reg_alu0);
%}
instruct overflowMulL_rReg(rFlagsReg cr, rax_RegL op1, rRegL op2)
%{
match(Set cr (OverflowMulL op1 op2));
effect(DEF cr, USE_KILL op1, USE op2);
format %{ "imulq $op1, $op2\t# overflow check long" %}
ins_encode %{
__ imulq($op1$$Register, $op2$$Register);
%}
ins_pipe(ialu_reg_reg_alu0);
%}
instruct overflowMulL_rReg_imm(rFlagsReg cr, rRegL op1, immL32 op2, rRegL tmp)
%{
match(Set cr (OverflowMulL op1 op2));
effect(DEF cr, TEMP tmp, USE op1, USE op2);
format %{ "imulq $tmp, $op1, $op2\t# overflow check long" %}
ins_encode %{
__ imulq($tmp$$Register, $op1$$Register, $op2$$constant);
%}
ins_pipe(ialu_reg_reg_alu0);
%}
//----------Control Flow Instructions------------------------------------------
//----------Control Flow Instructions------------------------------------------
// Signed compare Instructions
// Signed compare Instructions
...
...
src/share/vm/adlc/archDesc.cpp
浏览文件 @
0135bec0
...
@@ -1192,15 +1192,12 @@ void ArchDesc::buildMustCloneMap(FILE *fp_hpp, FILE *fp_cpp) {
...
@@ -1192,15 +1192,12 @@ void ArchDesc::buildMustCloneMap(FILE *fp_hpp, FILE *fp_cpp) {
||
strcmp
(
idealName
,
"CmpF"
)
==
0
||
strcmp
(
idealName
,
"CmpF"
)
==
0
||
strcmp
(
idealName
,
"FastLock"
)
==
0
||
strcmp
(
idealName
,
"FastLock"
)
==
0
||
strcmp
(
idealName
,
"FastUnlock"
)
==
0
||
strcmp
(
idealName
,
"FastUnlock"
)
==
0
||
strcmp
(
idealName
,
"AddExactI"
)
==
0
||
strcmp
(
idealName
,
"OverflowAddI"
)
==
0
||
strcmp
(
idealName
,
"AddExactL"
)
==
0
||
strcmp
(
idealName
,
"OverflowAddL"
)
==
0
||
strcmp
(
idealName
,
"SubExactI"
)
==
0
||
strcmp
(
idealName
,
"OverflowSubI"
)
==
0
||
strcmp
(
idealName
,
"SubExactL"
)
==
0
||
strcmp
(
idealName
,
"OverflowSubL"
)
==
0
||
strcmp
(
idealName
,
"MulExactI"
)
==
0
||
strcmp
(
idealName
,
"OverflowMulI"
)
==
0
||
strcmp
(
idealName
,
"MulExactL"
)
==
0
||
strcmp
(
idealName
,
"OverflowMulL"
)
==
0
||
strcmp
(
idealName
,
"NegExactI"
)
==
0
||
strcmp
(
idealName
,
"NegExactL"
)
==
0
||
strcmp
(
idealName
,
"FlagsProj"
)
==
0
||
strcmp
(
idealName
,
"Bool"
)
==
0
||
strcmp
(
idealName
,
"Bool"
)
==
0
||
strcmp
(
idealName
,
"Binary"
)
==
0
)
{
||
strcmp
(
idealName
,
"Binary"
)
==
0
)
{
// Removed ConI from the must_clone list. CPUs that cannot use
// Removed ConI from the must_clone list. CPUs that cannot use
...
...
src/share/vm/opto/c2_globals.hpp
浏览文件 @
0135bec0
...
@@ -637,7 +637,7 @@
...
@@ -637,7 +637,7 @@
diagnostic(bool, OptimizeExpensiveOps, true, \
diagnostic(bool, OptimizeExpensiveOps, true, \
"Find best control for expensive operations") \
"Find best control for expensive operations") \
\
\
experimental(bool, UseMathExactIntrinsics, false,
\
product(bool, UseMathExactIntrinsics, true,
\
"Enables intrinsification of various java.lang.Math functions") \
"Enables intrinsification of various java.lang.Math functions") \
\
\
experimental(bool, ReplaceInParentMaps, false, \
experimental(bool, ReplaceInParentMaps, false, \
...
...
src/share/vm/opto/classes.hpp
浏览文件 @
0135bec0
...
@@ -29,8 +29,6 @@ macro(AbsD)
...
@@ -29,8 +29,6 @@ macro(AbsD)
macro
(
AbsF
)
macro
(
AbsF
)
macro
(
AbsI
)
macro
(
AbsI
)
macro
(
AddD
)
macro
(
AddD
)
macro
(
AddExactI
)
macro
(
AddExactL
)
macro
(
AddF
)
macro
(
AddF
)
macro
(
AddI
)
macro
(
AddI
)
macro
(
AddL
)
macro
(
AddL
)
...
@@ -135,7 +133,6 @@ macro(EncodePKlass)
...
@@ -135,7 +133,6 @@ macro(EncodePKlass)
macro
(
ExpD
)
macro
(
ExpD
)
macro
(
FastLock
)
macro
(
FastLock
)
macro
(
FastUnlock
)
macro
(
FastUnlock
)
macro
(
FlagsProj
)
macro
(
Goto
)
macro
(
Goto
)
macro
(
Halt
)
macro
(
Halt
)
macro
(
If
)
macro
(
If
)
...
@@ -170,9 +167,6 @@ macro(Loop)
...
@@ -170,9 +167,6 @@ macro(Loop)
macro
(
LoopLimit
)
macro
(
LoopLimit
)
macro
(
Mach
)
macro
(
Mach
)
macro
(
MachProj
)
macro
(
MachProj
)
macro
(
MathExact
)
macro
(
MathExactI
)
macro
(
MathExactL
)
macro
(
MaxI
)
macro
(
MaxI
)
macro
(
MemBarAcquire
)
macro
(
MemBarAcquire
)
macro
(
MemBarAcquireLock
)
macro
(
MemBarAcquireLock
)
...
@@ -192,22 +186,24 @@ macro(MoveF2I)
...
@@ -192,22 +186,24 @@ macro(MoveF2I)
macro
(
MoveL2D
)
macro
(
MoveL2D
)
macro
(
MoveD2L
)
macro
(
MoveD2L
)
macro
(
MulD
)
macro
(
MulD
)
macro
(
MulExactI
)
macro
(
MulExactL
)
macro
(
MulF
)
macro
(
MulF
)
macro
(
MulHiL
)
macro
(
MulHiL
)
macro
(
MulI
)
macro
(
MulI
)
macro
(
MulL
)
macro
(
MulL
)
macro
(
Multi
)
macro
(
Multi
)
macro
(
NegD
)
macro
(
NegD
)
macro
(
NegExactI
)
macro
(
NegExactL
)
macro
(
NegF
)
macro
(
NegF
)
macro
(
NeverBranch
)
macro
(
NeverBranch
)
macro
(
Opaque1
)
macro
(
Opaque1
)
macro
(
Opaque2
)
macro
(
Opaque2
)
macro
(
OrI
)
macro
(
OrI
)
macro
(
OrL
)
macro
(
OrL
)
macro
(
OverflowAddI
)
macro
(
OverflowSubI
)
macro
(
OverflowMulI
)
macro
(
OverflowAddL
)
macro
(
OverflowSubL
)
macro
(
OverflowMulL
)
macro
(
PCTable
)
macro
(
PCTable
)
macro
(
Parm
)
macro
(
Parm
)
macro
(
PartialSubtypeCheck
)
macro
(
PartialSubtypeCheck
)
...
@@ -251,8 +247,6 @@ macro(StrComp)
...
@@ -251,8 +247,6 @@ macro(StrComp)
macro
(
StrEquals
)
macro
(
StrEquals
)
macro
(
StrIndexOf
)
macro
(
StrIndexOf
)
macro
(
SubD
)
macro
(
SubD
)
macro
(
SubExactI
)
macro
(
SubExactL
)
macro
(
SubF
)
macro
(
SubF
)
macro
(
SubI
)
macro
(
SubI
)
macro
(
SubL
)
macro
(
SubL
)
...
...
src/share/vm/opto/compile.cpp
浏览文件 @
0135bec0
...
@@ -3012,42 +3012,6 @@ void Compile::final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc) {
...
@@ -3012,42 +3012,6 @@ void Compile::final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc) {
n
->
set_req
(
MemBarNode
::
Precedent
,
top
());
n
->
set_req
(
MemBarNode
::
Precedent
,
top
());
}
}
break
;
break
;
// Must set a control edge on all nodes that produce a FlagsProj
// so they can't escape the block that consumes the flags.
// Must also set the non throwing branch as the control
// for all nodes that depends on the result. Unless the node
// already have a control that isn't the control of the
// flag producer
case
Op_FlagsProj
:
{
MathExactNode
*
math
=
(
MathExactNode
*
)
n
->
in
(
0
);
Node
*
ctrl
=
math
->
control_node
();
Node
*
non_throwing
=
math
->
non_throwing_branch
();
math
->
set_req
(
0
,
ctrl
);
Node
*
result
=
math
->
result_node
();
if
(
result
!=
NULL
)
{
for
(
DUIterator_Fast
jmax
,
j
=
result
->
fast_outs
(
jmax
);
j
<
jmax
;
j
++
)
{
Node
*
out
=
result
->
fast_out
(
j
);
// Phi nodes shouldn't be moved. They would only match below if they
// had the same control as the MathExactNode. The only time that
// would happen is if the Phi is also an input to the MathExact
//
// Cmp nodes shouldn't have control set at all.
if
(
out
->
is_Phi
()
||
out
->
is_Cmp
())
{
continue
;
}
if
(
out
->
in
(
0
)
==
NULL
)
{
out
->
set_req
(
0
,
non_throwing
);
}
else
if
(
out
->
in
(
0
)
==
ctrl
)
{
out
->
set_req
(
0
,
non_throwing
);
}
}
}
}
break
;
default:
default:
assert
(
!
n
->
is_Call
(),
""
);
assert
(
!
n
->
is_Call
(),
""
);
assert
(
!
n
->
is_Mem
(),
""
);
assert
(
!
n
->
is_Mem
(),
""
);
...
...
src/share/vm/opto/ifnode.cpp
浏览文件 @
0135bec0
...
@@ -76,7 +76,6 @@ static Node* split_if(IfNode *iff, PhaseIterGVN *igvn) {
...
@@ -76,7 +76,6 @@ static Node* split_if(IfNode *iff, PhaseIterGVN *igvn) {
if
(
!
i1
->
is_Bool
()
)
return
NULL
;
if
(
!
i1
->
is_Bool
()
)
return
NULL
;
BoolNode
*
b
=
i1
->
as_Bool
();
BoolNode
*
b
=
i1
->
as_Bool
();
Node
*
cmp
=
b
->
in
(
1
);
Node
*
cmp
=
b
->
in
(
1
);
if
(
cmp
->
is_FlagsProj
()
)
return
NULL
;
if
(
!
cmp
->
is_Cmp
()
)
return
NULL
;
if
(
!
cmp
->
is_Cmp
()
)
return
NULL
;
i1
=
cmp
->
in
(
1
);
i1
=
cmp
->
in
(
1
);
if
(
i1
==
NULL
||
!
i1
->
is_Phi
()
)
return
NULL
;
if
(
i1
==
NULL
||
!
i1
->
is_Phi
()
)
return
NULL
;
...
...
src/share/vm/opto/lcm.cpp
浏览文件 @
0135bec0
...
@@ -472,13 +472,6 @@ Node* PhaseCFG::select(Block* block, Node_List &worklist, GrowableArray<int> &re
...
@@ -472,13 +472,6 @@ Node* PhaseCFG::select(Block* block, Node_List &worklist, GrowableArray<int> &re
break
;
break
;
}
}
// For nodes that produce a FlagsProj, make the node adjacent to the
// use of the FlagsProj
if
(
use
->
is_FlagsProj
()
&&
get_block_for_node
(
use
)
==
block
)
{
found_machif
=
true
;
break
;
}
// More than this instruction pending for successor to be ready,
// More than this instruction pending for successor to be ready,
// don't choose this if other opportunities are ready
// don't choose this if other opportunities are ready
if
(
ready_cnt
.
at
(
use
->
_idx
)
>
1
)
if
(
ready_cnt
.
at
(
use
->
_idx
)
>
1
)
...
...
src/share/vm/opto/library_call.cpp
浏览文件 @
0135bec0
...
@@ -203,7 +203,9 @@ class LibraryCallKit : public GraphKit {
...
@@ -203,7 +203,9 @@ class LibraryCallKit : public GraphKit {
bool
inline_math_native
(
vmIntrinsics
::
ID
id
);
bool
inline_math_native
(
vmIntrinsics
::
ID
id
);
bool
inline_trig
(
vmIntrinsics
::
ID
id
);
bool
inline_trig
(
vmIntrinsics
::
ID
id
);
bool
inline_math
(
vmIntrinsics
::
ID
id
);
bool
inline_math
(
vmIntrinsics
::
ID
id
);
void
inline_math_mathExact
(
Node
*
math
);
template
<
typename
OverflowOp
>
bool
inline_math_overflow
(
Node
*
arg1
,
Node
*
arg2
);
void
inline_math_mathExact
(
Node
*
math
,
Node
*
test
);
bool
inline_math_addExactI
(
bool
is_increment
);
bool
inline_math_addExactI
(
bool
is_increment
);
bool
inline_math_addExactL
(
bool
is_increment
);
bool
inline_math_addExactL
(
bool
is_increment
);
bool
inline_math_multiplyExactI
();
bool
inline_math_multiplyExactI
();
...
@@ -517,31 +519,31 @@ CallGenerator* Compile::make_vm_intrinsic(ciMethod* m, bool is_virtual) {
...
@@ -517,31 +519,31 @@ CallGenerator* Compile::make_vm_intrinsic(ciMethod* m, bool is_virtual) {
case
vmIntrinsics
::
_incrementExactI
:
case
vmIntrinsics
::
_incrementExactI
:
case
vmIntrinsics
::
_addExactI
:
case
vmIntrinsics
::
_addExactI
:
if
(
!
Matcher
::
match_rule_supported
(
Op_
AddExact
I
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
if
(
!
Matcher
::
match_rule_supported
(
Op_
OverflowAdd
I
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
break
;
break
;
case
vmIntrinsics
::
_incrementExactL
:
case
vmIntrinsics
::
_incrementExactL
:
case
vmIntrinsics
::
_addExactL
:
case
vmIntrinsics
::
_addExactL
:
if
(
!
Matcher
::
match_rule_supported
(
Op_
AddExact
L
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
if
(
!
Matcher
::
match_rule_supported
(
Op_
OverflowAdd
L
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
break
;
break
;
case
vmIntrinsics
::
_decrementExactI
:
case
vmIntrinsics
::
_decrementExactI
:
case
vmIntrinsics
::
_subtractExactI
:
case
vmIntrinsics
::
_subtractExactI
:
if
(
!
Matcher
::
match_rule_supported
(
Op_
SubExact
I
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
if
(
!
Matcher
::
match_rule_supported
(
Op_
OverflowSub
I
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
break
;
break
;
case
vmIntrinsics
::
_decrementExactL
:
case
vmIntrinsics
::
_decrementExactL
:
case
vmIntrinsics
::
_subtractExactL
:
case
vmIntrinsics
::
_subtractExactL
:
if
(
!
Matcher
::
match_rule_supported
(
Op_
SubExact
L
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
if
(
!
Matcher
::
match_rule_supported
(
Op_
OverflowSub
L
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
break
;
break
;
case
vmIntrinsics
::
_negateExactI
:
case
vmIntrinsics
::
_negateExactI
:
if
(
!
Matcher
::
match_rule_supported
(
Op_
NegExact
I
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
if
(
!
Matcher
::
match_rule_supported
(
Op_
OverflowSub
I
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
break
;
break
;
case
vmIntrinsics
::
_negateExactL
:
case
vmIntrinsics
::
_negateExactL
:
if
(
!
Matcher
::
match_rule_supported
(
Op_
NegExact
L
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
if
(
!
Matcher
::
match_rule_supported
(
Op_
OverflowSub
L
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
break
;
break
;
case
vmIntrinsics
::
_multiplyExactI
:
case
vmIntrinsics
::
_multiplyExactI
:
if
(
!
Matcher
::
match_rule_supported
(
Op_
MulExact
I
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
if
(
!
Matcher
::
match_rule_supported
(
Op_
OverflowMul
I
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
break
;
break
;
case
vmIntrinsics
::
_multiplyExactL
:
case
vmIntrinsics
::
_multiplyExactL
:
if
(
!
Matcher
::
match_rule_supported
(
Op_
MulExact
L
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
if
(
!
Matcher
::
match_rule_supported
(
Op_
OverflowMul
L
)
||
!
UseMathExactIntrinsics
)
return
NULL
;
break
;
break
;
default:
default:
...
@@ -1970,18 +1972,8 @@ bool LibraryCallKit::inline_min_max(vmIntrinsics::ID id) {
...
@@ -1970,18 +1972,8 @@ bool LibraryCallKit::inline_min_max(vmIntrinsics::ID id) {
return
true
;
return
true
;
}
}
void
LibraryCallKit
::
inline_math_mathExact
(
Node
*
math
)
{
void
LibraryCallKit
::
inline_math_mathExact
(
Node
*
math
,
Node
*
test
)
{
// If we didn't get the expected opcode it means we have optimized
Node
*
bol
=
_gvn
.
transform
(
new
(
C
)
BoolNode
(
test
,
BoolTest
::
overflow
)
);
// the node to something else and don't need the exception edge.
if
(
!
math
->
is_MathExact
())
{
set_result
(
math
);
return
;
}
Node
*
result
=
_gvn
.
transform
(
new
(
C
)
ProjNode
(
math
,
MathExactNode
::
result_proj_node
));
Node
*
flags
=
_gvn
.
transform
(
new
(
C
)
FlagsProjNode
(
math
,
MathExactNode
::
flags_proj_node
));
Node
*
bol
=
_gvn
.
transform
(
new
(
C
)
BoolNode
(
flags
,
BoolTest
::
overflow
)
);
IfNode
*
check
=
create_and_map_if
(
control
(),
bol
,
PROB_UNLIKELY_MAG
(
3
),
COUNT_UNKNOWN
);
IfNode
*
check
=
create_and_map_if
(
control
(),
bol
,
PROB_UNLIKELY_MAG
(
3
),
COUNT_UNKNOWN
);
Node
*
fast_path
=
_gvn
.
transform
(
new
(
C
)
IfFalseNode
(
check
));
Node
*
fast_path
=
_gvn
.
transform
(
new
(
C
)
IfFalseNode
(
check
));
Node
*
slow_path
=
_gvn
.
transform
(
new
(
C
)
IfTrueNode
(
check
)
);
Node
*
slow_path
=
_gvn
.
transform
(
new
(
C
)
IfTrueNode
(
check
)
);
...
@@ -1999,108 +1991,50 @@ void LibraryCallKit::inline_math_mathExact(Node* math) {
...
@@ -1999,108 +1991,50 @@ void LibraryCallKit::inline_math_mathExact(Node* math) {
}
}
set_control
(
fast_path
);
set_control
(
fast_path
);
set_result
(
result
);
set_result
(
math
);
}
}
bool
LibraryCallKit
::
inline_math_addExactI
(
bool
is_increment
)
{
template
<
typename
OverflowOp
>
Node
*
arg1
=
argument
(
0
);
bool
LibraryCallKit
::
inline_math_overflow
(
Node
*
arg1
,
Node
*
arg2
)
{
Node
*
arg2
=
NULL
;
typedef
typename
OverflowOp
::
MathOp
MathOp
;
if
(
is_increment
)
{
MathOp
*
mathOp
=
new
(
C
)
MathOp
(
arg1
,
arg2
);
arg2
=
intcon
(
1
);
Node
*
operation
=
_gvn
.
transform
(
mathOp
);
}
else
{
Node
*
ofcheck
=
_gvn
.
transform
(
new
(
C
)
OverflowOp
(
arg1
,
arg2
)
);
arg2
=
argument
(
1
);
inline_math_mathExact
(
operation
,
ofcheck
);
}
Node
*
add
=
_gvn
.
transform
(
new
(
C
)
AddExactINode
(
NULL
,
arg1
,
arg2
)
);
inline_math_mathExact
(
add
);
return
true
;
return
true
;
}
}
bool
LibraryCallKit
::
inline_math_addExactL
(
bool
is_increment
)
{
bool
LibraryCallKit
::
inline_math_addExactI
(
bool
is_increment
)
{
Node
*
arg1
=
argument
(
0
);
// type long
return
inline_math_overflow
<
OverflowAddINode
>
(
argument
(
0
),
is_increment
?
intcon
(
1
)
:
argument
(
1
));
// argument(1) == TOP
}
Node
*
arg2
=
NULL
;
if
(
is_increment
)
{
arg2
=
longcon
(
1
);
}
else
{
arg2
=
argument
(
2
);
// type long
// argument(3) == TOP
}
Node
*
add
=
_gvn
.
transform
(
new
(
C
)
AddExactLNode
(
NULL
,
arg1
,
arg2
));
bool
LibraryCallKit
::
inline_math_addExactL
(
bool
is_increment
)
{
inline_math_mathExact
(
add
);
return
inline_math_overflow
<
OverflowAddLNode
>
(
argument
(
0
),
is_increment
?
longcon
(
1
)
:
argument
(
2
));
return
true
;
}
}
bool
LibraryCallKit
::
inline_math_subtractExactI
(
bool
is_decrement
)
{
bool
LibraryCallKit
::
inline_math_subtractExactI
(
bool
is_decrement
)
{
Node
*
arg1
=
argument
(
0
);
return
inline_math_overflow
<
OverflowSubINode
>
(
argument
(
0
),
is_decrement
?
intcon
(
1
)
:
argument
(
1
));
Node
*
arg2
=
NULL
;
if
(
is_decrement
)
{
arg2
=
intcon
(
1
);
}
else
{
arg2
=
argument
(
1
);
}
Node
*
sub
=
_gvn
.
transform
(
new
(
C
)
SubExactINode
(
NULL
,
arg1
,
arg2
));
inline_math_mathExact
(
sub
);
return
true
;
}
}
bool
LibraryCallKit
::
inline_math_subtractExactL
(
bool
is_decrement
)
{
bool
LibraryCallKit
::
inline_math_subtractExactL
(
bool
is_decrement
)
{
Node
*
arg1
=
argument
(
0
);
// type long
return
inline_math_overflow
<
OverflowSubLNode
>
(
argument
(
0
),
is_decrement
?
longcon
(
1
)
:
argument
(
2
));
// argument(1) == TOP
Node
*
arg2
=
NULL
;
if
(
is_decrement
)
{
arg2
=
longcon
(
1
);
}
else
{
arg2
=
argument
(
2
);
// type long
// argument(3) == TOP
}
Node
*
sub
=
_gvn
.
transform
(
new
(
C
)
SubExactLNode
(
NULL
,
arg1
,
arg2
));
inline_math_mathExact
(
sub
);
return
true
;
}
}
bool
LibraryCallKit
::
inline_math_negateExactI
()
{
bool
LibraryCallKit
::
inline_math_negateExactI
()
{
Node
*
arg1
=
argument
(
0
);
return
inline_math_overflow
<
OverflowSubINode
>
(
intcon
(
0
),
argument
(
0
));
Node
*
neg
=
_gvn
.
transform
(
new
(
C
)
NegExactINode
(
NULL
,
arg1
));
inline_math_mathExact
(
neg
);
return
true
;
}
}
bool
LibraryCallKit
::
inline_math_negateExactL
()
{
bool
LibraryCallKit
::
inline_math_negateExactL
()
{
Node
*
arg1
=
argument
(
0
);
return
inline_math_overflow
<
OverflowSubLNode
>
(
longcon
(
0
),
argument
(
0
));
// argument(1) == TOP
Node
*
neg
=
_gvn
.
transform
(
new
(
C
)
NegExactLNode
(
NULL
,
arg1
));
inline_math_mathExact
(
neg
);
return
true
;
}
}
bool
LibraryCallKit
::
inline_math_multiplyExactI
()
{
bool
LibraryCallKit
::
inline_math_multiplyExactI
()
{
Node
*
arg1
=
argument
(
0
);
return
inline_math_overflow
<
OverflowMulINode
>
(
argument
(
0
),
argument
(
1
));
Node
*
arg2
=
argument
(
1
);
Node
*
mul
=
_gvn
.
transform
(
new
(
C
)
MulExactINode
(
NULL
,
arg1
,
arg2
));
inline_math_mathExact
(
mul
);
return
true
;
}
}
bool
LibraryCallKit
::
inline_math_multiplyExactL
()
{
bool
LibraryCallKit
::
inline_math_multiplyExactL
()
{
Node
*
arg1
=
argument
(
0
);
return
inline_math_overflow
<
OverflowMulLNode
>
(
argument
(
0
),
argument
(
2
));
// argument(1) == TOP
Node
*
arg2
=
argument
(
2
);
// argument(3) == TOP
Node
*
mul
=
_gvn
.
transform
(
new
(
C
)
MulExactLNode
(
NULL
,
arg1
,
arg2
));
inline_math_mathExact
(
mul
);
return
true
;
}
}
Node
*
Node
*
...
...
src/share/vm/opto/loopTransform.cpp
浏览文件 @
0135bec0
...
@@ -713,10 +713,6 @@ bool IdealLoopTree::policy_unroll( PhaseIdealLoop *phase ) const {
...
@@ -713,10 +713,6 @@ bool IdealLoopTree::policy_unroll( PhaseIdealLoop *phase ) const {
case
Op_ModL
:
body_size
+=
30
;
break
;
case
Op_ModL
:
body_size
+=
30
;
break
;
case
Op_DivL
:
body_size
+=
30
;
break
;
case
Op_DivL
:
body_size
+=
30
;
break
;
case
Op_MulL
:
body_size
+=
10
;
break
;
case
Op_MulL
:
body_size
+=
10
;
break
;
case
Op_FlagsProj
:
// Can't handle unrolling of loops containing
// nodes that generate a FlagsProj at the moment
return
false
;
case
Op_StrComp
:
case
Op_StrComp
:
case
Op_StrEquals
:
case
Op_StrEquals
:
case
Op_StrIndexOf
:
case
Op_StrIndexOf
:
...
@@ -780,10 +776,6 @@ bool IdealLoopTree::policy_range_check( PhaseIdealLoop *phase ) const {
...
@@ -780,10 +776,6 @@ bool IdealLoopTree::policy_range_check( PhaseIdealLoop *phase ) const {
continue
;
// not RC
continue
;
// not RC
Node
*
cmp
=
bol
->
in
(
1
);
Node
*
cmp
=
bol
->
in
(
1
);
if
(
cmp
->
is_FlagsProj
())
{
continue
;
}
Node
*
rc_exp
=
cmp
->
in
(
1
);
Node
*
rc_exp
=
cmp
->
in
(
1
);
Node
*
limit
=
cmp
->
in
(
2
);
Node
*
limit
=
cmp
->
in
(
2
);
...
...
src/share/vm/opto/loopopts.cpp
浏览文件 @
0135bec0
...
@@ -43,12 +43,6 @@ Node *PhaseIdealLoop::split_thru_phi( Node *n, Node *region, int policy ) {
...
@@ -43,12 +43,6 @@ Node *PhaseIdealLoop::split_thru_phi( Node *n, Node *region, int policy ) {
return
NULL
;
return
NULL
;
}
}
if
(
n
->
is_MathExact
())
{
// MathExact has projections that are not correctly handled in the code
// below.
return
NULL
;
}
int
wins
=
0
;
int
wins
=
0
;
assert
(
!
n
->
is_CFG
(),
""
);
assert
(
!
n
->
is_CFG
(),
""
);
assert
(
region
->
is_Region
(),
""
);
assert
(
region
->
is_Region
(),
""
);
...
@@ -2362,8 +2356,7 @@ bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) {
...
@@ -2362,8 +2356,7 @@ bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) {
opc
==
Op_Catch
||
opc
==
Op_Catch
||
opc
==
Op_CatchProj
||
opc
==
Op_CatchProj
||
opc
==
Op_Jump
||
opc
==
Op_Jump
||
opc
==
Op_JumpProj
||
opc
==
Op_JumpProj
)
{
opc
==
Op_FlagsProj
)
{
#if !defined(PRODUCT)
#if !defined(PRODUCT)
if
(
TracePartialPeeling
)
{
if
(
TracePartialPeeling
)
{
tty
->
print_cr
(
"
\n
Exit control too complex: lp: %d"
,
head
->
_idx
);
tty
->
print_cr
(
"
\n
Exit control too complex: lp: %d"
,
head
->
_idx
);
...
...
src/share/vm/opto/matcher.cpp
浏览文件 @
0135bec0
...
@@ -1984,7 +1984,6 @@ void Matcher::find_shared( Node *n ) {
...
@@ -1984,7 +1984,6 @@ void Matcher::find_shared( Node *n ) {
case
Op_Catch
:
case
Op_Catch
:
case
Op_CatchProj
:
case
Op_CatchProj
:
case
Op_CProj
:
case
Op_CProj
:
case
Op_FlagsProj
:
case
Op_JumpProj
:
case
Op_JumpProj
:
case
Op_JProj
:
case
Op_JProj
:
case
Op_NeverBranch
:
case
Op_NeverBranch
:
...
...
src/share/vm/opto/matcher.hpp
浏览文件 @
0135bec0
...
@@ -340,10 +340,6 @@ public:
...
@@ -340,10 +340,6 @@ public:
// Register for MODL projection of divmodL
// Register for MODL projection of divmodL
static
RegMask
modL_proj_mask
();
static
RegMask
modL_proj_mask
();
static
const
RegMask
mathExactI_result_proj_mask
();
static
const
RegMask
mathExactL_result_proj_mask
();
static
const
RegMask
mathExactI_flags_proj_mask
();
// Use hardware DIV instruction when it is faster than
// Use hardware DIV instruction when it is faster than
// a code which use multiply for division by constant.
// a code which use multiply for division by constant.
static
bool
use_asm_for_ldiv_by_con
(
jlong
divisor
);
static
bool
use_asm_for_ldiv_by_con
(
jlong
divisor
);
...
...
src/share/vm/opto/mathexactnode.cpp
浏览文件 @
0135bec0
...
@@ -31,400 +31,227 @@
...
@@ -31,400 +31,227 @@
#include "opto/mathexactnode.hpp"
#include "opto/mathexactnode.hpp"
#include "opto/subnode.hpp"
#include "opto/subnode.hpp"
MathExactNode
::
MathExactNode
(
Node
*
ctrl
,
Node
*
in1
)
:
MultiNode
(
2
)
{
template
<
typename
OverflowOp
>
init_class_id
(
Class_MathExact
);
class
AddHelper
{
init_req
(
0
,
ctrl
);
public:
init_req
(
1
,
in1
);
typedef
typename
OverflowOp
::
TypeClass
TypeClass
;
}
typedef
typename
TypeClass
::
NativeType
NativeType
;
MathExactNode
::
MathExactNode
(
Node
*
ctrl
,
Node
*
in1
,
Node
*
in2
)
:
MultiNode
(
3
)
{
static
bool
will_overflow
(
NativeType
value1
,
NativeType
value2
)
{
init_class_id
(
Class_MathExact
);
NativeType
result
=
value1
+
value2
;
init_req
(
0
,
ctrl
);
init_req
(
1
,
in1
);
init_req
(
2
,
in2
);
}
BoolNode
*
MathExactNode
::
bool_node
()
const
{
Node
*
flags
=
flags_node
();
BoolNode
*
boolnode
=
flags
->
unique_out
()
->
as_Bool
();
assert
(
boolnode
!=
NULL
,
"must have BoolNode"
);
return
boolnode
;
}
IfNode
*
MathExactNode
::
if_node
()
const
{
BoolNode
*
boolnode
=
bool_node
();
IfNode
*
ifnode
=
boolnode
->
unique_out
()
->
as_If
();
assert
(
ifnode
!=
NULL
,
"must have IfNode"
);
return
ifnode
;
}
Node
*
MathExactNode
::
control_node
()
const
{
IfNode
*
ifnode
=
if_node
();
return
ifnode
->
in
(
0
);
}
Node
*
MathExactNode
::
non_throwing_branch
()
const
{
IfNode
*
ifnode
=
if_node
();
if
(
bool_node
()
->
_test
.
_test
==
BoolTest
::
overflow
)
{
return
ifnode
->
proj_out
(
0
);
}
return
ifnode
->
proj_out
(
1
);
}
// If the MathExactNode won't overflow we have to replace the
// FlagsProjNode and ProjNode that is generated by the MathExactNode
Node
*
MathExactNode
::
no_overflow
(
PhaseGVN
*
phase
,
Node
*
new_result
)
{
PhaseIterGVN
*
igvn
=
phase
->
is_IterGVN
();
if
(
igvn
)
{
ProjNode
*
result
=
result_node
();
ProjNode
*
flags
=
flags_node
();
if
(
result
!=
NULL
)
{
igvn
->
replace_node
(
result
,
new_result
);
}
if
(
flags
!=
NULL
)
{
BoolNode
*
boolnode
=
bool_node
();
switch
(
boolnode
->
_test
.
_test
)
{
case
BoolTest
::
overflow
:
// if the check is for overflow - never taken
igvn
->
replace_node
(
boolnode
,
phase
->
intcon
(
0
));
break
;
case
BoolTest
::
no_overflow
:
// if the check is for no overflow - always taken
igvn
->
replace_node
(
boolnode
,
phase
->
intcon
(
1
));
break
;
default:
fatal
(
"Unexpected value of BoolTest"
);
break
;
}
flags
->
del_req
(
0
);
}
}
return
new_result
;
}
Node
*
MathExactINode
::
match
(
const
ProjNode
*
proj
,
const
Matcher
*
m
)
{
uint
ideal_reg
=
proj
->
ideal_reg
();
RegMask
rm
;
if
(
proj
->
_con
==
result_proj_node
)
{
rm
=
m
->
mathExactI_result_proj_mask
();
}
else
{
assert
(
proj
->
_con
==
flags_proj_node
,
"must be result or flags"
);
assert
(
ideal_reg
==
Op_RegFlags
,
"sanity"
);
rm
=
m
->
mathExactI_flags_proj_mask
();
}
return
new
(
m
->
C
)
MachProjNode
(
this
,
proj
->
_con
,
rm
,
ideal_reg
);
}
Node
*
MathExactLNode
::
match
(
const
ProjNode
*
proj
,
const
Matcher
*
m
)
{
uint
ideal_reg
=
proj
->
ideal_reg
();
RegMask
rm
;
if
(
proj
->
_con
==
result_proj_node
)
{
rm
=
m
->
mathExactL_result_proj_mask
();
}
else
{
assert
(
proj
->
_con
==
flags_proj_node
,
"must be result or flags"
);
assert
(
ideal_reg
==
Op_RegFlags
,
"sanity"
);
rm
=
m
->
mathExactI_flags_proj_mask
();
}
return
new
(
m
->
C
)
MachProjNode
(
this
,
proj
->
_con
,
rm
,
ideal_reg
);
}
Node
*
AddExactINode
::
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
)
{
Node
*
arg1
=
in
(
1
);
Node
*
arg2
=
in
(
2
);
const
Type
*
type1
=
phase
->
type
(
arg1
);
const
Type
*
type2
=
phase
->
type
(
arg2
);
if
(
type1
!=
Type
::
TOP
&&
type1
->
singleton
()
&&
type2
!=
Type
::
TOP
&&
type2
->
singleton
())
{
jint
val1
=
arg1
->
get_int
();
jint
val2
=
arg2
->
get_int
();
jint
result
=
val1
+
val2
;
// Hacker's Delight 2-12 Overflow if both arguments have the opposite sign of the result
// Hacker's Delight 2-12 Overflow if both arguments have the opposite sign of the result
if
(
(((
val1
^
result
)
&
(
val2
^
result
))
>=
0
))
{
if
(((
value1
^
result
)
&
(
value2
^
result
))
>=
0
)
{
Node
*
con_result
=
ConINode
::
make
(
phase
->
C
,
result
);
return
false
;
return
no_overflow
(
phase
,
con_result
);
}
}
return
NULL
;
return
true
;
}
}
if
(
type1
==
TypeInt
::
ZERO
||
type2
==
TypeInt
::
ZERO
)
{
// (Add 0 x) == x
static
bool
can_overflow
(
const
Type
*
type1
,
const
Type
*
type2
)
{
Node
*
add_result
=
new
(
phase
->
C
)
AddINode
(
arg1
,
arg2
);
if
(
type1
==
TypeClass
::
ZERO
||
type2
==
TypeClass
::
ZERO
)
{
return
no_overflow
(
phase
,
add_result
);
return
false
;
}
return
true
;
}
}
};
if
(
type2
->
singleton
())
{
template
<
typename
OverflowOp
>
return
NULL
;
// no change - keep constant on the right
class
SubHelper
{
}
public:
typedef
typename
OverflowOp
::
TypeClass
TypeClass
;
typedef
typename
TypeClass
::
NativeType
NativeType
;
if
(
type1
->
singleton
())
{
static
bool
will_overflow
(
NativeType
value1
,
NativeType
value2
)
{
// Make it x + Constant - move constant to the right
NativeType
result
=
value1
-
value2
;
swap_edges
(
1
,
2
);
// hacker's delight 2-12 overflow iff the arguments have different signs and
return
this
;
// the sign of the result is different than the sign of arg1
if
(((
value1
^
value2
)
&
(
value1
^
result
))
>=
0
)
{
return
false
;
}
return
true
;
}
}
if
(
arg2
->
is_Load
())
{
static
bool
can_overflow
(
const
Type
*
type1
,
const
Type
*
type2
)
{
return
NULL
;
// no change - keep load on the right
if
(
type2
==
TypeClass
::
ZERO
)
{
return
false
;
}
return
true
;
}
}
};
if
(
arg1
->
is_Load
())
{
template
<
typename
OverflowOp
>
// Make it x + Load - move load to the right
class
MulHelper
{
swap_edges
(
1
,
2
);
public:
return
this
;
typedef
typename
OverflowOp
::
TypeClass
TypeClass
;
}
if
(
arg1
->
_idx
>
arg2
->
_idx
)
{
static
bool
can_overflow
(
const
Type
*
type1
,
const
Type
*
type2
)
{
// Sort the edges
if
(
type1
==
TypeClass
::
ZERO
||
type2
==
TypeClass
::
ZERO
)
{
swap_edges
(
1
,
2
);
return
false
;
return
this
;
}
else
if
(
type1
==
TypeClass
::
ONE
||
type2
==
TypeClass
::
ONE
)
{
return
false
;
}
return
true
;
}
}
};
return
NULL
;
bool
OverflowAddINode
::
will_overflow
(
jint
v1
,
jint
v2
)
const
{
return
AddHelper
<
OverflowAddINode
>::
will_overflow
(
v1
,
v2
);
}
}
Node
*
AddExactLNode
::
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
)
{
bool
OverflowSubINode
::
will_overflow
(
jint
v1
,
jint
v2
)
const
{
Node
*
arg1
=
in
(
1
);
return
SubHelper
<
OverflowSubINode
>::
will_overflow
(
v1
,
v2
);
Node
*
arg2
=
in
(
2
);
}
const
Type
*
type1
=
phase
->
type
(
arg1
);
const
Type
*
type2
=
phase
->
type
(
arg2
);
if
(
type1
!=
Type
::
TOP
&&
type1
->
singleton
()
&&
bool
OverflowMulINode
::
will_overflow
(
jint
v1
,
jint
v2
)
const
{
type2
!=
Type
::
TOP
&&
type2
->
singleton
())
{
jlong
result
=
(
jlong
)
v1
*
(
jlong
)
v2
;
jlong
val1
=
arg1
->
get_long
();
if
((
jint
)
result
==
result
)
{
jlong
val2
=
arg2
->
get_long
();
return
false
;
jlong
result
=
val1
+
val2
;
// Hacker's Delight 2-12 Overflow if both arguments have the opposite sign of the result
if
(
(((
val1
^
result
)
&
(
val2
^
result
))
>=
0
))
{
Node
*
con_result
=
ConLNode
::
make
(
phase
->
C
,
result
);
return
no_overflow
(
phase
,
con_result
);
}
}
return
NULL
;
return
true
;
}
if
(
type1
==
TypeLong
::
ZERO
||
type2
==
TypeLong
::
ZERO
)
{
// (Add 0 x) == x
Node
*
add_result
=
new
(
phase
->
C
)
AddLNode
(
arg1
,
arg2
);
return
no_overflow
(
phase
,
add_result
);
}
if
(
type2
->
singleton
())
{
return
NULL
;
// no change - keep constant on the right
}
if
(
type1
->
singleton
())
{
// Make it x + Constant - move constant to the right
swap_edges
(
1
,
2
);
return
this
;
}
if
(
arg2
->
is_Load
())
{
return
NULL
;
// no change - keep load on the right
}
if
(
arg1
->
is_Load
())
{
// Make it x + Load - move load to the right
swap_edges
(
1
,
2
);
return
this
;
}
if
(
arg1
->
_idx
>
arg2
->
_idx
)
{
// Sort the edges
swap_edges
(
1
,
2
);
return
this
;
}
return
NULL
;
}
}
Node
*
SubExactINode
::
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
)
{
bool
OverflowAddLNode
::
will_overflow
(
jlong
v1
,
jlong
v2
)
const
{
Node
*
arg1
=
in
(
1
);
return
AddHelper
<
OverflowAddLNode
>::
will_overflow
(
v1
,
v2
);
Node
*
arg2
=
in
(
2
);
}
const
Type
*
type1
=
phase
->
type
(
arg1
);
bool
OverflowSubLNode
::
will_overflow
(
jlong
v1
,
jlong
v2
)
const
{
const
Type
*
type2
=
phase
->
type
(
arg2
);
return
SubHelper
<
OverflowSubLNode
>::
will_overflow
(
v1
,
v2
);
}
if
(
type1
!=
Type
::
TOP
&&
type1
->
singleton
()
&&
bool
OverflowMulLNode
::
will_overflow
(
jlong
val1
,
jlong
val2
)
const
{
type2
!=
Type
::
TOP
&&
type2
->
singleton
())
{
jlong
result
=
val1
*
val2
;
jint
val1
=
arg1
->
get_int
();
jlong
ax
=
(
val1
<
0
?
-
val1
:
val1
);
jint
val2
=
arg2
->
get_int
();
jlong
ay
=
(
val2
<
0
?
-
val2
:
val2
);
jint
result
=
val1
-
val2
;
// Hacker's Delight 2-12 Overflow iff the arguments have different signs and
bool
overflow
=
false
;
// the sign of the result is different than the sign of arg1
if
((
ax
|
ay
)
&
CONST64
(
0xFFFFFFFF00000000
))
{
if
(((
val1
^
val2
)
&
(
val1
^
result
))
>=
0
)
{
// potential overflow if any bit in upper 32 bits are set
Node
*
con_result
=
ConINode
::
make
(
phase
->
C
,
result
);
if
((
val1
==
min_jlong
&&
val2
==
-
1
)
||
(
val2
==
min_jlong
&&
val1
==
-
1
))
{
return
no_overflow
(
phase
,
con_result
);
// -1 * Long.MIN_VALUE will overflow
overflow
=
true
;
}
else
if
(
val2
!=
0
&&
(
result
/
val2
!=
val1
))
{
overflow
=
true
;
}
}
}
return
NULL
;
}
if
(
type1
==
TypeInt
::
ZERO
||
type2
==
TypeInt
::
ZERO
)
{
// Sub with zero is the same as add with zero
Node
*
add_result
=
new
(
phase
->
C
)
AddINode
(
arg1
,
arg2
);
return
no_overflow
(
phase
,
add_result
);
}
return
NULL
;
return
overflow
;
}
}
Node
*
SubExactLNode
::
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
)
{
bool
OverflowAddINode
::
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
{
Node
*
arg1
=
in
(
1
);
return
AddHelper
<
OverflowAddINode
>::
can_overflow
(
t1
,
t2
);
Node
*
arg2
=
in
(
2
);
}
const
Type
*
type1
=
phase
->
type
(
arg1
);
const
Type
*
type2
=
phase
->
type
(
arg2
);
if
(
type1
!=
Type
::
TOP
&&
type1
->
singleton
()
&&
type2
!=
Type
::
TOP
&&
type2
->
singleton
())
{
jlong
val1
=
arg1
->
get_long
();
jlong
val2
=
arg2
->
get_long
();
jlong
result
=
val1
-
val2
;
// Hacker's Delight 2-12 Overflow iff the arguments have different signs and
// the sign of the result is different than the sign of arg1
if
(((
val1
^
val2
)
&
(
val1
^
result
))
>=
0
)
{
Node
*
con_result
=
ConLNode
::
make
(
phase
->
C
,
result
);
return
no_overflow
(
phase
,
con_result
);
}
return
NULL
;
}
if
(
type1
==
TypeLong
::
ZERO
||
type2
==
TypeLong
::
ZERO
)
{
bool
OverflowSubINode
::
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
{
// Sub with zero is the same as add with zero
if
(
in
(
1
)
==
in
(
2
))
{
Node
*
add_result
=
new
(
phase
->
C
)
AddLNode
(
arg1
,
arg2
);
return
false
;
return
no_overflow
(
phase
,
add_result
);
}
}
return
SubHelper
<
OverflowSubINode
>::
can_overflow
(
t1
,
t2
);
}
return
NULL
;
bool
OverflowMulINode
::
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
{
return
MulHelper
<
OverflowMulINode
>::
can_overflow
(
t1
,
t2
);
}
}
Node
*
NegExactINode
::
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
)
{
bool
OverflowAddLNode
::
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
{
Node
*
arg
=
in
(
1
);
return
AddHelper
<
OverflowAddLNode
>::
can_overflow
(
t1
,
t2
);
}
const
Type
*
type
=
phase
->
type
(
arg
);
bool
OverflowSubLNode
::
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
{
if
(
type
!=
Type
::
TOP
&&
type
->
singleton
())
{
if
(
in
(
1
)
==
in
(
2
))
{
jint
value
=
arg
->
get_int
();
return
false
;
if
(
value
!=
min_jint
)
{
Node
*
neg_result
=
ConINode
::
make
(
phase
->
C
,
-
value
);
return
no_overflow
(
phase
,
neg_result
);
}
}
}
return
NULL
;
return
SubHelper
<
OverflowSubLNode
>::
can_overflow
(
t1
,
t2
)
;
}
}
Node
*
NegExactLNode
::
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
)
{
bool
OverflowMulLNode
::
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
{
Node
*
arg
=
in
(
1
);
return
MulHelper
<
OverflowMulLNode
>::
can_overflow
(
t1
,
t2
);
}
const
Type
*
type
=
phase
->
type
(
arg
);
const
Type
*
OverflowNode
::
sub
(
const
Type
*
t1
,
const
Type
*
t2
)
const
{
if
(
type
!=
Type
::
TOP
&&
type
->
singleton
())
{
fatal
(
err_msg_res
(
"sub() should not be called for '%s'"
,
NodeClassNames
[
this
->
Opcode
()]));
jlong
value
=
arg
->
get_long
();
return
TypeInt
::
CC
;
if
(
value
!=
min_jlong
)
{
Node
*
neg_result
=
ConLNode
::
make
(
phase
->
C
,
-
value
);
return
no_overflow
(
phase
,
neg_result
);
}
}
return
NULL
;
}
}
Node
*
MulExactINode
::
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
)
{
template
<
typename
OverflowOp
>
Node
*
arg1
=
in
(
1
);
struct
IdealHelper
{
Node
*
arg2
=
in
(
2
);
typedef
typename
OverflowOp
::
TypeClass
TypeClass
;
// TypeInt, TypeLong
typedef
typename
TypeClass
::
NativeType
NativeType
;
const
Type
*
type1
=
phase
->
type
(
arg1
);
static
Node
*
Ideal
(
const
OverflowOp
*
node
,
PhaseGVN
*
phase
,
bool
can_reshape
)
{
const
Type
*
type2
=
phase
->
type
(
arg2
);
Node
*
arg1
=
node
->
in
(
1
);
Node
*
arg2
=
node
->
in
(
2
);
const
Type
*
type1
=
phase
->
type
(
arg1
);
const
Type
*
type2
=
phase
->
type
(
arg2
);
if
(
type1
!=
Type
::
TOP
&&
type1
->
singleton
()
&&
if
(
type1
==
NULL
||
type2
==
NULL
)
{
type2
!=
Type
::
TOP
&&
type2
->
singleton
())
{
return
NULL
;
jint
val1
=
arg1
->
get_int
();
jint
val2
=
arg2
->
get_int
();
jlong
result
=
(
jlong
)
val1
*
(
jlong
)
val2
;
if
((
jint
)
result
==
result
)
{
// no overflow
Node
*
mul_result
=
ConINode
::
make
(
phase
->
C
,
result
);
return
no_overflow
(
phase
,
mul_result
);
}
}
}
if
(
type1
==
TypeInt
::
ZERO
||
type2
==
TypeInt
::
ZERO
)
{
if
(
type1
!=
Type
::
TOP
&&
type1
->
singleton
()
&&
return
no_overflow
(
phase
,
ConINode
::
make
(
phase
->
C
,
0
));
type2
!=
Type
::
TOP
&&
type2
->
singleton
())
{
}
NativeType
val1
=
TypeClass
::
as_self
(
type1
)
->
get_con
();
NativeType
val2
=
TypeClass
::
as_self
(
type2
)
->
get_con
();
if
(
type1
==
TypeInt
::
ONE
)
{
if
(
node
->
will_overflow
(
val1
,
val2
)
==
false
)
{
Node
*
mul_result
=
new
(
phase
->
C
)
AddINode
(
arg2
,
phase
->
intcon
(
0
));
Node
*
con_result
=
ConINode
::
make
(
phase
->
C
,
0
);
return
no_overflow
(
phase
,
mul_result
);
return
con_result
;
}
}
if
(
type2
==
TypeInt
::
ONE
)
{
return
NULL
;
Node
*
mul_result
=
new
(
phase
->
C
)
AddINode
(
arg1
,
phase
->
intcon
(
0
));
}
return
no_overflow
(
phase
,
mul_result
);
return
NULL
;
}
if
(
type1
==
TypeInt
::
MINUS_1
)
{
return
new
(
phase
->
C
)
NegExactINode
(
NULL
,
arg2
);
}
if
(
type2
==
TypeInt
::
MINUS_1
)
{
return
new
(
phase
->
C
)
NegExactINode
(
NULL
,
arg1
);
}
}
return
NULL
;
static
const
Type
*
Value
(
const
OverflowOp
*
node
,
PhaseTransform
*
phase
)
{
}
const
Type
*
t1
=
phase
->
type
(
node
->
in
(
1
)
);
const
Type
*
t2
=
phase
->
type
(
node
->
in
(
2
)
);
Node
*
MulExactLNode
::
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
)
{
if
(
t1
==
Type
::
TOP
)
return
Type
::
TOP
;
Node
*
arg1
=
in
(
1
);
if
(
t2
==
Type
::
TOP
)
return
Type
::
TOP
;
Node
*
arg2
=
in
(
2
);
const
Type
*
type1
=
phase
->
type
(
arg
1
);
const
TypeClass
*
i1
=
TypeClass
::
as_self
(
t
1
);
const
Type
*
type2
=
phase
->
type
(
arg
2
);
const
TypeClass
*
i2
=
TypeClass
::
as_self
(
t
2
);
if
(
type1
!=
Type
::
TOP
&&
type1
->
singleton
()
&&
if
(
i1
==
NULL
||
i2
==
NULL
)
{
type2
!=
Type
::
TOP
&&
type2
->
singleton
())
{
return
TypeInt
::
CC
;
jlong
val1
=
arg1
->
get_long
();
}
jlong
val2
=
arg2
->
get_long
();
jlong
result
=
val1
*
val2
;
jlong
ax
=
(
val1
<
0
?
-
val1
:
val1
);
jlong
ay
=
(
val2
<
0
?
-
val2
:
val2
);
bool
overflow
=
false
;
if
(
t1
->
singleton
()
&&
t2
->
singleton
())
{
if
((
ax
|
ay
)
&
CONST64
(
0xFFFFFFFF00000000
))
{
NativeType
val1
=
i1
->
get_con
();
// potential overflow if any bit in upper 32 bits are set
NativeType
val2
=
i2
->
get_con
();
if
((
val1
==
min_jlong
&&
val2
==
-
1
)
||
(
val2
==
min_jlong
&&
val1
==
-
1
))
{
if
(
node
->
will_overflow
(
val1
,
val2
))
{
// -1 * Long.MIN_VALUE will overflow
return
TypeInt
::
CC
;
overflow
=
true
;
}
}
else
if
(
val2
!=
0
&&
(
result
/
val2
!=
val1
))
{
return
TypeInt
::
ZERO
;
overflow
=
true
;
}
else
if
(
i1
!=
TypeClass
::
TYPE_DOMAIN
&&
i2
!=
TypeClass
::
TYPE_DOMAIN
)
{
if
(
node
->
will_overflow
(
i1
->
_lo
,
i2
->
_lo
))
{
return
TypeInt
::
CC
;
}
else
if
(
node
->
will_overflow
(
i1
->
_lo
,
i2
->
_hi
))
{
return
TypeInt
::
CC
;
}
else
if
(
node
->
will_overflow
(
i1
->
_hi
,
i2
->
_lo
))
{
return
TypeInt
::
CC
;
}
else
if
(
node
->
will_overflow
(
i1
->
_hi
,
i2
->
_hi
))
{
return
TypeInt
::
CC
;
}
}
return
TypeInt
::
ZERO
;
}
}
if
(
!
overflow
)
{
if
(
!
node
->
can_overflow
(
t1
,
t2
))
{
Node
*
mul_result
=
ConLNode
::
make
(
phase
->
C
,
result
);
return
TypeInt
::
ZERO
;
return
no_overflow
(
phase
,
mul_result
);
}
}
return
TypeInt
::
CC
;
}
}
};
if
(
type1
==
TypeLong
::
ZERO
||
type2
==
TypeLong
::
ZERO
)
{
Node
*
OverflowINode
::
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
)
{
return
no_overflow
(
phase
,
ConLNode
::
make
(
phase
->
C
,
0
));
return
IdealHelper
<
OverflowINode
>::
Ideal
(
this
,
phase
,
can_reshape
);
}
}
if
(
type1
==
TypeLong
::
ONE
)
{
Node
*
mul_result
=
new
(
phase
->
C
)
AddLNode
(
arg2
,
phase
->
longcon
(
0
));
return
no_overflow
(
phase
,
mul_result
);
}
if
(
type2
==
TypeLong
::
ONE
)
{
Node
*
mul_result
=
new
(
phase
->
C
)
AddLNode
(
arg1
,
phase
->
longcon
(
0
));
return
no_overflow
(
phase
,
mul_result
);
}
if
(
type1
==
TypeLong
::
MINUS_1
)
{
Node
*
OverflowLNode
::
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
)
{
return
new
(
phase
->
C
)
NegExactLNode
(
NULL
,
arg2
);
return
IdealHelper
<
OverflowLNode
>::
Ideal
(
this
,
phase
,
can_reshape
);
}
}
if
(
type2
==
TypeLong
::
MINUS_1
)
{
const
Type
*
OverflowINode
::
Value
(
PhaseTransform
*
phase
)
const
{
return
new
(
phase
->
C
)
NegExactLNode
(
NULL
,
arg1
);
return
IdealHelper
<
OverflowINode
>::
Value
(
this
,
phase
);
}
}
return
NULL
;
const
Type
*
OverflowLNode
::
Value
(
PhaseTransform
*
phase
)
const
{
return
IdealHelper
<
OverflowLNode
>::
Value
(
this
,
phase
);
}
}
src/share/vm/opto/mathexactnode.hpp
浏览文件 @
0135bec0
...
@@ -27,128 +27,111 @@
...
@@ -27,128 +27,111 @@
#include "opto/multnode.hpp"
#include "opto/multnode.hpp"
#include "opto/node.hpp"
#include "opto/node.hpp"
#include "opto/addnode.hpp"
#include "opto/subnode.hpp"
#include "opto/subnode.hpp"
#include "opto/type.hpp"
#include "opto/type.hpp"
class
BoolNode
;
class
IfNode
;
class
Node
;
class
PhaseGVN
;
class
PhaseGVN
;
class
PhaseTransform
;
class
PhaseTransform
;
class
MathExactNode
:
public
Multi
Node
{
class
OverflowNode
:
public
Cmp
Node
{
public:
public:
MathExactNode
(
Node
*
ctrl
,
Node
*
in1
);
OverflowNode
(
Node
*
in1
,
Node
*
in2
)
:
CmpNode
(
in1
,
in2
)
{}
MathExactNode
(
Node
*
ctrl
,
Node
*
in1
,
Node
*
in2
);
enum
{
result_proj_node
=
0
,
flags_proj_node
=
1
};
virtual
int
Opcode
()
const
;
virtual
Node
*
Identity
(
PhaseTransform
*
phase
)
{
return
this
;
}
virtual
Node
*
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
)
{
return
NULL
;
}
virtual
const
Type
*
Value
(
PhaseTransform
*
phase
)
const
{
return
bottom_type
();
}
virtual
uint
hash
()
const
{
return
NO_HASH
;
}
virtual
bool
is_CFG
()
const
{
return
false
;
}
virtual
uint
ideal_reg
()
const
{
return
NotAMachineReg
;
}
ProjNode
*
result_node
()
const
{
return
proj_out
(
result_proj_node
);
}
ProjNode
*
flags_node
()
const
{
return
proj_out
(
flags_proj_node
);
}
Node
*
control_node
()
const
;
Node
*
non_throwing_branch
()
const
;
protected:
IfNode
*
if_node
()
const
;
BoolNode
*
bool_node
()
const
;
Node
*
no_overflow
(
PhaseGVN
*
phase
,
Node
*
new_result
);
};
class
MathExactINode
:
public
MathExactNode
{
virtual
uint
ideal_reg
()
const
{
return
Op_RegFlags
;
}
public:
virtual
const
Type
*
sub
(
const
Type
*
t1
,
const
Type
*
t2
)
const
;
MathExactINode
(
Node
*
ctrl
,
Node
*
in1
)
:
MathExactNode
(
ctrl
,
in1
)
{}
MathExactINode
(
Node
*
ctrl
,
Node
*
in1
,
Node
*
in2
)
:
MathExactNode
(
ctrl
,
in1
,
in2
)
{}
virtual
int
Opcode
()
const
;
virtual
Node
*
match
(
const
ProjNode
*
proj
,
const
Matcher
*
m
);
virtual
const
Type
*
bottom_type
()
const
{
return
TypeTuple
::
INT_CC_PAIR
;
}
};
class
MathExactLNode
:
public
MathExactNode
{
public:
MathExactLNode
(
Node
*
ctrl
,
Node
*
in1
)
:
MathExactNode
(
ctrl
,
in1
)
{}
MathExactLNode
(
Node
*
ctrl
,
Node
*
in1
,
Node
*
in2
)
:
MathExactNode
(
ctrl
,
in1
,
in2
)
{}
virtual
int
Opcode
()
const
;
virtual
Node
*
match
(
const
ProjNode
*
proj
,
const
Matcher
*
m
);
virtual
const
Type
*
bottom_type
()
const
{
return
TypeTuple
::
LONG_CC_PAIR
;
}
};
};
class
AddExactINode
:
public
MathExactI
Node
{
class
OverflowINode
:
public
Overflow
Node
{
public:
public:
AddExactINode
(
Node
*
ctrl
,
Node
*
in1
,
Node
*
in2
)
:
MathExactINode
(
ctrl
,
in1
,
in2
)
{}
typedef
TypeInt
TypeClass
;
virtual
int
Opcode
()
const
;
virtual
Node
*
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
);
};
class
AddExactLNode
:
public
MathExactLNode
{
OverflowINode
(
Node
*
in1
,
Node
*
in2
)
:
OverflowNode
(
in1
,
in2
)
{}
public:
AddExactLNode
(
Node
*
ctrl
,
Node
*
in1
,
Node
*
in2
)
:
MathExactLNode
(
ctrl
,
in1
,
in2
)
{}
virtual
int
Opcode
()
const
;
virtual
Node
*
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
);
virtual
Node
*
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
);
virtual
const
Type
*
Value
(
PhaseTransform
*
phase
)
const
;
virtual
bool
will_overflow
(
jint
v1
,
jint
v2
)
const
=
0
;
virtual
bool
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
=
0
;
};
};
class
SubExactINode
:
public
MathExactINode
{
class
OverflowLNode
:
public
OverflowNode
{
public:
public:
SubExactINode
(
Node
*
ctrl
,
Node
*
in1
,
Node
*
in2
)
:
MathExactINode
(
ctrl
,
in1
,
in2
)
{}
typedef
TypeLong
TypeClass
;
virtual
int
Opcode
()
const
;
OverflowLNode
(
Node
*
in1
,
Node
*
in2
)
:
OverflowNode
(
in1
,
in2
)
{}
virtual
Node
*
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
);
virtual
Node
*
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
);
virtual
const
Type
*
Value
(
PhaseTransform
*
phase
)
const
;
virtual
bool
will_overflow
(
jlong
v1
,
jlong
v2
)
const
=
0
;
virtual
bool
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
=
0
;
};
};
class
SubExactLNode
:
public
MathExactL
Node
{
class
OverflowAddINode
:
public
OverflowI
Node
{
public:
public:
SubExactLNode
(
Node
*
ctrl
,
Node
*
in1
,
Node
*
in2
)
:
MathExactLNode
(
ctrl
,
in1
,
in2
)
{}
typedef
AddINode
MathOp
;
OverflowAddINode
(
Node
*
in1
,
Node
*
in2
)
:
OverflowINode
(
in1
,
in2
)
{}
virtual
int
Opcode
()
const
;
virtual
int
Opcode
()
const
;
virtual
Node
*
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
);
virtual
bool
will_overflow
(
jint
v1
,
jint
v2
)
const
;
virtual
bool
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
;
};
};
class
NegExactINode
:
public
MathExact
INode
{
class
OverflowSubINode
:
public
Overflow
INode
{
public:
public:
NegExactINode
(
Node
*
ctrl
,
Node
*
in1
)
:
MathExactINode
(
ctrl
,
in1
)
{}
typedef
SubINode
MathOp
;
OverflowSubINode
(
Node
*
in1
,
Node
*
in2
)
:
OverflowINode
(
in1
,
in2
)
{}
virtual
int
Opcode
()
const
;
virtual
int
Opcode
()
const
;
virtual
Node
*
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
);
virtual
bool
will_overflow
(
jint
v1
,
jint
v2
)
const
;
virtual
bool
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
;
};
};
class
NegExactLNode
:
public
MathExactL
Node
{
class
OverflowMulINode
:
public
OverflowI
Node
{
public:
public:
NegExactLNode
(
Node
*
ctrl
,
Node
*
in1
)
:
MathExactLNode
(
ctrl
,
in1
)
{}
typedef
MulINode
MathOp
;
OverflowMulINode
(
Node
*
in1
,
Node
*
in2
)
:
OverflowINode
(
in1
,
in2
)
{}
virtual
int
Opcode
()
const
;
virtual
int
Opcode
()
const
;
virtual
Node
*
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
);
virtual
bool
will_overflow
(
jint
v1
,
jint
v2
)
const
;
virtual
bool
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
;
};
};
class
MulExactINode
:
public
MathExactI
Node
{
class
OverflowAddLNode
:
public
OverflowL
Node
{
public:
public:
MulExactINode
(
Node
*
ctrl
,
Node
*
in1
,
Node
*
in2
)
:
MathExactINode
(
ctrl
,
in1
,
in2
)
{}
typedef
AddLNode
MathOp
;
OverflowAddLNode
(
Node
*
in1
,
Node
*
in2
)
:
OverflowLNode
(
in1
,
in2
)
{}
virtual
int
Opcode
()
const
;
virtual
int
Opcode
()
const
;
virtual
Node
*
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
);
virtual
bool
will_overflow
(
jlong
v1
,
jlong
v2
)
const
;
virtual
bool
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
;
};
};
class
MulExactLNode
:
public
MathExact
LNode
{
class
OverflowSubLNode
:
public
Overflow
LNode
{
public:
public:
MulExactLNode
(
Node
*
ctrl
,
Node
*
in1
,
Node
*
in2
)
:
MathExactLNode
(
ctrl
,
in1
,
in2
)
{}
typedef
SubLNode
MathOp
;
OverflowSubLNode
(
Node
*
in1
,
Node
*
in2
)
:
OverflowLNode
(
in1
,
in2
)
{}
virtual
int
Opcode
()
const
;
virtual
int
Opcode
()
const
;
virtual
Node
*
Ideal
(
PhaseGVN
*
phase
,
bool
can_reshape
);
virtual
bool
will_overflow
(
jlong
v1
,
jlong
v2
)
const
;
virtual
bool
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
;
};
};
class
FlagsProjNode
:
public
Proj
Node
{
class
OverflowMulLNode
:
public
OverflowL
Node
{
public:
public:
FlagsProjNode
(
Node
*
src
,
uint
con
)
:
ProjNode
(
src
,
con
)
{
typedef
MulLNode
MathOp
;
init_class_id
(
Class_FlagsProj
);
}
OverflowMulLNode
(
Node
*
in1
,
Node
*
in2
)
:
OverflowLNode
(
in1
,
in2
)
{}
virtual
int
Opcode
()
const
;
virtual
int
Opcode
()
const
;
virtual
bool
is_CFG
()
const
{
return
false
;
}
virtual
const
Type
*
bottom_type
()
const
{
return
TypeInt
::
CC
;
}
virtual
uint
ideal_reg
()
const
{
return
Op_RegFlags
;
}
};
virtual
bool
will_overflow
(
jlong
v1
,
jlong
v2
)
const
;
virtual
bool
can_overflow
(
const
Type
*
t1
,
const
Type
*
t2
)
const
;
};
#endif
#endif
src/share/vm/opto/multnode.cpp
浏览文件 @
0135bec0
...
@@ -54,11 +54,6 @@ ProjNode* MultiNode::proj_out(uint which_proj) const {
...
@@ -54,11 +54,6 @@ ProjNode* MultiNode::proj_out(uint which_proj) const {
assert
(
Opcode
()
!=
Op_If
||
proj
->
Opcode
()
==
(
which_proj
?
Op_IfTrue
:
Op_IfFalse
),
"bad if #2"
);
assert
(
Opcode
()
!=
Op_If
||
proj
->
Opcode
()
==
(
which_proj
?
Op_IfTrue
:
Op_IfFalse
),
"bad if #2"
);
return
proj
;
return
proj
;
}
}
}
else
if
(
p
->
is_FlagsProj
())
{
FlagsProjNode
*
proj
=
p
->
as_FlagsProj
();
if
(
proj
->
_con
==
which_proj
)
{
return
proj
;
}
}
else
{
}
else
{
assert
(
p
==
this
&&
this
->
is_Start
(),
"else must be proj"
);
assert
(
p
==
this
&&
this
->
is_Start
(),
"else must be proj"
);
continue
;
continue
;
...
...
src/share/vm/opto/node.hpp
浏览文件 @
0135bec0
...
@@ -69,7 +69,6 @@ class EncodePNode;
...
@@ -69,7 +69,6 @@ class EncodePNode;
class
EncodePKlassNode
;
class
EncodePKlassNode
;
class
FastLockNode
;
class
FastLockNode
;
class
FastUnlockNode
;
class
FastUnlockNode
;
class
FlagsProjNode
;
class
IfNode
;
class
IfNode
;
class
IfFalseNode
;
class
IfFalseNode
;
class
IfTrueNode
;
class
IfTrueNode
;
...
@@ -100,7 +99,6 @@ class MachSafePointNode;
...
@@ -100,7 +99,6 @@ class MachSafePointNode;
class
MachSpillCopyNode
;
class
MachSpillCopyNode
;
class
MachTempNode
;
class
MachTempNode
;
class
Matcher
;
class
Matcher
;
class
MathExactNode
;
class
MemBarNode
;
class
MemBarNode
;
class
MemBarStoreStoreNode
;
class
MemBarStoreStoreNode
;
class
MemNode
;
class
MemNode
;
...
@@ -569,7 +567,6 @@ public:
...
@@ -569,7 +567,6 @@ public:
DEFINE_CLASS_ID
(
MemBar
,
Multi
,
3
)
DEFINE_CLASS_ID
(
MemBar
,
Multi
,
3
)
DEFINE_CLASS_ID
(
Initialize
,
MemBar
,
0
)
DEFINE_CLASS_ID
(
Initialize
,
MemBar
,
0
)
DEFINE_CLASS_ID
(
MemBarStoreStore
,
MemBar
,
1
)
DEFINE_CLASS_ID
(
MemBarStoreStore
,
MemBar
,
1
)
DEFINE_CLASS_ID
(
MathExact
,
Multi
,
4
)
DEFINE_CLASS_ID
(
Mach
,
Node
,
1
)
DEFINE_CLASS_ID
(
Mach
,
Node
,
1
)
DEFINE_CLASS_ID
(
MachReturn
,
Mach
,
0
)
DEFINE_CLASS_ID
(
MachReturn
,
Mach
,
0
)
...
@@ -626,7 +623,6 @@ public:
...
@@ -626,7 +623,6 @@ public:
DEFINE_CLASS_ID
(
Cmp
,
Sub
,
0
)
DEFINE_CLASS_ID
(
Cmp
,
Sub
,
0
)
DEFINE_CLASS_ID
(
FastLock
,
Cmp
,
0
)
DEFINE_CLASS_ID
(
FastLock
,
Cmp
,
0
)
DEFINE_CLASS_ID
(
FastUnlock
,
Cmp
,
1
)
DEFINE_CLASS_ID
(
FastUnlock
,
Cmp
,
1
)
DEFINE_CLASS_ID
(
FlagsProj
,
Cmp
,
2
)
DEFINE_CLASS_ID
(
MergeMem
,
Node
,
7
)
DEFINE_CLASS_ID
(
MergeMem
,
Node
,
7
)
DEFINE_CLASS_ID
(
Bool
,
Node
,
8
)
DEFINE_CLASS_ID
(
Bool
,
Node
,
8
)
...
@@ -730,7 +726,6 @@ public:
...
@@ -730,7 +726,6 @@ public:
DEFINE_CLASS_QUERY
(
EncodePKlass
)
DEFINE_CLASS_QUERY
(
EncodePKlass
)
DEFINE_CLASS_QUERY
(
FastLock
)
DEFINE_CLASS_QUERY
(
FastLock
)
DEFINE_CLASS_QUERY
(
FastUnlock
)
DEFINE_CLASS_QUERY
(
FastUnlock
)
DEFINE_CLASS_QUERY
(
FlagsProj
)
DEFINE_CLASS_QUERY
(
If
)
DEFINE_CLASS_QUERY
(
If
)
DEFINE_CLASS_QUERY
(
IfFalse
)
DEFINE_CLASS_QUERY
(
IfFalse
)
DEFINE_CLASS_QUERY
(
IfTrue
)
DEFINE_CLASS_QUERY
(
IfTrue
)
...
@@ -759,7 +754,6 @@ public:
...
@@ -759,7 +754,6 @@ public:
DEFINE_CLASS_QUERY
(
MachSafePoint
)
DEFINE_CLASS_QUERY
(
MachSafePoint
)
DEFINE_CLASS_QUERY
(
MachSpillCopy
)
DEFINE_CLASS_QUERY
(
MachSpillCopy
)
DEFINE_CLASS_QUERY
(
MachTemp
)
DEFINE_CLASS_QUERY
(
MachTemp
)
DEFINE_CLASS_QUERY
(
MathExact
)
DEFINE_CLASS_QUERY
(
Mem
)
DEFINE_CLASS_QUERY
(
Mem
)
DEFINE_CLASS_QUERY
(
MemBar
)
DEFINE_CLASS_QUERY
(
MemBar
)
DEFINE_CLASS_QUERY
(
MemBarStoreStore
)
DEFINE_CLASS_QUERY
(
MemBarStoreStore
)
...
...
src/share/vm/opto/subnode.cpp
浏览文件 @
0135bec0
...
@@ -1126,11 +1126,15 @@ Node *BoolNode::Ideal(PhaseGVN *phase, bool can_reshape) {
...
@@ -1126,11 +1126,15 @@ Node *BoolNode::Ideal(PhaseGVN *phase, bool can_reshape) {
Node
*
cmp
=
in
(
1
);
Node
*
cmp
=
in
(
1
);
if
(
!
cmp
->
is_Sub
()
)
return
NULL
;
if
(
!
cmp
->
is_Sub
()
)
return
NULL
;
int
cop
=
cmp
->
Opcode
();
int
cop
=
cmp
->
Opcode
();
if
(
cop
==
Op_FastLock
||
cop
==
Op_FastUnlock
||
cop
==
Op_FlagsProj
)
return
NULL
;
if
(
cop
==
Op_FastLock
||
cop
==
Op_FastUnlock
)
return
NULL
;
Node
*
cmp1
=
cmp
->
in
(
1
);
Node
*
cmp1
=
cmp
->
in
(
1
);
Node
*
cmp2
=
cmp
->
in
(
2
);
Node
*
cmp2
=
cmp
->
in
(
2
);
if
(
!
cmp1
)
return
NULL
;
if
(
!
cmp1
)
return
NULL
;
if
(
_test
.
_test
==
BoolTest
::
overflow
||
_test
.
_test
==
BoolTest
::
no_overflow
)
{
return
NULL
;
}
// Constant on left?
// Constant on left?
Node
*
con
=
cmp1
;
Node
*
con
=
cmp1
;
uint
op2
=
cmp2
->
Opcode
();
uint
op2
=
cmp2
->
Opcode
();
...
...
src/share/vm/opto/type.cpp
浏览文件 @
0135bec0
...
@@ -301,6 +301,7 @@ void Type::Initialize_shared(Compile* current) {
...
@@ -301,6 +301,7 @@ void Type::Initialize_shared(Compile* current) {
TypeInt
::
POS1
=
TypeInt
::
make
(
1
,
max_jint
,
WidenMin
);
// Positive values
TypeInt
::
POS1
=
TypeInt
::
make
(
1
,
max_jint
,
WidenMin
);
// Positive values
TypeInt
::
INT
=
TypeInt
::
make
(
min_jint
,
max_jint
,
WidenMax
);
// 32-bit integers
TypeInt
::
INT
=
TypeInt
::
make
(
min_jint
,
max_jint
,
WidenMax
);
// 32-bit integers
TypeInt
::
SYMINT
=
TypeInt
::
make
(
-
max_jint
,
max_jint
,
WidenMin
);
// symmetric range
TypeInt
::
SYMINT
=
TypeInt
::
make
(
-
max_jint
,
max_jint
,
WidenMin
);
// symmetric range
TypeInt
::
TYPE_DOMAIN
=
TypeInt
::
INT
;
// CmpL is overloaded both as the bytecode computation returning
// CmpL is overloaded both as the bytecode computation returning
// a trinary (-1,0,+1) integer result AND as an efficient long
// a trinary (-1,0,+1) integer result AND as an efficient long
// compare returning optimizer ideal-type flags.
// compare returning optimizer ideal-type flags.
...
@@ -317,6 +318,7 @@ void Type::Initialize_shared(Compile* current) {
...
@@ -317,6 +318,7 @@ void Type::Initialize_shared(Compile* current) {
TypeLong
::
LONG
=
TypeLong
::
make
(
min_jlong
,
max_jlong
,
WidenMax
);
// 64-bit integers
TypeLong
::
LONG
=
TypeLong
::
make
(
min_jlong
,
max_jlong
,
WidenMax
);
// 64-bit integers
TypeLong
::
INT
=
TypeLong
::
make
((
jlong
)
min_jint
,(
jlong
)
max_jint
,
WidenMin
);
TypeLong
::
INT
=
TypeLong
::
make
((
jlong
)
min_jint
,(
jlong
)
max_jint
,
WidenMin
);
TypeLong
::
UINT
=
TypeLong
::
make
(
0
,(
jlong
)
max_juint
,
WidenMin
);
TypeLong
::
UINT
=
TypeLong
::
make
(
0
,(
jlong
)
max_juint
,
WidenMin
);
TypeLong
::
TYPE_DOMAIN
=
TypeLong
::
LONG
;
const
Type
**
fboth
=
(
const
Type
**
)
shared_type_arena
->
Amalloc_4
(
2
*
sizeof
(
Type
*
));
const
Type
**
fboth
=
(
const
Type
**
)
shared_type_arena
->
Amalloc_4
(
2
*
sizeof
(
Type
*
));
fboth
[
0
]
=
Type
::
CONTROL
;
fboth
[
0
]
=
Type
::
CONTROL
;
...
@@ -1156,6 +1158,7 @@ const TypeInt *TypeInt::POS; // Positive 32-bit integers or zero
...
@@ -1156,6 +1158,7 @@ const TypeInt *TypeInt::POS; // Positive 32-bit integers or zero
const
TypeInt
*
TypeInt
::
POS1
;
// Positive 32-bit integers
const
TypeInt
*
TypeInt
::
POS1
;
// Positive 32-bit integers
const
TypeInt
*
TypeInt
::
INT
;
// 32-bit integers
const
TypeInt
*
TypeInt
::
INT
;
// 32-bit integers
const
TypeInt
*
TypeInt
::
SYMINT
;
// symmetric range [-max_jint..max_jint]
const
TypeInt
*
TypeInt
::
SYMINT
;
// symmetric range [-max_jint..max_jint]
const
TypeInt
*
TypeInt
::
TYPE_DOMAIN
;
// alias for TypeInt::INT
//------------------------------TypeInt----------------------------------------
//------------------------------TypeInt----------------------------------------
TypeInt
::
TypeInt
(
jint
lo
,
jint
hi
,
int
w
)
:
Type
(
Int
),
_lo
(
lo
),
_hi
(
hi
),
_widen
(
w
)
{
TypeInt
::
TypeInt
(
jint
lo
,
jint
hi
,
int
w
)
:
Type
(
Int
),
_lo
(
lo
),
_hi
(
hi
),
_widen
(
w
)
{
...
@@ -1413,6 +1416,7 @@ const TypeLong *TypeLong::POS; // >=0
...
@@ -1413,6 +1416,7 @@ const TypeLong *TypeLong::POS; // >=0
const
TypeLong
*
TypeLong
::
LONG
;
// 64-bit integers
const
TypeLong
*
TypeLong
::
LONG
;
// 64-bit integers
const
TypeLong
*
TypeLong
::
INT
;
// 32-bit subrange
const
TypeLong
*
TypeLong
::
INT
;
// 32-bit subrange
const
TypeLong
*
TypeLong
::
UINT
;
// 32-bit unsigned subrange
const
TypeLong
*
TypeLong
::
UINT
;
// 32-bit unsigned subrange
const
TypeLong
*
TypeLong
::
TYPE_DOMAIN
;
// alias for TypeLong::LONG
//------------------------------TypeLong---------------------------------------
//------------------------------TypeLong---------------------------------------
TypeLong
::
TypeLong
(
jlong
lo
,
jlong
hi
,
int
w
)
:
Type
(
Long
),
_lo
(
lo
),
_hi
(
hi
),
_widen
(
w
)
{
TypeLong
::
TypeLong
(
jlong
lo
,
jlong
hi
,
int
w
)
:
Type
(
Long
),
_lo
(
lo
),
_hi
(
hi
),
_widen
(
w
)
{
...
...
src/share/vm/opto/type.hpp
浏览文件 @
0135bec0
...
@@ -489,6 +489,7 @@ protected:
...
@@ -489,6 +489,7 @@ protected:
virtual
const
Type
*
filter_helper
(
const
Type
*
kills
,
bool
include_speculative
)
const
;
virtual
const
Type
*
filter_helper
(
const
Type
*
kills
,
bool
include_speculative
)
const
;
public:
public:
typedef
jint
NativeType
;
virtual
bool
eq
(
const
Type
*
t
)
const
;
virtual
bool
eq
(
const
Type
*
t
)
const
;
virtual
int
hash
()
const
;
// Type specific hashing
virtual
int
hash
()
const
;
// Type specific hashing
virtual
bool
singleton
(
void
)
const
;
// TRUE if type is a singleton
virtual
bool
singleton
(
void
)
const
;
// TRUE if type is a singleton
...
@@ -531,6 +532,9 @@ public:
...
@@ -531,6 +532,9 @@ public:
static
const
TypeInt
*
POS1
;
static
const
TypeInt
*
POS1
;
static
const
TypeInt
*
INT
;
static
const
TypeInt
*
INT
;
static
const
TypeInt
*
SYMINT
;
// symmetric range [-max_jint..max_jint]
static
const
TypeInt
*
SYMINT
;
// symmetric range [-max_jint..max_jint]
static
const
TypeInt
*
TYPE_DOMAIN
;
// alias for TypeInt::INT
static
const
TypeInt
*
as_self
(
const
Type
*
t
)
{
return
t
->
is_int
();
}
#ifndef PRODUCT
#ifndef PRODUCT
virtual
void
dump2
(
Dict
&
d
,
uint
depth
,
outputStream
*
st
)
const
;
virtual
void
dump2
(
Dict
&
d
,
uint
depth
,
outputStream
*
st
)
const
;
#endif
#endif
...
@@ -546,6 +550,7 @@ protected:
...
@@ -546,6 +550,7 @@ protected:
// Do not kill _widen bits.
// Do not kill _widen bits.
virtual
const
Type
*
filter_helper
(
const
Type
*
kills
,
bool
include_speculative
)
const
;
virtual
const
Type
*
filter_helper
(
const
Type
*
kills
,
bool
include_speculative
)
const
;
public:
public:
typedef
jlong
NativeType
;
virtual
bool
eq
(
const
Type
*
t
)
const
;
virtual
bool
eq
(
const
Type
*
t
)
const
;
virtual
int
hash
()
const
;
// Type specific hashing
virtual
int
hash
()
const
;
// Type specific hashing
virtual
bool
singleton
(
void
)
const
;
// TRUE if type is a singleton
virtual
bool
singleton
(
void
)
const
;
// TRUE if type is a singleton
...
@@ -565,6 +570,7 @@ public:
...
@@ -565,6 +570,7 @@ public:
virtual
bool
is_finite
()
const
;
// Has a finite value
virtual
bool
is_finite
()
const
;
// Has a finite value
virtual
const
Type
*
xmeet
(
const
Type
*
t
)
const
;
virtual
const
Type
*
xmeet
(
const
Type
*
t
)
const
;
virtual
const
Type
*
xdual
()
const
;
// Compute dual right now.
virtual
const
Type
*
xdual
()
const
;
// Compute dual right now.
virtual
const
Type
*
widen
(
const
Type
*
t
,
const
Type
*
limit_type
)
const
;
virtual
const
Type
*
widen
(
const
Type
*
t
,
const
Type
*
limit_type
)
const
;
...
@@ -577,6 +583,11 @@ public:
...
@@ -577,6 +583,11 @@ public:
static
const
TypeLong
*
LONG
;
static
const
TypeLong
*
LONG
;
static
const
TypeLong
*
INT
;
// 32-bit subrange [min_jint..max_jint]
static
const
TypeLong
*
INT
;
// 32-bit subrange [min_jint..max_jint]
static
const
TypeLong
*
UINT
;
// 32-bit unsigned [0..max_juint]
static
const
TypeLong
*
UINT
;
// 32-bit unsigned [0..max_juint]
static
const
TypeLong
*
TYPE_DOMAIN
;
// alias for TypeLong::LONG
// static convenience methods.
static
const
TypeLong
*
as_self
(
const
Type
*
t
)
{
return
t
->
is_long
();
}
#ifndef PRODUCT
#ifndef PRODUCT
virtual
void
dump2
(
Dict
&
d
,
uint
,
outputStream
*
st
)
const
;
// Specialized per-Type dumping
virtual
void
dump2
(
Dict
&
d
,
uint
,
outputStream
*
st
)
const
;
// Specialized per-Type dumping
#endif
#endif
...
...
src/share/vm/runtime/vmStructs.cpp
浏览文件 @
0135bec0
...
@@ -1938,15 +1938,6 @@ typedef BinaryTreeDictionary<Metablock, FreeList<Metablock> > MetablockTreeDicti
...
@@ -1938,15 +1938,6 @@ typedef BinaryTreeDictionary<Metablock, FreeList<Metablock> > MetablockTreeDicti
declare_c2_type(CmpF3Node, CmpFNode) \
declare_c2_type(CmpF3Node, CmpFNode) \
declare_c2_type(CmpDNode, CmpNode) \
declare_c2_type(CmpDNode, CmpNode) \
declare_c2_type(CmpD3Node, CmpDNode) \
declare_c2_type(CmpD3Node, CmpDNode) \
declare_c2_type(MathExactNode, MultiNode) \
declare_c2_type(MathExactINode, MathExactNode) \
declare_c2_type(AddExactINode, MathExactINode) \
declare_c2_type(AddExactLNode, MathExactLNode) \
declare_c2_type(SubExactINode, MathExactINode) \
declare_c2_type(SubExactLNode, MathExactLNode) \
declare_c2_type(NegExactINode, MathExactINode) \
declare_c2_type(MulExactINode, MathExactINode) \
declare_c2_type(FlagsProjNode, ProjNode) \
declare_c2_type(BoolNode, Node) \
declare_c2_type(BoolNode, Node) \
declare_c2_type(AbsNode, Node) \
declare_c2_type(AbsNode, Node) \
declare_c2_type(AbsINode, AbsNode) \
declare_c2_type(AbsINode, AbsNode) \
...
@@ -2027,6 +2018,15 @@ typedef BinaryTreeDictionary<Metablock, FreeList<Metablock> > MetablockTreeDicti
...
@@ -2027,6 +2018,15 @@ typedef BinaryTreeDictionary<Metablock, FreeList<Metablock> > MetablockTreeDicti
declare_c2_type(ExtractLNode, ExtractNode) \
declare_c2_type(ExtractLNode, ExtractNode) \
declare_c2_type(ExtractFNode, ExtractNode) \
declare_c2_type(ExtractFNode, ExtractNode) \
declare_c2_type(ExtractDNode, ExtractNode) \
declare_c2_type(ExtractDNode, ExtractNode) \
declare_c2_type(OverflowNode, CmpNode) \
declare_c2_type(OverflowINode, OverflowNode) \
declare_c2_type(OverflowAddINode, OverflowINode) \
declare_c2_type(OverflowSubINode, OverflowINode) \
declare_c2_type(OverflowMulINode, OverflowINode) \
declare_c2_type(OverflowLNode, OverflowNode) \
declare_c2_type(OverflowAddLNode, OverflowLNode) \
declare_c2_type(OverflowSubLNode, OverflowLNode) \
declare_c2_type(OverflowMulLNode, OverflowLNode) \
\
\
/*********************/
\
/*********************/
\
/* Adapter Blob Entries */
\
/* Adapter Blob Entries */
\
...
...
test/compiler/intrinsics/mathexact/AddExactICondTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8024924
* @bug 8024924
* @summary Test non constant addExact
* @summary Test non constant addExact
* @compile AddExactICondTest.java
* @compile AddExactICondTest.java
* @run main AddExactICondTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main AddExactICondTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/AddExactIConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8024924
* @bug 8024924
* @summary Test constant addExact
* @summary Test constant addExact
* @compile AddExactIConstantTest.java Verify.java
* @compile AddExactIConstantTest.java Verify.java
* @run main AddExactIConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main AddExactIConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/AddExactILoadTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8024924
* @bug 8024924
* @summary Test non constant addExact
* @summary Test non constant addExact
* @compile AddExactILoadTest.java Verify.java
* @compile AddExactILoadTest.java Verify.java
* @run main AddExactILoadTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main AddExactILoadTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/AddExactILoopDependentTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8024924
* @bug 8024924
* @summary Test non constant addExact
* @summary Test non constant addExact
* @compile AddExactILoopDependentTest.java Verify.java
* @compile AddExactILoopDependentTest.java Verify.java
* @run main AddExactILoopDependentTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main AddExactILoopDependentTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/AddExactINonConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8024924
* @bug 8024924
* @summary Test non constant addExact
* @summary Test non constant addExact
* @compile AddExactINonConstantTest.java Verify.java
* @compile AddExactINonConstantTest.java Verify.java
* @run main AddExactINonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main AddExactINonConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8025657
* @bug 8025657
* @summary Test repeating addExact
* @summary Test repeating addExact
* @compile AddExactIRepeatTest.java Verify.java
* @compile AddExactIRepeatTest.java Verify.java
* @run main AddExactIRepeatTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main AddExactIRepeatTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/AddExactLConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test constant addExact
* @summary Test constant addExact
* @compile AddExactLConstantTest.java Verify.java
* @compile AddExactLConstantTest.java Verify.java
* @run main AddExactLConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main AddExactLConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/AddExactLNonConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test non constant addExact
* @summary Test non constant addExact
* @compile AddExactLNonConstantTest.java Verify.java
* @compile AddExactLNonConstantTest.java Verify.java
* @run main AddExactLNonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main AddExactLNonConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/CompareTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026722
* @bug 8026722
* @summary Verify that the compare after addExact is a signed compare
* @summary Verify that the compare after addExact is a signed compare
* @compile CompareTest.java
* @compile CompareTest.java
* @run main CompareTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main CompareTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/DecExactITest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test decrementExact
* @summary Test decrementExact
* @compile DecExactITest.java Verify.java
* @compile DecExactITest.java Verify.java
* @run main DecExactITest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main DecExactITest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/DecExactLTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test decrementExact
* @summary Test decrementExact
* @compile DecExactLTest.java Verify.java
* @compile DecExactLTest.java Verify.java
* @run main DecExactLTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main DecExactLTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/GVNTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8028207
* @bug 8028207
* @summary Verify that GVN doesn't mess up the two addExacts
* @summary Verify that GVN doesn't mess up the two addExacts
* @compile GVNTest.java
* @compile GVNTest.java
* @run main GVNTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main GVNTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/IncExactITest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test incrementExact
* @summary Test incrementExact
* @compile IncExactITest.java Verify.java
* @compile IncExactITest.java Verify.java
* @run main IncExactITest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main IncExactITest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/IncExactLTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test incrementExact
* @summary Test incrementExact
* @compile IncExactLTest.java Verify.java
* @compile IncExactLTest.java Verify.java
* @run main IncExactLTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main IncExactLTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/MulExactICondTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test multiplyExact as condition
* @summary Test multiplyExact as condition
* @compile MulExactICondTest.java
* @compile MulExactICondTest.java
* @run main MulExactICondTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main MulExactICondTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/MulExactIConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test constant multiplyExact
* @summary Test constant multiplyExact
* @compile MulExactIConstantTest.java Verify.java
* @compile MulExactIConstantTest.java Verify.java
* @run main MulExactIConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main MulExactIConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/MulExactILoadTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test multiplyExact
* @summary Test multiplyExact
* @compile MulExactILoadTest.java Verify.java
* @compile MulExactILoadTest.java Verify.java
* @run main MulExactILoadTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main MulExactILoadTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/MulExactILoopDependentTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test loop dependent multiplyExact
* @summary Test loop dependent multiplyExact
* @compile MulExactILoopDependentTest.java Verify.java
* @compile MulExactILoopDependentTest.java Verify.java
* @run main MulExactILoopDependentTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main MulExactILoopDependentTest
*
*
*/
*/
public
class
MulExactILoopDependentTest
{
public
class
MulExactILoopDependentTest
{
...
...
test/compiler/intrinsics/mathexact/MulExactINonConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test non constant multiplyExact
* @summary Test non constant multiplyExact
* @compile MulExactINonConstantTest.java Verify.java
* @compile MulExactINonConstantTest.java Verify.java
* @run main MulExactINonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main MulExactINonConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/MulExactIRepeatTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test repeating multiplyExact
* @summary Test repeating multiplyExact
* @compile MulExactIRepeatTest.java Verify.java
* @compile MulExactIRepeatTest.java Verify.java
* @run main MulExactIRepeatTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main MulExactIRepeatTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/MulExactLConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test constant mulExact
* @summary Test constant mulExact
* @compile MulExactLConstantTest.java Verify.java
* @compile MulExactLConstantTest.java Verify.java
* @run main MulExactLConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main MulExactLConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/MulExactLNonConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test non constant mulExact
* @summary Test non constant mulExact
* @compile MulExactLNonConstantTest.java Verify.java
* @compile MulExactLNonConstantTest.java Verify.java
* @run main MulExactLNonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main MulExactLNonConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/NegExactIConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test constant negExact
* @summary Test constant negExact
* @compile NegExactIConstantTest.java Verify.java
* @compile NegExactIConstantTest.java Verify.java
* @run main NegExactIConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main NegExactIConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/NegExactILoadTest.java
浏览文件 @
0135bec0
...
@@ -26,14 +26,14 @@
...
@@ -26,14 +26,14 @@
* @bug 8026844
* @bug 8026844
* @summary Test negExact
* @summary Test negExact
* @compile NegExactILoadTest.java Verify.java
* @compile NegExactILoadTest.java Verify.java
* @run main NegExactILoadTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main NegExactILoadTest
*
*
*/
*/
public
class
NegExactILoadTest
{
public
class
NegExactILoadTest
{
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
Verify
.
LoadTest
.
init
();
Verify
.
LoadTest
.
init
();
Verify
.
LoadTest
.
verify
(
new
Verify
.
UnaryToBinary
(
new
Verify
.
NegExactI
()));
Verify
.
LoadTest
.
verify
(
new
Verify
.
UnaryToBinary
(
new
Verify
.
NegExactI
()));
}
}
}
}
test/compiler/intrinsics/mathexact/NegExactILoopDependentTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test negExact loop dependent
* @summary Test negExact loop dependent
* @compile NegExactILoopDependentTest.java Verify.java
* @compile NegExactILoopDependentTest.java Verify.java
* @run main NegExactILoopDependentTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main NegExactILoopDependentTest
*
*
*/
*/
public
class
NegExactILoopDependentTest
{
public
class
NegExactILoopDependentTest
{
...
...
test/compiler/intrinsics/mathexact/NegExactINonConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test non constant negExact
* @summary Test non constant negExact
* @compile NegExactINonConstantTest.java Verify.java
* @compile NegExactINonConstantTest.java Verify.java
* @run main NegExactINonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main NegExactINonConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/NegExactLConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test constant negExact
* @summary Test constant negExact
* @compile NegExactLConstantTest.java Verify.java
* @compile NegExactLConstantTest.java Verify.java
* @run main NegExactLConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main NegExactLConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/NegExactLNonConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test constant negExact
* @summary Test constant negExact
* @compile NegExactLNonConstantTest.java Verify.java
* @compile NegExactLNonConstantTest.java Verify.java
* @run main NegExactLNonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main NegExactLNonConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/NestedMathExactTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8027444
* @bug 8027444
* @summary Test nested loops
* @summary Test nested loops
* @compile NestedMathExactTest.java
* @compile NestedMathExactTest.java
* @run main NestedMathExactTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main NestedMathExactTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/SplitThruPhiTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8028198
* @bug 8028198
* @summary Verify that split through phi does the right thing
* @summary Verify that split through phi does the right thing
* @compile SplitThruPhiTest.java
* @compile SplitThruPhiTest.java
* @run main SplitThruPhiTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main SplitThruPhiTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/SubExactICondTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test subtractExact as condition
* @summary Test subtractExact as condition
* @compile SubExactICondTest.java Verify.java
* @compile SubExactICondTest.java Verify.java
* @run main SubExactICondTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main SubExactICondTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/SubExactIConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test constant subtractExact
* @summary Test constant subtractExact
* @compile SubExactIConstantTest.java Verify.java
* @compile SubExactIConstantTest.java Verify.java
* @run main SubExactIConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main SubExactIConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/SubExactILoadTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test non constant subtractExact
* @summary Test non constant subtractExact
* @compile SubExactILoadTest.java Verify.java
* @compile SubExactILoadTest.java Verify.java
* @run main SubExactILoadTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main SubExactILoadTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/SubExactILoopDependentTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test non constant subtractExact
* @summary Test non constant subtractExact
* @compile SubExactILoopDependentTest.java Verify.java
* @compile SubExactILoopDependentTest.java Verify.java
* @run main SubExactILoopDependentTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main SubExactILoopDependentTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/SubExactINonConstantTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test non constant subtractExact
* @summary Test non constant subtractExact
* @compile SubExactINonConstantTest.java Verify.java
* @compile SubExactINonConstantTest.java Verify.java
* @run main SubExactINonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main SubExactINonConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/SubExactIRepeatTest.java
浏览文件 @
0135bec0
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
* @bug 8026844
* @bug 8026844
* @summary Test repeating subtractExact
* @summary Test repeating subtractExact
* @compile SubExactIRepeatTest.java Verify.java
* @compile SubExactIRepeatTest.java Verify.java
* @run main SubExactIRepeatTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main SubExactIRepeatTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/SubExactLConstantTest.java
浏览文件 @
0135bec0
...
@@ -27,7 +27,7 @@
...
@@ -27,7 +27,7 @@
* @bug 8027353
* @bug 8027353
* @summary Test constant subtractExact
* @summary Test constant subtractExact
* @compile SubExactLConstantTest.java Verify.java
* @compile SubExactLConstantTest.java Verify.java
* @run main SubExactLConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main SubExactLConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/SubExactLNonConstantTest.java
浏览文件 @
0135bec0
...
@@ -27,7 +27,7 @@
...
@@ -27,7 +27,7 @@
* @bug 8027353
* @bug 8027353
* @summary Test non constant subtractExact
* @summary Test non constant subtractExact
* @compile SubExactLNonConstantTest.java Verify.java
* @compile SubExactLNonConstantTest.java Verify.java
* @run main SubExactLNonConstantTest
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseMathExactIntrinsics
* @run main SubExactLNonConstantTest
*
*
*/
*/
...
...
test/compiler/intrinsics/mathexact/Verify.java
浏览文件 @
0135bec0
...
@@ -160,6 +160,7 @@ public class Verify {
...
@@ -160,6 +160,7 @@ public class Verify {
public
static
class
NonConstantTest
{
public
static
class
NonConstantTest
{
public
static
java
.
util
.
Random
rnd
=
new
java
.
util
.
Random
();
public
static
java
.
util
.
Random
rnd
=
new
java
.
util
.
Random
();
public
static
int
[]
values
=
new
int
[]
{
Integer
.
MAX_VALUE
,
Integer
.
MIN_VALUE
};
public
static
void
verify
(
BinaryMethod
method
)
{
public
static
void
verify
(
BinaryMethod
method
)
{
for
(
int
i
=
0
;
i
<
50000
;
++
i
)
{
for
(
int
i
=
0
;
i
<
50000
;
++
i
)
{
...
@@ -169,6 +170,10 @@ public class Verify {
...
@@ -169,6 +170,10 @@ public class Verify {
Verify
.
verifyBinary
(
rnd1
+
1
,
rnd2
,
method
);
Verify
.
verifyBinary
(
rnd1
+
1
,
rnd2
,
method
);
Verify
.
verifyBinary
(
rnd1
-
1
,
rnd2
,
method
);
Verify
.
verifyBinary
(
rnd1
-
1
,
rnd2
,
method
);
Verify
.
verifyBinary
(
rnd1
,
rnd2
-
1
,
method
);
Verify
.
verifyBinary
(
rnd1
,
rnd2
-
1
,
method
);
Verify
.
verifyBinary
(
0
,
values
[
0
],
method
);
Verify
.
verifyBinary
(
values
[
0
],
0
,
method
);
Verify
.
verifyBinary
(
0
,
values
[
1
],
method
);
Verify
.
verifyBinary
(
values
[
1
],
0
,
method
);
}
}
}
}
}
}
...
...
test/compiler/intrinsics/mathexact/sanity/AddExactIntTest.java
浏览文件 @
0135bec0
...
@@ -26,11 +26,11 @@
...
@@ -26,11 +26,11 @@
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @build AddExactIntTest
* @build AddExactIntTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics AddExactIntTest
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics AddExactIntTest
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics AddExactIntTest
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics AddExactIntTest
...
...
test/compiler/intrinsics/mathexact/sanity/AddExactLongTest.java
浏览文件 @
0135bec0
...
@@ -26,11 +26,11 @@
...
@@ -26,11 +26,11 @@
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @build AddExactLongTest
* @build AddExactLongTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics AddExactLongTest
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics AddExactLongTest
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics AddExactLongTest
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics AddExactLongTest
...
...
test/compiler/intrinsics/mathexact/sanity/DecrementExactIntTest.java
浏览文件 @
0135bec0
...
@@ -26,11 +26,11 @@
...
@@ -26,11 +26,11 @@
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @build DecrementExactIntTest
* @build DecrementExactIntTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics DecrementExactIntTest
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics DecrementExactIntTest
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics DecrementExactIntTest
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics DecrementExactIntTest
...
...
test/compiler/intrinsics/mathexact/sanity/DecrementExactLongTest.java
浏览文件 @
0135bec0
...
@@ -26,11 +26,11 @@
...
@@ -26,11 +26,11 @@
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @build DecrementExactLongTest
* @build DecrementExactLongTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics DecrementExactLongTest
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics DecrementExactLongTest
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics DecrementExactLongTest
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics DecrementExactLongTest
...
@@ -42,4 +42,4 @@ public class DecrementExactLongTest {
...
@@ -42,4 +42,4 @@ public class DecrementExactLongTest {
public
static
void
main
(
String
[]
args
)
throws
Exception
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
new
IntrinsicBase
.
LongTest
(
MathIntrinsic
.
LongIntrinsic
.
Decrement
).
test
();
new
IntrinsicBase
.
LongTest
(
MathIntrinsic
.
LongIntrinsic
.
Decrement
).
test
();
}
}
}
}
\ No newline at end of file
test/compiler/intrinsics/mathexact/sanity/IncrementExactIntTest.java
浏览文件 @
0135bec0
...
@@ -26,11 +26,11 @@
...
@@ -26,11 +26,11 @@
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @build IncrementExactIntTest
* @build IncrementExactIntTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics IncrementExactIntTest
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics IncrementExactIntTest
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics IncrementExactIntTest
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics IncrementExactIntTest
...
...
test/compiler/intrinsics/mathexact/sanity/IncrementExactLongTest.java
浏览文件 @
0135bec0
...
@@ -26,11 +26,11 @@
...
@@ -26,11 +26,11 @@
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @build IncrementExactLongTest
* @build IncrementExactLongTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics IncrementExactLongTest
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics IncrementExactLongTest
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics IncrementExactLongTest
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics IncrementExactLongTest
...
...
test/compiler/intrinsics/mathexact/sanity/MultiplyExactIntTest.java
浏览文件 @
0135bec0
...
@@ -26,11 +26,11 @@
...
@@ -26,11 +26,11 @@
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @build MultiplyExactIntTest
* @build MultiplyExactIntTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics MultiplyExactIntTest
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics MultiplyExactIntTest
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics MultiplyExactIntTest
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics MultiplyExactIntTest
...
...
test/compiler/intrinsics/mathexact/sanity/MultiplyExactLongTest.java
浏览文件 @
0135bec0
...
@@ -26,11 +26,11 @@
...
@@ -26,11 +26,11 @@
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @build MultiplyExactLongTest
* @build MultiplyExactLongTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics MultiplyExactLongTest
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics MultiplyExactLongTest
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics MultiplyExactLongTest
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics MultiplyExactLongTest
...
...
test/compiler/intrinsics/mathexact/sanity/NegateExactIntTest.java
浏览文件 @
0135bec0
...
@@ -26,11 +26,11 @@
...
@@ -26,11 +26,11 @@
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @build NegateExactIntTest
* @build NegateExactIntTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics NegateExactIntTest
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics NegateExactIntTest
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics NegateExactIntTest
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics NegateExactIntTest
...
...
test/compiler/intrinsics/mathexact/sanity/NegateExactLongTest.java
浏览文件 @
0135bec0
...
@@ -26,11 +26,11 @@
...
@@ -26,11 +26,11 @@
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @build NegateExactLongTest
* @build NegateExactLongTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics NegateExactLongTest
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics NegateExactLongTest
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics NegateExactLongTest
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics NegateExactLongTest
...
...
test/compiler/intrinsics/mathexact/sanity/SubtractExactIntTest.java
浏览文件 @
0135bec0
...
@@ -26,11 +26,11 @@
...
@@ -26,11 +26,11 @@
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @build SubtractExactIntTest
* @build SubtractExactIntTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics SubtractExactIntTest
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics SubtractExactIntTest
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics SubtractExactIntTest
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics SubtractExactIntTest
...
...
test/compiler/intrinsics/mathexact/sanity/SubtractExactLongTest.java
浏览文件 @
0135bec0
...
@@ -26,11 +26,11 @@
...
@@ -26,11 +26,11 @@
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @library /testlibrary /testlibrary/whitebox /compiler/whitebox
* @build SubtractExactLongTest
* @build SubtractExactLongTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics SubtractExactLongTest
* -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics SubtractExactLongTest
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics SubtractExactLongTest
* -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics SubtractExactLongTest
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录