Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
3fceb92c
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看板
提交
3fceb92c
编写于
7月 27, 2011
作者:
K
kvn
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7069452: Cleanup NodeFlags
Summary: Remove flags which duplicate information in Node::NodeClasses. Reviewed-by: never
上级
63d7394d
变更
25
隐藏空白更改
内联
并排
Showing
25 changed file
with
106 addition
and
259 deletion
+106
-259
src/cpu/sparc/vm/sparc.ad
src/cpu/sparc/vm/sparc.ad
+3
-22
src/cpu/x86/vm/x86_32.ad
src/cpu/x86/vm/x86_32.ad
+0
-26
src/cpu/x86/vm/x86_64.ad
src/cpu/x86/vm/x86_64.ad
+0
-28
src/share/vm/adlc/adlparse.cpp
src/share/vm/adlc/adlparse.cpp
+0
-3
src/share/vm/adlc/archDesc.cpp
src/share/vm/adlc/archDesc.cpp
+3
-0
src/share/vm/adlc/formssel.cpp
src/share/vm/adlc/formssel.cpp
+3
-23
src/share/vm/adlc/formssel.hpp
src/share/vm/adlc/formssel.hpp
+0
-5
src/share/vm/adlc/output_h.cpp
src/share/vm/adlc/output_h.cpp
+3
-31
src/share/vm/opto/block.cpp
src/share/vm/opto/block.cpp
+5
-5
src/share/vm/opto/callnode.hpp
src/share/vm/opto/callnode.hpp
+0
-2
src/share/vm/opto/cfgnode.hpp
src/share/vm/opto/cfgnode.hpp
+1
-3
src/share/vm/opto/coalesce.cpp
src/share/vm/opto/coalesce.cpp
+3
-3
src/share/vm/opto/gcm.cpp
src/share/vm/opto/gcm.cpp
+1
-1
src/share/vm/opto/idealGraphPrinter.cpp
src/share/vm/opto/idealGraphPrinter.cpp
+0
-15
src/share/vm/opto/lcm.cpp
src/share/vm/opto/lcm.cpp
+6
-6
src/share/vm/opto/machnode.hpp
src/share/vm/opto/machnode.hpp
+13
-8
src/share/vm/opto/mulnode.cpp
src/share/vm/opto/mulnode.cpp
+1
-1
src/share/vm/opto/mulnode.hpp
src/share/vm/opto/mulnode.hpp
+1
-3
src/share/vm/opto/node.hpp
src/share/vm/opto/node.hpp
+40
-52
src/share/vm/opto/output.cpp
src/share/vm/opto/output.cpp
+10
-10
src/share/vm/opto/reg_split.cpp
src/share/vm/opto/reg_split.cpp
+1
-1
src/share/vm/opto/superword.cpp
src/share/vm/opto/superword.cpp
+5
-4
src/share/vm/opto/superword.hpp
src/share/vm/opto/superword.hpp
+1
-1
src/share/vm/opto/vectornode.cpp
src/share/vm/opto/vectornode.cpp
+1
-1
src/share/vm/opto/vectornode.hpp
src/share/vm/opto/vectornode.hpp
+5
-5
未找到文件。
src/cpu/sparc/vm/sparc.ad
浏览文件 @
3fceb92c
...
@@ -3314,10 +3314,9 @@ op_attrib op_cost(1); // Required cost attribute
...
@@ -3314,10 +3314,9 @@ op_attrib op_cost(1); // Required cost attribute
//----------Instruction Attributes---------------------------------------------
//----------Instruction Attributes---------------------------------------------
ins_attrib ins_cost(DEFAULT_COST); // Required cost attribute
ins_attrib ins_cost(DEFAULT_COST); // Required cost attribute
ins_attrib ins_size(32); // Required size attribute (in bits)
ins_attrib ins_size(32); // Required size attribute (in bits)
ins_attrib ins_pc_relative(0); // Required PC Relative flag
ins_attrib ins_short_branch(0); // Required flag: is this instruction a
ins_attrib ins_short_branch(0); // Required flag: is this instruction a
// non-matching short branch variant of some
// non-matching short branch variant of some
// long branch?
// long branch?
//----------OPERANDS-----------------------------------------------------------
//----------OPERANDS-----------------------------------------------------------
...
@@ -9182,7 +9181,6 @@ instruct jumpXtnd(iRegX switch_val, o7RegI table) %{
...
@@ -9182,7 +9181,6 @@ instruct jumpXtnd(iRegX switch_val, o7RegI table) %{
__ jmp(label_reg, G0);
__ jmp(label_reg, G0);
__ delayed()->nop();
__ delayed()->nop();
%}
%}
ins_pc_relative(1);
ins_pipe(ialu_reg_reg);
ins_pipe(ialu_reg_reg);
%}
%}
...
@@ -9199,7 +9197,6 @@ instruct branch(label labl) %{
...
@@ -9199,7 +9197,6 @@ instruct branch(label labl) %{
__ ba(*L);
__ ba(*L);
__ delayed()->nop();
__ delayed()->nop();
%}
%}
ins_pc_relative(1);
ins_pipe(br);
ins_pipe(br);
%}
%}
...
@@ -9213,7 +9210,6 @@ instruct branchCon(cmpOp cmp, flagsReg icc, label labl) %{
...
@@ -9213,7 +9210,6 @@ instruct branchCon(cmpOp cmp, flagsReg icc, label labl) %{
format %{ "BP$cmp $icc,$labl" %}
format %{ "BP$cmp $icc,$labl" %}
// Prim = bits 24-22, Secnd = bits 31-30
// Prim = bits 24-22, Secnd = bits 31-30
ins_encode( enc_bp( labl, cmp, icc ) );
ins_encode( enc_bp( labl, cmp, icc ) );
ins_pc_relative(1);
ins_pipe(br_cc);
ins_pipe(br_cc);
%}
%}
...
@@ -9230,7 +9226,6 @@ instruct branchCon_regI(cmpOp_reg cmp, iRegI op1, immI0 zero, label labl) %{
...
@@ -9230,7 +9226,6 @@ instruct branchCon_regI(cmpOp_reg cmp, iRegI op1, immI0 zero, label labl) %{
ins_cost(BRANCH_COST);
ins_cost(BRANCH_COST);
format %{ "BR$cmp $op1,$labl" %}
format %{ "BR$cmp $op1,$labl" %}
ins_encode( enc_bpr( labl, cmp, op1 ) );
ins_encode( enc_bpr( labl, cmp, op1 ) );
ins_pc_relative(1);
ins_pipe(br_reg);
ins_pipe(br_reg);
%}
%}
...
@@ -9243,7 +9238,6 @@ instruct branchCon_regP(cmpOp_reg cmp, iRegP op1, immP0 null, label labl) %{
...
@@ -9243,7 +9238,6 @@ instruct branchCon_regP(cmpOp_reg cmp, iRegP op1, immP0 null, label labl) %{
ins_cost(BRANCH_COST);
ins_cost(BRANCH_COST);
format %{ "BR$cmp $op1,$labl" %}
format %{ "BR$cmp $op1,$labl" %}
ins_encode( enc_bpr( labl, cmp, op1 ) );
ins_encode( enc_bpr( labl, cmp, op1 ) );
ins_pc_relative(1);
ins_pipe(br_reg);
ins_pipe(br_reg);
%}
%}
...
@@ -9256,7 +9250,6 @@ instruct branchCon_regL(cmpOp_reg cmp, iRegL op1, immL0 zero, label labl) %{
...
@@ -9256,7 +9250,6 @@ instruct branchCon_regL(cmpOp_reg cmp, iRegL op1, immL0 zero, label labl) %{
ins_cost(BRANCH_COST);
ins_cost(BRANCH_COST);
format %{ "BR$cmp $op1,$labl" %}
format %{ "BR$cmp $op1,$labl" %}
ins_encode( enc_bpr( labl, cmp, op1 ) );
ins_encode( enc_bpr( labl, cmp, op1 ) );
ins_pc_relative(1);
ins_pipe(br_reg);
ins_pipe(br_reg);
%}
%}
...
@@ -9267,7 +9260,6 @@ instruct branchConU(cmpOpU cmp, flagsRegU icc, label labl) %{
...
@@ -9267,7 +9260,6 @@ instruct branchConU(cmpOpU cmp, flagsRegU icc, label labl) %{
format %{ "BP$cmp $icc,$labl" %}
format %{ "BP$cmp $icc,$labl" %}
// Prim = bits 24-22, Secnd = bits 31-30
// Prim = bits 24-22, Secnd = bits 31-30
ins_encode( enc_bp( labl, cmp, icc ) );
ins_encode( enc_bp( labl, cmp, icc ) );
ins_pc_relative(1);
ins_pipe(br_cc);
ins_pipe(br_cc);
%}
%}
...
@@ -9286,7 +9278,6 @@ instruct branchConP(cmpOpP cmp, flagsRegP pcc, label labl) %{
...
@@ -9286,7 +9278,6 @@ instruct branchConP(cmpOpP cmp, flagsRegP pcc, label labl) %{
__ bp( (Assembler::Condition)($cmp$$cmpcode), false, Assembler::ptr_cc, predict_taken, *L);
__ bp( (Assembler::Condition)($cmp$$cmpcode), false, Assembler::ptr_cc, predict_taken, *L);
__ delayed()->nop();
__ delayed()->nop();
%}
%}
ins_pc_relative(1);
ins_pipe(br_cc);
ins_pipe(br_cc);
%}
%}
...
@@ -9305,7 +9296,6 @@ instruct branchConF(cmpOpF cmp, flagsRegF fcc, label labl) %{
...
@@ -9305,7 +9296,6 @@ instruct branchConF(cmpOpF cmp, flagsRegF fcc, label labl) %{
__ fbp( (Assembler::Condition)($cmp$$cmpcode), false, (Assembler::CC)($fcc$$reg), predict_taken, *L);
__ fbp( (Assembler::Condition)($cmp$$cmpcode), false, (Assembler::CC)($fcc$$reg), predict_taken, *L);
__ delayed()->nop();
__ delayed()->nop();
%}
%}
ins_pc_relative(1);
ins_pipe(br_fcc);
ins_pipe(br_fcc);
%}
%}
...
@@ -9318,7 +9308,6 @@ instruct branchLoopEnd(cmpOp cmp, flagsReg icc, label labl) %{
...
@@ -9318,7 +9308,6 @@ instruct branchLoopEnd(cmpOp cmp, flagsReg icc, label labl) %{
format %{ "BP$cmp $icc,$labl\t! Loop end" %}
format %{ "BP$cmp $icc,$labl\t! Loop end" %}
// Prim = bits 24-22, Secnd = bits 31-30
// Prim = bits 24-22, Secnd = bits 31-30
ins_encode( enc_bp( labl, cmp, icc ) );
ins_encode( enc_bp( labl, cmp, icc ) );
ins_pc_relative(1);
ins_pipe(br_cc);
ins_pipe(br_cc);
%}
%}
...
@@ -9331,7 +9320,6 @@ instruct branchLoopEndU(cmpOpU cmp, flagsRegU icc, label labl) %{
...
@@ -9331,7 +9320,6 @@ instruct branchLoopEndU(cmpOpU cmp, flagsRegU icc, label labl) %{
format %{ "BP$cmp $icc,$labl\t! Loop end" %}
format %{ "BP$cmp $icc,$labl\t! Loop end" %}
// Prim = bits 24-22, Secnd = bits 31-30
// Prim = bits 24-22, Secnd = bits 31-30
ins_encode( enc_bp( labl, cmp, icc ) );
ins_encode( enc_bp( labl, cmp, icc ) );
ins_pc_relative(1);
ins_pipe(br_cc);
ins_pipe(br_cc);
%}
%}
...
@@ -9371,7 +9359,6 @@ instruct branchCon_long(cmpOp cmp, flagsRegL xcc, label labl) %{
...
@@ -9371,7 +9359,6 @@ instruct branchCon_long(cmpOp cmp, flagsRegL xcc, label labl) %{
__ bp( (Assembler::Condition)($cmp$$cmpcode), false, Assembler::xcc, predict_taken, *L);
__ bp( (Assembler::Condition)($cmp$$cmpcode), false, Assembler::xcc, predict_taken, *L);
__ delayed()->nop();
__ delayed()->nop();
%}
%}
ins_pc_relative(1);
ins_pipe(br_cc);
ins_pipe(br_cc);
%}
%}
...
@@ -9499,7 +9486,6 @@ instruct CallStaticJavaDirect( method meth ) %{
...
@@ -9499,7 +9486,6 @@ instruct CallStaticJavaDirect( method meth ) %{
ins_cost(CALL_COST);
ins_cost(CALL_COST);
format %{ "CALL,static ; NOP ==> " %}
format %{ "CALL,static ; NOP ==> " %}
ins_encode( Java_Static_Call( meth ), call_epilog );
ins_encode( Java_Static_Call( meth ), call_epilog );
ins_pc_relative(1);
ins_pipe(simple_call);
ins_pipe(simple_call);
%}
%}
...
@@ -9513,7 +9499,6 @@ instruct CallStaticJavaHandle(method meth, l7RegP l7_mh_SP_save) %{
...
@@ -9513,7 +9499,6 @@ instruct CallStaticJavaHandle(method meth, l7RegP l7_mh_SP_save) %{
ins_cost(CALL_COST);
ins_cost(CALL_COST);
format %{ "CALL,static/MethodHandle" %}
format %{ "CALL,static/MethodHandle" %}
ins_encode(preserve_SP, Java_Static_Call(meth), restore_SP, call_epilog);
ins_encode(preserve_SP, Java_Static_Call(meth), restore_SP, call_epilog);
ins_pc_relative(1);
ins_pipe(simple_call);
ins_pipe(simple_call);
%}
%}
...
@@ -9526,7 +9511,6 @@ instruct CallDynamicJavaDirect( method meth ) %{
...
@@ -9526,7 +9511,6 @@ instruct CallDynamicJavaDirect( method meth ) %{
format %{ "SET (empty),R_G5\n\t"
format %{ "SET (empty),R_G5\n\t"
"CALL,dynamic ; NOP ==> " %}
"CALL,dynamic ; NOP ==> " %}
ins_encode( Java_Dynamic_Call( meth ), call_epilog );
ins_encode( Java_Dynamic_Call( meth ), call_epilog );
ins_pc_relative(1);
ins_pipe(call);
ins_pipe(call);
%}
%}
...
@@ -9538,7 +9522,6 @@ instruct CallRuntimeDirect(method meth, l7RegP l7) %{
...
@@ -9538,7 +9522,6 @@ instruct CallRuntimeDirect(method meth, l7RegP l7) %{
format %{ "CALL,runtime" %}
format %{ "CALL,runtime" %}
ins_encode( Java_To_Runtime( meth ),
ins_encode( Java_To_Runtime( meth ),
call_epilog, adjust_long_from_native_call );
call_epilog, adjust_long_from_native_call );
ins_pc_relative(1);
ins_pipe(simple_call);
ins_pipe(simple_call);
%}
%}
...
@@ -9551,7 +9534,6 @@ instruct CallLeafDirect(method meth, l7RegP l7) %{
...
@@ -9551,7 +9534,6 @@ instruct CallLeafDirect(method meth, l7RegP l7) %{
ins_encode( Java_To_Runtime( meth ),
ins_encode( Java_To_Runtime( meth ),
call_epilog,
call_epilog,
adjust_long_from_native_call );
adjust_long_from_native_call );
ins_pc_relative(1);
ins_pipe(simple_call);
ins_pipe(simple_call);
%}
%}
...
@@ -9564,7 +9546,6 @@ instruct CallLeafNoFPDirect(method meth, l7RegP l7) %{
...
@@ -9564,7 +9546,6 @@ instruct CallLeafNoFPDirect(method meth, l7RegP l7) %{
ins_encode( Java_To_Runtime( meth ),
ins_encode( Java_To_Runtime( meth ),
call_epilog,
call_epilog,
adjust_long_from_native_call );
adjust_long_from_native_call );
ins_pc_relative(1);
ins_pipe(simple_call);
ins_pipe(simple_call);
%}
%}
...
...
src/cpu/x86/vm/x86_32.ad
浏览文件 @
3fceb92c
...
@@ -4496,7 +4496,6 @@ op_attrib op_cost(0); // Required cost attribute
...
@@ -4496,7 +4496,6 @@ op_attrib op_cost(0); // Required cost attribute
//----------Instruction Attributes---------------------------------------------
//----------Instruction Attributes---------------------------------------------
ins_attrib ins_cost(100); // Required cost attribute
ins_attrib ins_cost(100); // Required cost attribute
ins_attrib ins_size(8); // Required size attribute (in bits)
ins_attrib ins_size(8); // Required size attribute (in bits)
ins_attrib ins_pc_relative(0); // Required PC Relative flag
ins_attrib ins_short_branch(0); // Required flag: is this instruction a
ins_attrib ins_short_branch(0); // Required flag: is this instruction a
// non-matching short branch variant of some
// non-matching short branch variant of some
// long branch?
// long branch?
...
@@ -13047,7 +13046,6 @@ instruct jumpXtnd(eRegI switch_val) %{
...
@@ -13047,7 +13046,6 @@ instruct jumpXtnd(eRegI switch_val) %{
Address index(noreg, $switch_val$$Register, Address::times_1);
Address index(noreg, $switch_val$$Register, Address::times_1);
__ jump(ArrayAddress($constantaddress, index));
__ jump(ArrayAddress($constantaddress, index));
%}
%}
ins_pc_relative(1);
ins_pipe(pipe_jmp);
ins_pipe(pipe_jmp);
%}
%}
...
@@ -13062,7 +13060,6 @@ instruct jmpDir(label labl) %{
...
@@ -13062,7 +13060,6 @@ instruct jmpDir(label labl) %{
opcode(0xE9);
opcode(0xE9);
ins_encode( OpcP, Lbl( labl ) );
ins_encode( OpcP, Lbl( labl ) );
ins_pipe( pipe_jmp );
ins_pipe( pipe_jmp );
ins_pc_relative(1);
%}
%}
// Jump Direct Conditional - Label defines a relative address from Jcc+1
// Jump Direct Conditional - Label defines a relative address from Jcc+1
...
@@ -13076,7 +13073,6 @@ instruct jmpCon(cmpOp cop, eFlagsReg cr, label labl) %{
...
@@ -13076,7 +13073,6 @@ instruct jmpCon(cmpOp cop, eFlagsReg cr, label labl) %{
opcode(0x0F, 0x80);
opcode(0x0F, 0x80);
ins_encode( Jcc( cop, labl) );
ins_encode( Jcc( cop, labl) );
ins_pipe( pipe_jcc );
ins_pipe( pipe_jcc );
ins_pc_relative(1);
%}
%}
// Jump Direct Conditional - Label defines a relative address from Jcc+1
// Jump Direct Conditional - Label defines a relative address from Jcc+1
...
@@ -13090,7 +13086,6 @@ instruct jmpLoopEnd(cmpOp cop, eFlagsReg cr, label labl) %{
...
@@ -13090,7 +13086,6 @@ instruct jmpLoopEnd(cmpOp cop, eFlagsReg cr, label labl) %{
opcode(0x0F, 0x80);
opcode(0x0F, 0x80);
ins_encode( Jcc( cop, labl) );
ins_encode( Jcc( cop, labl) );
ins_pipe( pipe_jcc );
ins_pipe( pipe_jcc );
ins_pc_relative(1);
%}
%}
// Jump Direct Conditional - Label defines a relative address from Jcc+1
// Jump Direct Conditional - Label defines a relative address from Jcc+1
...
@@ -13104,7 +13099,6 @@ instruct jmpLoopEndU(cmpOpU cop, eFlagsRegU cmp, label labl) %{
...
@@ -13104,7 +13099,6 @@ instruct jmpLoopEndU(cmpOpU cop, eFlagsRegU cmp, label labl) %{
opcode(0x0F, 0x80);
opcode(0x0F, 0x80);
ins_encode( Jcc( cop, labl) );
ins_encode( Jcc( cop, labl) );
ins_pipe( pipe_jcc );
ins_pipe( pipe_jcc );
ins_pc_relative(1);
%}
%}
instruct jmpLoopEndUCF(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
instruct jmpLoopEndUCF(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
...
@@ -13117,7 +13111,6 @@ instruct jmpLoopEndUCF(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
...
@@ -13117,7 +13111,6 @@ instruct jmpLoopEndUCF(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
opcode(0x0F, 0x80);
opcode(0x0F, 0x80);
ins_encode( Jcc( cop, labl) );
ins_encode( Jcc( cop, labl) );
ins_pipe( pipe_jcc );
ins_pipe( pipe_jcc );
ins_pc_relative(1);
%}
%}
// Jump Direct Conditional - using unsigned comparison
// Jump Direct Conditional - using unsigned comparison
...
@@ -13131,7 +13124,6 @@ instruct jmpConU(cmpOpU cop, eFlagsRegU cmp, label labl) %{
...
@@ -13131,7 +13124,6 @@ instruct jmpConU(cmpOpU cop, eFlagsRegU cmp, label labl) %{
opcode(0x0F, 0x80);
opcode(0x0F, 0x80);
ins_encode(Jcc(cop, labl));
ins_encode(Jcc(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
%}
%}
instruct jmpConUCF(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
instruct jmpConUCF(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
...
@@ -13144,7 +13136,6 @@ instruct jmpConUCF(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
...
@@ -13144,7 +13136,6 @@ instruct jmpConUCF(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
opcode(0x0F, 0x80);
opcode(0x0F, 0x80);
ins_encode(Jcc(cop, labl));
ins_encode(Jcc(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
%}
%}
instruct jmpConUCF2(cmpOpUCF2 cop, eFlagsRegUCF cmp, label labl) %{
instruct jmpConUCF2(cmpOpUCF2 cop, eFlagsRegUCF cmp, label labl) %{
...
@@ -13186,7 +13177,6 @@ instruct jmpConUCF2(cmpOpUCF2 cop, eFlagsRegUCF cmp, label labl) %{
...
@@ -13186,7 +13177,6 @@ instruct jmpConUCF2(cmpOpUCF2 cop, eFlagsRegUCF cmp, label labl) %{
emit_d32(cbuf, disp);
emit_d32(cbuf, disp);
%}
%}
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
%}
%}
// ============================================================================
// ============================================================================
...
@@ -13254,7 +13244,6 @@ instruct jmpDir_short(label labl) %{
...
@@ -13254,7 +13244,6 @@ instruct jmpDir_short(label labl) %{
opcode(0xEB);
opcode(0xEB);
ins_encode( OpcP, LblShort( labl ) );
ins_encode( OpcP, LblShort( labl ) );
ins_pipe( pipe_jmp );
ins_pipe( pipe_jmp );
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -13269,7 +13258,6 @@ instruct jmpCon_short(cmpOp cop, eFlagsReg cr, label labl) %{
...
@@ -13269,7 +13258,6 @@ instruct jmpCon_short(cmpOp cop, eFlagsReg cr, label labl) %{
opcode(0x70);
opcode(0x70);
ins_encode( JccShort( cop, labl) );
ins_encode( JccShort( cop, labl) );
ins_pipe( pipe_jcc );
ins_pipe( pipe_jcc );
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -13284,7 +13272,6 @@ instruct jmpLoopEnd_short(cmpOp cop, eFlagsReg cr, label labl) %{
...
@@ -13284,7 +13272,6 @@ instruct jmpLoopEnd_short(cmpOp cop, eFlagsReg cr, label labl) %{
opcode(0x70);
opcode(0x70);
ins_encode( JccShort( cop, labl) );
ins_encode( JccShort( cop, labl) );
ins_pipe( pipe_jcc );
ins_pipe( pipe_jcc );
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -13299,7 +13286,6 @@ instruct jmpLoopEndU_short(cmpOpU cop, eFlagsRegU cmp, label labl) %{
...
@@ -13299,7 +13286,6 @@ instruct jmpLoopEndU_short(cmpOpU cop, eFlagsRegU cmp, label labl) %{
opcode(0x70);
opcode(0x70);
ins_encode( JccShort( cop, labl) );
ins_encode( JccShort( cop, labl) );
ins_pipe( pipe_jcc );
ins_pipe( pipe_jcc );
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -13313,7 +13299,6 @@ instruct jmpLoopEndUCF_short(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
...
@@ -13313,7 +13299,6 @@ instruct jmpLoopEndUCF_short(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
opcode(0x70);
opcode(0x70);
ins_encode( JccShort( cop, labl) );
ins_encode( JccShort( cop, labl) );
ins_pipe( pipe_jcc );
ins_pipe( pipe_jcc );
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -13328,7 +13313,6 @@ instruct jmpConU_short(cmpOpU cop, eFlagsRegU cmp, label labl) %{
...
@@ -13328,7 +13313,6 @@ instruct jmpConU_short(cmpOpU cop, eFlagsRegU cmp, label labl) %{
opcode(0x70);
opcode(0x70);
ins_encode( JccShort( cop, labl) );
ins_encode( JccShort( cop, labl) );
ins_pipe( pipe_jcc );
ins_pipe( pipe_jcc );
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -13342,7 +13326,6 @@ instruct jmpConUCF_short(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
...
@@ -13342,7 +13326,6 @@ instruct jmpConUCF_short(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
opcode(0x70);
opcode(0x70);
ins_encode( JccShort( cop, labl) );
ins_encode( JccShort( cop, labl) );
ins_pipe( pipe_jcc );
ins_pipe( pipe_jcc );
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -13382,7 +13365,6 @@ instruct jmpConUCF2_short(cmpOpUCF2 cop, eFlagsRegUCF cmp, label labl) %{
...
@@ -13382,7 +13365,6 @@ instruct jmpConUCF2_short(cmpOpUCF2 cop, eFlagsRegUCF cmp, label labl) %{
assert(-128 <= parity_disp && parity_disp <= 127, "Displacement too large for short jmp");
assert(-128 <= parity_disp && parity_disp <= 127, "Displacement too large for short jmp");
%}
%}
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -13855,7 +13837,6 @@ instruct CallStaticJavaDirect(method meth) %{
...
@@ -13855,7 +13837,6 @@ instruct CallStaticJavaDirect(method meth) %{
call_epilog,
call_epilog,
post_call_FPU );
post_call_FPU );
ins_pipe( pipe_slow );
ins_pipe( pipe_slow );
ins_pc_relative(1);
ins_alignment(4);
ins_alignment(4);
%}
%}
...
@@ -13879,7 +13860,6 @@ instruct CallStaticJavaHandle(method meth, eBPRegP ebp_mh_SP_save) %{
...
@@ -13879,7 +13860,6 @@ instruct CallStaticJavaHandle(method meth, eBPRegP ebp_mh_SP_save) %{
call_epilog,
call_epilog,
post_call_FPU );
post_call_FPU );
ins_pipe( pipe_slow );
ins_pipe( pipe_slow );
ins_pc_relative(1);
ins_alignment(4);
ins_alignment(4);
%}
%}
...
@@ -13899,7 +13879,6 @@ instruct CallDynamicJavaDirect(method meth) %{
...
@@ -13899,7 +13879,6 @@ instruct CallDynamicJavaDirect(method meth) %{
call_epilog,
call_epilog,
post_call_FPU );
post_call_FPU );
ins_pipe( pipe_slow );
ins_pipe( pipe_slow );
ins_pc_relative(1);
ins_alignment(4);
ins_alignment(4);
%}
%}
...
@@ -13917,7 +13896,6 @@ instruct CallRuntimeDirect(method meth) %{
...
@@ -13917,7 +13896,6 @@ instruct CallRuntimeDirect(method meth) %{
Java_To_Runtime( meth ),
Java_To_Runtime( meth ),
post_call_FPU );
post_call_FPU );
ins_pipe( pipe_slow );
ins_pipe( pipe_slow );
ins_pc_relative(1);
%}
%}
// Call runtime without safepoint
// Call runtime without safepoint
...
@@ -13933,7 +13911,6 @@ instruct CallLeafDirect(method meth) %{
...
@@ -13933,7 +13911,6 @@ instruct CallLeafDirect(method meth) %{
Java_To_Runtime( meth ),
Java_To_Runtime( meth ),
Verify_FPU_For_Leaf, post_call_FPU );
Verify_FPU_For_Leaf, post_call_FPU );
ins_pipe( pipe_slow );
ins_pipe( pipe_slow );
ins_pc_relative(1);
%}
%}
instruct CallLeafNoFPDirect(method meth) %{
instruct CallLeafNoFPDirect(method meth) %{
...
@@ -13945,7 +13922,6 @@ instruct CallLeafNoFPDirect(method meth) %{
...
@@ -13945,7 +13922,6 @@ instruct CallLeafNoFPDirect(method meth) %{
opcode(0xE8); /* E8 cd */
opcode(0xE8); /* E8 cd */
ins_encode(Java_To_Runtime(meth));
ins_encode(Java_To_Runtime(meth));
ins_pipe( pipe_slow );
ins_pipe( pipe_slow );
ins_pc_relative(1);
%}
%}
...
@@ -14024,7 +14000,6 @@ instruct cmpFastLock( eFlagsReg cr, eRegP object, eRegP box, eAXRegI tmp, eRegP
...
@@ -14024,7 +14000,6 @@ instruct cmpFastLock( eFlagsReg cr, eRegP object, eRegP box, eAXRegI tmp, eRegP
format %{ "FASTLOCK $object, $box KILLS $tmp,$scr" %}
format %{ "FASTLOCK $object, $box KILLS $tmp,$scr" %}
ins_encode( Fast_Lock(object,box,tmp,scr) );
ins_encode( Fast_Lock(object,box,tmp,scr) );
ins_pipe( pipe_slow );
ins_pipe( pipe_slow );
ins_pc_relative(1);
%}
%}
instruct cmpFastUnlock( eFlagsReg cr, eRegP object, eAXRegP box, eRegP tmp ) %{
instruct cmpFastUnlock( eFlagsReg cr, eRegP object, eAXRegP box, eRegP tmp ) %{
...
@@ -14034,7 +14009,6 @@ instruct cmpFastUnlock( eFlagsReg cr, eRegP object, eAXRegP box, eRegP tmp ) %{
...
@@ -14034,7 +14009,6 @@ instruct cmpFastUnlock( eFlagsReg cr, eRegP object, eAXRegP box, eRegP tmp ) %{
format %{ "FASTUNLOCK $object, $box, $tmp" %}
format %{ "FASTUNLOCK $object, $box, $tmp" %}
ins_encode( Fast_Unlock(object,box,tmp) );
ins_encode( Fast_Unlock(object,box,tmp) );
ins_pipe( pipe_slow );
ins_pipe( pipe_slow );
ins_pc_relative(1);
%}
%}
...
...
src/cpu/x86/vm/x86_64.ad
浏览文件 @
3fceb92c
...
@@ -4013,7 +4013,6 @@ op_attrib op_cost(0); // Required cost attribute
...
@@ -4013,7 +4013,6 @@ op_attrib op_cost(0); // Required cost attribute
//----------Instruction Attributes---------------------------------------------
//----------Instruction Attributes---------------------------------------------
ins_attrib ins_cost(100); // Required cost attribute
ins_attrib ins_cost(100); // Required cost attribute
ins_attrib ins_size(8); // Required size attribute (in bits)
ins_attrib ins_size(8); // Required size attribute (in bits)
ins_attrib ins_pc_relative(0); // Required PC Relative flag
ins_attrib ins_short_branch(0); // Required flag: is this instruction
ins_attrib ins_short_branch(0); // Required flag: is this instruction
// a non-matching short branch variant
// a non-matching short branch variant
// of some long branch?
// of some long branch?
...
@@ -7547,7 +7546,6 @@ instruct jumpXtnd_offset(rRegL switch_val, immI2 shift, rRegI dest) %{
...
@@ -7547,7 +7546,6 @@ instruct jumpXtnd_offset(rRegL switch_val, immI2 shift, rRegI dest) %{
__ jmp(dispatch);
__ jmp(dispatch);
%}
%}
ins_pipe(pipe_jmp);
ins_pipe(pipe_jmp);
ins_pc_relative(1);
%}
%}
instruct jumpXtnd_addr(rRegL switch_val, immI2 shift, immL32 offset, rRegI dest) %{
instruct jumpXtnd_addr(rRegL switch_val, immI2 shift, immL32 offset, rRegI dest) %{
...
@@ -7568,7 +7566,6 @@ instruct jumpXtnd_addr(rRegL switch_val, immI2 shift, immL32 offset, rRegI dest)
...
@@ -7568,7 +7566,6 @@ instruct jumpXtnd_addr(rRegL switch_val, immI2 shift, immL32 offset, rRegI dest)
__ jmp(dispatch);
__ jmp(dispatch);
%}
%}
ins_pipe(pipe_jmp);
ins_pipe(pipe_jmp);
ins_pc_relative(1);
%}
%}
instruct jumpXtnd(rRegL switch_val, rRegI dest) %{
instruct jumpXtnd(rRegL switch_val, rRegI dest) %{
...
@@ -7589,7 +7586,6 @@ instruct jumpXtnd(rRegL switch_val, rRegI dest) %{
...
@@ -7589,7 +7586,6 @@ instruct jumpXtnd(rRegL switch_val, rRegI dest) %{
__ jmp(dispatch);
__ jmp(dispatch);
%}
%}
ins_pipe(pipe_jmp);
ins_pipe(pipe_jmp);
ins_pc_relative(1);
%}
%}
// Conditional move
// Conditional move
...
@@ -12020,7 +12016,6 @@ instruct jmpDir(label labl)
...
@@ -12020,7 +12016,6 @@ instruct jmpDir(label labl)
opcode(0xE9);
opcode(0xE9);
ins_encode(OpcP, Lbl(labl));
ins_encode(OpcP, Lbl(labl));
ins_pipe(pipe_jmp);
ins_pipe(pipe_jmp);
ins_pc_relative(1);
%}
%}
// Jump Direct Conditional - Label defines a relative address from Jcc+1
// Jump Direct Conditional - Label defines a relative address from Jcc+1
...
@@ -12035,7 +12030,6 @@ instruct jmpCon(cmpOp cop, rFlagsReg cr, label labl)
...
@@ -12035,7 +12030,6 @@ instruct jmpCon(cmpOp cop, rFlagsReg cr, label labl)
opcode(0x0F, 0x80);
opcode(0x0F, 0x80);
ins_encode(Jcc(cop, labl));
ins_encode(Jcc(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
%}
%}
// Jump Direct Conditional - Label defines a relative address from Jcc+1
// Jump Direct Conditional - Label defines a relative address from Jcc+1
...
@@ -12050,7 +12044,6 @@ instruct jmpLoopEnd(cmpOp cop, rFlagsReg cr, label labl)
...
@@ -12050,7 +12044,6 @@ instruct jmpLoopEnd(cmpOp cop, rFlagsReg cr, label labl)
opcode(0x0F, 0x80);
opcode(0x0F, 0x80);
ins_encode(Jcc(cop, labl));
ins_encode(Jcc(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
%}
%}
// Jump Direct Conditional - Label defines a relative address from Jcc+1
// Jump Direct Conditional - Label defines a relative address from Jcc+1
...
@@ -12064,7 +12057,6 @@ instruct jmpLoopEndU(cmpOpU cop, rFlagsRegU cmp, label labl) %{
...
@@ -12064,7 +12057,6 @@ instruct jmpLoopEndU(cmpOpU cop, rFlagsRegU cmp, label labl) %{
opcode(0x0F, 0x80);
opcode(0x0F, 0x80);
ins_encode(Jcc(cop, labl));
ins_encode(Jcc(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
%}
%}
instruct jmpLoopEndUCF(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{
instruct jmpLoopEndUCF(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{
...
@@ -12077,7 +12069,6 @@ instruct jmpLoopEndUCF(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{
...
@@ -12077,7 +12069,6 @@ instruct jmpLoopEndUCF(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{
opcode(0x0F, 0x80);
opcode(0x0F, 0x80);
ins_encode(Jcc(cop, labl));
ins_encode(Jcc(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
%}
%}
// Jump Direct Conditional - using unsigned comparison
// Jump Direct Conditional - using unsigned comparison
...
@@ -12091,7 +12082,6 @@ instruct jmpConU(cmpOpU cop, rFlagsRegU cmp, label labl) %{
...
@@ -12091,7 +12082,6 @@ instruct jmpConU(cmpOpU cop, rFlagsRegU cmp, label labl) %{
opcode(0x0F, 0x80);
opcode(0x0F, 0x80);
ins_encode(Jcc(cop, labl));
ins_encode(Jcc(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
%}
%}
instruct jmpConUCF(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{
instruct jmpConUCF(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{
...
@@ -12104,7 +12094,6 @@ instruct jmpConUCF(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{
...
@@ -12104,7 +12094,6 @@ instruct jmpConUCF(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{
opcode(0x0F, 0x80);
opcode(0x0F, 0x80);
ins_encode(Jcc(cop, labl));
ins_encode(Jcc(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
%}
%}
instruct jmpConUCF2(cmpOpUCF2 cop, rFlagsRegUCF cmp, label labl) %{
instruct jmpConUCF2(cmpOpUCF2 cop, rFlagsRegUCF cmp, label labl) %{
...
@@ -12144,7 +12133,6 @@ instruct jmpConUCF2(cmpOpUCF2 cop, rFlagsRegUCF cmp, label labl) %{
...
@@ -12144,7 +12133,6 @@ instruct jmpConUCF2(cmpOpUCF2 cop, rFlagsRegUCF cmp, label labl) %{
emit_d32(cbuf, disp);
emit_d32(cbuf, disp);
%}
%}
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
%}
%}
// ============================================================================
// ============================================================================
...
@@ -12221,7 +12209,6 @@ instruct jmpDir_short(label labl) %{
...
@@ -12221,7 +12209,6 @@ instruct jmpDir_short(label labl) %{
opcode(0xEB);
opcode(0xEB);
ins_encode(OpcP, LblShort(labl));
ins_encode(OpcP, LblShort(labl));
ins_pipe(pipe_jmp);
ins_pipe(pipe_jmp);
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -12236,7 +12223,6 @@ instruct jmpCon_short(cmpOp cop, rFlagsReg cr, label labl) %{
...
@@ -12236,7 +12223,6 @@ instruct jmpCon_short(cmpOp cop, rFlagsReg cr, label labl) %{
opcode(0x70);
opcode(0x70);
ins_encode(JccShort(cop, labl));
ins_encode(JccShort(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -12251,7 +12237,6 @@ instruct jmpLoopEnd_short(cmpOp cop, rFlagsReg cr, label labl) %{
...
@@ -12251,7 +12237,6 @@ instruct jmpLoopEnd_short(cmpOp cop, rFlagsReg cr, label labl) %{
opcode(0x70);
opcode(0x70);
ins_encode(JccShort(cop, labl));
ins_encode(JccShort(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -12266,7 +12251,6 @@ instruct jmpLoopEndU_short(cmpOpU cop, rFlagsRegU cmp, label labl) %{
...
@@ -12266,7 +12251,6 @@ instruct jmpLoopEndU_short(cmpOpU cop, rFlagsRegU cmp, label labl) %{
opcode(0x70);
opcode(0x70);
ins_encode(JccShort(cop, labl));
ins_encode(JccShort(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -12280,7 +12264,6 @@ instruct jmpLoopEndUCF_short(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{
...
@@ -12280,7 +12264,6 @@ instruct jmpLoopEndUCF_short(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{
opcode(0x70);
opcode(0x70);
ins_encode(JccShort(cop, labl));
ins_encode(JccShort(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -12295,7 +12278,6 @@ instruct jmpConU_short(cmpOpU cop, rFlagsRegU cmp, label labl) %{
...
@@ -12295,7 +12278,6 @@ instruct jmpConU_short(cmpOpU cop, rFlagsRegU cmp, label labl) %{
opcode(0x70);
opcode(0x70);
ins_encode(JccShort(cop, labl));
ins_encode(JccShort(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -12309,7 +12291,6 @@ instruct jmpConUCF_short(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{
...
@@ -12309,7 +12291,6 @@ instruct jmpConUCF_short(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{
opcode(0x70);
opcode(0x70);
ins_encode(JccShort(cop, labl));
ins_encode(JccShort(cop, labl));
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -12349,7 +12330,6 @@ instruct jmpConUCF2_short(cmpOpUCF2 cop, rFlagsRegUCF cmp, label labl) %{
...
@@ -12349,7 +12330,6 @@ instruct jmpConUCF2_short(cmpOpUCF2 cop, rFlagsRegUCF cmp, label labl) %{
assert(-128 <= parity_disp && parity_disp <= 127, "Displacement too large for short jmp");
assert(-128 <= parity_disp && parity_disp <= 127, "Displacement too large for short jmp");
%}
%}
ins_pipe(pipe_jcc);
ins_pipe(pipe_jcc);
ins_pc_relative(1);
ins_short_branch(1);
ins_short_branch(1);
%}
%}
...
@@ -12366,7 +12346,6 @@ instruct cmpFastLock(rFlagsReg cr,
...
@@ -12366,7 +12346,6 @@ instruct cmpFastLock(rFlagsReg cr,
format %{ "fastlock $object,$box,$tmp,$scr" %}
format %{ "fastlock $object,$box,$tmp,$scr" %}
ins_encode(Fast_Lock(object, box, tmp, scr));
ins_encode(Fast_Lock(object, box, tmp, scr));
ins_pipe(pipe_slow);
ins_pipe(pipe_slow);
ins_pc_relative(1);
%}
%}
instruct cmpFastUnlock(rFlagsReg cr,
instruct cmpFastUnlock(rFlagsReg cr,
...
@@ -12379,7 +12358,6 @@ instruct cmpFastUnlock(rFlagsReg cr,
...
@@ -12379,7 +12358,6 @@ instruct cmpFastUnlock(rFlagsReg cr,
format %{ "fastunlock $object, $box, $tmp" %}
format %{ "fastunlock $object, $box, $tmp" %}
ins_encode(Fast_Unlock(object, box, tmp));
ins_encode(Fast_Unlock(object, box, tmp));
ins_pipe(pipe_slow);
ins_pipe(pipe_slow);
ins_pc_relative(1);
%}
%}
...
@@ -12432,7 +12410,6 @@ instruct CallStaticJavaDirect(method meth) %{
...
@@ -12432,7 +12410,6 @@ instruct CallStaticJavaDirect(method meth) %{
opcode(0xE8); /* E8 cd */
opcode(0xE8); /* E8 cd */
ins_encode(Java_Static_Call(meth), call_epilog);
ins_encode(Java_Static_Call(meth), call_epilog);
ins_pipe(pipe_slow);
ins_pipe(pipe_slow);
ins_pc_relative(1);
ins_alignment(4);
ins_alignment(4);
%}
%}
...
@@ -12454,7 +12431,6 @@ instruct CallStaticJavaHandle(method meth, rbp_RegP rbp_mh_SP_save) %{
...
@@ -12454,7 +12431,6 @@ instruct CallStaticJavaHandle(method meth, rbp_RegP rbp_mh_SP_save) %{
restore_SP,
restore_SP,
call_epilog);
call_epilog);
ins_pipe(pipe_slow);
ins_pipe(pipe_slow);
ins_pc_relative(1);
ins_alignment(4);
ins_alignment(4);
%}
%}
...
@@ -12472,7 +12448,6 @@ instruct CallDynamicJavaDirect(method meth)
...
@@ -12472,7 +12448,6 @@ instruct CallDynamicJavaDirect(method meth)
opcode(0xE8); /* E8 cd */
opcode(0xE8); /* E8 cd */
ins_encode(Java_Dynamic_Call(meth), call_epilog);
ins_encode(Java_Dynamic_Call(meth), call_epilog);
ins_pipe(pipe_slow);
ins_pipe(pipe_slow);
ins_pc_relative(1);
ins_alignment(4);
ins_alignment(4);
%}
%}
...
@@ -12487,7 +12462,6 @@ instruct CallRuntimeDirect(method meth)
...
@@ -12487,7 +12462,6 @@ instruct CallRuntimeDirect(method meth)
opcode(0xE8); /* E8 cd */
opcode(0xE8); /* E8 cd */
ins_encode(Java_To_Runtime(meth));
ins_encode(Java_To_Runtime(meth));
ins_pipe(pipe_slow);
ins_pipe(pipe_slow);
ins_pc_relative(1);
%}
%}
// Call runtime without safepoint
// Call runtime without safepoint
...
@@ -12501,7 +12475,6 @@ instruct CallLeafDirect(method meth)
...
@@ -12501,7 +12475,6 @@ instruct CallLeafDirect(method meth)
opcode(0xE8); /* E8 cd */
opcode(0xE8); /* E8 cd */
ins_encode(Java_To_Runtime(meth));
ins_encode(Java_To_Runtime(meth));
ins_pipe(pipe_slow);
ins_pipe(pipe_slow);
ins_pc_relative(1);
%}
%}
// Call runtime without safepoint
// Call runtime without safepoint
...
@@ -12515,7 +12488,6 @@ instruct CallLeafNoFPDirect(method meth)
...
@@ -12515,7 +12488,6 @@ instruct CallLeafNoFPDirect(method meth)
opcode(0xE8); /* E8 cd */
opcode(0xE8); /* E8 cd */
ins_encode(Java_To_Runtime(meth));
ins_encode(Java_To_Runtime(meth));
ins_pipe(pipe_slow);
ins_pipe(pipe_slow);
ins_pc_relative(1);
%}
%}
// Return Instruction
// Return Instruction
...
...
src/share/vm/adlc/adlparse.cpp
浏览文件 @
3fceb92c
...
@@ -126,9 +126,6 @@ void ADLParser::parse() {
...
@@ -126,9 +126,6 @@ void ADLParser::parse() {
if
(
_globalNames
[
AttributeForm
::
_ins_cost
]
==
NULL
)
{
if
(
_globalNames
[
AttributeForm
::
_ins_cost
]
==
NULL
)
{
parse_err
(
SEMERR
,
"Did not declare 'ins_cost' attribute"
);
parse_err
(
SEMERR
,
"Did not declare 'ins_cost' attribute"
);
}
}
if
(
_globalNames
[
AttributeForm
::
_ins_pc_relative
]
==
NULL
)
{
parse_err
(
SEMERR
,
"Did not declare 'ins_pc_relative' attribute"
);
}
if
(
_globalNames
[
AttributeForm
::
_op_cost
]
==
NULL
)
{
if
(
_globalNames
[
AttributeForm
::
_op_cost
]
==
NULL
)
{
parse_err
(
SEMERR
,
"Did not declare 'op_cost' attribute"
);
parse_err
(
SEMERR
,
"Did not declare 'op_cost' attribute"
);
}
}
...
...
src/share/vm/adlc/archDesc.cpp
浏览文件 @
3fceb92c
...
@@ -335,6 +335,9 @@ void ArchDesc::inspectInstructions() {
...
@@ -335,6 +335,9 @@ void ArchDesc::inspectInstructions() {
while
(
attr
!=
NULL
)
{
while
(
attr
!=
NULL
)
{
if
(
strcmp
(
attr
->
_ident
,
"ins_short_branch"
)
==
0
&&
if
(
strcmp
(
attr
->
_ident
,
"ins_short_branch"
)
==
0
&&
attr
->
int_val
(
*
this
)
!=
0
)
{
attr
->
int_val
(
*
this
)
!=
0
)
{
if
(
!
instr
->
is_ideal_branch
()
||
instr
->
label_position
()
==
-
1
)
{
syntax_err
(
instr
->
_linenum
,
"%s: Only short branch to a label is supported
\n
"
,
rootOp
);
}
instr
->
set_short_branch
(
true
);
instr
->
set_short_branch
(
true
);
}
else
if
(
strcmp
(
attr
->
_ident
,
"ins_alignment"
)
==
0
&&
}
else
if
(
strcmp
(
attr
->
_ident
,
"ins_alignment"
)
==
0
&&
attr
->
int_val
(
*
this
)
!=
0
)
{
attr
->
int_val
(
*
this
)
!=
0
)
{
...
...
src/share/vm/adlc/formssel.cpp
浏览文件 @
3fceb92c
...
@@ -291,15 +291,6 @@ int InstructForm::is_tls_instruction() const {
...
@@ -291,15 +291,6 @@ int InstructForm::is_tls_instruction() const {
}
}
// Return 'true' if this instruction matches an ideal 'Copy*' node
bool
InstructForm
::
is_ideal_unlock
()
const
{
return
_matrule
?
_matrule
->
is_ideal_unlock
()
:
false
;
}
bool
InstructForm
::
is_ideal_call_leaf
()
const
{
return
_matrule
?
_matrule
->
is_ideal_call_leaf
()
:
false
;
}
// Return 'true' if this instruction matches an ideal 'If' node
// Return 'true' if this instruction matches an ideal 'If' node
bool
InstructForm
::
is_ideal_if
()
const
{
bool
InstructForm
::
is_ideal_if
()
const
{
if
(
_matrule
==
NULL
)
return
false
;
if
(
_matrule
==
NULL
)
return
false
;
...
@@ -1094,6 +1085,9 @@ const char *InstructForm::mach_base_class(FormDict &globals) const {
...
@@ -1094,6 +1085,9 @@ const char *InstructForm::mach_base_class(FormDict &globals) const {
else
if
(
is_ideal_if
())
{
else
if
(
is_ideal_if
())
{
return
"MachIfNode"
;
return
"MachIfNode"
;
}
}
else
if
(
is_ideal_goto
())
{
return
"MachGotoNode"
;
}
else
if
(
is_ideal_fastlock
())
{
else
if
(
is_ideal_fastlock
())
{
return
"MachFastLockNode"
;
return
"MachFastLockNode"
;
}
}
...
@@ -2706,7 +2700,6 @@ void ConstructRule::output(FILE *fp) {
...
@@ -2706,7 +2700,6 @@ void ConstructRule::output(FILE *fp) {
int
AttributeForm
::
_insId
=
0
;
// start counter at 0
int
AttributeForm
::
_insId
=
0
;
// start counter at 0
int
AttributeForm
::
_opId
=
0
;
// start counter at 0
int
AttributeForm
::
_opId
=
0
;
// start counter at 0
const
char
*
AttributeForm
::
_ins_cost
=
"ins_cost"
;
// required name
const
char
*
AttributeForm
::
_ins_cost
=
"ins_cost"
;
// required name
const
char
*
AttributeForm
::
_ins_pc_relative
=
"ins_pc_relative"
;
const
char
*
AttributeForm
::
_op_cost
=
"op_cost"
;
// required name
const
char
*
AttributeForm
::
_op_cost
=
"op_cost"
;
// required name
AttributeForm
::
AttributeForm
(
char
*
attr
,
int
type
,
char
*
attrdef
)
AttributeForm
::
AttributeForm
(
char
*
attr
,
int
type
,
char
*
attrdef
)
...
@@ -3929,19 +3922,6 @@ int MatchRule::is_expensive() const {
...
@@ -3929,19 +3922,6 @@ int MatchRule::is_expensive() const {
return
0
;
return
0
;
}
}
bool
MatchRule
::
is_ideal_unlock
()
const
{
if
(
!
_opType
)
return
false
;
return
!
strcmp
(
_opType
,
"Unlock"
)
||
!
strcmp
(
_opType
,
"FastUnlock"
);
}
bool
MatchRule
::
is_ideal_call_leaf
()
const
{
if
(
!
_opType
)
return
false
;
return
!
strcmp
(
_opType
,
"CallLeaf"
)
||
!
strcmp
(
_opType
,
"CallLeafNoFP"
);
}
bool
MatchRule
::
is_ideal_if
()
const
{
bool
MatchRule
::
is_ideal_if
()
const
{
if
(
!
_opType
)
return
false
;
if
(
!
_opType
)
return
false
;
return
return
...
...
src/share/vm/adlc/formssel.hpp
浏览文件 @
3fceb92c
...
@@ -145,8 +145,6 @@ public:
...
@@ -145,8 +145,6 @@ public:
virtual
int
is_empty_encoding
()
const
;
// _size=0 and/or _insencode empty
virtual
int
is_empty_encoding
()
const
;
// _size=0 and/or _insencode empty
virtual
int
is_tls_instruction
()
const
;
// tlsLoadP rule or ideal ThreadLocal
virtual
int
is_tls_instruction
()
const
;
// tlsLoadP rule or ideal ThreadLocal
virtual
int
is_ideal_copy
()
const
;
// node matches ideal 'Copy*'
virtual
int
is_ideal_copy
()
const
;
// node matches ideal 'Copy*'
virtual
bool
is_ideal_unlock
()
const
;
// node matches ideal 'Unlock'
virtual
bool
is_ideal_call_leaf
()
const
;
// node matches ideal 'CallLeaf'
virtual
bool
is_ideal_if
()
const
;
// node matches ideal 'If'
virtual
bool
is_ideal_if
()
const
;
// node matches ideal 'If'
virtual
bool
is_ideal_fastlock
()
const
;
// node matches 'FastLock'
virtual
bool
is_ideal_fastlock
()
const
;
// node matches 'FastLock'
virtual
bool
is_ideal_membar
()
const
;
// node matches ideal 'MemBarXXX'
virtual
bool
is_ideal_membar
()
const
;
// node matches ideal 'MemBarXXX'
...
@@ -857,7 +855,6 @@ public:
...
@@ -857,7 +855,6 @@ public:
int
type
()
{
return
id
;}
// return this object's "id"
int
type
()
{
return
id
;}
// return this object's "id"
static
const
char
*
_ins_cost
;
// "ins_cost"
static
const
char
*
_ins_cost
;
// "ins_cost"
static
const
char
*
_ins_pc_relative
;
// "ins_pc_relative"
static
const
char
*
_op_cost
;
// "op_cost"
static
const
char
*
_op_cost
;
// "op_cost"
void
dump
();
// Debug printer
void
dump
();
// Debug printer
...
@@ -1002,8 +999,6 @@ public:
...
@@ -1002,8 +999,6 @@ public:
bool
is_chain_rule
(
FormDict
&
globals
)
const
;
bool
is_chain_rule
(
FormDict
&
globals
)
const
;
int
is_ideal_copy
()
const
;
int
is_ideal_copy
()
const
;
int
is_expensive
()
const
;
// node matches ideal 'CosD'
int
is_expensive
()
const
;
// node matches ideal 'CosD'
bool
is_ideal_unlock
()
const
;
bool
is_ideal_call_leaf
()
const
;
bool
is_ideal_if
()
const
;
// node matches ideal 'If'
bool
is_ideal_if
()
const
;
// node matches ideal 'If'
bool
is_ideal_fastlock
()
const
;
// node matches ideal 'FastLock'
bool
is_ideal_fastlock
()
const
;
// node matches ideal 'FastLock'
bool
is_ideal_jump
()
const
;
// node matches ideal 'Jump'
bool
is_ideal_jump
()
const
;
// node matches ideal 'Jump'
...
...
src/share/vm/adlc/output_h.cpp
浏览文件 @
3fceb92c
...
@@ -1536,16 +1536,12 @@ void ArchDesc::declareClasses(FILE *fp) {
...
@@ -1536,16 +1536,12 @@ void ArchDesc::declareClasses(FILE *fp) {
// Each instruction attribute results in a virtual call of same name.
// Each instruction attribute results in a virtual call of same name.
// The ins_cost is not handled here.
// The ins_cost is not handled here.
Attribute
*
attr
=
instr
->
_attribs
;
Attribute
*
attr
=
instr
->
_attribs
;
bool
is_pc_relative
=
false
;
while
(
attr
!=
NULL
)
{
while
(
attr
!=
NULL
)
{
if
(
strcmp
(
attr
->
_ident
,
"ins_cost"
)
&&
if
(
strcmp
(
attr
->
_ident
,
"ins_cost"
)
&&
strcmp
(
attr
->
_ident
,
"ins_
pc_relative
"
))
{
strcmp
(
attr
->
_ident
,
"ins_
short_branch
"
))
{
fprintf
(
fp
,
" int %s() const { return %s; }
\n
"
,
fprintf
(
fp
,
" int %s() const { return %s; }
\n
"
,
attr
->
_ident
,
attr
->
_val
);
attr
->
_ident
,
attr
->
_val
);
}
}
// Check value for ins_pc_relative, and if it is true (1), set the flag
if
(
!
strcmp
(
attr
->
_ident
,
"ins_pc_relative"
)
&&
attr
->
int_val
(
*
this
)
!=
0
)
is_pc_relative
=
true
;
attr
=
(
Attribute
*
)
attr
->
_next
;
attr
=
(
Attribute
*
)
attr
->
_next
;
}
}
...
@@ -1657,20 +1653,10 @@ void ArchDesc::declareClasses(FILE *fp) {
...
@@ -1657,20 +1653,10 @@ void ArchDesc::declareClasses(FILE *fp) {
fprintf
(
fp
,
" _num_opnds = %d; _opnds = _opnd_array; "
,
instr
->
num_opnds
());
fprintf
(
fp
,
" _num_opnds = %d; _opnds = _opnd_array; "
,
instr
->
num_opnds
());
bool
node_flags_set
=
false
;
bool
node_flags_set
=
false
;
// flag: if this instruction matches an ideal 'Goto' node
if
(
instr
->
is_ideal_goto
()
)
{
fprintf
(
fp
,
"init_flags(Flag_is_Goto"
);
node_flags_set
=
true
;
}
// flag: if this instruction matches an ideal 'Copy*' node
// flag: if this instruction matches an ideal 'Copy*' node
if
(
instr
->
is_ideal_copy
()
!=
0
)
{
if
(
instr
->
is_ideal_copy
()
!=
0
)
{
if
(
node_flags_set
)
{
fprintf
(
fp
,
"init_flags(Flag_is_Copy"
);
fprintf
(
fp
,
" | Flag_is_Copy"
);
node_flags_set
=
true
;
}
else
{
fprintf
(
fp
,
"init_flags(Flag_is_Copy"
);
node_flags_set
=
true
;
}
}
}
// Is an instruction is a constant? If so, get its type
// Is an instruction is a constant? If so, get its type
...
@@ -1708,16 +1694,6 @@ void ArchDesc::declareClasses(FILE *fp) {
...
@@ -1708,16 +1694,6 @@ void ArchDesc::declareClasses(FILE *fp) {
}
}
}
}
// flag: if this instruction is pc relative
if
(
is_pc_relative
)
{
if
(
node_flags_set
)
{
fprintf
(
fp
,
" | Flag_is_pc_relative"
);
}
else
{
fprintf
(
fp
,
"init_flags(Flag_is_pc_relative"
);
node_flags_set
=
true
;
}
}
// flag: if this instruction has short branch form
// flag: if this instruction has short branch form
if
(
instr
->
has_short_branch_form
()
)
{
if
(
instr
->
has_short_branch_form
()
)
{
if
(
node_flags_set
)
{
if
(
node_flags_set
)
{
...
@@ -1743,10 +1719,6 @@ void ArchDesc::declareClasses(FILE *fp) {
...
@@ -1743,10 +1719,6 @@ void ArchDesc::declareClasses(FILE *fp) {
fprintf
(
fp
,
"); "
);
fprintf
(
fp
,
"); "
);
}
}
if
(
instr
->
is_ideal_unlock
()
||
instr
->
is_ideal_call_leaf
())
{
fprintf
(
fp
,
"clear_flag(Flag_is_safepoint_node); "
);
}
fprintf
(
fp
,
"}
\n
"
);
fprintf
(
fp
,
"}
\n
"
);
// size_of, used by base class's clone to obtain the correct size.
// size_of, used by base class's clone to obtain the correct size.
...
...
src/share/vm/opto/block.cpp
浏览文件 @
3fceb92c
...
@@ -165,7 +165,7 @@ int Block::is_Empty() const {
...
@@ -165,7 +165,7 @@ int Block::is_Empty() const {
int
end_idx
=
_nodes
.
size
()
-
1
;
int
end_idx
=
_nodes
.
size
()
-
1
;
// Check for ending goto
// Check for ending goto
if
((
end_idx
>
0
)
&&
(
_nodes
[
end_idx
]
->
is_Goto
()))
{
if
((
end_idx
>
0
)
&&
(
_nodes
[
end_idx
]
->
is_
Mach
Goto
()))
{
success_result
=
empty_with_goto
;
success_result
=
empty_with_goto
;
end_idx
--
;
end_idx
--
;
}
}
...
@@ -197,11 +197,11 @@ int Block::is_Empty() const {
...
@@ -197,11 +197,11 @@ int Block::is_Empty() const {
bool
Block
::
has_uncommon_code
()
const
{
bool
Block
::
has_uncommon_code
()
const
{
Node
*
en
=
end
();
Node
*
en
=
end
();
if
(
en
->
is_Goto
())
if
(
en
->
is_
Mach
Goto
())
en
=
en
->
in
(
0
);
en
=
en
->
in
(
0
);
if
(
en
->
is_Catch
())
if
(
en
->
is_Catch
())
en
=
en
->
in
(
0
);
en
=
en
->
in
(
0
);
if
(
en
->
is_Proj
()
&&
en
->
in
(
0
)
->
is_MachCall
())
{
if
(
en
->
is_
Mach
Proj
()
&&
en
->
in
(
0
)
->
is_MachCall
())
{
MachCallNode
*
call
=
en
->
in
(
0
)
->
as_MachCall
();
MachCallNode
*
call
=
en
->
in
(
0
)
->
as_MachCall
();
if
(
call
->
cnt
()
!=
COUNT_UNKNOWN
&&
call
->
cnt
()
<=
PROB_UNLIKELY_MAG
(
4
))
{
if
(
call
->
cnt
()
!=
COUNT_UNKNOWN
&&
call
->
cnt
()
<=
PROB_UNLIKELY_MAG
(
4
))
{
// This is true for slow-path stubs like new_{instance,array},
// This is true for slow-path stubs like new_{instance,array},
...
@@ -945,8 +945,8 @@ void PhaseCFG::verify( ) const {
...
@@ -945,8 +945,8 @@ void PhaseCFG::verify( ) const {
assert
(
bp
,
"last instruction must be a block proj"
);
assert
(
bp
,
"last instruction must be a block proj"
);
assert
(
bp
==
b
->
_nodes
[
j
],
"wrong number of successors for this block"
);
assert
(
bp
==
b
->
_nodes
[
j
],
"wrong number of successors for this block"
);
if
(
bp
->
is_Catch
()
)
{
if
(
bp
->
is_Catch
()
)
{
while
(
b
->
_nodes
[
--
j
]
->
Opcode
()
==
Op_MachProj
)
;
while
(
b
->
_nodes
[
--
j
]
->
is_MachProj
()
)
;
assert
(
b
->
_nodes
[
j
]
->
is_Call
(),
"CatchProj must follow call"
);
assert
(
b
->
_nodes
[
j
]
->
is_
Mach
Call
(),
"CatchProj must follow call"
);
}
}
else
if
(
bp
->
is_Mach
()
&&
bp
->
as_Mach
()
->
ideal_Opcode
()
==
Op_If
)
{
else
if
(
bp
->
is_Mach
()
&&
bp
->
as_Mach
()
->
ideal_Opcode
()
==
Op_If
)
{
assert
(
b
->
_num_succs
==
2
,
"Conditional branch must have two targets"
);
assert
(
b
->
_num_succs
==
2
,
"Conditional branch must have two targets"
);
...
...
src/share/vm/opto/callnode.hpp
浏览文件 @
3fceb92c
...
@@ -67,7 +67,6 @@ public:
...
@@ -67,7 +67,6 @@ public:
const
TypeTuple
*
_domain
;
const
TypeTuple
*
_domain
;
StartNode
(
Node
*
root
,
const
TypeTuple
*
domain
)
:
MultiNode
(
2
),
_domain
(
domain
)
{
StartNode
(
Node
*
root
,
const
TypeTuple
*
domain
)
:
MultiNode
(
2
),
_domain
(
domain
)
{
init_class_id
(
Class_Start
);
init_class_id
(
Class_Start
);
init_flags
(
Flag_is_block_start
);
init_req
(
0
,
this
);
init_req
(
0
,
this
);
init_req
(
1
,
root
);
init_req
(
1
,
root
);
}
}
...
@@ -513,7 +512,6 @@ public:
...
@@ -513,7 +512,6 @@ public:
_cnt
(
COUNT_UNKNOWN
)
_cnt
(
COUNT_UNKNOWN
)
{
{
init_class_id
(
Class_Call
);
init_class_id
(
Class_Call
);
init_flags
(
Flag_is_Call
);
}
}
const
TypeFunc
*
tf
()
const
{
return
_tf
;
}
const
TypeFunc
*
tf
()
const
{
return
_tf
;
}
...
...
src/share/vm/opto/cfgnode.hpp
浏览文件 @
3fceb92c
...
@@ -217,9 +217,7 @@ public:
...
@@ -217,9 +217,7 @@ public:
// GotoNodes perform direct branches.
// GotoNodes perform direct branches.
class
GotoNode
:
public
Node
{
class
GotoNode
:
public
Node
{
public:
public:
GotoNode
(
Node
*
control
)
:
Node
(
control
)
{
GotoNode
(
Node
*
control
)
:
Node
(
control
)
{}
init_flags
(
Flag_is_Goto
);
}
virtual
int
Opcode
()
const
;
virtual
int
Opcode
()
const
;
virtual
bool
pinned
()
const
{
return
true
;
}
virtual
bool
pinned
()
const
{
return
true
;
}
virtual
bool
is_CFG
()
const
{
return
true
;
}
virtual
bool
is_CFG
()
const
{
return
true
;
}
...
...
src/share/vm/opto/coalesce.cpp
浏览文件 @
3fceb92c
...
@@ -139,7 +139,7 @@ int PhaseChaitin::clone_projs( Block *b, uint idx, Node *con, Node *copy, uint &
...
@@ -139,7 +139,7 @@ int PhaseChaitin::clone_projs( Block *b, uint idx, Node *con, Node *copy, uint &
Block
*
bcon
=
_cfg
.
_bbs
[
con
->
_idx
];
Block
*
bcon
=
_cfg
.
_bbs
[
con
->
_idx
];
uint
cindex
=
bcon
->
find_node
(
con
);
uint
cindex
=
bcon
->
find_node
(
con
);
Node
*
con_next
=
bcon
->
_nodes
[
cindex
+
1
];
Node
*
con_next
=
bcon
->
_nodes
[
cindex
+
1
];
if
(
con_next
->
in
(
0
)
!=
con
||
con_next
->
Opcode
()
!=
Op_MachProj
)
if
(
con_next
->
in
(
0
)
!=
con
||
!
con_next
->
is_MachProj
()
)
return
false
;
// No MachProj's follow
return
false
;
// No MachProj's follow
// Copy kills after the cloned constant
// Copy kills after the cloned constant
...
@@ -312,7 +312,7 @@ void PhaseAggressiveCoalesce::insert_copy_with_overlap( Block *b, Node *copy, ui
...
@@ -312,7 +312,7 @@ void PhaseAggressiveCoalesce::insert_copy_with_overlap( Block *b, Node *copy, ui
// parallel renaming effort.
// parallel renaming effort.
if
(
n
->
_idx
<
_unique
)
break
;
if
(
n
->
_idx
<
_unique
)
break
;
uint
idx
=
n
->
is_Copy
();
uint
idx
=
n
->
is_Copy
();
assert
(
idx
||
n
->
is_Con
()
||
n
->
Opcode
()
==
Op_MachProj
,
"Only copies during parallel renaming"
);
assert
(
idx
||
n
->
is_Con
()
||
n
->
is_MachProj
()
,
"Only copies during parallel renaming"
);
if
(
idx
&&
_phc
.
Find
(
n
->
in
(
idx
))
==
dst_name
)
break
;
if
(
idx
&&
_phc
.
Find
(
n
->
in
(
idx
))
==
dst_name
)
break
;
i
--
;
i
--
;
}
}
...
@@ -329,7 +329,7 @@ void PhaseAggressiveCoalesce::insert_copy_with_overlap( Block *b, Node *copy, ui
...
@@ -329,7 +329,7 @@ void PhaseAggressiveCoalesce::insert_copy_with_overlap( Block *b, Node *copy, ui
// Check for end of virtual copies; this is also the end of the
// Check for end of virtual copies; this is also the end of the
// parallel renaming effort.
// parallel renaming effort.
if
(
n
->
_idx
<
_unique
)
break
;
if
(
n
->
_idx
<
_unique
)
break
;
assert
(
n
->
is_Copy
()
||
n
->
is_Con
()
||
n
->
Opcode
()
==
Op_MachProj
,
"Only copies during parallel renaming"
);
assert
(
n
->
is_Copy
()
||
n
->
is_Con
()
||
n
->
is_MachProj
()
,
"Only copies during parallel renaming"
);
if
(
_phc
.
Find
(
n
)
==
src_name
)
{
if
(
_phc
.
Find
(
n
)
==
src_name
)
{
kill_src_idx
=
i
;
kill_src_idx
=
i
;
break
;
break
;
...
...
src/share/vm/opto/gcm.cpp
浏览文件 @
3fceb92c
...
@@ -1137,7 +1137,7 @@ void PhaseCFG::schedule_late(VectorSet &visited, Node_List &stack) {
...
@@ -1137,7 +1137,7 @@ void PhaseCFG::schedule_late(VectorSet &visited, Node_List &stack) {
// No uses, just terminate
// No uses, just terminate
if
(
self
->
outcnt
()
==
0
)
{
if
(
self
->
outcnt
()
==
0
)
{
assert
(
self
->
Opcode
()
==
Op_MachProj
,
"sanity"
);
assert
(
self
->
is_MachProj
()
,
"sanity"
);
continue
;
// Must be a dead machine projection
continue
;
// Must be a dead machine projection
}
}
...
...
src/share/vm/opto/idealGraphPrinter.cpp
浏览文件 @
3fceb92c
...
@@ -426,9 +426,6 @@ void IdealGraphPrinter::visit_node(Node *n, void *param) {
...
@@ -426,9 +426,6 @@ void IdealGraphPrinter::visit_node(Node *n, void *param) {
if
(
flags
&
Node
::
Flag_is_Copy
)
{
if
(
flags
&
Node
::
Flag_is_Copy
)
{
print_prop
(
"is_copy"
,
"true"
);
print_prop
(
"is_copy"
,
"true"
);
}
}
if
(
flags
&
Node
::
Flag_is_Call
)
{
print_prop
(
"is_call"
,
"true"
);
}
if
(
flags
&
Node
::
Flag_rematerialize
)
{
if
(
flags
&
Node
::
Flag_rematerialize
)
{
print_prop
(
"rematerialize"
,
"true"
);
print_prop
(
"rematerialize"
,
"true"
);
}
}
...
@@ -447,24 +444,12 @@ void IdealGraphPrinter::visit_node(Node *n, void *param) {
...
@@ -447,24 +444,12 @@ void IdealGraphPrinter::visit_node(Node *n, void *param) {
if
(
flags
&
Node
::
Flag_is_Branch
)
{
if
(
flags
&
Node
::
Flag_is_Branch
)
{
print_prop
(
"is_branch"
,
"true"
);
print_prop
(
"is_branch"
,
"true"
);
}
}
if
(
flags
&
Node
::
Flag_is_block_start
)
{
print_prop
(
"is_block_start"
,
"true"
);
}
if
(
flags
&
Node
::
Flag_is_Goto
)
{
print_prop
(
"is_goto"
,
"true"
);
}
if
(
flags
&
Node
::
Flag_is_dead_loop_safe
)
{
if
(
flags
&
Node
::
Flag_is_dead_loop_safe
)
{
print_prop
(
"is_dead_loop_safe"
,
"true"
);
print_prop
(
"is_dead_loop_safe"
,
"true"
);
}
}
if
(
flags
&
Node
::
Flag_may_be_short_branch
)
{
if
(
flags
&
Node
::
Flag_may_be_short_branch
)
{
print_prop
(
"may_be_short_branch"
,
"true"
);
print_prop
(
"may_be_short_branch"
,
"true"
);
}
}
if
(
flags
&
Node
::
Flag_is_safepoint_node
)
{
print_prop
(
"is_safepoint_node"
,
"true"
);
}
if
(
flags
&
Node
::
Flag_is_pc_relative
)
{
print_prop
(
"is_pc_relative"
,
"true"
);
}
if
(
C
->
matcher
()
!=
NULL
)
{
if
(
C
->
matcher
()
!=
NULL
)
{
if
(
C
->
matcher
()
->
is_shared
(
node
))
{
if
(
C
->
matcher
()
->
is_shared
(
node
))
{
...
...
src/share/vm/opto/lcm.cpp
浏览文件 @
3fceb92c
...
@@ -325,7 +325,7 @@ void Block::implicit_null_check(PhaseCFG *cfg, Node *proj, Node *val, int allowe
...
@@ -325,7 +325,7 @@ void Block::implicit_null_check(PhaseCFG *cfg, Node *proj, Node *val, int allowe
// that also need to be hoisted.
// that also need to be hoisted.
for
(
DUIterator_Fast
jmax
,
j
=
val
->
fast_outs
(
jmax
);
j
<
jmax
;
j
++
)
{
for
(
DUIterator_Fast
jmax
,
j
=
val
->
fast_outs
(
jmax
);
j
<
jmax
;
j
++
)
{
Node
*
n
=
val
->
fast_out
(
j
);
Node
*
n
=
val
->
fast_out
(
j
);
if
(
n
->
Opcode
()
==
Op_MachProj
)
{
if
(
n
->
is_MachProj
()
)
{
cfg
->
_bbs
[
n
->
_idx
]
->
find_remove
(
n
);
cfg
->
_bbs
[
n
->
_idx
]
->
find_remove
(
n
);
this
->
add_inst
(
n
);
this
->
add_inst
(
n
);
cfg
->
_bbs
.
map
(
n
->
_idx
,
this
);
cfg
->
_bbs
.
map
(
n
->
_idx
,
this
);
...
@@ -347,7 +347,7 @@ void Block::implicit_null_check(PhaseCFG *cfg, Node *proj, Node *val, int allowe
...
@@ -347,7 +347,7 @@ void Block::implicit_null_check(PhaseCFG *cfg, Node *proj, Node *val, int allowe
// Should be DU safe because no edge updates.
// Should be DU safe because no edge updates.
for
(
DUIterator_Fast
jmax
,
j
=
best
->
fast_outs
(
jmax
);
j
<
jmax
;
j
++
)
{
for
(
DUIterator_Fast
jmax
,
j
=
best
->
fast_outs
(
jmax
);
j
<
jmax
;
j
++
)
{
Node
*
n
=
best
->
fast_out
(
j
);
Node
*
n
=
best
->
fast_out
(
j
);
if
(
n
->
Opcode
()
==
Op_MachProj
)
{
if
(
n
->
is_MachProj
()
)
{
cfg
->
_bbs
[
n
->
_idx
]
->
find_remove
(
n
);
cfg
->
_bbs
[
n
->
_idx
]
->
find_remove
(
n
);
add_inst
(
n
);
add_inst
(
n
);
cfg
->
_bbs
.
map
(
n
->
_idx
,
this
);
cfg
->
_bbs
.
map
(
n
->
_idx
,
this
);
...
@@ -539,7 +539,7 @@ void Block::needed_for_next_call(Node *this_call, VectorSet &next_call, Block_Ar
...
@@ -539,7 +539,7 @@ void Block::needed_for_next_call(Node *this_call, VectorSet &next_call, Block_Ar
Node
*
m
=
this_call
->
fast_out
(
i
);
Node
*
m
=
this_call
->
fast_out
(
i
);
if
(
bbs
[
m
->
_idx
]
==
this
&&
// Local-block user
if
(
bbs
[
m
->
_idx
]
==
this
&&
// Local-block user
m
!=
this_call
&&
// Not self-start node
m
!=
this_call
&&
// Not self-start node
m
->
is_Call
()
)
m
->
is_
Mach
Call
()
)
call
=
m
;
call
=
m
;
break
;
break
;
}
}
...
@@ -557,7 +557,7 @@ uint Block::sched_call( Matcher &matcher, Block_Array &bbs, uint node_cnt, Node_
...
@@ -557,7 +557,7 @@ uint Block::sched_call( Matcher &matcher, Block_Array &bbs, uint node_cnt, Node_
// Collect all the defined registers.
// Collect all the defined registers.
for
(
DUIterator_Fast
imax
,
i
=
mcall
->
fast_outs
(
imax
);
i
<
imax
;
i
++
)
{
for
(
DUIterator_Fast
imax
,
i
=
mcall
->
fast_outs
(
imax
);
i
<
imax
;
i
++
)
{
Node
*
n
=
mcall
->
fast_out
(
i
);
Node
*
n
=
mcall
->
fast_out
(
i
);
assert
(
n
->
Opcode
()
==
Op_MachProj
,
""
);
assert
(
n
->
is_MachProj
()
,
""
);
--
ready_cnt
[
n
->
_idx
];
--
ready_cnt
[
n
->
_idx
];
assert
(
!
ready_cnt
[
n
->
_idx
],
""
);
assert
(
!
ready_cnt
[
n
->
_idx
],
""
);
// Schedule next to call
// Schedule next to call
...
@@ -975,8 +975,8 @@ void Block::call_catch_cleanup(Block_Array &bbs) {
...
@@ -975,8 +975,8 @@ void Block::call_catch_cleanup(Block_Array &bbs) {
if
(
!
_nodes
[
end
]
->
is_Catch
()
)
return
;
if
(
!
_nodes
[
end
]
->
is_Catch
()
)
return
;
// Start of region to clone
// Start of region to clone
uint
beg
=
end
;
uint
beg
=
end
;
while
(
_nodes
[
beg
-
1
]
->
Opcode
()
!=
Op_MachProj
||
while
(
!
_nodes
[
beg
-
1
]
->
is_MachProj
()
||
!
_nodes
[
beg
-
1
]
->
in
(
0
)
->
is_Call
()
)
{
!
_nodes
[
beg
-
1
]
->
in
(
0
)
->
is_
Mach
Call
()
)
{
beg
--
;
beg
--
;
assert
(
beg
>
0
,
"Catch cleanup walking beyond block boundary"
);
assert
(
beg
>
0
,
"Catch cleanup walking beyond block boundary"
);
}
}
...
...
src/share/vm/opto/machnode.hpp
浏览文件 @
3fceb92c
...
@@ -275,9 +275,6 @@ public:
...
@@ -275,9 +275,6 @@ public:
// Apply peephole rule(s) to this instruction
// Apply peephole rule(s) to this instruction
virtual
MachNode
*
peephole
(
Block
*
block
,
int
block_index
,
PhaseRegAlloc
*
ra_
,
int
&
deleted
,
Compile
*
C
);
virtual
MachNode
*
peephole
(
Block
*
block
,
int
block_index
,
PhaseRegAlloc
*
ra_
,
int
&
deleted
,
Compile
*
C
);
// Check for PC-Relative addressing
bool
is_pc_relative
()
const
{
return
(
flags
()
&
Flag_is_pc_relative
)
!=
0
;
}
// Top-level ideal Opcode matched
// Top-level ideal Opcode matched
virtual
int
ideal_Opcode
()
const
{
return
Op_Node
;
}
virtual
int
ideal_Opcode
()
const
{
return
Op_Node
;
}
...
@@ -525,7 +522,7 @@ public:
...
@@ -525,7 +522,7 @@ public:
const
uint
_vidx
;
// Index of memop being tested
const
uint
_vidx
;
// Index of memop being tested
MachNullCheckNode
(
Node
*
ctrl
,
Node
*
memop
,
uint
vidx
)
:
MachIdealNode
(),
_vidx
(
vidx
)
{
MachNullCheckNode
(
Node
*
ctrl
,
Node
*
memop
,
uint
vidx
)
:
MachIdealNode
(),
_vidx
(
vidx
)
{
init_class_id
(
Class_MachNullCheck
);
init_class_id
(
Class_MachNullCheck
);
init_flags
(
Flag_is_Branch
|
Flag_is_pc_relative
);
init_flags
(
Flag_is_Branch
);
add_req
(
ctrl
);
add_req
(
ctrl
);
add_req
(
memop
);
add_req
(
memop
);
}
}
...
@@ -554,7 +551,9 @@ public:
...
@@ -554,7 +551,9 @@ public:
// occasional callbacks to the machine model for important info.
// occasional callbacks to the machine model for important info.
class
MachProjNode
:
public
ProjNode
{
class
MachProjNode
:
public
ProjNode
{
public:
public:
MachProjNode
(
Node
*
multi
,
uint
con
,
const
RegMask
&
out
,
uint
ideal_reg
)
:
ProjNode
(
multi
,
con
),
_rout
(
out
),
_ideal_reg
(
ideal_reg
)
{}
MachProjNode
(
Node
*
multi
,
uint
con
,
const
RegMask
&
out
,
uint
ideal_reg
)
:
ProjNode
(
multi
,
con
),
_rout
(
out
),
_ideal_reg
(
ideal_reg
)
{
init_class_id
(
Class_MachProj
);
}
RegMask
_rout
;
RegMask
_rout
;
const
uint
_ideal_reg
;
const
uint
_ideal_reg
;
enum
projType
{
enum
projType
{
...
@@ -589,6 +588,15 @@ public:
...
@@ -589,6 +588,15 @@ public:
#endif
#endif
};
};
//------------------------------MachGotoNode-----------------------------------
// Machine-specific versions of GotoNodes
class
MachGotoNode
:
public
MachNode
{
public:
MachGotoNode
()
:
MachNode
()
{
init_class_id
(
Class_MachGoto
);
}
};
//------------------------------MachFastLockNode-------------------------------------
//------------------------------MachFastLockNode-------------------------------------
// Machine-specific versions of FastLockNodes
// Machine-specific versions of FastLockNodes
class
MachFastLockNode
:
public
MachNode
{
class
MachFastLockNode
:
public
MachNode
{
...
@@ -631,14 +639,12 @@ public:
...
@@ -631,14 +639,12 @@ public:
MachSafePointNode
()
:
MachReturnNode
(),
_oop_map
(
NULL
),
_jvms
(
NULL
),
_jvmadj
(
0
)
{
MachSafePointNode
()
:
MachReturnNode
(),
_oop_map
(
NULL
),
_jvms
(
NULL
),
_jvmadj
(
0
)
{
init_class_id
(
Class_MachSafePoint
);
init_class_id
(
Class_MachSafePoint
);
init_flags
(
Flag_is_safepoint_node
);
}
}
virtual
JVMState
*
jvms
()
const
{
return
_jvms
;
}
virtual
JVMState
*
jvms
()
const
{
return
_jvms
;
}
void
set_jvms
(
JVMState
*
s
)
{
void
set_jvms
(
JVMState
*
s
)
{
_jvms
=
s
;
_jvms
=
s
;
}
}
bool
is_safepoint_node
()
const
{
return
(
flags
()
&
Flag_is_safepoint_node
)
!=
0
;
}
virtual
const
Type
*
bottom_type
()
const
;
virtual
const
Type
*
bottom_type
()
const
;
virtual
const
RegMask
&
in_RegMask
(
uint
)
const
;
virtual
const
RegMask
&
in_RegMask
(
uint
)
const
;
...
@@ -702,7 +708,6 @@ public:
...
@@ -702,7 +708,6 @@ public:
MachCallNode
()
:
MachSafePointNode
()
{
MachCallNode
()
:
MachSafePointNode
()
{
init_class_id
(
Class_MachCall
);
init_class_id
(
Class_MachCall
);
init_flags
(
Flag_is_Call
);
}
}
virtual
const
Type
*
bottom_type
()
const
;
virtual
const
Type
*
bottom_type
()
const
;
...
...
src/share/vm/opto/mulnode.cpp
浏览文件 @
3fceb92c
...
@@ -98,7 +98,7 @@ Node *MulNode::Ideal(PhaseGVN *phase, bool can_reshape) {
...
@@ -98,7 +98,7 @@ Node *MulNode::Ideal(PhaseGVN *phase, bool can_reshape) {
const
Type
*
t12
=
phase
->
type
(
mul1
->
in
(
2
)
);
const
Type
*
t12
=
phase
->
type
(
mul1
->
in
(
2
)
);
if
(
t12
->
singleton
()
&&
t12
!=
Type
::
TOP
)
{
// Left input is an add of a constant?
if
(
t12
->
singleton
()
&&
t12
!=
Type
::
TOP
)
{
// Left input is an add of a constant?
// Compute new constant; check for overflow
// Compute new constant; check for overflow
const
Type
*
tcon01
=
mul1
->
as_Mul
(
)
->
mul_ring
(
t2
,
t12
);
const
Type
*
tcon01
=
((
MulNode
*
)
mul1
)
->
mul_ring
(
t2
,
t12
);
if
(
tcon01
->
singleton
()
)
{
if
(
tcon01
->
singleton
()
)
{
// The Mul of the flattened expression
// The Mul of the flattened expression
set_req
(
1
,
mul1
->
in
(
1
));
set_req
(
1
,
mul1
->
in
(
1
));
...
...
src/share/vm/opto/mulnode.hpp
浏览文件 @
3fceb92c
...
@@ -41,9 +41,7 @@ class PhaseTransform;
...
@@ -41,9 +41,7 @@ class PhaseTransform;
class
MulNode
:
public
Node
{
class
MulNode
:
public
Node
{
virtual
uint
hash
()
const
;
virtual
uint
hash
()
const
;
public:
public:
MulNode
(
Node
*
in1
,
Node
*
in2
)
:
Node
(
0
,
in1
,
in2
)
{
MulNode
(
Node
*
in1
,
Node
*
in2
)
:
Node
(
0
,
in1
,
in2
)
{}
init_class_id
(
Class_Mul
);
}
// Handle algebraic identities here. If we have an identity, return the Node
// Handle algebraic identities here. If we have an identity, return the Node
// we are equivalent to. We look for "add of zero" as an identity.
// we are equivalent to. We look for "add of zero" as an identity.
...
...
src/share/vm/opto/node.hpp
浏览文件 @
3fceb92c
...
@@ -67,6 +67,8 @@ class EncodePNode;
...
@@ -67,6 +67,8 @@ class EncodePNode;
class
FastLockNode
;
class
FastLockNode
;
class
FastUnlockNode
;
class
FastUnlockNode
;
class
IfNode
;
class
IfNode
;
class
IfFalseNode
;
class
IfTrueNode
;
class
InitializeNode
;
class
InitializeNode
;
class
JVMState
;
class
JVMState
;
class
JumpNode
;
class
JumpNode
;
...
@@ -83,9 +85,11 @@ class MachCallRuntimeNode;
...
@@ -83,9 +85,11 @@ class MachCallRuntimeNode;
class
MachCallStaticJavaNode
;
class
MachCallStaticJavaNode
;
class
MachConstantBaseNode
;
class
MachConstantBaseNode
;
class
MachConstantNode
;
class
MachConstantNode
;
class
MachGotoNode
;
class
MachIfNode
;
class
MachIfNode
;
class
MachNode
;
class
MachNode
;
class
MachNullCheckNode
;
class
MachNullCheckNode
;
class
MachProjNode
;
class
MachReturnNode
;
class
MachReturnNode
;
class
MachSafePointNode
;
class
MachSafePointNode
;
class
MachSpillCopyNode
;
class
MachSpillCopyNode
;
...
@@ -94,7 +98,6 @@ class Matcher;
...
@@ -94,7 +98,6 @@ class Matcher;
class
MemBarNode
;
class
MemBarNode
;
class
MemNode
;
class
MemNode
;
class
MergeMemNode
;
class
MergeMemNode
;
class
MulNode
;
class
MultiNode
;
class
MultiNode
;
class
MultiBranchNode
;
class
MultiBranchNode
;
class
NeverBranchNode
;
class
NeverBranchNode
;
...
@@ -127,9 +130,10 @@ class SubNode;
...
@@ -127,9 +130,10 @@ class SubNode;
class
Type
;
class
Type
;
class
TypeNode
;
class
TypeNode
;
class
UnlockNode
;
class
UnlockNode
;
class
VectorNode
;
class
VectorLoadNode
;
class
VectorStoreNode
;
class
VectorSet
;
class
VectorSet
;
class
IfTrueNode
;
class
IfFalseNode
;
typedef
void
(
*
NFunc
)(
Node
&
,
void
*
);
typedef
void
(
*
NFunc
)(
Node
&
,
void
*
);
extern
"C"
{
extern
"C"
{
typedef
int
(
*
C_sort_func_t
)(
const
void
*
,
const
void
*
);
typedef
int
(
*
C_sort_func_t
)(
const
void
*
,
const
void
*
);
...
@@ -574,44 +578,48 @@ public:
...
@@ -574,44 +578,48 @@ public:
DEFINE_CLASS_ID
(
MachTemp
,
Mach
,
4
)
DEFINE_CLASS_ID
(
MachTemp
,
Mach
,
4
)
DEFINE_CLASS_ID
(
MachConstantBase
,
Mach
,
5
)
DEFINE_CLASS_ID
(
MachConstantBase
,
Mach
,
5
)
DEFINE_CLASS_ID
(
MachConstant
,
Mach
,
6
)
DEFINE_CLASS_ID
(
MachConstant
,
Mach
,
6
)
DEFINE_CLASS_ID
(
MachGoto
,
Mach
,
7
)
DEFINE_CLASS_ID
(
Type
,
Node
,
2
)
DEFINE_CLASS_ID
(
Phi
,
Type
,
0
)
DEFINE_CLASS_ID
(
ConstraintCast
,
Type
,
1
)
DEFINE_CLASS_ID
(
CheckCastPP
,
Type
,
2
)
DEFINE_CLASS_ID
(
CMove
,
Type
,
3
)
DEFINE_CLASS_ID
(
SafePointScalarObject
,
Type
,
4
)
DEFINE_CLASS_ID
(
DecodeN
,
Type
,
5
)
DEFINE_CLASS_ID
(
EncodeP
,
Type
,
6
)
DEFINE_CLASS_ID
(
Proj
,
Node
,
2
)
DEFINE_CLASS_ID
(
Proj
,
Node
,
3
)
DEFINE_CLASS_ID
(
CatchProj
,
Proj
,
0
)
DEFINE_CLASS_ID
(
CatchProj
,
Proj
,
0
)
DEFINE_CLASS_ID
(
JumpProj
,
Proj
,
1
)
DEFINE_CLASS_ID
(
JumpProj
,
Proj
,
1
)
DEFINE_CLASS_ID
(
IfTrue
,
Proj
,
2
)
DEFINE_CLASS_ID
(
IfTrue
,
Proj
,
2
)
DEFINE_CLASS_ID
(
IfFalse
,
Proj
,
3
)
DEFINE_CLASS_ID
(
IfFalse
,
Proj
,
3
)
DEFINE_CLASS_ID
(
Parm
,
Proj
,
4
)
DEFINE_CLASS_ID
(
Parm
,
Proj
,
4
)
DEFINE_CLASS_ID
(
MachProj
,
Proj
,
5
)
DEFINE_CLASS_ID
(
Region
,
Node
,
3
)
DEFINE_CLASS_ID
(
Mem
,
Node
,
4
)
DEFINE_CLASS_ID
(
Load
,
Mem
,
0
)
DEFINE_CLASS_ID
(
VectorLoad
,
Load
,
0
)
DEFINE_CLASS_ID
(
Store
,
Mem
,
1
)
DEFINE_CLASS_ID
(
VectorStore
,
Store
,
0
)
DEFINE_CLASS_ID
(
LoadStore
,
Mem
,
2
)
DEFINE_CLASS_ID
(
Region
,
Node
,
5
)
DEFINE_CLASS_ID
(
Loop
,
Region
,
0
)
DEFINE_CLASS_ID
(
Loop
,
Region
,
0
)
DEFINE_CLASS_ID
(
Root
,
Loop
,
0
)
DEFINE_CLASS_ID
(
Root
,
Loop
,
0
)
DEFINE_CLASS_ID
(
CountedLoop
,
Loop
,
1
)
DEFINE_CLASS_ID
(
CountedLoop
,
Loop
,
1
)
DEFINE_CLASS_ID
(
Sub
,
Node
,
4
)
DEFINE_CLASS_ID
(
Sub
,
Node
,
6
)
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
(
Type
,
Node
,
5
)
DEFINE_CLASS_ID
(
Phi
,
Type
,
0
)
DEFINE_CLASS_ID
(
ConstraintCast
,
Type
,
1
)
DEFINE_CLASS_ID
(
CheckCastPP
,
Type
,
2
)
DEFINE_CLASS_ID
(
CMove
,
Type
,
3
)
DEFINE_CLASS_ID
(
SafePointScalarObject
,
Type
,
4
)
DEFINE_CLASS_ID
(
DecodeN
,
Type
,
5
)
DEFINE_CLASS_ID
(
EncodeP
,
Type
,
6
)
DEFINE_CLASS_ID
(
Mem
,
Node
,
6
)
DEFINE_CLASS_ID
(
Load
,
Mem
,
0
)
DEFINE_CLASS_ID
(
Store
,
Mem
,
1
)
DEFINE_CLASS_ID
(
LoadStore
,
Mem
,
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
)
DEFINE_CLASS_ID
(
AddP
,
Node
,
9
)
DEFINE_CLASS_ID
(
AddP
,
Node
,
9
)
DEFINE_CLASS_ID
(
BoxLock
,
Node
,
10
)
DEFINE_CLASS_ID
(
BoxLock
,
Node
,
10
)
DEFINE_CLASS_ID
(
Add
,
Node
,
11
)
DEFINE_CLASS_ID
(
Add
,
Node
,
11
)
DEFINE_CLASS_ID
(
Mul
,
Node
,
12
)
DEFINE_CLASS_ID
(
Vector
,
Node
,
12
)
DEFINE_CLASS_ID
(
ClearArray
,
Node
,
13
)
DEFINE_CLASS_ID
(
ClearArray
,
Node
,
13
)
_max_classes
=
ClassMask_ClearArray
_max_classes
=
ClassMask_ClearArray
...
@@ -621,21 +629,15 @@ public:
...
@@ -621,21 +629,15 @@ public:
// Flags are sorted by usage frequency.
// Flags are sorted by usage frequency.
enum
NodeFlags
{
enum
NodeFlags
{
Flag_is_Copy
=
0x01
,
// should be first bit to avoid shift
Flag_is_Copy
=
0x01
,
// should be first bit to avoid shift
Flag_is_Call
=
Flag_is_Copy
<<
1
,
Flag_rematerialize
=
Flag_is_Copy
<<
1
,
Flag_rematerialize
=
Flag_is_Call
<<
1
,
Flag_needs_anti_dependence_check
=
Flag_rematerialize
<<
1
,
Flag_needs_anti_dependence_check
=
Flag_rematerialize
<<
1
,
Flag_is_macro
=
Flag_needs_anti_dependence_check
<<
1
,
Flag_is_macro
=
Flag_needs_anti_dependence_check
<<
1
,
Flag_is_Con
=
Flag_is_macro
<<
1
,
Flag_is_Con
=
Flag_is_macro
<<
1
,
Flag_is_cisc_alternate
=
Flag_is_Con
<<
1
,
Flag_is_cisc_alternate
=
Flag_is_Con
<<
1
,
Flag_is_Branch
=
Flag_is_cisc_alternate
<<
1
,
Flag_is_Branch
=
Flag_is_cisc_alternate
<<
1
,
Flag_is_block_start
=
Flag_is_Branch
<<
1
,
Flag_is_dead_loop_safe
=
Flag_is_Branch
<<
1
,
Flag_is_Goto
=
Flag_is_block_start
<<
1
,
Flag_is_dead_loop_safe
=
Flag_is_Goto
<<
1
,
Flag_may_be_short_branch
=
Flag_is_dead_loop_safe
<<
1
,
Flag_may_be_short_branch
=
Flag_is_dead_loop_safe
<<
1
,
Flag_is_safepoint_node
=
Flag_may_be_short_branch
<<
1
,
_max_flags
=
(
Flag_may_be_short_branch
<<
1
)
-
1
// allow flags combination
Flag_is_pc_relative
=
Flag_is_safepoint_node
<<
1
,
Flag_is_Vector
=
Flag_is_pc_relative
<<
1
,
_max_flags
=
(
Flag_is_Vector
<<
1
)
-
1
// allow flags combination
};
};
private:
private:
...
@@ -669,21 +671,6 @@ public:
...
@@ -669,21 +671,6 @@ public:
virtual
uint
size_of
()
const
;
virtual
uint
size_of
()
const
;
// Other interesting Node properties
// Other interesting Node properties
// Special case: is_Call() returns true for both CallNode and MachCallNode.
bool
is_Call
()
const
{
return
(
_flags
&
Flag_is_Call
)
!=
0
;
}
CallNode
*
isa_Call
()
const
{
return
is_Call
()
?
as_Call
()
:
NULL
;
}
CallNode
*
as_Call
()
const
{
// Only for CallNode (not for MachCallNode)
assert
((
_class_id
&
ClassMask_Call
)
==
Class_Call
,
"invalid node class"
);
return
(
CallNode
*
)
this
;
}
#define DEFINE_CLASS_QUERY(type) \
#define DEFINE_CLASS_QUERY(type) \
bool is_##type() const { \
bool is_##type() const { \
return ((_class_id & ClassMask_##type) == Class_##type); \
return ((_class_id & ClassMask_##type) == Class_##type); \
...
@@ -703,6 +690,7 @@ public:
...
@@ -703,6 +690,7 @@ public:
DEFINE_CLASS_QUERY
(
AllocateArray
)
DEFINE_CLASS_QUERY
(
AllocateArray
)
DEFINE_CLASS_QUERY
(
Bool
)
DEFINE_CLASS_QUERY
(
Bool
)
DEFINE_CLASS_QUERY
(
BoxLock
)
DEFINE_CLASS_QUERY
(
BoxLock
)
DEFINE_CLASS_QUERY
(
Call
)
DEFINE_CLASS_QUERY
(
CallDynamicJava
)
DEFINE_CLASS_QUERY
(
CallDynamicJava
)
DEFINE_CLASS_QUERY
(
CallJava
)
DEFINE_CLASS_QUERY
(
CallJava
)
DEFINE_CLASS_QUERY
(
CallLeaf
)
DEFINE_CLASS_QUERY
(
CallLeaf
)
...
@@ -740,8 +728,10 @@ public:
...
@@ -740,8 +728,10 @@ public:
DEFINE_CLASS_QUERY
(
MachCallStaticJava
)
DEFINE_CLASS_QUERY
(
MachCallStaticJava
)
DEFINE_CLASS_QUERY
(
MachConstantBase
)
DEFINE_CLASS_QUERY
(
MachConstantBase
)
DEFINE_CLASS_QUERY
(
MachConstant
)
DEFINE_CLASS_QUERY
(
MachConstant
)
DEFINE_CLASS_QUERY
(
MachGoto
)
DEFINE_CLASS_QUERY
(
MachIf
)
DEFINE_CLASS_QUERY
(
MachIf
)
DEFINE_CLASS_QUERY
(
MachNullCheck
)
DEFINE_CLASS_QUERY
(
MachNullCheck
)
DEFINE_CLASS_QUERY
(
MachProj
)
DEFINE_CLASS_QUERY
(
MachReturn
)
DEFINE_CLASS_QUERY
(
MachReturn
)
DEFINE_CLASS_QUERY
(
MachSafePoint
)
DEFINE_CLASS_QUERY
(
MachSafePoint
)
DEFINE_CLASS_QUERY
(
MachSpillCopy
)
DEFINE_CLASS_QUERY
(
MachSpillCopy
)
...
@@ -749,7 +739,6 @@ public:
...
@@ -749,7 +739,6 @@ public:
DEFINE_CLASS_QUERY
(
Mem
)
DEFINE_CLASS_QUERY
(
Mem
)
DEFINE_CLASS_QUERY
(
MemBar
)
DEFINE_CLASS_QUERY
(
MemBar
)
DEFINE_CLASS_QUERY
(
MergeMem
)
DEFINE_CLASS_QUERY
(
MergeMem
)
DEFINE_CLASS_QUERY
(
Mul
)
DEFINE_CLASS_QUERY
(
Multi
)
DEFINE_CLASS_QUERY
(
Multi
)
DEFINE_CLASS_QUERY
(
MultiBranch
)
DEFINE_CLASS_QUERY
(
MultiBranch
)
DEFINE_CLASS_QUERY
(
Parm
)
DEFINE_CLASS_QUERY
(
Parm
)
...
@@ -764,6 +753,9 @@ public:
...
@@ -764,6 +753,9 @@ public:
DEFINE_CLASS_QUERY
(
Store
)
DEFINE_CLASS_QUERY
(
Store
)
DEFINE_CLASS_QUERY
(
Sub
)
DEFINE_CLASS_QUERY
(
Sub
)
DEFINE_CLASS_QUERY
(
Type
)
DEFINE_CLASS_QUERY
(
Type
)
DEFINE_CLASS_QUERY
(
Vector
)
DEFINE_CLASS_QUERY
(
VectorLoad
)
DEFINE_CLASS_QUERY
(
VectorStore
)
DEFINE_CLASS_QUERY
(
Unlock
)
DEFINE_CLASS_QUERY
(
Unlock
)
#undef DEFINE_CLASS_QUERY
#undef DEFINE_CLASS_QUERY
...
@@ -774,7 +766,6 @@ public:
...
@@ -774,7 +766,6 @@ public:
}
}
bool
is_Con
()
const
{
return
(
_flags
&
Flag_is_Con
)
!=
0
;
}
bool
is_Con
()
const
{
return
(
_flags
&
Flag_is_Con
)
!=
0
;
}
bool
is_Goto
()
const
{
return
(
_flags
&
Flag_is_Goto
)
!=
0
;
}
// The data node which is safe to leave in dead loop during IGVN optimization.
// The data node which is safe to leave in dead loop during IGVN optimization.
bool
is_dead_loop_safe
()
const
{
bool
is_dead_loop_safe
()
const
{
return
is_Phi
()
||
(
is_Proj
()
&&
in
(
0
)
==
NULL
)
||
return
is_Phi
()
||
(
is_Proj
()
&&
in
(
0
)
==
NULL
)
||
...
@@ -795,7 +786,7 @@ public:
...
@@ -795,7 +786,7 @@ public:
// skip some other important test.)
// skip some other important test.)
virtual
bool
depends_only_on_test
()
const
{
assert
(
!
is_CFG
(),
""
);
return
true
;
};
virtual
bool
depends_only_on_test
()
const
{
assert
(
!
is_CFG
(),
""
);
return
true
;
};
// defined for MachNodes that match 'If' | 'Goto' | 'CountedLoopEnd'
// defined for MachNodes that match 'If' | 'Goto' | 'CountedLoopEnd'
| 'Jump'
bool
is_Branch
()
const
{
return
(
_flags
&
Flag_is_Branch
)
!=
0
;
}
bool
is_Branch
()
const
{
return
(
_flags
&
Flag_is_Branch
)
!=
0
;
}
// When building basic blocks, I need to have a notion of block beginning
// When building basic blocks, I need to have a notion of block beginning
...
@@ -806,7 +797,7 @@ public:
...
@@ -806,7 +797,7 @@ public:
if
(
is_Region
()
)
if
(
is_Region
()
)
return
this
==
(
const
Node
*
)
in
(
0
);
return
this
==
(
const
Node
*
)
in
(
0
);
else
else
return
(
_flags
&
Flag_is_block_start
)
!=
0
;
return
is_Start
()
;
}
}
// The Ideal control projection Nodes are IfTrue/IfFalse, JumpProjNode, Root,
// The Ideal control projection Nodes are IfTrue/IfFalse, JumpProjNode, Root,
...
@@ -816,9 +807,6 @@ public:
...
@@ -816,9 +807,6 @@ public:
// The node is a "macro" node which needs to be expanded before matching
// The node is a "macro" node which needs to be expanded before matching
bool
is_macro
()
const
{
return
(
_flags
&
Flag_is_macro
)
!=
0
;
}
bool
is_macro
()
const
{
return
(
_flags
&
Flag_is_macro
)
!=
0
;
}
// Value is a vector of primitive values
bool
is_Vector
()
const
{
return
(
_flags
&
Flag_is_Vector
)
!=
0
;
}
//----------------- Optimization
//----------------- Optimization
// Get the worst-case Type output for this Node.
// Get the worst-case Type output for this Node.
...
...
src/share/vm/opto/output.cpp
浏览文件 @
3fceb92c
...
@@ -395,7 +395,7 @@ void Compile::Shorten_branches(Label *labels, int& code_size, int& reloc_size, i
...
@@ -395,7 +395,7 @@ void Compile::Shorten_branches(Label *labels, int& code_size, int& reloc_size, i
}
}
min_offset_from_last_call
+=
inst_size
;
min_offset_from_last_call
+=
inst_size
;
// Remember end of call offset
// Remember end of call offset
if
(
nj
->
is_MachCall
()
&&
nj
->
as_MachCall
()
->
is_safepoint_node
())
{
if
(
nj
->
is_MachCall
()
&&
!
nj
->
is_MachCallLeaf
())
{
min_offset_from_last_call
=
0
;
min_offset_from_last_call
=
0
;
}
}
}
}
...
@@ -447,7 +447,7 @@ void Compile::Shorten_branches(Label *labels, int& code_size, int& reloc_size, i
...
@@ -447,7 +447,7 @@ void Compile::Shorten_branches(Label *labels, int& code_size, int& reloc_size, i
// This requires the TRUE branch target be in succs[0]
// This requires the TRUE branch target be in succs[0]
uint
bnum
=
b
->
non_connector_successor
(
0
)
->
_pre_order
;
uint
bnum
=
b
->
non_connector_successor
(
0
)
->
_pre_order
;
uintptr_t
target
=
blk_starts
[
bnum
];
uintptr_t
target
=
blk_starts
[
bnum
];
if
(
mach
->
is_
pc_relative
()
)
{
if
(
mach
->
is_
Branch
()
)
{
int
offset
=
target
-
(
blk_starts
[
i
]
+
jmp_end
[
i
]);
int
offset
=
target
-
(
blk_starts
[
i
]
+
jmp_end
[
i
]);
if
(
_matcher
->
is_short_branch_offset
(
mach
->
rule
(),
offset
))
{
if
(
_matcher
->
is_short_branch_offset
(
mach
->
rule
(),
offset
))
{
// We've got a winner. Replace this branch.
// We've got a winner. Replace this branch.
...
@@ -508,7 +508,7 @@ void Compile::Shorten_branches(Label *labels, int& code_size, int& reloc_size, i
...
@@ -508,7 +508,7 @@ void Compile::Shorten_branches(Label *labels, int& code_size, int& reloc_size, i
adr
+=
nj
->
size
(
_regalloc
);
adr
+=
nj
->
size
(
_regalloc
);
// Remember end of call offset
// Remember end of call offset
if
(
nj
->
is_MachCall
()
&&
nj
->
as_MachCall
()
->
is_safepoint_node
())
{
if
(
nj
->
is_MachCall
()
&&
!
nj
->
is_MachCallLeaf
())
{
last_call_adr
=
adr
;
last_call_adr
=
adr
;
}
}
}
}
...
@@ -1295,7 +1295,7 @@ void Compile::Fill_buffer() {
...
@@ -1295,7 +1295,7 @@ void Compile::Fill_buffer() {
// Save the return address
// Save the return address
call_returns
[
b
->
_pre_order
]
=
current_offset
+
mcall
->
ret_addr_offset
();
call_returns
[
b
->
_pre_order
]
=
current_offset
+
mcall
->
ret_addr_offset
();
if
(
!
mcall
->
is_safepoint_node
())
{
if
(
mcall
->
is_MachCallLeaf
())
{
is_mcall
=
false
;
is_mcall
=
false
;
is_sfn
=
false
;
is_sfn
=
false
;
}
}
...
@@ -1565,8 +1565,8 @@ void Compile::FillExceptionTables(uint cnt, uint *call_returns, uint *inct_start
...
@@ -1565,8 +1565,8 @@ void Compile::FillExceptionTables(uint cnt, uint *call_returns, uint *inct_start
uint
call_return
=
call_returns
[
b
->
_pre_order
];
uint
call_return
=
call_returns
[
b
->
_pre_order
];
#ifdef ASSERT
#ifdef ASSERT
assert
(
call_return
>
0
,
"no call seen for this basic block"
);
assert
(
call_return
>
0
,
"no call seen for this basic block"
);
while
(
b
->
_nodes
[
--
j
]
->
Opcode
()
==
Op_MachProj
)
;
while
(
b
->
_nodes
[
--
j
]
->
is_MachProj
()
)
;
assert
(
b
->
_nodes
[
j
]
->
is_Call
(),
"CatchProj must follow call"
);
assert
(
b
->
_nodes
[
j
]
->
is_
Mach
Call
(),
"CatchProj must follow call"
);
#endif
#endif
// last instruction is a CatchNode, find it's CatchProjNodes
// last instruction is a CatchNode, find it's CatchProjNodes
int
nof_succs
=
b
->
_num_succs
;
int
nof_succs
=
b
->
_num_succs
;
...
@@ -2350,8 +2350,8 @@ void Scheduling::DoScheduling() {
...
@@ -2350,8 +2350,8 @@ void Scheduling::DoScheduling() {
// Exclude unreachable path case when Halt node is in a separate block.
// Exclude unreachable path case when Halt node is in a separate block.
(
_bb_end
>
1
&&
last
->
is_Mach
()
&&
last
->
as_Mach
()
->
ideal_Opcode
()
==
Op_Halt
)
)
{
(
_bb_end
>
1
&&
last
->
is_Mach
()
&&
last
->
as_Mach
()
->
ideal_Opcode
()
==
Op_Halt
)
)
{
// There must be a prior call. Skip it.
// There must be a prior call. Skip it.
while
(
!
bb
->
_nodes
[
--
_bb_end
]
->
is_Call
()
)
{
while
(
!
bb
->
_nodes
[
--
_bb_end
]
->
is_
Mach
Call
()
)
{
assert
(
bb
->
_nodes
[
_bb_end
]
->
is_Proj
(),
"skipping projections after expected call"
);
assert
(
bb
->
_nodes
[
_bb_end
]
->
is_
Mach
Proj
(),
"skipping projections after expected call"
);
}
}
}
else
if
(
last
->
is_MachNullCheck
()
)
{
}
else
if
(
last
->
is_MachNullCheck
()
)
{
// Backup so the last null-checked memory instruction is
// Backup so the last null-checked memory instruction is
...
@@ -2663,7 +2663,7 @@ void Scheduling::ComputeRegisterAntidependencies(Block *b) {
...
@@ -2663,7 +2663,7 @@ void Scheduling::ComputeRegisterAntidependencies(Block *b) {
for
(
uint
i
=
_bb_end
-
1
;
i
>=
_bb_start
;
i
--
)
{
for
(
uint
i
=
_bb_end
-
1
;
i
>=
_bb_start
;
i
--
)
{
Node
*
n
=
b
->
_nodes
[
i
];
Node
*
n
=
b
->
_nodes
[
i
];
int
is_def
=
n
->
outcnt
();
// def if some uses prior to adding precedence edges
int
is_def
=
n
->
outcnt
();
// def if some uses prior to adding precedence edges
if
(
n
->
Opcode
()
==
Op_MachProj
&&
n
->
ideal_reg
()
==
MachProjNode
::
fat_proj
)
{
if
(
n
->
is_MachProj
()
&&
n
->
ideal_reg
()
==
MachProjNode
::
fat_proj
)
{
// Fat-proj kills a slew of registers
// Fat-proj kills a slew of registers
// This can add edges to 'n' and obscure whether or not it was a def,
// This can add edges to 'n' and obscure whether or not it was a def,
// hence the is_def flag.
// hence the is_def flag.
...
@@ -2685,7 +2685,7 @@ void Scheduling::ComputeRegisterAntidependencies(Block *b) {
...
@@ -2685,7 +2685,7 @@ void Scheduling::ComputeRegisterAntidependencies(Block *b) {
for
(
uint
j
=
0
;
j
<
n
->
req
();
j
++
)
{
for
(
uint
j
=
0
;
j
<
n
->
req
();
j
++
)
{
Node
*
def
=
n
->
in
(
j
);
Node
*
def
=
n
->
in
(
j
);
if
(
def
)
{
if
(
def
)
{
assert
(
def
->
Opcode
()
!=
Op_MachProj
||
def
->
ideal_reg
()
!=
MachProjNode
::
fat_proj
,
""
);
assert
(
!
def
->
is_MachProj
()
||
def
->
ideal_reg
()
!=
MachProjNode
::
fat_proj
,
""
);
anti_do_use
(
b
,
n
,
_regalloc
->
get_reg_first
(
def
)
);
anti_do_use
(
b
,
n
,
_regalloc
->
get_reg_first
(
def
)
);
anti_do_use
(
b
,
n
,
_regalloc
->
get_reg_second
(
def
)
);
anti_do_use
(
b
,
n
,
_regalloc
->
get_reg_second
(
def
)
);
}
}
...
...
src/share/vm/opto/reg_split.cpp
浏览文件 @
3fceb92c
...
@@ -984,7 +984,7 @@ uint PhaseChaitin::Split( uint maxlrg ) {
...
@@ -984,7 +984,7 @@ uint PhaseChaitin::Split( uint maxlrg ) {
continue
;
continue
;
}
}
if
(
UseFPUForSpilling
&&
n
->
is_Call
()
&&
!
uup
&&
!
dup
)
{
if
(
UseFPUForSpilling
&&
n
->
is_
Mach
Call
()
&&
!
uup
&&
!
dup
)
{
// The use at the call can force the def down so insert
// The use at the call can force the def down so insert
// a split before the use to allow the def more freedom.
// a split before the use to allow the def more freedom.
maxlrg
=
split_USE
(
def
,
b
,
n
,
inpidx
,
maxlrg
,
dup
,
false
,
splits
,
slidx
);
maxlrg
=
split_USE
(
def
,
b
,
n
,
inpidx
,
maxlrg
,
dup
,
false
,
splits
,
slidx
);
...
...
src/share/vm/opto/superword.cpp
浏览文件 @
3fceb92c
...
@@ -1167,7 +1167,7 @@ void SuperWord::output() {
...
@@ -1167,7 +1167,7 @@ void SuperWord::output() {
}
else
if
(
n
->
is_Store
())
{
}
else
if
(
n
->
is_Store
())
{
// Promote value to be stored to vector
// Promote value to be stored to vector
Vector
Node
*
val
=
vector_opd
(
p
,
MemNode
::
ValueIn
);
Node
*
val
=
vector_opd
(
p
,
MemNode
::
ValueIn
);
int
opc
=
n
->
Opcode
();
int
opc
=
n
->
Opcode
();
Node
*
ctl
=
n
->
in
(
MemNode
::
Control
);
Node
*
ctl
=
n
->
in
(
MemNode
::
Control
);
...
@@ -1199,7 +1199,7 @@ void SuperWord::output() {
...
@@ -1199,7 +1199,7 @@ void SuperWord::output() {
//------------------------------vector_opd---------------------------
//------------------------------vector_opd---------------------------
// Create a vector operand for the nodes in pack p for operand: in(opd_idx)
// Create a vector operand for the nodes in pack p for operand: in(opd_idx)
Vector
Node
*
SuperWord
::
vector_opd
(
Node_List
*
p
,
int
opd_idx
)
{
Node
*
SuperWord
::
vector_opd
(
Node_List
*
p
,
int
opd_idx
)
{
Node
*
p0
=
p
->
at
(
0
);
Node
*
p0
=
p
->
at
(
0
);
uint
vlen
=
p
->
size
();
uint
vlen
=
p
->
size
();
Node
*
opd
=
p0
->
in
(
opd_idx
);
Node
*
opd
=
p0
->
in
(
opd_idx
);
...
@@ -1215,9 +1215,10 @@ VectorNode* SuperWord::vector_opd(Node_List* p, int opd_idx) {
...
@@ -1215,9 +1215,10 @@ VectorNode* SuperWord::vector_opd(Node_List* p, int opd_idx) {
}
}
if
(
same_opd
)
{
if
(
same_opd
)
{
if
(
opd
->
is_Vector
())
{
if
(
opd
->
is_Vector
()
||
opd
->
is_VectorLoad
()
)
{
return
(
VectorNode
*
)
opd
;
// input is matching vector
return
opd
;
// input is matching vector
}
}
assert
(
!
opd
->
is_VectorStore
(),
"such vector is not expected here"
);
// Convert scalar input to vector. Use p0's type because it's container
// Convert scalar input to vector. Use p0's type because it's container
// maybe smaller than the operand's container.
// maybe smaller than the operand's container.
const
Type
*
opd_t
=
velt_type
(
!
in_bb
(
opd
)
?
p0
:
opd
);
const
Type
*
opd_t
=
velt_type
(
!
in_bb
(
opd
)
?
p0
:
opd
);
...
...
src/share/vm/opto/superword.hpp
浏览文件 @
3fceb92c
...
@@ -360,7 +360,7 @@ class SuperWord : public ResourceObj {
...
@@ -360,7 +360,7 @@ class SuperWord : public ResourceObj {
// Convert packs into vector node operations
// Convert packs into vector node operations
void
output
();
void
output
();
// Create a vector operand for the nodes in pack p for operand: in(opd_idx)
// Create a vector operand for the nodes in pack p for operand: in(opd_idx)
Vector
Node
*
vector_opd
(
Node_List
*
p
,
int
opd_idx
);
Node
*
vector_opd
(
Node_List
*
p
,
int
opd_idx
);
// Can code be generated for pack p?
// Can code be generated for pack p?
bool
implemented
(
Node_List
*
p
);
bool
implemented
(
Node_List
*
p
);
// For pack p, are all operands and all uses (with in the block) vector?
// For pack p, are all operands and all uses (with in the block) vector?
...
...
src/share/vm/opto/vectornode.cpp
浏览文件 @
3fceb92c
...
@@ -426,7 +426,7 @@ VectorLoadNode* VectorLoadNode::make(Compile* C, int opc, Node* ctl, Node* mem,
...
@@ -426,7 +426,7 @@ VectorLoadNode* VectorLoadNode::make(Compile* C, int opc, Node* ctl, Node* mem,
// Return the vector version of a scalar store node.
// Return the vector version of a scalar store node.
VectorStoreNode
*
VectorStoreNode
::
make
(
Compile
*
C
,
int
opc
,
Node
*
ctl
,
Node
*
mem
,
VectorStoreNode
*
VectorStoreNode
::
make
(
Compile
*
C
,
int
opc
,
Node
*
ctl
,
Node
*
mem
,
Node
*
adr
,
const
TypePtr
*
atyp
,
Vector
Node
*
val
,
Node
*
adr
,
const
TypePtr
*
atyp
,
Node
*
val
,
uint
vlen
)
{
uint
vlen
)
{
int
vopc
=
opcode
(
opc
,
vlen
);
int
vopc
=
opcode
(
opc
,
vlen
);
...
...
src/share/vm/opto/vectornode.hpp
浏览文件 @
3fceb92c
...
@@ -47,10 +47,10 @@ class VectorNode : public Node {
...
@@ -47,10 +47,10 @@ class VectorNode : public Node {
friend
class
VectorStoreNode
;
// ditto.
friend
class
VectorStoreNode
;
// ditto.
VectorNode
(
Node
*
n1
,
uint
vlen
)
:
Node
(
NULL
,
n1
),
_length
(
vlen
)
{
VectorNode
(
Node
*
n1
,
uint
vlen
)
:
Node
(
NULL
,
n1
),
_length
(
vlen
)
{
init_
flags
(
Flag_i
s_Vector
);
init_
class_id
(
Clas
s_Vector
);
}
}
VectorNode
(
Node
*
n1
,
Node
*
n2
,
uint
vlen
)
:
Node
(
NULL
,
n1
,
n2
),
_length
(
vlen
)
{
VectorNode
(
Node
*
n1
,
Node
*
n2
,
uint
vlen
)
:
Node
(
NULL
,
n1
,
n2
),
_length
(
vlen
)
{
init_
flags
(
Flag_i
s_Vector
);
init_
class_id
(
Clas
s_Vector
);
}
}
virtual
int
Opcode
()
const
;
virtual
int
Opcode
()
const
;
...
@@ -389,7 +389,7 @@ class VectorLoadNode : public LoadNode {
...
@@ -389,7 +389,7 @@ class VectorLoadNode : public LoadNode {
public:
public:
VectorLoadNode
(
Node
*
c
,
Node
*
mem
,
Node
*
adr
,
const
TypePtr
*
at
,
const
Type
*
rt
)
VectorLoadNode
(
Node
*
c
,
Node
*
mem
,
Node
*
adr
,
const
TypePtr
*
at
,
const
Type
*
rt
)
:
LoadNode
(
c
,
mem
,
adr
,
at
,
rt
)
{
:
LoadNode
(
c
,
mem
,
adr
,
at
,
rt
)
{
init_flags
(
Flag_is_Vector
);
init_class_id
(
Class_VectorLoad
);
}
}
virtual
int
Opcode
()
const
;
virtual
int
Opcode
()
const
;
...
@@ -617,7 +617,7 @@ class VectorStoreNode : public StoreNode {
...
@@ -617,7 +617,7 @@ class VectorStoreNode : public StoreNode {
public:
public:
VectorStoreNode
(
Node
*
c
,
Node
*
mem
,
Node
*
adr
,
const
TypePtr
*
at
,
Node
*
val
)
VectorStoreNode
(
Node
*
c
,
Node
*
mem
,
Node
*
adr
,
const
TypePtr
*
at
,
Node
*
val
)
:
StoreNode
(
c
,
mem
,
adr
,
at
,
val
)
{
:
StoreNode
(
c
,
mem
,
adr
,
at
,
val
)
{
init_flags
(
Flag_is_Vector
);
init_class_id
(
Class_VectorStore
);
}
}
virtual
int
Opcode
()
const
;
virtual
int
Opcode
()
const
;
...
@@ -635,7 +635,7 @@ class VectorStoreNode : public StoreNode {
...
@@ -635,7 +635,7 @@ class VectorStoreNode : public StoreNode {
static
int
opcode
(
int
sopc
,
uint
vlen
);
static
int
opcode
(
int
sopc
,
uint
vlen
);
static
VectorStoreNode
*
make
(
Compile
*
C
,
int
opc
,
Node
*
ctl
,
Node
*
mem
,
static
VectorStoreNode
*
make
(
Compile
*
C
,
int
opc
,
Node
*
ctl
,
Node
*
mem
,
Node
*
adr
,
const
TypePtr
*
atyp
,
Vector
Node
*
val
,
Node
*
adr
,
const
TypePtr
*
atyp
,
Node
*
val
,
uint
vlen
);
uint
vlen
);
};
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录