< prev index next >
src/hotspot/share/opto/callnode.hpp
Print this page
rev 56101 : 8227745: Enable Escape Analysis for better performance when debugging
Reviewed-by: ???
*** 329,347 ****
// A plain safepoint advertises no memory effects (NULL):
const TypePtr* adr_type = NULL)
: MultiNode( edges ),
_oop_map(NULL),
_jvms(jvms),
! _adr_type(adr_type)
{
init_class_id(Class_SafePoint);
}
OopMap* _oop_map; // Array of OopMap info (8-bit char) for GC
JVMState* const _jvms; // Pointer to list of JVM State objects
const TypePtr* _adr_type; // What type of memory does this node produce?
ReplacedNodes _replaced_nodes; // During parsing: list of pair of nodes from calls to GraphKit::replace_in_map()
// Many calls take *all* of memory as input,
// but some produce a limited subset of that memory as output.
// The adr_type reports the call's behavior as a store, not a load.
--- 329,349 ----
// A plain safepoint advertises no memory effects (NULL):
const TypePtr* adr_type = NULL)
: MultiNode( edges ),
_oop_map(NULL),
_jvms(jvms),
! _adr_type(adr_type),
! _not_global_escape_in_scope(false)
{
init_class_id(Class_SafePoint);
}
OopMap* _oop_map; // Array of OopMap info (8-bit char) for GC
JVMState* const _jvms; // Pointer to list of JVM State objects
const TypePtr* _adr_type; // What type of memory does this node produce?
ReplacedNodes _replaced_nodes; // During parsing: list of pair of nodes from calls to GraphKit::replace_in_map()
+ bool _not_global_escape_in_scope; // NoEscape or ArgEscape objects in JVM States
// Many calls take *all* of memory as input,
// but some produce a limited subset of that memory as output.
// The adr_type reports the call's behavior as a store, not a load.
*** 459,468 ****
--- 461,476 ----
_replaced_nodes.merge_with(sfpt->_replaced_nodes);
}
bool has_replaced_nodes() const {
return !_replaced_nodes.is_empty();
}
+ void set_not_global_escape_in_scope(bool b) {
+ _not_global_escape_in_scope = b;
+ }
+ bool not_global_escape_in_scope() const {
+ return _not_global_escape_in_scope;
+ }
void disconnect_from_root(PhaseIterGVN *igvn);
// Standard Node stuff
virtual int Opcode() const;
*** 659,676 ****
bool _optimized_virtual;
bool _method_handle_invoke;
bool _override_symbolic_info; // Override symbolic call site info from bytecode
ciMethod* _method; // Method being direct called
public:
const int _bci; // Byte Code Index of call byte code
CallJavaNode(const TypeFunc* tf , address addr, ciMethod* method, int bci)
: CallNode(tf, addr, TypePtr::BOTTOM),
_optimized_virtual(false),
_method_handle_invoke(false),
_override_symbolic_info(false),
! _method(method), _bci(bci)
{
init_class_id(Class_CallJava);
}
virtual int Opcode() const;
--- 667,686 ----
bool _optimized_virtual;
bool _method_handle_invoke;
bool _override_symbolic_info; // Override symbolic call site info from bytecode
ciMethod* _method; // Method being direct called
+ bool _arg_escape; // ArgEscape in parameter list
public:
const int _bci; // Byte Code Index of call byte code
CallJavaNode(const TypeFunc* tf , address addr, ciMethod* method, int bci)
: CallNode(tf, addr, TypePtr::BOTTOM),
_optimized_virtual(false),
_method_handle_invoke(false),
_override_symbolic_info(false),
! _method(method),
! _arg_escape(false), _bci(bci)
{
init_class_id(Class_CallJava);
}
virtual int Opcode() const;
*** 680,689 ****
--- 690,701 ----
bool is_optimized_virtual() const { return _optimized_virtual; }
void set_method_handle_invoke(bool f) { _method_handle_invoke = f; }
bool is_method_handle_invoke() const { return _method_handle_invoke; }
void set_override_symbolic_info(bool f) { _override_symbolic_info = f; }
bool override_symbolic_info() const { return _override_symbolic_info; }
+ void set_arg_escape(bool f) { _arg_escape = f; }
+ bool arg_escape() const { return _arg_escape; }
DEBUG_ONLY( bool validate_symbolic_info() const; )
#ifndef PRODUCT
virtual void dump_spec(outputStream *st) const;
< prev index next >