< prev index next >


Print this page
@@ -138,10 +138,11 @@
    int                sp()       const { return _sp; }
    int                bci()      const { return _bci; }
    Bytecodes::Code    java_bc()  const;
    ciMethod*          method()   const { return _method; }
+   PartialEscapeAnalysis* PEA() const { return C->PEA(); }
    void set_jvms(JVMState* jvms)       { set_map(jvms->map());
                                          assert(jvms == this->jvms(), "sanity");
                                          _sp = jvms->sp();
                                          _bci = jvms->bci();
                                          _method = jvms->has_method() ? jvms->method() : nullptr; }

@@ -829,11 +830,12 @@
    int next_monitor();
    Node* insert_mem_bar(int opcode, Node* precedent = nullptr);
    Node* insert_mem_bar_volatile(int opcode, int alias_idx, Node* precedent = nullptr);
    // Optional 'precedent' is appended as an extra edge, to force ordering.
    FastLockNode* shared_lock(Node* obj);
-   void shared_unlock(Node* box, Node* obj);
+   void shared_unlock(Node* box, Node* obj, bool preserve_monitor = false);
+   void clone_shared_lock(Node* box, Node* obj);
    // helper functions for the fast path/slow path idioms
    Node* fast_and_slow(Node* in, const Type *result_type, Node* null_result, IfNode* fast_test, Node* fast_result, address slow_call, const TypeFunc *slow_call_type, Node* slow_arg, Klass* ex_klass, Node* slow_result);
    // Generate an instance-of idiom.  Used by both the instance-of bytecode

@@ -855,14 +857,21 @@
    // Inexact type check used for predicted calls.
    Node* subtype_check_receiver(Node* receiver, ciKlass* klass,
                                 Node** casted_receiver);
+   Node* set_output_for_allocation_common(AllocateNode* alloc,
+                                   const TypeOopPtr* oop_type,
+                                   bool deoptimize_on_exception);
    // implementation of object creation
    Node* set_output_for_allocation(AllocateNode* alloc,
                                    const TypeOopPtr* oop_type,
                                    bool deoptimize_on_exception=false);
+   Node* materialize_object(AllocateNode* alloc, const TypeOopPtr* oop_type);
    Node* get_layout_helper(Node* klass_node, jint& constant_value);
    Node* new_instance(Node* klass_node,
                       Node* slow_test = nullptr,
                       Node* *return_size_val = nullptr,
                       bool deoptimize_on_exception = false);

@@ -905,10 +914,11 @@
    // Vector API support (implemented in vectorIntrinsics.cpp)
    Node* box_vector(Node* in, const TypeInstPtr* vbox_type, BasicType elem_bt, int num_elem, bool deoptimize_on_exception = false);
    Node* unbox_vector(Node* in, const TypeInstPtr* vbox_type, BasicType elem_bt, int num_elem, bool shuffle_to_vector = false);
    Node* vector_shift_count(Node* cnt, int shift_op, BasicType bt, int num_elem);
+   void backfill_materialized(SafePointNode* map, uint begin, uint end, PEAState& as);
  // Helper class to support building of control flow branches. Upon
  // creation the map and sp at bci are cloned and restored upon de-
  // struction. Typical use:
< prev index next >