347 init_req(0,control); 348 init_req(1,b); 349 } 350 virtual int Opcode() const; 351 virtual bool pinned() const { return true; } 352 virtual const Type *bottom_type() const { return TypeTuple::IFBOTH; } 353 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); 354 virtual const Type *Value( PhaseTransform *phase ) const; 355 virtual int required_outcnt() const { return 2; } 356 virtual const RegMask &out_RegMask() const; 357 void dominated_by(Node* prev_dom, PhaseIterGVN* igvn); 358 int is_range_check(Node* &range, Node* &index, jint &offset); 359 Node* fold_compares(PhaseGVN* phase); 360 static Node* up_one_dom(Node* curr, bool linear_only = false); 361 362 // Takes the type of val and filters it through the test represented 363 // by if_proj and returns a more refined type if one is produced. 364 // Returns NULL is it couldn't improve the type. 365 static const TypeInt* filtered_int_type(PhaseGVN* phase, Node* val, Node* if_proj); 366 367 #ifndef PRODUCT 368 virtual void dump_spec(outputStream *st) const; 369 #endif 370 }; 371 372 class IfTrueNode : public CProjNode { 373 public: 374 IfTrueNode( IfNode *ifnode ) : CProjNode(ifnode,1) { 375 init_class_id(Class_IfTrue); 376 } 377 virtual int Opcode() const; 378 virtual Node *Identity( PhaseTransform *phase ); 379 }; 380 381 class IfFalseNode : public CProjNode { 382 public: 383 IfFalseNode( IfNode *ifnode ) : CProjNode(ifnode,0) { 384 init_class_id(Class_IfFalse); 385 } 386 virtual int Opcode() const; | 347 init_req(0,control); 348 init_req(1,b); 349 } 350 virtual int Opcode() const; 351 virtual bool pinned() const { return true; } 352 virtual const Type *bottom_type() const { return TypeTuple::IFBOTH; } 353 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); 354 virtual const Type *Value( PhaseTransform *phase ) const; 355 virtual int required_outcnt() const { return 2; } 356 virtual const RegMask &out_RegMask() const; 357 void dominated_by(Node* prev_dom, PhaseIterGVN* igvn); 358 int is_range_check(Node* &range, Node* &index, jint &offset); 359 Node* fold_compares(PhaseGVN* phase); 360 static Node* up_one_dom(Node* curr, bool linear_only = false); 361 362 // Takes the type of val and filters it through the test represented 363 // by if_proj and returns a more refined type if one is produced. 364 // Returns NULL is it couldn't improve the type. 365 static const TypeInt* filtered_int_type(PhaseGVN* phase, Node* val, Node* if_proj); 366 367 bool is_shenandoah_marking_if(PhaseTransform *phase) const; 368 369 #ifndef PRODUCT 370 virtual void dump_spec(outputStream *st) const; 371 #endif 372 }; 373 374 class IfTrueNode : public CProjNode { 375 public: 376 IfTrueNode( IfNode *ifnode ) : CProjNode(ifnode,1) { 377 init_class_id(Class_IfTrue); 378 } 379 virtual int Opcode() const; 380 virtual Node *Identity( PhaseTransform *phase ); 381 }; 382 383 class IfFalseNode : public CProjNode { 384 public: 385 IfFalseNode( IfNode *ifnode ) : CProjNode(ifnode,0) { 386 init_class_id(Class_IfFalse); 387 } 388 virtual int Opcode() const; |