380 : MultiBranchNode(2), _prob(p), _fcnt(fcnt) {
381 init_class_id(Class_If);
382 init_req(0,control);
383 init_req(1,b);
384 }
385 virtual int Opcode() const;
386 virtual bool pinned() const { return true; }
387 virtual const Type *bottom_type() const { return TypeTuple::IFBOTH; }
388 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
389 virtual const Type* Value(PhaseGVN* phase) const;
390 virtual int required_outcnt() const { return 2; }
391 virtual const RegMask &out_RegMask() const;
392 Node* fold_compares(PhaseIterGVN* phase);
393 static Node* up_one_dom(Node* curr, bool linear_only = false);
394
395 // Takes the type of val and filters it through the test represented
396 // by if_proj and returns a more refined type if one is produced.
397 // Returns NULL is it couldn't improve the type.
398 static const TypeInt* filtered_int_type(PhaseGVN* phase, Node* val, Node* if_proj);
399
400 bool is_g1_marking_if(PhaseTransform *phase) const;
401 #if INCLUDE_SHENANDOAHGC
402 bool is_shenandoah_marking_if(PhaseTransform *phase) const;
403 #endif
404
405 #ifndef PRODUCT
406 virtual void dump_spec(outputStream *st) const;
407 virtual void related(GrowableArray <Node *> *in_rel, GrowableArray <Node *> *out_rel, bool compact) const;
408 #endif
409 };
410
411 class RangeCheckNode : public IfNode {
412 private:
413 int is_range_check(Node* &range, Node* &index, jint &offset);
414
415 public:
416 RangeCheckNode(Node* control, Node *b, float p, float fcnt)
417 : IfNode(control, b, p, fcnt) {
418 init_class_id(Class_RangeCheck);
419 }
420
|
380 : MultiBranchNode(2), _prob(p), _fcnt(fcnt) {
381 init_class_id(Class_If);
382 init_req(0,control);
383 init_req(1,b);
384 }
385 virtual int Opcode() const;
386 virtual bool pinned() const { return true; }
387 virtual const Type *bottom_type() const { return TypeTuple::IFBOTH; }
388 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
389 virtual const Type* Value(PhaseGVN* phase) const;
390 virtual int required_outcnt() const { return 2; }
391 virtual const RegMask &out_RegMask() const;
392 Node* fold_compares(PhaseIterGVN* phase);
393 static Node* up_one_dom(Node* curr, bool linear_only = false);
394
395 // Takes the type of val and filters it through the test represented
396 // by if_proj and returns a more refined type if one is produced.
397 // Returns NULL is it couldn't improve the type.
398 static const TypeInt* filtered_int_type(PhaseGVN* phase, Node* val, Node* if_proj);
399
400 #if INCLUDE_SHENANDOAHGC
401 bool is_shenandoah_marking_if(PhaseTransform *phase) const;
402 #endif
403
404 #ifndef PRODUCT
405 virtual void dump_spec(outputStream *st) const;
406 virtual void related(GrowableArray <Node *> *in_rel, GrowableArray <Node *> *out_rel, bool compact) const;
407 #endif
408 };
409
410 class RangeCheckNode : public IfNode {
411 private:
412 int is_range_check(Node* &range, Node* &index, jint &offset);
413
414 public:
415 RangeCheckNode(Node* control, Node *b, float p, float fcnt)
416 : IfNode(control, b, p, fcnt) {
417 init_class_id(Class_RangeCheck);
418 }
419
|