src/hotspot/share/opto/doCall.cpp
changeset 58273 08a5148e7c4e
parent 57996 bf3fb5465543
child 58679 9c3209ff7550
equal deleted inserted replaced
58272:e27564cd10e3 58273:08a5148e7c4e
     1 /*
     1 /*
     2  * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
   700           // The Java code knows this, at VerifyType.isNullConversion.
   700           // The Java code knows this, at VerifyType.isNullConversion.
   701           pop_node(rt);  // whatever it was, pop it
   701           pop_node(rt);  // whatever it was, pop it
   702         } else if (rt == T_INT || is_subword_type(rt)) {
   702         } else if (rt == T_INT || is_subword_type(rt)) {
   703           // Nothing.  These cases are handled in lambda form bytecode.
   703           // Nothing.  These cases are handled in lambda form bytecode.
   704           assert(ct == T_INT || is_subword_type(ct), "must match: rt=%s, ct=%s", type2name(rt), type2name(ct));
   704           assert(ct == T_INT || is_subword_type(ct), "must match: rt=%s, ct=%s", type2name(rt), type2name(ct));
   705         } else if (rt == T_OBJECT || rt == T_ARRAY) {
   705         } else if (is_reference_type(rt)) {
   706           assert(ct == T_OBJECT || ct == T_ARRAY, "rt=%s, ct=%s", type2name(rt), type2name(ct));
   706           assert(is_reference_type(ct), "rt=%s, ct=%s", type2name(rt), type2name(ct));
   707           if (ctype->is_loaded()) {
   707           if (ctype->is_loaded()) {
   708             const TypeOopPtr* arg_type = TypeOopPtr::make_from_klass(rtype->as_klass());
   708             const TypeOopPtr* arg_type = TypeOopPtr::make_from_klass(rtype->as_klass());
   709             const Type*       sig_type = TypeOopPtr::make_from_klass(ctype->as_klass());
   709             const Type*       sig_type = TypeOopPtr::make_from_klass(ctype->as_klass());
   710             if (arg_type != NULL && !arg_type->higher_equal(sig_type)) {
   710             if (arg_type != NULL && !arg_type->higher_equal(sig_type)) {
   711               Node* retnode = pop();
   711               Node* retnode = pop();
   748       set_bci(iter().next_bci());
   748       set_bci(iter().next_bci());
   749       null_assert(peek());
   749       null_assert(peek());
   750       set_bci(iter().cur_bci()); // put it back
   750       set_bci(iter().cur_bci()); // put it back
   751     }
   751     }
   752     BasicType ct = ctype->basic_type();
   752     BasicType ct = ctype->basic_type();
   753     if (ct == T_OBJECT || ct == T_ARRAY) {
   753     if (is_reference_type(ct)) {
   754       record_profiled_return_for_speculation();
   754       record_profiled_return_for_speculation();
   755     }
   755     }
   756   }
   756   }
   757 
   757 
   758   // Restart record of parsing work after possible inlining of call
   758   // Restart record of parsing work after possible inlining of call