hotspot/src/share/vm/opto/arraycopynode.cpp
changeset 42086 feac795f345d
parent 40365 3791c1b34e36
child 44322 051426f34a5e
equal deleted inserted replaced
42085:b23a10ed6a60 42086:feac795f345d
    24 
    24 
    25 #include "precompiled.hpp"
    25 #include "precompiled.hpp"
    26 #include "opto/arraycopynode.hpp"
    26 #include "opto/arraycopynode.hpp"
    27 #include "opto/graphKit.hpp"
    27 #include "opto/graphKit.hpp"
    28 
    28 
    29 ArrayCopyNode::ArrayCopyNode(Compile* C, bool alloc_tightly_coupled)
    29 ArrayCopyNode::ArrayCopyNode(Compile* C, bool alloc_tightly_coupled, bool has_negative_length_guard)
    30   : CallNode(arraycopy_type(), NULL, TypeRawPtr::BOTTOM),
    30   : CallNode(arraycopy_type(), NULL, TypeRawPtr::BOTTOM),
    31     _alloc_tightly_coupled(alloc_tightly_coupled),
    31     _alloc_tightly_coupled(alloc_tightly_coupled),
       
    32     _has_negative_length_guard(has_negative_length_guard),
    32     _kind(None),
    33     _kind(None),
    33     _arguments_validated(false),
    34     _arguments_validated(false),
    34     _src_type(TypeOopPtr::BOTTOM),
    35     _src_type(TypeOopPtr::BOTTOM),
    35     _dest_type(TypeOopPtr::BOTTOM) {
    36     _dest_type(TypeOopPtr::BOTTOM) {
    36   init_class_id(Class_ArrayCopy);
    37   init_class_id(Class_ArrayCopy);
    43 ArrayCopyNode* ArrayCopyNode::make(GraphKit* kit, bool may_throw,
    44 ArrayCopyNode* ArrayCopyNode::make(GraphKit* kit, bool may_throw,
    44                                    Node* src, Node* src_offset,
    45                                    Node* src, Node* src_offset,
    45                                    Node* dest, Node* dest_offset,
    46                                    Node* dest, Node* dest_offset,
    46                                    Node* length,
    47                                    Node* length,
    47                                    bool alloc_tightly_coupled,
    48                                    bool alloc_tightly_coupled,
       
    49                                    bool has_negative_length_guard,
    48                                    Node* src_klass, Node* dest_klass,
    50                                    Node* src_klass, Node* dest_klass,
    49                                    Node* src_length, Node* dest_length) {
    51                                    Node* src_length, Node* dest_length) {
    50 
    52 
    51   ArrayCopyNode* ac = new ArrayCopyNode(kit->C, alloc_tightly_coupled);
    53   ArrayCopyNode* ac = new ArrayCopyNode(kit->C, alloc_tightly_coupled, has_negative_length_guard);
    52   Node* prev_mem = kit->set_predefined_input_for_runtime_call(ac);
    54   Node* prev_mem = kit->set_predefined_input_for_runtime_call(ac);
    53 
    55 
    54   ac->init_req(ArrayCopyNode::Src, src);
    56   ac->init_req(ArrayCopyNode::Src, src);
    55   ac->init_req(ArrayCopyNode::SrcPos, src_offset);
    57   ac->init_req(ArrayCopyNode::SrcPos, src_offset);
    56   ac->init_req(ArrayCopyNode::Dest, dest);
    58   ac->init_req(ArrayCopyNode::Dest, dest);