898 _gvn.set_type(iff, iff->Value(&_gvn)); // Value may be known at parse-time 899 // Place 'if' on worklist if it will be in graph 900 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later 901 return iff; 902 } 903 904 IfNode* create_and_xform_if(Node* ctrl, Node* tst, float prob, float cnt) { 905 IfNode* iff = new (C) IfNode(ctrl, tst, prob, cnt);// New IfNode's 906 _gvn.transform(iff); // Value may be known at parse-time 907 // Place 'if' on worklist if it will be in graph 908 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later 909 return iff; 910 } 911 912 // Insert a loop predicate into the graph 913 void add_predicate(int nargs = 0); 914 void add_predicate_impl(Deoptimization::DeoptReason reason, int nargs); 915 916 // Produce new array node of stable type 917 Node* cast_array_to_stable(Node* ary, const TypeAryPtr* ary_type); 918 }; 919 920 // Helper class to support building of control flow branches. Upon 921 // creation the map and sp at bci are cloned and restored upon de- 922 // struction. Typical use: 923 // 924 // { PreserveJVMState pjvms(this); 925 // // code of new branch 926 // } 927 // // here the JVM state at bci is established 928 929 class PreserveJVMState: public StackObj { 930 protected: 931 GraphKit* _kit; 932 #ifdef ASSERT 933 int _block; // PO of current block, if a Parse 934 int _bci; 935 #endif 936 SafePointNode* _map; 937 uint _sp; | 898 _gvn.set_type(iff, iff->Value(&_gvn)); // Value may be known at parse-time 899 // Place 'if' on worklist if it will be in graph 900 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later 901 return iff; 902 } 903 904 IfNode* create_and_xform_if(Node* ctrl, Node* tst, float prob, float cnt) { 905 IfNode* iff = new (C) IfNode(ctrl, tst, prob, cnt);// New IfNode's 906 _gvn.transform(iff); // Value may be known at parse-time 907 // Place 'if' on worklist if it will be in graph 908 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later 909 return iff; 910 } 911 912 // Insert a loop predicate into the graph 913 void add_predicate(int nargs = 0); 914 void add_predicate_impl(Deoptimization::DeoptReason reason, int nargs); 915 916 // Produce new array node of stable type 917 Node* cast_array_to_stable(Node* ary, const TypeAryPtr* ary_type); 918 919 Node* shenandoah_read_barrier(Node* obj); 920 Node* shenandoah_read_barrier_storeval(Node* obj); 921 Node* shenandoah_write_barrier(Node* obj); 922 private: 923 Node* shenandoah_read_barrier_impl(Node* obj, bool use_ctrl, bool use_mem, bool allow_fromspace); 924 }; 925 926 // Helper class to support building of control flow branches. Upon 927 // creation the map and sp at bci are cloned and restored upon de- 928 // struction. Typical use: 929 // 930 // { PreserveJVMState pjvms(this); 931 // // code of new branch 932 // } 933 // // here the JVM state at bci is established 934 935 class PreserveJVMState: public StackObj { 936 protected: 937 GraphKit* _kit; 938 #ifdef ASSERT 939 int _block; // PO of current block, if a Parse 940 int _bci; 941 #endif 942 SafePointNode* _map; 943 uint _sp; |