< prev index next > src/hotspot/share/opto/graphKit.hpp
Print this page
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; }
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);
// 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
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, 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
// 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);
// 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 >