< prev index next >

src/hotspot/share/opto/callnode.hpp

Print this page




 973 
 974   // Return true if allocation doesn't escape thread, its escape state
 975   // needs be noEscape or ArgEscape. InitializeNode._does_not_escape
 976   // is true when its allocation's escape state is noEscape or
 977   // ArgEscape. In case allocation's InitializeNode is NULL, check
 978   // AlllocateNode._is_non_escaping flag.
 979   // AlllocateNode._is_non_escaping is true when its escape state is
 980   // noEscape.
 981   bool does_not_escape_thread() {
 982     InitializeNode* init = NULL;
 983     return _is_non_escaping || (((init = initialization()) != NULL) && init->does_not_escape());
 984   }
 985 
 986   // If object doesn't escape in <.init> method and there is memory barrier
 987   // inserted at exit of its <.init>, memory barrier for new is not necessary.
 988   // Inovke this method when MemBar at exit of initializer and post-dominate
 989   // allocation node.
 990   void compute_MemBar_redundancy(ciMethod* initializer);
 991   bool is_allocation_MemBar_redundant() { return _is_allocation_MemBar_redundant; }
 992 
 993   Node* make_ideal_mark(PhaseGVN *phase, Node* obj, Node* control, Node* mem);
 994 };
 995 
 996 //------------------------------AllocateArray---------------------------------
 997 //
 998 // High-level array allocation
 999 //
1000 class AllocateArrayNode : public AllocateNode {
1001 public:
1002   AllocateArrayNode(Compile* C, const TypeFunc *atype, Node *ctrl, Node *mem, Node *abio,
1003                     Node* size, Node* klass_node, Node* initial_test,
1004                     Node* count_val, Node* default_value, Node* raw_default_value, Node* storage_properties)
1005     : AllocateNode(C, atype, ctrl, mem, abio, size, klass_node, initial_test)
1006   {
1007     init_class_id(Class_AllocateArray);
1008     set_req(AllocateNode::ALength,        count_val);
1009     init_req(AllocateNode::DefaultValue,  default_value);
1010     init_req(AllocateNode::RawDefaultValue, raw_default_value);
1011     init_req(AllocateNode::StorageProperties, storage_properties);
1012   }
1013   virtual int Opcode() const;




 973 
 974   // Return true if allocation doesn't escape thread, its escape state
 975   // needs be noEscape or ArgEscape. InitializeNode._does_not_escape
 976   // is true when its allocation's escape state is noEscape or
 977   // ArgEscape. In case allocation's InitializeNode is NULL, check
 978   // AlllocateNode._is_non_escaping flag.
 979   // AlllocateNode._is_non_escaping is true when its escape state is
 980   // noEscape.
 981   bool does_not_escape_thread() {
 982     InitializeNode* init = NULL;
 983     return _is_non_escaping || (((init = initialization()) != NULL) && init->does_not_escape());
 984   }
 985 
 986   // If object doesn't escape in <.init> method and there is memory barrier
 987   // inserted at exit of its <.init>, memory barrier for new is not necessary.
 988   // Inovke this method when MemBar at exit of initializer and post-dominate
 989   // allocation node.
 990   void compute_MemBar_redundancy(ciMethod* initializer);
 991   bool is_allocation_MemBar_redundant() { return _is_allocation_MemBar_redundant; }
 992 
 993   Node* make_ideal_mark(PhaseGVN* phase, Node* control, Node* mem);
 994 };
 995 
 996 //------------------------------AllocateArray---------------------------------
 997 //
 998 // High-level array allocation
 999 //
1000 class AllocateArrayNode : public AllocateNode {
1001 public:
1002   AllocateArrayNode(Compile* C, const TypeFunc *atype, Node *ctrl, Node *mem, Node *abio,
1003                     Node* size, Node* klass_node, Node* initial_test,
1004                     Node* count_val, Node* default_value, Node* raw_default_value, Node* storage_properties)
1005     : AllocateNode(C, atype, ctrl, mem, abio, size, klass_node, initial_test)
1006   {
1007     init_class_id(Class_AllocateArray);
1008     set_req(AllocateNode::ALength,        count_val);
1009     init_req(AllocateNode::DefaultValue,  default_value);
1010     init_req(AllocateNode::RawDefaultValue, raw_default_value);
1011     init_req(AllocateNode::StorageProperties, storage_properties);
1012   }
1013   virtual int Opcode() const;


< prev index next >