8236179: C1 register allocation error with T_ADDRESS

Fri, 20 Dec 2019 19:51:00 +0100

author
mdoerr
date
Fri, 20 Dec 2019 19:51:00 +0100
changeset 9835
39b41ab3366c
parent 9834
bb1da64b0492
child 9836
fe4d09b50902

8236179: C1 register allocation error with T_ADDRESS
Reviewed-by: rkennke, vlivanov, roland, mdoerr
Contributed-by: Aditya Mandaleeka <adityam@microsoft.com>

src/cpu/sparc/vm/c1_FrameMap_sparc.cpp file | annotate | diff | comparison | revisions
src/cpu/x86/vm/c1_FrameMap_x86.cpp file | annotate | diff | comparison | revisions
src/cpu/x86/vm/c1_LIRAssembler_x86.cpp file | annotate | diff | comparison | revisions
src/share/vm/c1/c1_FrameMap.hpp file | annotate | diff | comparison | revisions
     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  

mercurial