570 DEFINE_CLASS_ID(MachCallJava, MachCall, 0) |
571 DEFINE_CLASS_ID(MachCallJava, MachCall, 0) |
571 DEFINE_CLASS_ID(MachCallStaticJava, MachCallJava, 0) |
572 DEFINE_CLASS_ID(MachCallStaticJava, MachCallJava, 0) |
572 DEFINE_CLASS_ID(MachCallDynamicJava, MachCallJava, 1) |
573 DEFINE_CLASS_ID(MachCallDynamicJava, MachCallJava, 1) |
573 DEFINE_CLASS_ID(MachCallRuntime, MachCall, 1) |
574 DEFINE_CLASS_ID(MachCallRuntime, MachCall, 1) |
574 DEFINE_CLASS_ID(MachCallLeaf, MachCallRuntime, 0) |
575 DEFINE_CLASS_ID(MachCallLeaf, MachCallRuntime, 0) |
575 DEFINE_CLASS_ID(MachSpillCopy, Mach, 1) |
576 DEFINE_CLASS_ID(MachBranch, Mach, 1) |
576 DEFINE_CLASS_ID(MachNullCheck, Mach, 2) |
577 DEFINE_CLASS_ID(MachIf, MachBranch, 0) |
577 DEFINE_CLASS_ID(MachIf, Mach, 3) |
578 DEFINE_CLASS_ID(MachGoto, MachBranch, 1) |
578 DEFINE_CLASS_ID(MachTemp, Mach, 4) |
579 DEFINE_CLASS_ID(MachNullCheck, MachBranch, 2) |
579 DEFINE_CLASS_ID(MachConstantBase, Mach, 5) |
580 DEFINE_CLASS_ID(MachSpillCopy, Mach, 2) |
580 DEFINE_CLASS_ID(MachConstant, Mach, 6) |
581 DEFINE_CLASS_ID(MachTemp, Mach, 3) |
581 DEFINE_CLASS_ID(MachGoto, Mach, 7) |
582 DEFINE_CLASS_ID(MachConstantBase, Mach, 4) |
|
583 DEFINE_CLASS_ID(MachConstant, Mach, 5) |
582 |
584 |
583 DEFINE_CLASS_ID(Type, Node, 2) |
585 DEFINE_CLASS_ID(Type, Node, 2) |
584 DEFINE_CLASS_ID(Phi, Type, 0) |
586 DEFINE_CLASS_ID(Phi, Type, 0) |
585 DEFINE_CLASS_ID(ConstraintCast, Type, 1) |
587 DEFINE_CLASS_ID(ConstraintCast, Type, 1) |
586 DEFINE_CLASS_ID(CheckCastPP, Type, 2) |
588 DEFINE_CLASS_ID(CheckCastPP, Type, 2) |
632 Flag_rematerialize = Flag_is_Copy << 1, |
634 Flag_rematerialize = Flag_is_Copy << 1, |
633 Flag_needs_anti_dependence_check = Flag_rematerialize << 1, |
635 Flag_needs_anti_dependence_check = Flag_rematerialize << 1, |
634 Flag_is_macro = Flag_needs_anti_dependence_check << 1, |
636 Flag_is_macro = Flag_needs_anti_dependence_check << 1, |
635 Flag_is_Con = Flag_is_macro << 1, |
637 Flag_is_Con = Flag_is_macro << 1, |
636 Flag_is_cisc_alternate = Flag_is_Con << 1, |
638 Flag_is_cisc_alternate = Flag_is_Con << 1, |
637 Flag_is_Branch = Flag_is_cisc_alternate << 1, |
639 Flag_is_dead_loop_safe = Flag_is_cisc_alternate << 1, |
638 Flag_is_dead_loop_safe = Flag_is_Branch << 1, |
|
639 Flag_may_be_short_branch = Flag_is_dead_loop_safe << 1, |
640 Flag_may_be_short_branch = Flag_is_dead_loop_safe << 1, |
640 Flag_avoid_back_to_back = Flag_may_be_short_branch << 1, |
641 Flag_avoid_back_to_back = Flag_may_be_short_branch << 1, |
641 _max_flags = (Flag_avoid_back_to_back << 1) - 1 // allow flags combination |
642 _max_flags = (Flag_avoid_back_to_back << 1) - 1 // allow flags combination |
642 }; |
643 }; |
643 |
644 |
719 DEFINE_CLASS_QUERY(Load) |
720 DEFINE_CLASS_QUERY(Load) |
720 DEFINE_CLASS_QUERY(LoadStore) |
721 DEFINE_CLASS_QUERY(LoadStore) |
721 DEFINE_CLASS_QUERY(Lock) |
722 DEFINE_CLASS_QUERY(Lock) |
722 DEFINE_CLASS_QUERY(Loop) |
723 DEFINE_CLASS_QUERY(Loop) |
723 DEFINE_CLASS_QUERY(Mach) |
724 DEFINE_CLASS_QUERY(Mach) |
|
725 DEFINE_CLASS_QUERY(MachBranch) |
724 DEFINE_CLASS_QUERY(MachCall) |
726 DEFINE_CLASS_QUERY(MachCall) |
725 DEFINE_CLASS_QUERY(MachCallDynamicJava) |
727 DEFINE_CLASS_QUERY(MachCallDynamicJava) |
726 DEFINE_CLASS_QUERY(MachCallJava) |
728 DEFINE_CLASS_QUERY(MachCallJava) |
727 DEFINE_CLASS_QUERY(MachCallLeaf) |
729 DEFINE_CLASS_QUERY(MachCallLeaf) |
728 DEFINE_CLASS_QUERY(MachCallRuntime) |
730 DEFINE_CLASS_QUERY(MachCallRuntime) |
785 // depend for their correct sequencing on more than one test. |
787 // depend for their correct sequencing on more than one test. |
786 // (In that case, hoisting to a dominating test may silently |
788 // (In that case, hoisting to a dominating test may silently |
787 // skip some other important test.) |
789 // skip some other important test.) |
788 virtual bool depends_only_on_test() const { assert(!is_CFG(), ""); return true; }; |
790 virtual bool depends_only_on_test() const { assert(!is_CFG(), ""); return true; }; |
789 |
791 |
790 // defined for MachNodes that match 'If' | 'Goto' | 'CountedLoopEnd' | 'Jump' |
|
791 bool is_Branch() const { return (_flags & Flag_is_Branch) != 0; } |
|
792 |
|
793 // When building basic blocks, I need to have a notion of block beginning |
792 // When building basic blocks, I need to have a notion of block beginning |
794 // Nodes, next block selector Nodes (block enders), and next block |
793 // Nodes, next block selector Nodes (block enders), and next block |
795 // projections. These calls need to work on their machine equivalents. The |
794 // projections. These calls need to work on their machine equivalents. The |
796 // Ideal beginning Nodes are RootNode, RegionNode and StartNode. |
795 // Ideal beginning Nodes are RootNode, RegionNode and StartNode. |
797 bool is_block_start() const { |
796 bool is_block_start() const { |