636 DEFINE_CLASS_ID(BoxLock, Node, 10) 637 DEFINE_CLASS_ID(Add, Node, 11) 638 DEFINE_CLASS_ID(Mul, Node, 12) 639 DEFINE_CLASS_ID(Vector, Node, 13) 640 DEFINE_CLASS_ID(ClearArray, Node, 14) 641 642 _max_classes = ClassMask_ClearArray 643 }; 644 #undef DEFINE_CLASS_ID 645 646 // Flags are sorted by usage frequency. 647 enum NodeFlags { 648 Flag_is_Copy = 0x01, // should be first bit to avoid shift 649 Flag_rematerialize = Flag_is_Copy << 1, 650 Flag_needs_anti_dependence_check = Flag_rematerialize << 1, 651 Flag_is_macro = Flag_needs_anti_dependence_check << 1, 652 Flag_is_Con = Flag_is_macro << 1, 653 Flag_is_cisc_alternate = Flag_is_Con << 1, 654 Flag_is_dead_loop_safe = Flag_is_cisc_alternate << 1, 655 Flag_may_be_short_branch = Flag_is_dead_loop_safe << 1, 656 Flag_avoid_back_to_back = Flag_may_be_short_branch << 1, 657 Flag_has_call = Flag_avoid_back_to_back << 1, 658 Flag_is_expensive = Flag_has_call << 1, 659 _max_flags = (Flag_is_expensive << 1) - 1 // allow flags combination 660 }; 661 662 private: 663 jushort _class_id; 664 jushort _flags; 665 666 protected: 667 // These methods should be called from constructors only. 668 void init_class_id(jushort c) { 669 assert(c <= _max_classes, "invalid node class"); 670 _class_id = c; // cast out const 671 } 672 void init_flags(jushort fl) { 673 assert(fl <= _max_flags, "invalid node flag"); 674 _flags |= fl; 675 } 676 void clear_flag(jushort fl) { 677 assert(fl <= _max_flags, "invalid node flag"); | 636 DEFINE_CLASS_ID(BoxLock, Node, 10) 637 DEFINE_CLASS_ID(Add, Node, 11) 638 DEFINE_CLASS_ID(Mul, Node, 12) 639 DEFINE_CLASS_ID(Vector, Node, 13) 640 DEFINE_CLASS_ID(ClearArray, Node, 14) 641 642 _max_classes = ClassMask_ClearArray 643 }; 644 #undef DEFINE_CLASS_ID 645 646 // Flags are sorted by usage frequency. 647 enum NodeFlags { 648 Flag_is_Copy = 0x01, // should be first bit to avoid shift 649 Flag_rematerialize = Flag_is_Copy << 1, 650 Flag_needs_anti_dependence_check = Flag_rematerialize << 1, 651 Flag_is_macro = Flag_needs_anti_dependence_check << 1, 652 Flag_is_Con = Flag_is_macro << 1, 653 Flag_is_cisc_alternate = Flag_is_Con << 1, 654 Flag_is_dead_loop_safe = Flag_is_cisc_alternate << 1, 655 Flag_may_be_short_branch = Flag_is_dead_loop_safe << 1, 656 Flag_avoid_back_to_back_before = Flag_may_be_short_branch << 1, 657 Flag_avoid_back_to_back_after = Flag_avoid_back_to_back_before << 1, 658 Flag_has_call = Flag_avoid_back_to_back_after << 1, 659 Flag_is_expensive = Flag_has_call << 1, 660 _max_flags = (Flag_is_expensive << 1) - 1 // allow flags combination 661 }; 662 663 private: 664 jushort _class_id; 665 jushort _flags; 666 667 protected: 668 // These methods should be called from constructors only. 669 void init_class_id(jushort c) { 670 assert(c <= _max_classes, "invalid node class"); 671 _class_id = c; // cast out const 672 } 673 void init_flags(jushort fl) { 674 assert(fl <= _max_flags, "invalid node flag"); 675 _flags |= fl; 676 } 677 void clear_flag(jushort fl) { 678 assert(fl <= _max_flags, "invalid node flag"); |