794 Node* parm4 = NULL, Node* parm5 = NULL,
795 Node* parm6 = NULL, Node* parm7 = NULL);
796 enum { // flag values for make_runtime_call
797 RC_NO_FP = 1, // CallLeafNoFPNode
798 RC_NO_IO = 2, // do not hook IO edges
799 RC_NO_LEAF = 4, // CallStaticJavaNode
800 RC_MUST_THROW = 8, // flag passed to add_safepoint_edges
801 RC_NARROW_MEM = 16, // input memory is same as output
802 RC_UNCOMMON = 32, // freq. expected to be like uncommon trap
803 RC_LEAF = 0 // null value: no flags set
804 };
805
806 // merge in all memory slices from new_mem, along the given path
807 void merge_memory(Node* new_mem, Node* region, int new_path);
808 void make_slow_call_ex(Node* call, ciInstanceKlass* ex_klass, bool separate_io_proj, bool deoptimize = false);
809
810 // Helper functions to build synchronizations
811 int next_monitor();
812 Node* insert_mem_bar(int opcode, Node* precedent = NULL);
813 Node* insert_mem_bar_volatile(int opcode, int alias_idx, Node* precedent = NULL);
814 void insert_store_load_for_barrier();
815 // Optional 'precedent' is appended as an extra edge, to force ordering.
816 FastLockNode* shared_lock(Node* obj);
817 void shared_unlock(Node* box, Node* obj);
818
819 // helper functions for the fast path/slow path idioms
820 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);
821
822 // Generate an instance-of idiom. Used by both the instance-of bytecode
823 // and the reflective instance-of call.
824 Node* gen_instanceof(Node *subobj, Node* superkls, bool safe_for_replace = false);
825
826 // Generate a check-cast idiom. Used by both the check-cast bytecode
827 // and the array-store bytecode
828 Node* gen_checkcast( Node *subobj, Node* superkls,
829 Node* *failure_control = NULL );
830
831 Node* gen_subtype_check(Node* subklass, Node* superklass) {
832 MergeMemNode* mem = merged_memory();
833 Node* ctrl = control();
834 Node* n = Phase::gen_subtype_check(subklass, superklass, &ctrl, mem, &_gvn);
|
794 Node* parm4 = NULL, Node* parm5 = NULL,
795 Node* parm6 = NULL, Node* parm7 = NULL);
796 enum { // flag values for make_runtime_call
797 RC_NO_FP = 1, // CallLeafNoFPNode
798 RC_NO_IO = 2, // do not hook IO edges
799 RC_NO_LEAF = 4, // CallStaticJavaNode
800 RC_MUST_THROW = 8, // flag passed to add_safepoint_edges
801 RC_NARROW_MEM = 16, // input memory is same as output
802 RC_UNCOMMON = 32, // freq. expected to be like uncommon trap
803 RC_LEAF = 0 // null value: no flags set
804 };
805
806 // merge in all memory slices from new_mem, along the given path
807 void merge_memory(Node* new_mem, Node* region, int new_path);
808 void make_slow_call_ex(Node* call, ciInstanceKlass* ex_klass, bool separate_io_proj, bool deoptimize = false);
809
810 // Helper functions to build synchronizations
811 int next_monitor();
812 Node* insert_mem_bar(int opcode, Node* precedent = NULL);
813 Node* insert_mem_bar_volatile(int opcode, int alias_idx, Node* precedent = NULL);
814 // Optional 'precedent' is appended as an extra edge, to force ordering.
815 FastLockNode* shared_lock(Node* obj);
816 void shared_unlock(Node* box, Node* obj);
817
818 // helper functions for the fast path/slow path idioms
819 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);
820
821 // Generate an instance-of idiom. Used by both the instance-of bytecode
822 // and the reflective instance-of call.
823 Node* gen_instanceof(Node *subobj, Node* superkls, bool safe_for_replace = false);
824
825 // Generate a check-cast idiom. Used by both the check-cast bytecode
826 // and the array-store bytecode
827 Node* gen_checkcast( Node *subobj, Node* superkls,
828 Node* *failure_control = NULL );
829
830 Node* gen_subtype_check(Node* subklass, Node* superklass) {
831 MergeMemNode* mem = merged_memory();
832 Node* ctrl = control();
833 Node* n = Phase::gen_subtype_check(subklass, superklass, &ctrl, mem, &_gvn);
|