< 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 >