Fri, 20 Dec 2019 19:51:00 +0100
8236179: C1 register allocation error with T_ADDRESS
Reviewed-by: rkennke, vlivanov, roland, mdoerr
Contributed-by: Aditya Mandaleeka <adityam@microsoft.com>
1.1 --- a/src/cpu/sparc/vm/c1_FrameMap_sparc.cpp Fri Aug 16 16:50:17 2019 +0200 1.2 +++ b/src/cpu/sparc/vm/c1_FrameMap_sparc.cpp Fri Dec 20 19:51:00 2019 +0100 1.3 @@ -55,6 +55,8 @@ 1.4 opr = as_oop_opr(reg); 1.5 } else if (type == T_METADATA) { 1.6 opr = as_metadata_opr(reg); 1.7 + } else if (type == T_ADDRESS) { 1.8 + opr = as_address_opr(reg); 1.9 } else { 1.10 opr = as_opr(reg); 1.11 }
2.1 --- a/src/cpu/x86/vm/c1_FrameMap_x86.cpp Fri Aug 16 16:50:17 2019 +0200 2.2 +++ b/src/cpu/x86/vm/c1_FrameMap_x86.cpp Fri Dec 20 19:51:00 2019 +0100 2.3 @@ -54,6 +54,8 @@ 2.4 opr = as_oop_opr(reg); 2.5 } else if (type == T_METADATA) { 2.6 opr = as_metadata_opr(reg); 2.7 + } else if (type == T_ADDRESS) { 2.8 + opr = as_address_opr(reg); 2.9 } else { 2.10 opr = as_opr(reg); 2.11 }
3.1 --- a/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Fri Aug 16 16:50:17 2019 +0200 3.2 +++ b/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Fri Dec 20 19:51:00 2019 +0100 3.3 @@ -964,7 +964,7 @@ 3.4 if (type == T_OBJECT || type == T_ARRAY) { 3.5 __ verify_oop(src->as_register()); 3.6 __ movptr (dst, src->as_register()); 3.7 - } else if (type == T_METADATA) { 3.8 + } else if (type == T_METADATA || type == T_ADDRESS) { 3.9 __ movptr (dst, src->as_register()); 3.10 } else { 3.11 __ movl (dst, src->as_register()); 3.12 @@ -1145,7 +1145,7 @@ 3.13 if (type == T_ARRAY || type == T_OBJECT) { 3.14 __ movptr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix())); 3.15 __ verify_oop(dest->as_register()); 3.16 - } else if (type == T_METADATA) { 3.17 + } else if (type == T_METADATA || type == T_ADDRESS) { 3.18 __ movptr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix())); 3.19 } else { 3.20 __ movl(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
4.1 --- a/src/share/vm/c1/c1_FrameMap.hpp Fri Aug 16 16:50:17 2019 +0200 4.2 +++ b/src/share/vm/c1/c1_FrameMap.hpp Fri Dec 20 19:51:00 2019 +0100 4.3 @@ -198,6 +198,10 @@ 4.4 return LIR_OprFact::single_cpu_metadata(cpu_reg2rnr(r)); 4.5 } 4.6 4.7 + static LIR_Opr as_address_opr(Register r) { 4.8 + return LIR_OprFact::single_cpu_address(cpu_reg2rnr(r)); 4.9 + } 4.10 + 4.11 FrameMap(ciMethod* method, int monitors, int reserved_argument_area_size); 4.12 bool finalize_frame(int nof_slots); 4.13