70 class EncodeNarrowPtrNode; |
71 class EncodeNarrowPtrNode; |
71 class EncodePNode; |
72 class EncodePNode; |
72 class EncodePKlassNode; |
73 class EncodePKlassNode; |
73 class FastLockNode; |
74 class FastLockNode; |
74 class FastUnlockNode; |
75 class FastUnlockNode; |
|
76 class HaltNode; |
75 class IfNode; |
77 class IfNode; |
76 class IfProjNode; |
78 class IfProjNode; |
77 class IfFalseNode; |
79 class IfFalseNode; |
78 class IfTrueNode; |
80 class IfTrueNode; |
79 class InitializeNode; |
81 class InitializeNode; |
80 class JVMState; |
82 class JVMState; |
81 class JumpNode; |
83 class JumpNode; |
82 class JumpProjNode; |
84 class JumpProjNode; |
83 class LoadNode; |
85 class LoadNode; |
84 class LoadBarrierNode; |
|
85 class LoadBarrierSlowRegNode; |
|
86 class LoadBarrierWeakSlowRegNode; |
|
87 class LoadStoreNode; |
86 class LoadStoreNode; |
|
87 class LoadStoreConditionalNode; |
88 class LockNode; |
88 class LockNode; |
89 class LoopNode; |
89 class LoopNode; |
90 class MachBranchNode; |
90 class MachBranchNode; |
91 class MachCallDynamicJavaNode; |
91 class MachCallDynamicJavaNode; |
92 class MachCallJavaNode; |
92 class MachCallJavaNode; |
390 } |
390 } |
391 |
391 |
392 #ifdef ASSERT |
392 #ifdef ASSERT |
393 bool is_dead() const; |
393 bool is_dead() const; |
394 #define is_not_dead(n) ((n) == NULL || !VerifyIterativeGVN || !((n)->is_dead())) |
394 #define is_not_dead(n) ((n) == NULL || !VerifyIterativeGVN || !((n)->is_dead())) |
|
395 bool is_reachable_from_root() const; |
395 #endif |
396 #endif |
396 // Check whether node has become unreachable |
397 // Check whether node has become unreachable |
397 bool is_unreachable(PhaseIterGVN &igvn) const; |
398 bool is_unreachable(PhaseIterGVN &igvn) const; |
398 |
399 |
399 // Set a required input edge, also updates corresponding output edge |
400 // Set a required input edge, also updates corresponding output edge |
637 DEFINE_CLASS_ID(NeverBranch, MultiBranch, 2) |
638 DEFINE_CLASS_ID(NeverBranch, MultiBranch, 2) |
638 DEFINE_CLASS_ID(Start, Multi, 2) |
639 DEFINE_CLASS_ID(Start, Multi, 2) |
639 DEFINE_CLASS_ID(MemBar, Multi, 3) |
640 DEFINE_CLASS_ID(MemBar, Multi, 3) |
640 DEFINE_CLASS_ID(Initialize, MemBar, 0) |
641 DEFINE_CLASS_ID(Initialize, MemBar, 0) |
641 DEFINE_CLASS_ID(MemBarStoreStore, MemBar, 1) |
642 DEFINE_CLASS_ID(MemBarStoreStore, MemBar, 1) |
642 DEFINE_CLASS_ID(LoadBarrier, Multi, 4) |
|
643 |
643 |
644 DEFINE_CLASS_ID(Mach, Node, 1) |
644 DEFINE_CLASS_ID(Mach, Node, 1) |
645 DEFINE_CLASS_ID(MachReturn, Mach, 0) |
645 DEFINE_CLASS_ID(MachReturn, Mach, 0) |
646 DEFINE_CLASS_ID(MachSafePoint, MachReturn, 0) |
646 DEFINE_CLASS_ID(MachSafePoint, MachReturn, 0) |
647 DEFINE_CLASS_ID(MachCall, MachSafePoint, 0) |
647 DEFINE_CLASS_ID(MachCall, MachSafePoint, 0) |
664 |
664 |
665 DEFINE_CLASS_ID(Type, Node, 2) |
665 DEFINE_CLASS_ID(Type, Node, 2) |
666 DEFINE_CLASS_ID(Phi, Type, 0) |
666 DEFINE_CLASS_ID(Phi, Type, 0) |
667 DEFINE_CLASS_ID(ConstraintCast, Type, 1) |
667 DEFINE_CLASS_ID(ConstraintCast, Type, 1) |
668 DEFINE_CLASS_ID(CastII, ConstraintCast, 0) |
668 DEFINE_CLASS_ID(CastII, ConstraintCast, 0) |
669 DEFINE_CLASS_ID(CheckCastPP, ConstraintCast, 1) |
669 DEFINE_CLASS_ID(CastLL, ConstraintCast, 1) |
|
670 DEFINE_CLASS_ID(CheckCastPP, ConstraintCast, 2) |
670 DEFINE_CLASS_ID(CMove, Type, 3) |
671 DEFINE_CLASS_ID(CMove, Type, 3) |
671 DEFINE_CLASS_ID(SafePointScalarObject, Type, 4) |
672 DEFINE_CLASS_ID(SafePointScalarObject, Type, 4) |
672 DEFINE_CLASS_ID(DecodeNarrowPtr, Type, 5) |
673 DEFINE_CLASS_ID(DecodeNarrowPtr, Type, 5) |
673 DEFINE_CLASS_ID(DecodeN, DecodeNarrowPtr, 0) |
674 DEFINE_CLASS_ID(DecodeN, DecodeNarrowPtr, 0) |
674 DEFINE_CLASS_ID(DecodeNKlass, DecodeNarrowPtr, 1) |
675 DEFINE_CLASS_ID(DecodeNKlass, DecodeNarrowPtr, 1) |
686 DEFINE_CLASS_ID(MachProj, Proj, 5) |
687 DEFINE_CLASS_ID(MachProj, Proj, 5) |
687 |
688 |
688 DEFINE_CLASS_ID(Mem, Node, 4) |
689 DEFINE_CLASS_ID(Mem, Node, 4) |
689 DEFINE_CLASS_ID(Load, Mem, 0) |
690 DEFINE_CLASS_ID(Load, Mem, 0) |
690 DEFINE_CLASS_ID(LoadVector, Load, 0) |
691 DEFINE_CLASS_ID(LoadVector, Load, 0) |
691 DEFINE_CLASS_ID(LoadBarrierSlowReg, Load, 1) |
|
692 DEFINE_CLASS_ID(LoadBarrierWeakSlowReg, Load, 2) |
|
693 DEFINE_CLASS_ID(Store, Mem, 1) |
692 DEFINE_CLASS_ID(Store, Mem, 1) |
694 DEFINE_CLASS_ID(StoreVector, Store, 0) |
693 DEFINE_CLASS_ID(StoreVector, Store, 0) |
695 DEFINE_CLASS_ID(LoadStore, Mem, 2) |
694 DEFINE_CLASS_ID(LoadStore, Mem, 2) |
696 DEFINE_CLASS_ID(LoadStoreConditional, LoadStore, 0) |
695 DEFINE_CLASS_ID(LoadStoreConditional, LoadStore, 0) |
697 DEFINE_CLASS_ID(CompareAndSwap, LoadStoreConditional, 0) |
696 DEFINE_CLASS_ID(CompareAndSwap, LoadStoreConditional, 0) |
714 DEFINE_CLASS_ID(BoxLock, Node, 10) |
713 DEFINE_CLASS_ID(BoxLock, Node, 10) |
715 DEFINE_CLASS_ID(Add, Node, 11) |
714 DEFINE_CLASS_ID(Add, Node, 11) |
716 DEFINE_CLASS_ID(Mul, Node, 12) |
715 DEFINE_CLASS_ID(Mul, Node, 12) |
717 DEFINE_CLASS_ID(Vector, Node, 13) |
716 DEFINE_CLASS_ID(Vector, Node, 13) |
718 DEFINE_CLASS_ID(ClearArray, Node, 14) |
717 DEFINE_CLASS_ID(ClearArray, Node, 14) |
719 |
718 DEFINE_CLASS_ID(Halt, Node, 15) |
720 _max_classes = ClassMask_ClearArray |
719 |
|
720 _max_classes = ClassMask_Halt |
721 }; |
721 }; |
722 #undef DEFINE_CLASS_ID |
722 #undef DEFINE_CLASS_ID |
723 |
723 |
724 // Flags are sorted by usage frequency. |
724 // Flags are sorted by usage frequency. |
725 enum NodeFlags { |
725 enum NodeFlags { |
746 jushort _flags; |
746 jushort _flags; |
747 |
747 |
748 protected: |
748 protected: |
749 // These methods should be called from constructors only. |
749 // These methods should be called from constructors only. |
750 void init_class_id(jushort c) { |
750 void init_class_id(jushort c) { |
751 assert(c <= _max_classes, "invalid node class"); |
|
752 _class_id = c; // cast out const |
751 _class_id = c; // cast out const |
753 } |
752 } |
754 void init_flags(jushort fl) { |
753 void init_flags(jushort fl) { |
755 assert(fl <= _max_flags, "invalid node flag"); |
754 assert(fl <= _max_flags, "invalid node flag"); |
756 _flags |= fl; |
755 _flags |= fl; |
804 DEFINE_CLASS_QUERY(CallStaticJava) |
803 DEFINE_CLASS_QUERY(CallStaticJava) |
805 DEFINE_CLASS_QUERY(Catch) |
804 DEFINE_CLASS_QUERY(Catch) |
806 DEFINE_CLASS_QUERY(CatchProj) |
805 DEFINE_CLASS_QUERY(CatchProj) |
807 DEFINE_CLASS_QUERY(CheckCastPP) |
806 DEFINE_CLASS_QUERY(CheckCastPP) |
808 DEFINE_CLASS_QUERY(CastII) |
807 DEFINE_CLASS_QUERY(CastII) |
|
808 DEFINE_CLASS_QUERY(CastLL) |
809 DEFINE_CLASS_QUERY(ConstraintCast) |
809 DEFINE_CLASS_QUERY(ConstraintCast) |
810 DEFINE_CLASS_QUERY(ClearArray) |
810 DEFINE_CLASS_QUERY(ClearArray) |
811 DEFINE_CLASS_QUERY(CMove) |
811 DEFINE_CLASS_QUERY(CMove) |
812 DEFINE_CLASS_QUERY(Cmp) |
812 DEFINE_CLASS_QUERY(Cmp) |
813 DEFINE_CLASS_QUERY(CountedLoop) |
813 DEFINE_CLASS_QUERY(CountedLoop) |
818 DEFINE_CLASS_QUERY(EncodeNarrowPtr) |
818 DEFINE_CLASS_QUERY(EncodeNarrowPtr) |
819 DEFINE_CLASS_QUERY(EncodeP) |
819 DEFINE_CLASS_QUERY(EncodeP) |
820 DEFINE_CLASS_QUERY(EncodePKlass) |
820 DEFINE_CLASS_QUERY(EncodePKlass) |
821 DEFINE_CLASS_QUERY(FastLock) |
821 DEFINE_CLASS_QUERY(FastLock) |
822 DEFINE_CLASS_QUERY(FastUnlock) |
822 DEFINE_CLASS_QUERY(FastUnlock) |
|
823 DEFINE_CLASS_QUERY(Halt) |
823 DEFINE_CLASS_QUERY(If) |
824 DEFINE_CLASS_QUERY(If) |
824 DEFINE_CLASS_QUERY(RangeCheck) |
825 DEFINE_CLASS_QUERY(RangeCheck) |
825 DEFINE_CLASS_QUERY(IfProj) |
826 DEFINE_CLASS_QUERY(IfProj) |
826 DEFINE_CLASS_QUERY(IfFalse) |
827 DEFINE_CLASS_QUERY(IfFalse) |
827 DEFINE_CLASS_QUERY(IfTrue) |
828 DEFINE_CLASS_QUERY(IfTrue) |
828 DEFINE_CLASS_QUERY(Initialize) |
829 DEFINE_CLASS_QUERY(Initialize) |
829 DEFINE_CLASS_QUERY(Jump) |
830 DEFINE_CLASS_QUERY(Jump) |
830 DEFINE_CLASS_QUERY(JumpProj) |
831 DEFINE_CLASS_QUERY(JumpProj) |
831 DEFINE_CLASS_QUERY(Load) |
832 DEFINE_CLASS_QUERY(Load) |
832 DEFINE_CLASS_QUERY(LoadStore) |
833 DEFINE_CLASS_QUERY(LoadStore) |
833 DEFINE_CLASS_QUERY(LoadBarrier) |
834 DEFINE_CLASS_QUERY(LoadStoreConditional) |
834 DEFINE_CLASS_QUERY(LoadBarrierSlowReg) |
|
835 DEFINE_CLASS_QUERY(LoadBarrierWeakSlowReg) |
|
836 DEFINE_CLASS_QUERY(Lock) |
835 DEFINE_CLASS_QUERY(Lock) |
837 DEFINE_CLASS_QUERY(Loop) |
836 DEFINE_CLASS_QUERY(Loop) |
838 DEFINE_CLASS_QUERY(Mach) |
837 DEFINE_CLASS_QUERY(Mach) |
839 DEFINE_CLASS_QUERY(MachBranch) |
838 DEFINE_CLASS_QUERY(MachBranch) |
840 DEFINE_CLASS_QUERY(MachCall) |
839 DEFINE_CLASS_QUERY(MachCall) |