# HG changeset patch # User lfoltan # Date 1569264544 14400 # Node ID 08a5148e7c4e3a00e80d8f1dd38baf03f5923865 # Parent e27564cd10e3fe6ef8e423158f7e0ed1c95acbf4 8230505: Replace JVM type comparisons to T_OBJECT and T_ARRAY with call to is_reference_type Summary: Consistently use is_reference_type when comparing type for T_OBJECT or T_ARRAY. Reviewed-by: dlong, coleenp, hseigel Contributed-by: lois.foltan@oracle.com, john.r.rose@oracle.com diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/aarch64/c1_FrameMap_aarch64.cpp --- a/src/hotspot/cpu/aarch64/c1_FrameMap_aarch64.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/aarch64/c1_FrameMap_aarch64.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -45,7 +45,7 @@ Register reg2 = r_2->as_Register(); assert(reg2 == reg, "must be same register"); opr = as_long_opr(reg); - } else if (type == T_OBJECT || type == T_ARRAY) { + } else if (is_reference_type(type)) { opr = as_oop_opr(reg); } else if (type == T_METADATA) { opr = as_metadata_opr(reg); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp --- a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -728,7 +728,7 @@ move_regs(src->as_register(), dest->as_register()); } else if (dest->is_double_cpu()) { - if (src->type() == T_OBJECT || src->type() == T_ARRAY) { + if (is_reference_type(src->type()) { // Surprising to me but we can see move of a long to t_object __ verify_oop(src->as_register()); move_regs(src->as_register(), dest->as_register_lo()); @@ -756,7 +756,7 @@ void LIR_Assembler::reg2stack(LIR_Opr src, LIR_Opr dest, BasicType type, bool pop_fpu_stack) { if (src->is_single_cpu()) { - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { __ str(src->as_register(), frame_map()->address_for_slot(dest->single_stack_ix())); __ verify_oop(src->as_register()); } else if (type == T_METADATA || type == T_DOUBLE) { @@ -794,7 +794,7 @@ return; } - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { __ verify_oop(src->as_register()); if (UseCompressedOops && !wide) { @@ -869,7 +869,7 @@ assert(dest->is_register(), "should not call otherwise"); if (dest->is_single_cpu()) { - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { __ ldr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix())); __ verify_oop(dest->as_register()); } else if (type == T_METADATA) { @@ -1019,7 +1019,7 @@ ShouldNotReachHere(); } - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { if (UseCompressedOops && !wide) { __ decode_heap_oop(dest->as_register()); } @@ -1227,8 +1227,8 @@ __ uxtw(len, len); if (UseSlowPath || - (!UseFastNewObjectArray && (op->type() == T_OBJECT || op->type() == T_ARRAY)) || - (!UseFastNewTypeArray && (op->type() != T_OBJECT && op->type() != T_ARRAY))) { + (!UseFastNewObjectArray && is_reference_type(op->type())) || + (!UseFastNewTypeArray && !is_reference_type(op->type()))) { __ b(*op->stub()->entry()); } else { Register tmp1 = op->tmp1()->as_register(); @@ -1948,10 +1948,10 @@ if (opr2->is_single_cpu()) { // cpu register - cpu register Register reg2 = opr2->as_register(); - if (opr1->type() == T_OBJECT || opr1->type() == T_ARRAY) { + if (is_reference_type(opr1->type())) { __ cmpoop(reg1, reg2); } else { - assert(opr2->type() != T_OBJECT && opr2->type() != T_ARRAY, "cmp int, oop?"); + assert(!is_reference_type(opr2->type()), "cmp int, oop?"); __ cmpw(reg1, reg2); } return; @@ -2243,7 +2243,7 @@ CodeStub* stub = op->stub(); int flags = op->flags(); BasicType basic_type = default_type != NULL ? default_type->element_type()->basic_type() : T_ILLEGAL; - if (basic_type == T_ARRAY) basic_type = T_OBJECT; + if (is_reference_type(basic_type)) basic_type = T_OBJECT; // if we don't know anything, just go through the generic arraycopy if (default_type == NULL // || basic_type == T_OBJECT @@ -3131,7 +3131,7 @@ void LIR_Assembler::atomic_op(LIR_Code code, LIR_Opr src, LIR_Opr data, LIR_Opr dest, LIR_Opr tmp_op) { Address addr = as_Address(src->as_address_ptr()); BasicType type = src->type(); - bool is_oop = type == T_OBJECT || type == T_ARRAY; + bool is_oop = is_reference_type(type); void (MacroAssembler::* add)(Register prev, RegisterOrConstant incr, Register addr); void (MacroAssembler::* xchg)(Register prev, Register newv, Register addr); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp --- a/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -733,7 +733,7 @@ new_value.load_item(); cmp_value.load_item(); LIR_Opr result = new_register(T_INT); - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { __ cas_obj(addr, cmp_value.result(), new_value.result(), new_register(T_INT), new_register(T_INT), result); } else if (type == T_INT) { __ cas_int(addr->as_address_ptr()->base(), cmp_value.result(), new_value.result(), ill, ill); @@ -748,7 +748,7 @@ } LIR_Opr LIRGenerator::atomic_xchg(BasicType type, LIR_Opr addr, LIRItem& value) { - bool is_oop = type == T_OBJECT || type == T_ARRAY; + bool is_oop = is_reference_type(type); LIR_Opr result = new_register(type); value.load_item(); assert(type == T_INT || is_oop LP64_ONLY( || type == T_LONG ), "unexpected type"); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.cpp --- a/src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -251,7 +251,7 @@ void G1BarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Register dst, Address src, Register tmp1, Register tmp_thread) { - bool on_oop = type == T_OBJECT || type == T_ARRAY; + bool on_oop = is_reference_type(type); bool on_weak = (decorators & ON_WEAK_OOP_REF) != 0; bool on_phantom = (decorators & ON_PHANTOM_OOP_REF) != 0; bool on_reference = on_weak || on_phantom; diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/aarch64/gc/shared/modRefBarrierSetAssembler_aarch64.cpp --- a/src/hotspot/cpu/aarch64/gc/shared/modRefBarrierSetAssembler_aarch64.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/aarch64/gc/shared/modRefBarrierSetAssembler_aarch64.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,7 +46,7 @@ void ModRefBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Address dst, Register val, Register tmp1, Register tmp2) { - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { oop_store_at(masm, decorators, type, dst, val, tmp1, tmp2); } else { BarrierSetAssembler::store_at(masm, decorators, type, dst, val, tmp1, tmp2); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/aarch64/gc/shenandoah/c1/shenandoahBarrierSetC1_aarch64.cpp --- a/src/hotspot/cpu/aarch64/gc/shenandoah/c1/shenandoahBarrierSetC1_aarch64.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/aarch64/gc/shenandoah/c1/shenandoahBarrierSetC1_aarch64.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Red Hat, Inc. All rights reserved. + * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as @@ -94,7 +94,7 @@ value_opr = storeval_barrier(access.gen(), value_opr, access.access_emit_info(), access.decorators()); } - assert(type == T_INT || type == T_OBJECT || type == T_ARRAY LP64_ONLY( || type == T_LONG ), "unexpected type"); + assert(type == T_INT || is_reference_type(type) LP64_ONLY( || type == T_LONG ), "unexpected type"); LIR_Opr tmp = gen->new_register(T_INT); __ xchg(access.resolved_addr(), value_opr, result, tmp); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp --- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -317,7 +317,7 @@ void ShenandoahBarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Register dst, Address src, Register tmp1, Register tmp_thread) { - bool on_oop = type == T_OBJECT || type == T_ARRAY; + bool on_oop = is_reference_type(type); bool not_in_heap = (decorators & IN_NATIVE) != 0; bool on_weak = (decorators & ON_WEAK_OOP_REF) != 0; bool on_phantom = (decorators & ON_PHANTOM_OOP_REF) != 0; @@ -352,7 +352,7 @@ void ShenandoahBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Address dst, Register val, Register tmp1, Register tmp2) { - bool on_oop = type == T_OBJECT || type == T_ARRAY; + bool on_oop = is_reference_type(type); if (!on_oop) { BarrierSetAssembler::store_at(masm, decorators, type, dst, val, tmp1, tmp2); return; diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp --- a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -127,7 +127,7 @@ Register tmp1, Register tmp2) { // Verify value - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { // Note that src could be noreg, which means we // are storing null and can skip verification. if (val != noreg) { diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/aarch64/sharedRuntime_aarch64.cpp --- a/src/hotspot/cpu/aarch64/sharedRuntime_aarch64.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/aarch64/sharedRuntime_aarch64.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1952,7 +1952,7 @@ __ reset_last_Java_frame(false); // Unbox oop result, e.g. JNIHandles::resolve result. - if (ret_type == T_OBJECT || ret_type == T_ARRAY) { + if (is_reference_type(ret_type)) { __ resolve_jobject(r0, rthread, rscratch2); } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/sparc/c1_FrameMap_sparc.cpp --- a/src/hotspot/cpu/sparc/c1_FrameMap_sparc.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/sparc/c1_FrameMap_sparc.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,7 +51,7 @@ } if (r_2->is_Register() && (type == T_LONG || type == T_DOUBLE)) { opr = as_long_opr(reg); - } else if (type == T_OBJECT || type == T_ARRAY) { + } else if (is_reference_type(type)) { opr = as_oop_opr(reg); } else if (type == T_METADATA) { opr = as_metadata_opr(reg); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/sparc/c1_LIRAssembler_sparc.cpp --- a/src/hotspot/cpu/sparc/c1_LIRAssembler_sparc.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/sparc/c1_LIRAssembler_sparc.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -107,8 +107,8 @@ } if (UseCompressedOops) { - if (dst->is_address() && !dst->is_stack() && (dst->type() == T_OBJECT || dst->type() == T_ARRAY)) return false; - if (src->is_address() && !src->is_stack() && (src->type() == T_OBJECT || src->type() == T_ARRAY)) return false; + if (dst->is_address() && !dst->is_stack() && is_reference_type(dst->type())) return false; + if (src->is_address() && !src->is_stack() && is_reference_type(src->type())) return false; } if (UseCompressedClassPointers) { @@ -728,7 +728,7 @@ __ set(offset, O7); store_offset = store(from_reg, base, O7, type, wide); } else { - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { __ verify_oop(from_reg->as_register()); } store_offset = code_offset(); @@ -789,7 +789,7 @@ int LIR_Assembler::store(LIR_Opr from_reg, Register base, Register disp, BasicType type, bool wide) { - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { __ verify_oop(from_reg->as_register()); } int store_offset = code_offset(); @@ -889,7 +889,7 @@ } default : ShouldNotReachHere(); } - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { __ verify_oop(to_reg->as_register()); } } @@ -924,7 +924,7 @@ break; default : ShouldNotReachHere(); } - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { __ verify_oop(to_reg->as_register()); } return load_offset; @@ -1359,7 +1359,7 @@ } else { ShouldNotReachHere(); } - if (to_reg->type() == T_OBJECT || to_reg->type() == T_ARRAY) { + if (is_reference_type(to_reg->type())) { __ verify_oop(to_reg->as_register()); } } @@ -2295,8 +2295,8 @@ __ signx(op->len()->as_register()); if (UseSlowPath || - (!UseFastNewObjectArray && (op->type() == T_OBJECT || op->type() == T_ARRAY)) || - (!UseFastNewTypeArray && (op->type() != T_OBJECT && op->type() != T_ARRAY))) { + (!UseFastNewObjectArray && is_reference_type(op->type())) || + (!UseFastNewTypeArray && !is_reference_type(op->type()))) { __ br(Assembler::always, false, Assembler::pt, *op->stub()->entry()); __ delayed()->nop(); } else { diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/sparc/c1_LIRGenerator_sparc.cpp --- a/src/hotspot/cpu/sparc/c1_LIRGenerator_sparc.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/sparc/c1_LIRGenerator_sparc.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -568,7 +568,7 @@ LIR_Opr t2 = FrameMap::G3_opr; cmp_value.load_item(); new_value.load_item(); - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { __ cas_obj(addr->as_address_ptr()->base(), cmp_value.result(), new_value.result(), t1, t2); } else if (type == T_INT) { __ cas_int(addr->as_address_ptr()->base(), cmp_value.result(), new_value.result(), t1, t2); @@ -583,7 +583,7 @@ } LIR_Opr LIRGenerator::atomic_xchg(BasicType type, LIR_Opr addr, LIRItem& value) { - bool is_obj = type == T_OBJECT || type == T_ARRAY; + bool is_obj = is_reference_type(type); LIR_Opr result = new_register(type); LIR_Opr tmp = LIR_OprFact::illegalOpr; diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp --- a/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -450,7 +450,7 @@ void G1BarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Address src, Register dst, Register tmp) { - bool on_oop = type == T_OBJECT || type == T_ARRAY; + bool on_oop = is_reference_type(type); bool on_weak = (decorators & ON_WEAK_OOP_REF) != 0; bool on_phantom = (decorators & ON_PHANTOM_OOP_REF) != 0; bool on_reference = on_weak || on_phantom; diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/sparc/gc/shared/modRefBarrierSetAssembler_sparc.cpp --- a/src/hotspot/cpu/sparc/gc/shared/modRefBarrierSetAssembler_sparc.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/sparc/gc/shared/modRefBarrierSetAssembler_sparc.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,7 +58,7 @@ void ModRefBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Register val, Address dst, Register tmp) { - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { oop_store_at(masm, decorators, type, val, dst, tmp); } else { BarrierSetAssembler::store_at(masm, decorators, type, val, dst, tmp); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/sparc/sharedRuntime_sparc.cpp --- a/src/hotspot/cpu/sparc/sharedRuntime_sparc.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/sparc/sharedRuntime_sparc.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -561,7 +561,7 @@ if (r_1->is_Register()) { Register r = r_1->as_Register()->after_restore(); - if (sig_bt[i] == T_OBJECT || sig_bt[i] == T_ARRAY) { + if (is_reference_type(sig_bt[i])) { store_c2i_object(r, base, st_off); } else if (sig_bt[i] == T_LONG || sig_bt[i] == T_DOUBLE) { store_c2i_long(r, base, st_off, r_2->is_stack()); @@ -1637,8 +1637,7 @@ Register temp_reg = G5_method; // not part of any compiled calling seq if (VerifyOops) { for (int i = 0; i < method->size_of_parameters(); i++) { - if (sig_bt[i] == T_OBJECT || - sig_bt[i] == T_ARRAY) { + if (is_reference_type(sig_bt[i])) { VMReg r = regs[i].first(); assert(r->is_valid(), "bad oop arg"); if (r->is_stack()) { @@ -2507,7 +2506,7 @@ __ reset_last_Java_frame(); // Unbox oop result, e.g. JNIHandles::resolve value in I0. - if (ret_type == T_OBJECT || ret_type == T_ARRAY) { + if (is_reference_type(ret_type)) { __ resolve_jobject(I0, G3_scratch); } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/x86/c1_FrameMap_x86.cpp --- a/src/hotspot/cpu/x86/c1_FrameMap_x86.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/x86/c1_FrameMap_x86.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,7 +50,7 @@ #else opr = as_long_opr(reg2, reg); #endif // _LP64 - } else if (type == T_OBJECT || type == T_ARRAY) { + } else if (is_reference_type(type)) { opr = as_oop_opr(reg); } else if (type == T_METADATA) { opr = as_metadata_opr(reg); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp --- a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -861,7 +861,7 @@ } else if (dest->is_double_cpu()) { #ifdef _LP64 - if (src->type() == T_OBJECT || src->type() == T_ARRAY) { + if (is_reference_type(src->type())) { // Surprising to me but we can see move of a long to t_object __ verify_oop(src->as_register()); move_regs(src->as_register(), dest->as_register_lo()); @@ -932,7 +932,7 @@ if (src->is_single_cpu()) { Address dst = frame_map()->address_for_slot(dest->single_stack_ix()); - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { __ verify_oop(src->as_register()); __ movptr (dst, src->as_register()); } else if (type == T_METADATA) { @@ -978,7 +978,7 @@ PatchingStub* patch = NULL; Register compressed_src = rscratch1; - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { __ verify_oop(src->as_register()); #ifdef _LP64 if (UseCompressedOops && !wide) { @@ -1113,7 +1113,7 @@ assert(dest->is_register(), "should not call otherwise"); if (dest->is_single_cpu()) { - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { __ movptr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix())); __ verify_oop(dest->as_register()); } else if (type == T_METADATA) { @@ -1154,7 +1154,7 @@ void LIR_Assembler::stack2stack(LIR_Opr src, LIR_Opr dest, BasicType type) { if (src->is_single_stack()) { - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { __ pushptr(frame_map()->address_for_slot(src ->single_stack_ix())); __ popptr (frame_map()->address_for_slot(dest->single_stack_ix())); } else { @@ -1355,7 +1355,7 @@ patching_epilog(patch, patch_code, addr->base()->as_register(), info); } - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { #ifdef _LP64 if (UseCompressedOops && !wide) { __ decode_heap_oop(dest->as_register()); @@ -1593,8 +1593,8 @@ LP64_ONLY( __ movslq(len, len); ) if (UseSlowPath || - (!UseFastNewObjectArray && (op->type() == T_OBJECT || op->type() == T_ARRAY)) || - (!UseFastNewTypeArray && (op->type() != T_OBJECT && op->type() != T_ARRAY))) { + (!UseFastNewObjectArray && is_reference_type(op->type())) || + (!UseFastNewTypeArray && !is_reference_type(op->type()))) { __ jmp(*op->stub()->entry()); } else { Register tmp1 = op->tmp1()->as_register(); @@ -2510,7 +2510,7 @@ } else { #ifdef _LP64 Register r_lo; - if (right->type() == T_OBJECT || right->type() == T_ARRAY) { + if (is_reference_type(right->type())) { r_lo = right->as_register(); } else { r_lo = right->as_register_lo(); @@ -2623,15 +2623,15 @@ Register reg1 = opr1->as_register(); if (opr2->is_single_cpu()) { // cpu register - cpu register - if (opr1->type() == T_OBJECT || opr1->type() == T_ARRAY) { + if (is_reference_type(opr1->type())) { __ cmpoop(reg1, opr2->as_register()); } else { - assert(opr2->type() != T_OBJECT && opr2->type() != T_ARRAY, "cmp int, oop?"); + assert(!is_reference_type(opr2->type()), "cmp int, oop?"); __ cmpl(reg1, opr2->as_register()); } } else if (opr2->is_stack()) { // cpu register - stack - if (opr1->type() == T_OBJECT || opr1->type() == T_ARRAY) { + if (is_reference_type(opr1->type())) { __ cmpoop(reg1, frame_map()->address_for_slot(opr2->single_stack_ix())); } else { __ cmpl(reg1, frame_map()->address_for_slot(opr2->single_stack_ix())); @@ -2641,7 +2641,7 @@ LIR_Const* c = opr2->as_constant_ptr(); if (c->type() == T_INT) { __ cmpl(reg1, c->as_jint()); - } else if (c->type() == T_OBJECT || c->type() == T_ARRAY) { + } else if (is_reference_type(c->type())) { // In 64bit oops are single register jobject o = c->as_jobject(); if (o == NULL) { @@ -2741,7 +2741,7 @@ } else if (opr1->is_address() && opr2->is_constant()) { LIR_Const* c = opr2->as_constant_ptr(); #ifdef _LP64 - if (c->type() == T_OBJECT || c->type() == T_ARRAY) { + if (is_reference_type(c->type())) { assert(condition == lir_cond_equal || condition == lir_cond_notEqual, "need to reverse"); __ movoop(rscratch1, c->as_jobject()); } @@ -2753,7 +2753,7 @@ LIR_Address* addr = opr1->as_address_ptr(); if (c->type() == T_INT) { __ cmpl(as_Address(addr), c->as_jint()); - } else if (c->type() == T_OBJECT || c->type() == T_ARRAY) { + } else if (is_reference_type(c->type())) { #ifdef _LP64 // %%% Make this explode if addr isn't reachable until we figure out a // better strategy by giving noreg as the temp for as_Address @@ -3052,7 +3052,7 @@ CodeStub* stub = op->stub(); int flags = op->flags(); BasicType basic_type = default_type != NULL ? default_type->element_type()->basic_type() : T_ILLEGAL; - if (basic_type == T_ARRAY) basic_type = T_OBJECT; + if (is_reference_type(basic_type)) basic_type = T_OBJECT; // if we don't know anything, just go through the generic arraycopy if (default_type == NULL) { diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp --- a/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -671,7 +671,7 @@ LIR_Opr LIRGenerator::atomic_cmpxchg(BasicType type, LIR_Opr addr, LIRItem& cmp_value, LIRItem& new_value) { LIR_Opr ill = LIR_OprFact::illegalOpr; // for convenience - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { cmp_value.load_item_force(FrameMap::rax_oop_opr); new_value.load_item(); __ cas_obj(addr->as_address_ptr()->base(), cmp_value.result(), new_value.result(), ill, ill); @@ -693,7 +693,7 @@ } LIR_Opr LIRGenerator::atomic_xchg(BasicType type, LIR_Opr addr, LIRItem& value) { - bool is_oop = type == T_OBJECT || type == T_ARRAY; + bool is_oop = is_reference_type(type); LIR_Opr result = new_register(type); value.load_item(); // Because we want a 2-arg form of xchg and xadd diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/x86/gc/g1/g1BarrierSetAssembler_x86.cpp --- a/src/hotspot/cpu/x86/gc/g1/g1BarrierSetAssembler_x86.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/x86/gc/g1/g1BarrierSetAssembler_x86.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -118,7 +118,7 @@ void G1BarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Register dst, Address src, Register tmp1, Register tmp_thread) { - bool on_oop = type == T_OBJECT || type == T_ARRAY; + bool on_oop = is_reference_type(type); bool on_weak = (decorators & ON_WEAK_OOP_REF) != 0; bool on_phantom = (decorators & ON_PHANTOM_OOP_REF) != 0; bool on_reference = on_weak || on_phantom; diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.cpp --- a/src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ bool disjoint = (decorators & ARRAYCOPY_DISJOINT) != 0; bool obj_int = type == T_OBJECT LP64_ONLY(&& UseCompressedOops); - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { #ifdef _LP64 if (!checkcast) { if (!obj_int) { @@ -61,7 +61,7 @@ bool obj_int = type == T_OBJECT LP64_ONLY(&& UseCompressedOops); Register tmp = rax; - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { #ifdef _LP64 if (!checkcast) { if (!obj_int) { @@ -85,7 +85,7 @@ void ModRefBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Address dst, Register val, Register tmp1, Register tmp2) { - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { oop_store_at(masm, decorators, type, dst, val, tmp1, tmp2); } else { BarrierSetAssembler::store_at(masm, decorators, type, dst, val, tmp1, tmp2); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/x86/gc/shenandoah/c1/shenandoahBarrierSetC1_x86.cpp --- a/src/hotspot/cpu/x86/gc/shenandoah/c1/shenandoahBarrierSetC1_x86.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/x86/gc/shenandoah/c1/shenandoahBarrierSetC1_x86.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Red Hat, Inc. All rights reserved. + * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as @@ -106,7 +106,7 @@ // Because we want a 2-arg form of xchg and xadd __ move(value_opr, result); - assert(type == T_INT || type == T_OBJECT || type == T_ARRAY LP64_ONLY( || type == T_LONG ), "unexpected type"); + assert(type == T_INT || is_reference_type(type) LP64_ONLY( || type == T_LONG ), "unexpected type"); __ xchg(access.resolved_addr(), result, result, LIR_OprFact::illegalOpr); if (access.is_oop()) { diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp --- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -49,7 +49,7 @@ bool dest_uninitialized = (decorators & IS_DEST_UNINITIALIZED) != 0; - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { if ((ShenandoahSATBBarrier && !dest_uninitialized) || ShenandoahLoadRefBarrier) { #ifdef _LP64 @@ -461,7 +461,7 @@ void ShenandoahBarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Register dst, Address src, Register tmp1, Register tmp_thread) { - bool on_oop = type == T_OBJECT || type == T_ARRAY; + bool on_oop = is_reference_type(type); bool on_weak = (decorators & ON_WEAK_OOP_REF) != 0; bool on_phantom = (decorators & ON_PHANTOM_OOP_REF) != 0; bool not_in_heap = (decorators & IN_NATIVE) != 0; @@ -497,7 +497,7 @@ void ShenandoahBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Address dst, Register val, Register tmp1, Register tmp2) { - bool on_oop = type == T_OBJECT || type == T_ARRAY; + bool on_oop = is_reference_type(type); bool in_heap = (decorators & IN_HEAP) != 0; bool as_normal = (decorators & AS_NORMAL) != 0; if (on_oop && in_heap) { diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp --- a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -198,7 +198,7 @@ BLOCK_COMMENT("ZBarrierSetAssembler::store_at {"); // Verify oop store - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { // Note that src could be noreg, which means we // are storing null and can skip verification. if (src != noreg) { diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp --- a/src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1416,8 +1416,7 @@ Register temp_reg = rbx; // not part of any compiled calling seq if (VerifyOops) { for (int i = 0; i < method->size_of_parameters(); i++) { - if (sig_bt[i] == T_OBJECT || - sig_bt[i] == T_ARRAY) { + if (is_reference_type(sig_bt[i])) { VMReg r = regs[i].first(); assert(r->is_valid(), "bad oop arg"); if (r->is_stack()) { @@ -2218,7 +2217,7 @@ __ reset_last_Java_frame(thread, false); // Unbox oop result, e.g. JNIHandles::resolve value. - if (ret_type == T_OBJECT || ret_type == T_ARRAY) { + if (is_reference_type(ret_type)) { __ resolve_jobject(rax /* value */, thread /* thread */, rcx /* tmp */); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp --- a/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1816,8 +1816,7 @@ Register temp_reg = rbx; // not part of any compiled calling seq if (VerifyOops) { for (int i = 0; i < method->size_of_parameters(); i++) { - if (sig_bt[i] == T_OBJECT || - sig_bt[i] == T_ARRAY) { + if (is_reference_type(sig_bt[i])) { VMReg r = regs[i].first(); assert(r->is_valid(), "bad oop arg"); if (r->is_stack()) { @@ -2717,7 +2716,7 @@ __ reset_last_Java_frame(false); // Unbox oop result, e.g. JNIHandles::resolve value. - if (ret_type == T_OBJECT || ret_type == T_ARRAY) { + if (is_reference_type(ret_type)) { __ resolve_jobject(rax /* value */, r15_thread /* thread */, rcx /* tmp */); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/c1/c1_GraphBuilder.cpp --- a/src/hotspot/share/c1/c1_GraphBuilder.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/c1/c1_GraphBuilder.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -3168,7 +3168,7 @@ ciType* type = sig->type_at(i); BasicType basic_type = type->basic_type(); // don't allow T_ARRAY to propagate into locals types - if (basic_type == T_ARRAY) basic_type = T_OBJECT; + if (is_reference_type(basic_type)) basic_type = T_OBJECT; ValueType* vt = as_ValueType(basic_type); state->store_local(idx, new Local(type, vt, idx, false)); idx += type->size(); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/c1/c1_LIRGenerator.cpp --- a/src/hotspot/share/c1/c1_LIRGenerator.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/c1/c1_LIRGenerator.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1546,7 +1546,7 @@ assert(x->is_pinned(),""); bool needs_range_check = x->compute_needs_range_check(); bool use_length = x->length() != NULL; - bool obj_store = x->elt_type() == T_ARRAY || x->elt_type() == T_OBJECT; + bool obj_store = is_reference_type(x->elt_type()); bool needs_store_check = obj_store && (x->value()->as_Constant() == NULL || !get_jobject_constant(x->value())->is_null_object() || x->should_profile()); @@ -2163,7 +2163,7 @@ if (type == T_BOOLEAN) { decorators |= C1_MASK_BOOLEAN; } - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { decorators |= ON_UNKNOWN_OOP_REF; } @@ -2190,7 +2190,7 @@ set_no_result(x); DecoratorSet decorators = IN_HEAP | C1_UNSAFE_ACCESS; - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { decorators |= ON_UNKNOWN_OOP_REF; } if (x->is_volatile()) { @@ -2207,7 +2207,7 @@ DecoratorSet decorators = IN_HEAP | C1_UNSAFE_ACCESS | MO_SEQ_CST; - if (type == T_ARRAY || type == T_OBJECT) { + if (is_reference_type(type)) { decorators |= ON_UNKNOWN_OOP_REF; } @@ -2600,7 +2600,7 @@ LIR_Opr src = args->at(i); assert(!src->is_illegal(), "check"); BasicType t = src->type(); - if (t == T_OBJECT || t == T_ARRAY) { + if (is_reference_type(t)) { intptr_t profiled_k = parameters->type(j); Local* local = x->state()->local_at(java_index)->as_Local(); ciKlass* exact = profile_type(md, md->byte_offset_of_slot(parameters_type_data, ParametersTypeData::type_offset(0)), diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/c1/c1_Optimizer.cpp --- a/src/hotspot/share/c1/c1_Optimizer.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/c1/c1_Optimizer.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -868,7 +868,7 @@ if (field->is_constant()) { ciConstant field_val = field->constant_value(); BasicType field_type = field_val.basic_type(); - if (field_type == T_OBJECT || field_type == T_ARRAY) { + if (is_reference_type(field_type)) { ciObject* obj_val = field_val.as_object(); if (!obj_val->is_null_object()) { if (PrintNullCheckElimination) { diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/ci/bcEscapeAnalyzer.cpp --- a/src/hotspot/share/ci/bcEscapeAnalyzer.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/ci/bcEscapeAnalyzer.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -859,7 +859,7 @@ if (s.cur_bc() != Bytecodes::_getstatic) { set_method_escape(state.apop()); } - if (field_type == T_OBJECT || field_type == T_ARRAY) { + if (is_reference_type(field_type)) { state.apush(unknown_obj); } else if (type2size[field_type] == 1) { state.spush(); @@ -873,7 +873,7 @@ { bool will_link; ciField* field = s.get_field(will_link); BasicType field_type = field->type()->basic_type(); - if (field_type == T_OBJECT || field_type == T_ARRAY) { + if (is_reference_type(field_type)) { set_global_escape(state.apop()); } else if (type2size[field_type] == 1) { state.spop(); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/ci/ciArray.cpp --- a/src/hotspot/share/ci/ciArray.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/ci/ciArray.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ // This class represents an arrayOop in the HotSpot virtual // machine. static BasicType fixup_element_type(BasicType bt) { - if (bt == T_ARRAY) return T_OBJECT; + if (is_reference_type(bt)) return T_OBJECT; if (bt == T_BOOLEAN) return T_BYTE; return bt; } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/ci/ciConstant.cpp --- a/src/hotspot/share/ci/ciConstant.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/ci/ciConstant.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -56,12 +56,12 @@ case T_DOUBLE: tty->print("%lf", _value._double); break; - case T_OBJECT: - case T_ARRAY: - _value._object->print(); - break; default: - tty->print("ILLEGAL"); + if (is_reference_type(basic_type())) { + _value._object->print(); + } else { + tty->print("ILLEGAL"); + } break; } tty->print(">"); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/ci/ciConstant.hpp --- a/src/hotspot/share/ci/ciConstant.hpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/ci/ciConstant.hpp Mon Sep 23 14:49:04 2019 -0400 @@ -106,7 +106,7 @@ return _value._double; } ciObject* as_object() const { - assert(basic_type() == T_OBJECT || basic_type() == T_ARRAY, "wrong type"); + assert(is_reference_type(basic_type()), "wrong type"); return _value._object; } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/ci/ciField.cpp --- a/src/hotspot/share/ci/ciField.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/ci/ciField.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -90,7 +90,7 @@ // If the field is a pointer type, get the klass of the // field. - if (field_type == T_OBJECT || field_type == T_ARRAY) { + if (is_reference_type(field_type)) { bool ignore; // This is not really a class reference; the index always refers to the // field's type signature, as a symbol. Linkage checks do not apply. @@ -199,7 +199,7 @@ // If the field is a pointer type, get the klass of the // field. - if (field_type == T_OBJECT || field_type == T_ARRAY) { + if (is_reference_type(field_type)) { _type = NULL; // must call compute_type on first access } else { _type = ciType::make(field_type); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/ci/ciMethod.cpp --- a/src/hotspot/share/ci/ciMethod.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/ci/ciMethod.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1454,8 +1454,8 @@ // ------------------------------------------------------------------ static BasicType erase_to_word_type(BasicType bt) { - if (is_subword_type(bt)) return T_INT; - if (bt == T_ARRAY) return T_OBJECT; + if (is_subword_type(bt)) return T_INT; + if (is_reference_type(bt)) return T_OBJECT; return bt; } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/ci/ciObjectFactory.cpp --- a/src/hotspot/share/ci/ciObjectFactory.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/ci/ciObjectFactory.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -149,7 +149,8 @@ for (int i = T_BOOLEAN; i <= T_CONFLICT; i++) { BasicType t = (BasicType)i; - if (type2name(t) != NULL && t != T_OBJECT && t != T_ARRAY && t != T_NARROWOOP && t != T_NARROWKLASS) { + if (type2name(t) != NULL && !is_reference_type(t) && + t != T_NARROWOOP && t != T_NARROWKLASS) { ciType::_basic_types[t] = new (_arena) ciType(t); init_ident_of(ciType::_basic_types[t]); } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/ci/ciType.cpp --- a/src/hotspot/share/ci/ciType.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/ci/ciType.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,8 +35,7 @@ // ciType // -// This class represents either a class (T_OBJECT), array (T_ARRAY), -// or one of the primitive types such as T_INT. +// This class represents a Java reference or primitive type. // ------------------------------------------------------------------ // ciType::ciType diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/ci/ciType.hpp --- a/src/hotspot/share/ci/ciType.hpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/ci/ciType.hpp Mon Sep 23 14:49:04 2019 -0400 @@ -29,8 +29,8 @@ // ciType // -// This class represents either a class (T_OBJECT), array (T_ARRAY), -// or one of the primitive types such as T_INT. +// This class represents a Java reference or primitive type. + class ciType : public ciMetadata { CI_PACKAGE_ACCESS friend class ciKlass; @@ -67,7 +67,7 @@ ciKlass* box_klass(); // Returns true if this is not a klass or array (i.e., not a reference type). - bool is_primitive_type() const { return basic_type() != T_OBJECT && basic_type() != T_ARRAY; } + bool is_primitive_type() const { return !is_reference_type(basic_type()); } int size() const { return type2size[basic_type()]; } bool is_void() const { return basic_type() == T_VOID; } bool is_one_word() const { return size() == 1; } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/ci/ciTypeFlow.cpp --- a/src/hotspot/share/ci/ciTypeFlow.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/ci/ciTypeFlow.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -729,7 +729,7 @@ outer()->record_failure("ldc did not link"); return; } - if (basic_type == T_OBJECT || basic_type == T_ARRAY) { + if (is_reference_type(basic_type)) { ciObject* obj = con.as_object(); if (obj->is_null_object()) { push_null(); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/classfile/bytecodeAssembler.cpp --- a/src/hotspot/share/classfile/bytecodeAssembler.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/classfile/bytecodeAssembler.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -187,9 +187,11 @@ case T_FLOAT: fload(index); break; case T_DOUBLE: dload(index); break; case T_LONG: lload(index); break; - case T_OBJECT: - case T_ARRAY: aload(index); break; default: + if (is_reference_type(bt)) { + aload(index); + break; + } ShouldNotReachHere(); } } @@ -254,10 +256,12 @@ case T_FLOAT: freturn(); break; case T_DOUBLE: dreturn(); break; case T_LONG: lreturn(); break; - case T_OBJECT: - case T_ARRAY: areturn(); break; case T_VOID: _return(); break; default: + if (is_reference_type(bt)) { + areturn(); + break; + } ShouldNotReachHere(); } } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/gc/shared/c1/barrierSetC1.hpp --- a/src/hotspot/share/gc/shared/c1/barrierSetC1.hpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/gc/shared/c1/barrierSetC1.hpp Mon Sep 23 14:49:04 2019 -0400 @@ -100,7 +100,7 @@ BasicType type() const { return _type; } LIR_Opr resolved_addr() const { return _resolved_addr; } void set_resolved_addr(LIR_Opr addr) { _resolved_addr = addr; } - bool is_oop() const { return _type == T_ARRAY || _type == T_OBJECT; } + bool is_oop() const { return is_reference_type(_type); } DecoratorSet decorators() const { return _decorators; } void clear_decorators(DecoratorSet ds) { _decorators &= ~ds; } bool is_raw() const { return (_decorators & AS_RAW) != 0; } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/gc/shared/c2/barrierSetC2.hpp --- a/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp Mon Sep 23 14:49:04 2019 -0400 @@ -120,7 +120,7 @@ Node* base() const { return _base; } C2AccessValuePtr& addr() const { return _addr; } BasicType type() const { return _type; } - bool is_oop() const { return _type == T_OBJECT || _type == T_ARRAY; } + bool is_oop() const { return is_reference_type(_type); } bool is_raw() const { return (_decorators & AS_RAW) != 0; } Node* raw_access() const { return _raw_access; } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.cpp --- a/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -187,6 +187,6 @@ } bool CardTableBarrierSetC2::array_copy_requires_gc_barriers(bool tightly_coupled_alloc, BasicType type, bool is_clone, ArrayCopyPhase phase) const { - bool is_oop = type == T_OBJECT || type == T_ARRAY; + bool is_oop = is_reference_type(type); return is_oop && (!tightly_coupled_alloc || !use_ReduceInitialCardMarks()); } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp --- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -754,7 +754,7 @@ } bool ShenandoahBarrierSetC2::array_copy_requires_gc_barriers(bool tightly_coupled_alloc, BasicType type, bool is_clone, ArrayCopyPhase phase) const { - bool is_oop = type == T_OBJECT || type == T_ARRAY; + bool is_oop = is_reference_type(type); if (!is_oop) { return false; } @@ -787,7 +787,7 @@ } } else if (src_type->isa_aryptr()) { BasicType src_elem = src_type->klass()->as_array_klass()->element_type()->basic_type(); - if (src_elem == T_OBJECT || src_elem == T_ARRAY) { + if (is_reference_type(src_elem)) { return true; } } else { diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp --- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -660,7 +660,7 @@ } bool ZBarrierSetC2::array_copy_requires_gc_barriers(bool tightly_coupled_alloc, BasicType type, bool is_clone, ArrayCopyPhase phase) const { - return type == T_OBJECT || type == T_ARRAY; + return is_reference_type(type); } bool ZBarrierSetC2::final_graph_reshaping(Compile* compile, Node* n, uint opcode) const { @@ -1367,7 +1367,7 @@ LoadStoreNode* lsn = n->as_LoadStore(); if (lsn->has_barrier()) { BasicType bt = lsn->in(MemNode::Address)->bottom_type()->basic_type(); - assert ((bt == T_OBJECT || bt == T_ARRAY), "Sanity test"); + assert (is_reference_type(bt), "Sanity test"); insert_barrier_before_unsafe(phase, lsn); } } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/gc/z/zBarrierSet.cpp --- a/src/hotspot/share/gc/z/zBarrierSet.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/gc/z/zBarrierSet.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -66,7 +66,7 @@ assert((decorators & AS_NO_KEEPALIVE) == 0, "Unexpected decorator"); //assert((decorators & ON_UNKNOWN_OOP_REF) == 0, "Unexpected decorator"); - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { assert((decorators & (IN_HEAP | IN_NATIVE)) != 0, "Where is reference?"); // Barrier needed even when IN_NATIVE, to allow concurrent scanning. return true; diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/interpreter/bytecodeTracer.cpp --- a/src/hotspot/share/interpreter/bytecodeTracer.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/interpreter/bytecodeTracer.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -449,7 +449,7 @@ case Bytecodes::_newarray: { BasicType atype = (BasicType)get_index_u1(); const char* str = type2name(atype); - if (str == NULL || atype == T_OBJECT || atype == T_ARRAY) { + if (str == NULL || is_reference_type(atype)) { assert(false, "Unidentified basic type"); } st->print_cr(" %s", str); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/jvmci/jvmciCompilerToVM.cpp --- a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1034,7 +1034,7 @@ if (jap.get_ret_type() == T_VOID) { return NULL; - } else if (jap.get_ret_type() == T_OBJECT || jap.get_ret_type() == T_ARRAY) { + } else if (is_reference_type(jap.get_ret_type())) { return JNIHandles::make_local((oop) result.get_jobject()); } else { jvalue *value = (jvalue *) result.get_value_addr(); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/memory/heapShared.cpp --- a/src/hotspot/share/memory/heapShared.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/memory/heapShared.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -583,7 +583,7 @@ for (JavaFieldStream fs(k); !fs.done(); fs.next()) { if (!fs.access_flags().is_static()) { BasicType ft = fs.field_descriptor().field_type(); - if (!fs.access_flags().is_final() && (ft == T_ARRAY || ft == T_OBJECT)) { + if (!fs.access_flags().is_final() && is_reference_type(ft)) { ResourceMark rm(THREAD); log_warning(cds, heap)( "Please check reference field in %s instance in closed archive heap region: %s %s", @@ -871,7 +871,7 @@ virtual void do_field(fieldDescriptor* fd) { if (fd->name() == _field_name) { assert(!_found, "fields cannot be overloaded"); - assert(fd->field_type() == T_OBJECT || fd->field_type() == T_ARRAY, "can archive only obj or array fields"); + assert(is_reference_type(fd->field_type()), "can archive only fields that are references"); _found = true; _offset = fd->offset(); } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/oops/method.hpp --- a/src/hotspot/share/oops/method.hpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/oops/method.hpp Mon Sep 23 14:49:04 2019 -0400 @@ -603,7 +603,7 @@ void compute_size_of_parameters(Thread *thread); // word size of parameters (receiver if any + arguments) Symbol* klass_name() const; // returns the name of the method holder BasicType result_type() const; // type of the method result - bool is_returning_oop() const { BasicType r = result_type(); return (r == T_OBJECT || r == T_ARRAY); } + bool is_returning_oop() const { BasicType r = result_type(); return is_reference_type(r); } bool is_returning_fp() const { BasicType r = result_type(); return (r == T_FLOAT || r == T_DOUBLE); } // Checked exceptions thrown by this method (resolved to mirrors) diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/oops/methodData.cpp --- a/src/hotspot/share/oops/methodData.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/oops/methodData.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -216,7 +216,7 @@ args_cell = TypeStackSlotEntries::compute_cell_count(inv.signature(), false, TypeProfileArgsLimit); } int ret_cell = 0; - if (MethodData::profile_return_for_invoke(m, bci) && (inv.result_type() == T_OBJECT || inv.result_type() == T_ARRAY)) { + if (MethodData::profile_return_for_invoke(m, bci) && is_reference_type(inv.result_type())) { ret_cell = ReturnTypeEntry::static_cell_count(); } int header_cell = 0; @@ -289,7 +289,7 @@ } if (has_return()) { - assert(inv.result_type() == T_OBJECT || inv.result_type() == T_ARRAY, "room for a ret type but doesn't return obj?"); + assert(is_reference_type(inv.result_type()), "room for a ret type but doesn't return obj?"); _ret.post_initialize(); } } @@ -310,7 +310,7 @@ } if (has_return()) { - assert(inv.result_type() == T_OBJECT || inv.result_type() == T_ARRAY, "room for a ret type but doesn't return obj?"); + assert(is_reference_type(inv.result_type()), "room for a ret type but doesn't return obj?"); _ret.post_initialize(); } } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/opto/arraycopynode.cpp --- a/src/hotspot/share/opto/arraycopynode.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/opto/arraycopynode.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -268,8 +268,8 @@ BasicType src_elem = ary_src->klass()->as_array_klass()->element_type()->basic_type(); BasicType dest_elem = ary_dest->klass()->as_array_klass()->element_type()->basic_type(); - if (src_elem == T_ARRAY) src_elem = T_OBJECT; - if (dest_elem == T_ARRAY) dest_elem = T_OBJECT; + if (is_reference_type(src_elem)) src_elem = T_OBJECT; + if (is_reference_type(dest_elem)) dest_elem = T_OBJECT; if (src_elem != dest_elem || dest_elem == T_VOID) { // We don't know if arguments are arrays of the same type @@ -328,7 +328,7 @@ assert(phase->type(src->in(AddPNode::Offset))->is_intptr_t()->get_con() == phase->type(dest->in(AddPNode::Offset))->is_intptr_t()->get_con(), "same start offset?"); BasicType elem = ary_src->klass()->as_array_klass()->element_type()->basic_type(); - if (elem == T_ARRAY) elem = T_OBJECT; + if (is_reference_type(elem)) elem = T_OBJECT; BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2(); if (bs->array_copy_requires_gc_barriers(true, elem, true, BarrierSetC2::Optimization)) { diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/opto/doCall.cpp --- a/src/hotspot/share/opto/doCall.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/opto/doCall.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -702,8 +702,8 @@ } else if (rt == T_INT || is_subword_type(rt)) { // Nothing. These cases are handled in lambda form bytecode. assert(ct == T_INT || is_subword_type(ct), "must match: rt=%s, ct=%s", type2name(rt), type2name(ct)); - } else if (rt == T_OBJECT || rt == T_ARRAY) { - assert(ct == T_OBJECT || ct == T_ARRAY, "rt=%s, ct=%s", type2name(rt), type2name(ct)); + } else if (is_reference_type(rt)) { + assert(is_reference_type(ct), "rt=%s, ct=%s", type2name(rt), type2name(ct)); if (ctype->is_loaded()) { const TypeOopPtr* arg_type = TypeOopPtr::make_from_klass(rtype->as_klass()); const Type* sig_type = TypeOopPtr::make_from_klass(ctype->as_klass()); @@ -750,7 +750,7 @@ set_bci(iter().cur_bci()); // put it back } BasicType ct = ctype->basic_type(); - if (ct == T_OBJECT || ct == T_ARRAY) { + if (is_reference_type(ct)) { record_profiled_return_for_speculation(); } } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/opto/escape.cpp --- a/src/hotspot/share/opto/escape.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/opto/escape.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -2113,7 +2113,8 @@ } } } - return (bt == T_OBJECT || bt == T_NARROWOOP || bt == T_ARRAY); + // Note: T_NARROWOOP is not classed as a real reference type + return (is_reference_type(bt) || bt == T_NARROWOOP); } // Returns unique pointed java object or NULL. diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/opto/graphKit.cpp --- a/src/hotspot/share/opto/graphKit.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/opto/graphKit.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -2276,7 +2276,7 @@ int skip = Bytecodes::has_receiver(bc) ? 1 : 0; for (int j = skip, i = 0; j < nargs && i < TypeProfileArgsLimit; j++) { const Type *targ = tf->domain()->field_at(j + TypeFunc::Parms); - if (targ->basic_type() == T_OBJECT || targ->basic_type() == T_ARRAY) { + if (is_reference_type(targ->basic_type())) { ProfilePtrKind ptr_kind = ProfileMaybeNull; ciKlass* better_type = NULL; if (method()->argument_profiled_type(bci(), i, better_type, ptr_kind)) { diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/opto/library_call.cpp --- a/src/hotspot/share/opto/library_call.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/opto/library_call.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -2382,7 +2382,7 @@ guarantee( is_store || kind != Release, "Release accesses can be produced only for stores"); assert(type != T_OBJECT || !unaligned, "unaligned access not supported with object type"); - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { decorators |= ON_UNKNOWN_OOP_REF; } @@ -2730,7 +2730,7 @@ Compile::AliasType* alias_type = C->alias_type(adr_type); BasicType bt = alias_type->basic_type(); if (bt != T_ILLEGAL && - ((bt == T_OBJECT || bt == T_ARRAY) != (type == T_OBJECT))) { + (is_reference_type(bt) != (type == T_OBJECT))) { // Don't intrinsify mismatched object accesses. return false; } @@ -2767,7 +2767,7 @@ int alias_idx = C->get_alias_index(adr_type); - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { decorators |= IN_HEAP | ON_UNKNOWN_OOP_REF; // Transformation of a value which could be NULL pointer (CastPP #NULL) @@ -4817,8 +4817,8 @@ if (has_src && has_dest && can_emit_guards) { BasicType src_elem = top_src->klass()->as_array_klass()->element_type()->basic_type(); BasicType dest_elem = top_dest->klass()->as_array_klass()->element_type()->basic_type(); - if (src_elem == T_ARRAY) src_elem = T_OBJECT; - if (dest_elem == T_ARRAY) dest_elem = T_OBJECT; + if (is_reference_type(src_elem)) src_elem = T_OBJECT; + if (is_reference_type(dest_elem)) dest_elem = T_OBJECT; if (src_elem == dest_elem && src_elem == T_OBJECT) { // If both arrays are object arrays then having the exact types diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/opto/macro.cpp --- a/src/hotspot/share/opto/macro.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/opto/macro.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -791,7 +791,7 @@ const Type *field_type; // The next code is taken from Parse::do_get_xxx(). - if (basic_elem_type == T_OBJECT || basic_elem_type == T_ARRAY) { + if (is_reference_type(basic_elem_type)) { if (!elem_type->is_loaded()) { field_type = TypeInstPtr::BOTTOM; } else if (field != NULL && field->is_static_constant()) { diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/opto/macroArrayCopy.cpp --- a/src/hotspot/share/opto/macroArrayCopy.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/opto/macroArrayCopy.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1149,8 +1149,8 @@ if (top_src != NULL && top_src->klass() != NULL) { src_elem = top_src->klass()->as_array_klass()->element_type()->basic_type(); } - if (src_elem == T_ARRAY) src_elem = T_OBJECT; - if (dest_elem == T_ARRAY) dest_elem = T_OBJECT; + if (is_reference_type(src_elem)) src_elem = T_OBJECT; + if (is_reference_type(dest_elem)) dest_elem = T_OBJECT; if (ac->is_arraycopy_validated() && dest_elem != T_CONFLICT && diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/opto/parse3.cpp --- a/src/hotspot/share/opto/parse3.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/opto/parse3.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -139,7 +139,7 @@ DecoratorSet decorators = IN_HEAP; decorators |= is_vol ? MO_SEQ_CST : MO_UNORDERED; - bool is_obj = bt == T_OBJECT || bt == T_ARRAY; + bool is_obj = is_reference_type(bt); if (is_obj) { if (!field->type()->is_loaded()) { @@ -210,7 +210,7 @@ DecoratorSet decorators = IN_HEAP; decorators |= is_vol ? MO_SEQ_CST : MO_UNORDERED; - bool is_obj = bt == T_OBJECT || bt == T_ARRAY; + bool is_obj = is_reference_type(bt); // Store the value. const Type* field_type; diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/opto/type.cpp --- a/src/hotspot/share/opto/type.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/opto/type.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -3004,15 +3004,13 @@ ciField* field = k->get_field_by_offset(_offset, true); assert(field != NULL, "missing field"); BasicType basic_elem_type = field->layout_type(); - _is_ptr_to_narrowoop = UseCompressedOops && (basic_elem_type == T_OBJECT || - basic_elem_type == T_ARRAY); + _is_ptr_to_narrowoop = UseCompressedOops && is_reference_type(basic_elem_type); } else { // Instance fields which contains a compressed oop references. field = ik->get_field_by_offset(_offset, false); if (field != NULL) { BasicType basic_elem_type = field->layout_type(); - _is_ptr_to_narrowoop = UseCompressedOops && (basic_elem_type == T_OBJECT || - basic_elem_type == T_ARRAY); + _is_ptr_to_narrowoop = UseCompressedOops && is_reference_type(basic_elem_type); } else if (klass()->equals(ciEnv::current()->Object_klass())) { // Compile::find_alias_type() cast exactness on all types to verify // that it does not affect alias type. diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/prims/jni.cpp --- a/src/hotspot/share/prims/jni.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/prims/jni.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1104,7 +1104,7 @@ JavaCalls::call(result, method, &java_args, CHECK); // Convert result - if (result->get_type() == T_OBJECT || result->get_type() == T_ARRAY) { + if (is_reference_type(result->get_type())) { result->set_jobject(JNIHandles::make_local(env, (oop) result->get_jobject())); } } @@ -1167,7 +1167,7 @@ JavaCalls::call(result, method, &java_args, CHECK); // Convert result - if (result->get_type() == T_OBJECT || result->get_type() == T_ARRAY) { + if (is_reference_type(result->get_type())) { result->set_jobject(JNIHandles::make_local(env, (oop) result->get_jobject())); } } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/prims/jvm.cpp --- a/src/hotspot/share/prims/jvm.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/prims/jvm.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -773,7 +773,7 @@ JVMWrapper("JVM_FindPrimitiveClass"); oop mirror = NULL; BasicType t = name2type(utf); - if (t != T_ILLEGAL && t != T_OBJECT && t != T_ARRAY) { + if (t != T_ILLEGAL && !is_reference_type(t)) { mirror = Universe::java_mirror(t); } if (mirror == NULL) { diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/prims/jvmtiExport.cpp --- a/src/hotspot/share/prims/jvmtiExport.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/prims/jvmtiExport.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -1589,7 +1589,7 @@ if (!exception_exit) { oop oop_result; BasicType type = current_frame.interpreter_frame_result(&oop_result, &value); - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { result = Handle(thread, oop_result); } } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/prims/methodHandles.cpp --- a/src/hotspot/share/prims/methodHandles.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/prims/methodHandles.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -573,7 +573,7 @@ if (is_subword_type(bt)) { bsig = vmSymbols::int_signature(); } else { - assert(bt == T_OBJECT || bt == T_ARRAY, "is_basic_type_signature was false"); + assert(is_reference_type(bt), "is_basic_type_signature was false"); bsig = vmSymbols::object_signature(); } } else { @@ -592,7 +592,7 @@ if (arg_pos == keep_arg_pos) { buffer.write((char*) ss.raw_bytes(), (int) ss.raw_length()); - } else if (bt == T_OBJECT || bt == T_ARRAY) { + } else if (is_reference_type(bt)) { buffer.write(OBJ_SIG, OBJ_SIG_LEN); } else { if (is_subword_type(bt)) diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/runtime/fieldDescriptor.cpp --- a/src/hotspot/share/runtime/fieldDescriptor.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/runtime/fieldDescriptor.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -212,7 +212,7 @@ // Print a hint as to the underlying integer representation. This can be wrong for // pointers on an LP64 machine #ifdef _LP64 - if ((ft == T_OBJECT || ft == T_ARRAY) && UseCompressedOops) { + if (is_reference_type(ft) && UseCompressedOops) { st->print(" (%x)", obj->int_field(offset())); } else // <- intended diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/runtime/frame.cpp --- a/src/hotspot/share/runtime/frame.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/runtime/frame.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -723,7 +723,7 @@ void set(int size, BasicType type) { _offset -= size; - if (type == T_OBJECT || type == T_ARRAY) oop_offset_do(); + if (is_reference_type(type)) oop_offset_do(); } void oop_offset_do() { @@ -776,7 +776,7 @@ void set(int size, BasicType type) { assert (_offset >= 0, "illegal offset"); - if (type == T_OBJECT || type == T_ARRAY) oop_at_offset_do(_offset); + if (is_reference_type(type)) oop_at_offset_do(_offset); _offset -= size; } @@ -927,7 +927,7 @@ VMRegPair* _regs; // VMReg list of arguments void set(int size, BasicType type) { - if (type == T_OBJECT || type == T_ARRAY) handle_oop_offset(); + if (is_reference_type(type)) handle_oop_offset(); _offset += size; } diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/runtime/javaCalls.cpp --- a/src/hotspot/share/runtime/javaCalls.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/runtime/javaCalls.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -390,7 +390,7 @@ // Figure out if the result value is an oop or not (Note: This is a different value // than result_type. result_type will be T_INT of oops. (it is about size) BasicType result_type = runtime_type_from(result); - bool oop_result_flag = (result->get_type() == T_OBJECT || result->get_type() == T_ARRAY); + bool oop_result_flag = is_reference_type(result->get_type()); // Find receiver Handle receiver = (!method->is_static()) ? args->receiver() : Handle(); @@ -619,7 +619,7 @@ guarantee(method->size_of_parameters() == size_of_parameters(), "wrong no. of arguments pushed"); // Treat T_OBJECT and T_ARRAY as the same - if (return_type == T_ARRAY) return_type = T_OBJECT; + if (is_reference_type(return_type)) return_type = T_OBJECT; // Check that oop information is correct Symbol* signature = method->signature(); diff -r e27564cd10e3 -r 08a5148e7c4e src/hotspot/share/runtime/reflection.cpp --- a/src/hotspot/share/runtime/reflection.cpp Mon Sep 23 14:39:11 2019 -0400 +++ b/src/hotspot/share/runtime/reflection.cpp Mon Sep 23 14:49:04 2019 -0400 @@ -92,7 +92,7 @@ if (type == T_VOID) { return NULL; } - if (type == T_OBJECT || type == T_ARRAY) { + if (is_reference_type(type)) { // regular objects are not boxed return (oop) value->l; } @@ -756,7 +756,7 @@ TRAPS) { - if (T_OBJECT == ss->type() || T_ARRAY == ss->type()) { + if (is_reference_type(ss->type())) { Symbol* name = ss->as_symbol(); oop loader = method->method_holder()->class_loader(); oop protection_domain = method->method_holder()->protection_domain();