812 // Helper functions to build synchronizations
813 int next_monitor();
814 Node* insert_mem_bar(int opcode, Node* precedent = NULL);
815 Node* insert_mem_bar_volatile(int opcode, int alias_idx, Node* precedent = NULL);
816 // Optional 'precedent' is appended as an extra edge, to force ordering.
817 FastLockNode* shared_lock(Node* obj);
818 void shared_unlock(Node* box, Node* obj);
819
820 // helper functions for the fast path/slow path idioms
821 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);
822
823 // Generate an instance-of idiom. Used by both the instance-of bytecode
824 // and the reflective instance-of call.
825 Node* gen_instanceof(Node *subobj, Node* superkls, bool safe_for_replace = false);
826
827 // Generate a check-cast idiom. Used by both the check-cast bytecode
828 // and the array-store bytecode
829 Node* gen_checkcast( Node *subobj, Node* superkls,
830 Node* *failure_control = NULL );
831
832 // Generate a subtyping check. Takes as input the subtype and supertype.
833 // Returns 2 values: sets the default control() to the true path and
834 // returns the false path. Only reads from constant memory taken from the
835 // default memory; does not write anything. It also doesn't take in an
836 // Object; if you wish to check an Object you need to load the Object's
837 // class prior to coming here.
838 Node* gen_subtype_check(Node* subklass, Node* superklass);
839
840 // Static parse-time type checking logic for gen_subtype_check:
841 enum { SSC_always_false, SSC_always_true, SSC_easy_test, SSC_full_test };
842 int static_subtype_check(ciKlass* superk, ciKlass* subk);
843
844 // Exact type check used for predicted calls and casts.
845 // Rewrites (*casted_receiver) to be casted to the stronger type.
846 // (Caller is responsible for doing replace_in_map.)
847 Node* type_check_receiver(Node* receiver, ciKlass* klass, float prob,
848 Node* *casted_receiver);
849
850 // implementation of object creation
851 Node* set_output_for_allocation(AllocateNode* alloc,
852 const TypeOopPtr* oop_type,
853 bool deoptimize_on_exception=false);
854 Node* get_layout_helper(Node* klass_node, jint& constant_value);
855 Node* new_instance(Node* klass_node,
856 Node* slow_test = NULL,
857 Node* *return_size_val = NULL,
858 bool deoptimize_on_exception = false);
859 Node* new_array(Node* klass_node, Node* count_val, int nargs,
860 Node* *return_size_val = NULL,
861 bool deoptimize_on_exception = false);
862
|
812 // Helper functions to build synchronizations
813 int next_monitor();
814 Node* insert_mem_bar(int opcode, Node* precedent = NULL);
815 Node* insert_mem_bar_volatile(int opcode, int alias_idx, Node* precedent = NULL);
816 // Optional 'precedent' is appended as an extra edge, to force ordering.
817 FastLockNode* shared_lock(Node* obj);
818 void shared_unlock(Node* box, Node* obj);
819
820 // helper functions for the fast path/slow path idioms
821 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);
822
823 // Generate an instance-of idiom. Used by both the instance-of bytecode
824 // and the reflective instance-of call.
825 Node* gen_instanceof(Node *subobj, Node* superkls, bool safe_for_replace = false);
826
827 // Generate a check-cast idiom. Used by both the check-cast bytecode
828 // and the array-store bytecode
829 Node* gen_checkcast( Node *subobj, Node* superkls,
830 Node* *failure_control = NULL );
831
832 Node* gen_subtype_check(Node* subklass, Node* superklass) {
833 MergeMemNode* mem = merged_memory();
834 Node* ctrl = control();
835 Node* n = Phase::gen_subtype_check(subklass, superklass, &ctrl, mem, &_gvn);
836 set_control(ctrl);
837 return n;
838 }
839
840 // Exact type check used for predicted calls and casts.
841 // Rewrites (*casted_receiver) to be casted to the stronger type.
842 // (Caller is responsible for doing replace_in_map.)
843 Node* type_check_receiver(Node* receiver, ciKlass* klass, float prob,
844 Node* *casted_receiver);
845
846 // implementation of object creation
847 Node* set_output_for_allocation(AllocateNode* alloc,
848 const TypeOopPtr* oop_type,
849 bool deoptimize_on_exception=false);
850 Node* get_layout_helper(Node* klass_node, jint& constant_value);
851 Node* new_instance(Node* klass_node,
852 Node* slow_test = NULL,
853 Node* *return_size_val = NULL,
854 bool deoptimize_on_exception = false);
855 Node* new_array(Node* klass_node, Node* count_val, int nargs,
856 Node* *return_size_val = NULL,
857 bool deoptimize_on_exception = false);
858
|