643 }; |
643 }; |
644 #undef DEFINE_CLASS_ID |
644 #undef DEFINE_CLASS_ID |
645 |
645 |
646 // Flags are sorted by usage frequency. |
646 // Flags are sorted by usage frequency. |
647 enum NodeFlags { |
647 enum NodeFlags { |
648 Flag_is_Copy = 0x01, // should be first bit to avoid shift |
648 Flag_is_Copy = 0x01, // should be first bit to avoid shift |
649 Flag_rematerialize = Flag_is_Copy << 1, |
649 Flag_rematerialize = Flag_is_Copy << 1, |
650 Flag_needs_anti_dependence_check = Flag_rematerialize << 1, |
650 Flag_needs_anti_dependence_check = Flag_rematerialize << 1, |
651 Flag_is_macro = Flag_needs_anti_dependence_check << 1, |
651 Flag_is_macro = Flag_needs_anti_dependence_check << 1, |
652 Flag_is_Con = Flag_is_macro << 1, |
652 Flag_is_Con = Flag_is_macro << 1, |
653 Flag_is_cisc_alternate = Flag_is_Con << 1, |
653 Flag_is_cisc_alternate = Flag_is_Con << 1, |
654 Flag_is_dead_loop_safe = Flag_is_cisc_alternate << 1, |
654 Flag_is_dead_loop_safe = Flag_is_cisc_alternate << 1, |
655 Flag_may_be_short_branch = Flag_is_dead_loop_safe << 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, |
656 Flag_avoid_back_to_back_before = Flag_may_be_short_branch << 1, |
657 Flag_has_call = Flag_avoid_back_to_back << 1, |
657 Flag_avoid_back_to_back_after = Flag_avoid_back_to_back_before << 1, |
658 Flag_is_expensive = Flag_has_call << 1, |
658 Flag_has_call = Flag_avoid_back_to_back_after << 1, |
|
659 Flag_is_expensive = Flag_has_call << 1, |
659 _max_flags = (Flag_is_expensive << 1) - 1 // allow flags combination |
660 _max_flags = (Flag_is_expensive << 1) - 1 // allow flags combination |
660 }; |
661 }; |
661 |
662 |
662 private: |
663 private: |
663 jushort _class_id; |
664 jushort _class_id; |