909 return iff;
910 }
911
912 IfNode* create_and_xform_if(Node* ctrl, Node* tst, float prob, float cnt) {
913 IfNode* iff = new IfNode(ctrl, tst, prob, cnt);// New IfNode's
914 _gvn.transform(iff); // Value may be known at parse-time
915 // Place 'if' on worklist if it will be in graph
916 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later
917 return iff;
918 }
919
920 // Insert a loop predicate into the graph
921 void add_predicate(int nargs = 0);
922 void add_predicate_impl(Deoptimization::DeoptReason reason, int nargs);
923
924 Node* make_constant_from_field(ciField* field, Node* obj);
925
926 // Produce new array node of stable type
927 Node* cast_array_to_stable(Node* ary, const TypeAryPtr* ary_type);
928
929 Node* shenandoah_read_barrier(Node* obj);
930 Node* shenandoah_read_barrier_storeval(Node* obj);
931 Node* shenandoah_write_barrier(Node* obj);
932 Node* cmp_objects(Node* a, Node* b);
933 private:
934 Node* shenandoah_read_barrier_impl(Node* obj, bool use_ctrl, bool use_mem, bool allow_fromspace);
935 };
936
937 // Helper class to support building of control flow branches. Upon
938 // creation the map and sp at bci are cloned and restored upon de-
939 // struction. Typical use:
940 //
941 // { PreserveJVMState pjvms(this);
942 // // code of new branch
943 // }
944 // // here the JVM state at bci is established
945
946 class PreserveJVMState: public StackObj {
947 protected:
948 GraphKit* _kit;
|
909 return iff;
910 }
911
912 IfNode* create_and_xform_if(Node* ctrl, Node* tst, float prob, float cnt) {
913 IfNode* iff = new IfNode(ctrl, tst, prob, cnt);// New IfNode's
914 _gvn.transform(iff); // Value may be known at parse-time
915 // Place 'if' on worklist if it will be in graph
916 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later
917 return iff;
918 }
919
920 // Insert a loop predicate into the graph
921 void add_predicate(int nargs = 0);
922 void add_predicate_impl(Deoptimization::DeoptReason reason, int nargs);
923
924 Node* make_constant_from_field(ciField* field, Node* obj);
925
926 // Produce new array node of stable type
927 Node* cast_array_to_stable(Node* ary, const TypeAryPtr* ary_type);
928
929 void shenandoah_update_matrix(Node* adr, Node* val);
930 Node* shenandoah_read_barrier(Node* obj);
931 Node* shenandoah_read_barrier_storeval(Node* obj);
932 Node* shenandoah_write_barrier(Node* obj);
933 Node* cmp_objects(Node* a, Node* b);
934 private:
935 Node* shenandoah_read_barrier_impl(Node* obj, bool use_ctrl, bool use_mem, bool allow_fromspace);
936 };
937
938 // Helper class to support building of control flow branches. Upon
939 // creation the map and sp at bci are cloned and restored upon de-
940 // struction. Typical use:
941 //
942 // { PreserveJVMState pjvms(this);
943 // // code of new branch
944 // }
945 // // here the JVM state at bci is established
946
947 class PreserveJVMState: public StackObj {
948 protected:
949 GraphKit* _kit;
|