156 MergeMemNode* merged_memory() { return _cvstate->in(TypeFunc::Memory)->as_MergeMem(); } 157 void set_all_memory(Node* mem) { _cvstate->set_req(TypeFunc::Memory, mem); } 158 Node* i_o() { return _cvstate->in(TypeFunc::I_O); } 159 void set_i_o(Node* c) { _cvstate->set_req(TypeFunc::I_O, c); } 160 void set(IdealVariable& v, Node* rhs) { _cvstate->set_req(first_var + v.id(), rhs); } 161 Node* value(IdealVariable& v) { return _cvstate->in(first_var + v.id()); } 162 void dead(IdealVariable& v) { set(v, (Node*)NULL); } 163 void if_then(Node* left, BoolTest::mask relop, Node* right, 164 float prob = PROB_FAIR, float cnt = COUNT_UNKNOWN, 165 bool push_new_state = true); 166 void else_(); 167 void end_if(); 168 void loop(GraphKit* gkit, int nargs, IdealVariable& iv, Node* init, BoolTest::mask cmp, Node* limit, 169 float prob = PROB_LIKELY(0.9), float cnt = COUNT_UNKNOWN); 170 void end_loop(); 171 Node* make_label(int goto_ct); 172 void bind(Node* lab); 173 void goto_(Node* lab, bool bind = false); 174 void declarations_done(); 175 176 Node* IfTrue(IfNode* iff) { return transform(new (C) IfTrueNode(iff)); } 177 Node* IfFalse(IfNode* iff) { return transform(new (C) IfFalseNode(iff)); } 178 179 // Data 180 Node* ConI(jint k) { return (Node*)gvn().intcon(k); } 181 Node* makecon(const Type *t) const { return _gvn.makecon(t); } 182 183 Node* AddI(Node* l, Node* r) { return transform(new (C) AddINode(l, r)); } 184 Node* SubI(Node* l, Node* r) { return transform(new (C) SubINode(l, r)); } 185 Node* AndI(Node* l, Node* r) { return transform(new (C) AndINode(l, r)); } 186 Node* MaxI(Node* l, Node* r) { return transform(new (C) MaxINode(l, r)); } 187 Node* LShiftI(Node* l, Node* r) { return transform(new (C) LShiftINode(l, r)); } 188 Node* CmpI(Node* l, Node* r) { return transform(new (C) CmpINode(l, r)); } 189 Node* Bool(Node* cmp, BoolTest::mask relop) { return transform(new (C) BoolNode(cmp, relop)); } 190 void increment(IdealVariable& v, Node* j) { set(v, AddI(value(v), j)); } 191 void decrement(IdealVariable& v, Node* j) { set(v, SubI(value(v), j)); } 192 193 Node* CmpL(Node* l, Node* r) { return transform(new (C) CmpLNode(l, r)); } 194 195 // TLS 196 Node* thread() { return gvn().transform(new (C) ThreadLocalNode()); } 197 198 // Pointers 199 200 // Raw address should be transformed regardless 'delay_transform' flag 201 // to produce canonical form CastX2P(offset). 202 Node* AddP(Node *base, Node *ptr, Node *off) { return _gvn.transform(new (C) AddPNode(base, ptr, off)); } 203 204 Node* CmpP(Node* l, Node* r) { return transform(new (C) CmpPNode(l, r)); } 205 #ifdef _LP64 206 Node* XorX(Node* l, Node* r) { return transform(new (C) XorLNode(l, r)); } 207 #else // _LP64 208 Node* XorX(Node* l, Node* r) { return transform(new (C) XorINode(l, r)); } 209 #endif // _LP64 210 Node* URShiftX(Node* l, Node* r) { return transform(new (C) URShiftXNode(l, r)); } 211 Node* ConX(jint k) { return (Node*)gvn().MakeConX(k); } 212 Node* CastPX(Node* ctl, Node* p) { return transform(new (C) CastP2XNode(ctl, p)); } 213 214 // Memory operations 215 216 // This is the base version which is given an alias index. 217 Node* load(Node* ctl, 218 Node* adr, 219 const Type* t, 220 BasicType bt, 221 int adr_idx, 222 bool require_atomic_access = false); 223 224 // Return the new StoreXNode 225 Node* store(Node* ctl, 226 Node* adr, 227 Node* val, 228 BasicType bt, 229 int adr_idx, 230 MemNode::MemOrd mo, 231 bool require_atomic_access = false); 232 | 156 MergeMemNode* merged_memory() { return _cvstate->in(TypeFunc::Memory)->as_MergeMem(); } 157 void set_all_memory(Node* mem) { _cvstate->set_req(TypeFunc::Memory, mem); } 158 Node* i_o() { return _cvstate->in(TypeFunc::I_O); } 159 void set_i_o(Node* c) { _cvstate->set_req(TypeFunc::I_O, c); } 160 void set(IdealVariable& v, Node* rhs) { _cvstate->set_req(first_var + v.id(), rhs); } 161 Node* value(IdealVariable& v) { return _cvstate->in(first_var + v.id()); } 162 void dead(IdealVariable& v) { set(v, (Node*)NULL); } 163 void if_then(Node* left, BoolTest::mask relop, Node* right, 164 float prob = PROB_FAIR, float cnt = COUNT_UNKNOWN, 165 bool push_new_state = true); 166 void else_(); 167 void end_if(); 168 void loop(GraphKit* gkit, int nargs, IdealVariable& iv, Node* init, BoolTest::mask cmp, Node* limit, 169 float prob = PROB_LIKELY(0.9), float cnt = COUNT_UNKNOWN); 170 void end_loop(); 171 Node* make_label(int goto_ct); 172 void bind(Node* lab); 173 void goto_(Node* lab, bool bind = false); 174 void declarations_done(); 175 176 Node* IfTrue(IfNode* iff) { return transform(new IfTrueNode(iff)); } 177 Node* IfFalse(IfNode* iff) { return transform(new IfFalseNode(iff)); } 178 179 // Data 180 Node* ConI(jint k) { return (Node*)gvn().intcon(k); } 181 Node* makecon(const Type *t) const { return _gvn.makecon(t); } 182 183 Node* AddI(Node* l, Node* r) { return transform(new AddINode(l, r)); } 184 Node* SubI(Node* l, Node* r) { return transform(new SubINode(l, r)); } 185 Node* AndI(Node* l, Node* r) { return transform(new AndINode(l, r)); } 186 Node* MaxI(Node* l, Node* r) { return transform(new MaxINode(l, r)); } 187 Node* LShiftI(Node* l, Node* r) { return transform(new LShiftINode(l, r)); } 188 Node* CmpI(Node* l, Node* r) { return transform(new CmpINode(l, r)); } 189 Node* Bool(Node* cmp, BoolTest::mask relop) { return transform(new BoolNode(cmp, relop)); } 190 void increment(IdealVariable& v, Node* j) { set(v, AddI(value(v), j)); } 191 void decrement(IdealVariable& v, Node* j) { set(v, SubI(value(v), j)); } 192 193 Node* CmpL(Node* l, Node* r) { return transform(new CmpLNode(l, r)); } 194 195 // TLS 196 Node* thread() { return gvn().transform(new ThreadLocalNode()); } 197 198 // Pointers 199 200 // Raw address should be transformed regardless 'delay_transform' flag 201 // to produce canonical form CastX2P(offset). 202 Node* AddP(Node *base, Node *ptr, Node *off) { return _gvn.transform(new AddPNode(base, ptr, off)); } 203 204 Node* CmpP(Node* l, Node* r) { return transform(new CmpPNode(l, r)); } 205 #ifdef _LP64 206 Node* XorX(Node* l, Node* r) { return transform(new XorLNode(l, r)); } 207 #else // _LP64 208 Node* XorX(Node* l, Node* r) { return transform(new XorINode(l, r)); } 209 #endif // _LP64 210 Node* URShiftX(Node* l, Node* r) { return transform(new URShiftXNode(l, r)); } 211 Node* ConX(jint k) { return (Node*)gvn().MakeConX(k); } 212 Node* CastPX(Node* ctl, Node* p) { return transform(new CastP2XNode(ctl, p)); } 213 214 // Memory operations 215 216 // This is the base version which is given an alias index. 217 Node* load(Node* ctl, 218 Node* adr, 219 const Type* t, 220 BasicType bt, 221 int adr_idx, 222 bool require_atomic_access = false); 223 224 // Return the new StoreXNode 225 Node* store(Node* ctl, 226 Node* adr, 227 Node* val, 228 BasicType bt, 229 int adr_idx, 230 MemNode::MemOrd mo, 231 bool require_atomic_access = false); 232 |