< prev index next >
src/hotspot/share/opto/callnode.hpp
Print this page
rev 60137 : 8227745: Enable Escape Analysis for Better Performance in the Presence of JVMTI Agents
Reviewed-by: mdoerr, goetz
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -329,19 +329,21 @@
// A plain safepoint advertises no memory effects (NULL):
const TypePtr* adr_type = NULL)
: MultiNode( edges ),
_oop_map(NULL),
_jvms(jvms),
- _adr_type(adr_type)
+ _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,10 +461,16 @@
_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,18 +667,20 @@
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), _bci(bci)
+ _method(method),
+ _arg_escape(false), _bci(bci)
{
init_class_id(Class_CallJava);
}
virtual int Opcode() const;
@@ -680,10 +690,12 @@
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 >