586 bool too_many_traps(Deoptimization::DeoptReason reason) { 587 return C->too_many_traps(method(), bci(), reason); 588 } 589 590 // Report if there were too many recompiles at the current method and bci. 591 bool too_many_recompiles(Deoptimization::DeoptReason reason) { 592 return C->too_many_recompiles(method(), bci(), reason); 593 } 594 595 // Returns the object (if any) which was created the moment before. 596 Node* just_allocated_object(Node* current_control); 597 598 static bool use_ReduceInitialCardMarks() { 599 return (ReduceInitialCardMarks 600 && Universe::heap()->can_elide_tlab_store_barriers()); 601 } 602 603 void sync_kit(IdealKit& ideal); 604 605 // vanilla/CMS post barrier 606 void write_barrier_post(Node *store, Node* obj, Node* adr, Node* val, bool use_precise); 607 608 // G1 pre/post barriers 609 void g1_write_barrier_pre(Node* obj, 610 Node* adr, 611 uint alias_idx, 612 Node* val, 613 const TypeOopPtr* val_type, 614 BasicType bt); 615 616 void g1_write_barrier_post(Node* store, 617 Node* obj, 618 Node* adr, 619 uint alias_idx, 620 Node* val, 621 BasicType bt, 622 bool use_precise); 623 // Helper function for g1 624 private: 625 void g1_mark_card(IdealKit& ideal, Node* card_adr, Node* store, Node* index, Node* index_adr, 626 Node* buffer, const TypeFunc* tf); 627 628 public: 629 // Helper function to round double arguments before a call 630 void round_double_arguments(ciMethod* dest_method); 631 void round_double_result(ciMethod* dest_method); 632 633 // rounding for strict float precision conformance 634 Node* precision_rounding(Node* n); 635 636 // rounding for strict double precision conformance 637 Node* dprecision_rounding(Node* n); 638 639 // rounding for non-strict double stores 640 Node* dstore_rounding(Node* n); 641 642 // Helper functions for fast/slow path codes 643 Node* opt_iff(Node* region, Node* iff); 644 Node* make_runtime_call(int flags, 645 const TypeFunc* call_type, address call_addr, | 586 bool too_many_traps(Deoptimization::DeoptReason reason) { 587 return C->too_many_traps(method(), bci(), reason); 588 } 589 590 // Report if there were too many recompiles at the current method and bci. 591 bool too_many_recompiles(Deoptimization::DeoptReason reason) { 592 return C->too_many_recompiles(method(), bci(), reason); 593 } 594 595 // Returns the object (if any) which was created the moment before. 596 Node* just_allocated_object(Node* current_control); 597 598 static bool use_ReduceInitialCardMarks() { 599 return (ReduceInitialCardMarks 600 && Universe::heap()->can_elide_tlab_store_barriers()); 601 } 602 603 void sync_kit(IdealKit& ideal); 604 605 // vanilla/CMS post barrier 606 void write_barrier_post(Node *store, Node* obj, 607 Node* adr, uint adr_idx, Node* val, bool use_precise); 608 609 // G1 pre/post barriers 610 void g1_write_barrier_pre(Node* obj, 611 Node* adr, 612 uint alias_idx, 613 Node* val, 614 const TypeOopPtr* val_type, 615 BasicType bt); 616 617 void g1_write_barrier_post(Node* store, 618 Node* obj, 619 Node* adr, 620 uint alias_idx, 621 Node* val, 622 BasicType bt, 623 bool use_precise); 624 // Helper function for g1 625 private: 626 void g1_mark_card(IdealKit& ideal, Node* card_adr, Node* store, uint oop_alias_idx, 627 Node* index, Node* index_adr, 628 Node* buffer, const TypeFunc* tf); 629 630 public: 631 // Helper function to round double arguments before a call 632 void round_double_arguments(ciMethod* dest_method); 633 void round_double_result(ciMethod* dest_method); 634 635 // rounding for strict float precision conformance 636 Node* precision_rounding(Node* n); 637 638 // rounding for strict double precision conformance 639 Node* dprecision_rounding(Node* n); 640 641 // rounding for non-strict double stores 642 Node* dstore_rounding(Node* n); 643 644 // Helper functions for fast/slow path codes 645 Node* opt_iff(Node* region, Node* iff); 646 Node* make_runtime_call(int flags, 647 const TypeFunc* call_type, address call_addr, |