equal
deleted
inserted
replaced
21 * questions. |
21 * questions. |
22 * |
22 * |
23 */ |
23 */ |
24 |
24 |
25 #include "precompiled.hpp" |
25 #include "precompiled.hpp" |
|
26 #include "opto/arraycopynode.hpp" |
26 #include "oops/objArrayKlass.hpp" |
27 #include "oops/objArrayKlass.hpp" |
27 #include "opto/convertnode.hpp" |
28 #include "opto/convertnode.hpp" |
28 #include "opto/graphKit.hpp" |
29 #include "opto/graphKit.hpp" |
29 #include "opto/macro.hpp" |
30 #include "opto/macro.hpp" |
30 #include "opto/runtime.hpp" |
31 #include "opto/runtime.hpp" |
517 // are correct at the source level. |
518 // are correct at the source level. |
518 // |
519 // |
519 // Test S[] against D[], not S against D, because (probably) |
520 // Test S[] against D[], not S against D, because (probably) |
520 // the secondary supertype cache is less busy for S[] than S. |
521 // the secondary supertype cache is less busy for S[] than S. |
521 // This usually only matters when D is an interface. |
522 // This usually only matters when D is an interface. |
522 Node* not_subtype_ctrl = ac->is_arraycopy_validated() ? top() : |
523 Node* not_subtype_ctrl = (ac->is_arraycopy_validated() || ac->is_copyof_validated() || ac->is_copyofrange_validated()) ? top() : |
523 Phase::gen_subtype_check(src_klass, dest_klass, ctrl, mem, &_igvn); |
524 Phase::gen_subtype_check(src_klass, dest_klass, ctrl, mem, &_igvn); |
524 // Plug failing path into checked_oop_disjoint_arraycopy |
525 // Plug failing path into checked_oop_disjoint_arraycopy |
525 if (not_subtype_ctrl != top()) { |
526 if (not_subtype_ctrl != top()) { |
526 Node* local_ctrl = not_subtype_ctrl; |
527 Node* local_ctrl = not_subtype_ctrl; |
527 MergeMemNode* local_mem = MergeMemNode::make(mem); |
528 MergeMemNode* local_mem = MergeMemNode::make(mem); |