Mercurial > hg > openjdk > jdk8u > hotspot
changeset 9124:39b41ab3366c
8236179: C1 register allocation error with T_ADDRESS
Reviewed-by: rkennke, vlivanov, roland, mdoerr
Contributed-by: Aditya Mandaleeka <adityam@microsoft.com>
author | mdoerr |
---|---|
date | Fri, 20 Dec 2019 19:51:00 +0100 |
parents | bb1da64b0492 |
children | fe4d09b50902 |
files | src/cpu/sparc/vm/c1_FrameMap_sparc.cpp src/cpu/x86/vm/c1_FrameMap_x86.cpp src/cpu/x86/vm/c1_LIRAssembler_x86.cpp src/share/vm/c1/c1_FrameMap.hpp |
diffstat | 4 files changed, 10 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/cpu/sparc/vm/c1_FrameMap_sparc.cpp Fri Aug 16 16:50:17 2019 +0200 +++ b/src/cpu/sparc/vm/c1_FrameMap_sparc.cpp Fri Dec 20 19:51:00 2019 +0100 @@ -55,6 +55,8 @@ opr = as_oop_opr(reg); } else if (type == T_METADATA) { opr = as_metadata_opr(reg); + } else if (type == T_ADDRESS) { + opr = as_address_opr(reg); } else { opr = as_opr(reg); }
--- a/src/cpu/x86/vm/c1_FrameMap_x86.cpp Fri Aug 16 16:50:17 2019 +0200 +++ b/src/cpu/x86/vm/c1_FrameMap_x86.cpp Fri Dec 20 19:51:00 2019 +0100 @@ -54,6 +54,8 @@ opr = as_oop_opr(reg); } else if (type == T_METADATA) { opr = as_metadata_opr(reg); + } else if (type == T_ADDRESS) { + opr = as_address_opr(reg); } else { opr = as_opr(reg); }
--- a/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Fri Aug 16 16:50:17 2019 +0200 +++ b/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Fri Dec 20 19:51:00 2019 +0100 @@ -964,7 +964,7 @@ if (type == T_OBJECT || type == T_ARRAY) { __ verify_oop(src->as_register()); __ movptr (dst, src->as_register()); - } else if (type == T_METADATA) { + } else if (type == T_METADATA || type == T_ADDRESS) { __ movptr (dst, src->as_register()); } else { __ movl (dst, src->as_register()); @@ -1145,7 +1145,7 @@ if (type == T_ARRAY || type == T_OBJECT) { __ movptr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix())); __ verify_oop(dest->as_register()); - } else if (type == T_METADATA) { + } else if (type == T_METADATA || type == T_ADDRESS) { __ movptr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix())); } else { __ movl(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
--- a/src/share/vm/c1/c1_FrameMap.hpp Fri Aug 16 16:50:17 2019 +0200 +++ b/src/share/vm/c1/c1_FrameMap.hpp Fri Dec 20 19:51:00 2019 +0100 @@ -198,6 +198,10 @@ return LIR_OprFact::single_cpu_metadata(cpu_reg2rnr(r)); } + static LIR_Opr as_address_opr(Register r) { + return LIR_OprFact::single_cpu_address(cpu_reg2rnr(r)); + } + FrameMap(ciMethod* method, int monitors, int reserved_argument_area_size); bool finalize_frame(int nof_slots);