877 _gvn.set_type(iff, iff->Value(&_gvn)); // Value may be known at parse-time 878 // Place 'if' on worklist if it will be in graph 879 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later 880 return iff; 881 } 882 883 IfNode* create_and_xform_if(Node* ctrl, Node* tst, float prob, float cnt) { 884 IfNode* iff = new IfNode(ctrl, tst, prob, cnt);// New IfNode's 885 _gvn.transform(iff); // Value may be known at parse-time 886 // Place 'if' on worklist if it will be in graph 887 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later 888 return iff; 889 } 890 891 // Insert a loop predicate into the graph 892 void add_predicate(int nargs = 0); 893 void add_predicate_impl(Deoptimization::DeoptReason reason, int nargs); 894 895 // Produce new array node of stable type 896 Node* cast_array_to_stable(Node* ary, const TypeAryPtr* ary_type); 897 }; 898 899 // Helper class to support building of control flow branches. Upon 900 // creation the map and sp at bci are cloned and restored upon de- 901 // struction. Typical use: 902 // 903 // { PreserveJVMState pjvms(this); 904 // // code of new branch 905 // } 906 // // here the JVM state at bci is established 907 908 class PreserveJVMState: public StackObj { 909 protected: 910 GraphKit* _kit; 911 #ifdef ASSERT 912 int _block; // PO of current block, if a Parse 913 int _bci; 914 #endif 915 SafePointNode* _map; 916 uint _sp; | 877 _gvn.set_type(iff, iff->Value(&_gvn)); // Value may be known at parse-time 878 // Place 'if' on worklist if it will be in graph 879 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later 880 return iff; 881 } 882 883 IfNode* create_and_xform_if(Node* ctrl, Node* tst, float prob, float cnt) { 884 IfNode* iff = new IfNode(ctrl, tst, prob, cnt);// New IfNode's 885 _gvn.transform(iff); // Value may be known at parse-time 886 // Place 'if' on worklist if it will be in graph 887 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later 888 return iff; 889 } 890 891 // Insert a loop predicate into the graph 892 void add_predicate(int nargs = 0); 893 void add_predicate_impl(Deoptimization::DeoptReason reason, int nargs); 894 895 // Produce new array node of stable type 896 Node* cast_array_to_stable(Node* ary, const TypeAryPtr* ary_type); 897 898 Node* shenandoah_read_barrier(Node* obj); 899 Node* shenandoah_read_barrier_nomem(Node* obj); 900 Node* shenandoah_write_barrier(Node* obj); 901 void shenandoah_acmp_barrier(Node*& a, Node*& b); 902 private: 903 Node* shenandoah_read_barrier_impl(Node* obj, bool use_ctrl, bool use_mem); 904 }; 905 906 // Helper class to support building of control flow branches. Upon 907 // creation the map and sp at bci are cloned and restored upon de- 908 // struction. Typical use: 909 // 910 // { PreserveJVMState pjvms(this); 911 // // code of new branch 912 // } 913 // // here the JVM state at bci is established 914 915 class PreserveJVMState: public StackObj { 916 protected: 917 GraphKit* _kit; 918 #ifdef ASSERT 919 int _block; // PO of current block, if a Parse 920 int _bci; 921 #endif 922 SafePointNode* _map; 923 uint _sp; |