136 Node* src_klass = NULL, Node* dest_klass = NULL,
137 Node* src_length = NULL, Node* dest_length = NULL);
138
139 void connect_outputs(GraphKit* kit);
140
141 bool is_arraycopy() const { assert(_kind != None, "should bet set"); return _kind == ArrayCopy; }
142 bool is_arraycopy_validated() const { assert(_kind != None, "should bet set"); return _kind == ArrayCopy && _arguments_validated; }
143 bool is_clonebasic() const { assert(_kind != None, "should bet set"); return _kind == CloneBasic; }
144 bool is_cloneoop() const { assert(_kind != None, "should bet set"); return _kind == CloneOop; }
145 bool is_copyof() const { assert(_kind != None, "should bet set"); return _kind == CopyOf; }
146 bool is_copyof_validated() const { assert(_kind != None, "should bet set"); return _kind == CopyOf && _arguments_validated; }
147 bool is_copyofrange() const { assert(_kind != None, "should bet set"); return _kind == CopyOfRange; }
148 bool is_copyofrange_validated() const { assert(_kind != None, "should bet set"); return _kind == CopyOfRange && _arguments_validated; }
149
150 void set_arraycopy(bool validated) { assert(_kind == None, "shouldn't bet set yet"); _kind = ArrayCopy; _arguments_validated = validated; }
151 void set_clonebasic() { assert(_kind == None, "shouldn't bet set yet"); _kind = CloneBasic; }
152 void set_cloneoop() { assert(_kind == None, "shouldn't bet set yet"); _kind = CloneOop; }
153 void set_copyof(bool validated) { assert(_kind == None, "shouldn't bet set yet"); _kind = CopyOf; _arguments_validated = validated; }
154 void set_copyofrange(bool validated) { assert(_kind == None, "shouldn't bet set yet"); _kind = CopyOfRange; _arguments_validated = validated; }
155
156 virtual int Opcode() const;
157 virtual uint size_of() const; // Size is bigger
158 virtual bool guaranteed_safepoint() { return false; }
159 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
160
161 virtual bool may_modify(const TypeOopPtr *t_oop, PhaseTransform *phase);
162
163 bool is_alloc_tightly_coupled() const { return _alloc_tightly_coupled; }
164
165 static bool may_modify(const TypeOopPtr *t_oop, MemBarNode* mb, PhaseTransform *phase, ArrayCopyNode*& ac);
166 bool modifies(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase, bool must_modify);
167
168 #ifndef PRODUCT
169 virtual void dump_spec(outputStream *st) const;
170 virtual void dump_compact_spec(outputStream* st) const;
171 #endif
172 };
173 #endif // SHARE_VM_OPTO_ARRAYCOPYNODE_HPP
|
136 Node* src_klass = NULL, Node* dest_klass = NULL,
137 Node* src_length = NULL, Node* dest_length = NULL);
138
139 void connect_outputs(GraphKit* kit);
140
141 bool is_arraycopy() const { assert(_kind != None, "should bet set"); return _kind == ArrayCopy; }
142 bool is_arraycopy_validated() const { assert(_kind != None, "should bet set"); return _kind == ArrayCopy && _arguments_validated; }
143 bool is_clonebasic() const { assert(_kind != None, "should bet set"); return _kind == CloneBasic; }
144 bool is_cloneoop() const { assert(_kind != None, "should bet set"); return _kind == CloneOop; }
145 bool is_copyof() const { assert(_kind != None, "should bet set"); return _kind == CopyOf; }
146 bool is_copyof_validated() const { assert(_kind != None, "should bet set"); return _kind == CopyOf && _arguments_validated; }
147 bool is_copyofrange() const { assert(_kind != None, "should bet set"); return _kind == CopyOfRange; }
148 bool is_copyofrange_validated() const { assert(_kind != None, "should bet set"); return _kind == CopyOfRange && _arguments_validated; }
149
150 void set_arraycopy(bool validated) { assert(_kind == None, "shouldn't bet set yet"); _kind = ArrayCopy; _arguments_validated = validated; }
151 void set_clonebasic() { assert(_kind == None, "shouldn't bet set yet"); _kind = CloneBasic; }
152 void set_cloneoop() { assert(_kind == None, "shouldn't bet set yet"); _kind = CloneOop; }
153 void set_copyof(bool validated) { assert(_kind == None, "shouldn't bet set yet"); _kind = CopyOf; _arguments_validated = validated; }
154 void set_copyofrange(bool validated) { assert(_kind == None, "shouldn't bet set yet"); _kind = CopyOfRange; _arguments_validated = validated; }
155
156 virtual Opcodes Opcode() const;
157 virtual uint size_of() const; // Size is bigger
158 virtual bool guaranteed_safepoint() { return false; }
159 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
160
161 virtual bool may_modify(const TypeOopPtr *t_oop, PhaseTransform *phase);
162
163 bool is_alloc_tightly_coupled() const { return _alloc_tightly_coupled; }
164
165 static bool may_modify(const TypeOopPtr *t_oop, MemBarNode* mb, PhaseTransform *phase, ArrayCopyNode*& ac);
166 bool modifies(intptr_t offset_lo, intptr_t offset_hi, PhaseTransform* phase, bool must_modify);
167
168 #ifndef PRODUCT
169 virtual void dump_spec(outputStream *st) const;
170 virtual void dump_compact_spec(outputStream* st) const;
171 #endif
172 };
173 #endif // SHARE_VM_OPTO_ARRAYCOPYNODE_HPP
|