64 class CatchNode;
65 class CatchProjNode;
66 class CheckCastPPNode;
67 class ClearArrayNode;
68 class CmpNode;
69 class CodeBuffer;
70 class ConstraintCastNode;
71 class ConNode;
72 class CompareAndSwapNode;
73 class CompareAndExchangeNode;
74 class CountedLoopNode;
75 class CountedLoopEndNode;
76 class DecodeNarrowPtrNode;
77 class DecodeNNode;
78 class DecodeNKlassNode;
79 class EncodeNarrowPtrNode;
80 class EncodePNode;
81 class EncodePKlassNode;
82 class FastLockNode;
83 class FastUnlockNode;
84 class HaltNode;
85 class IfNode;
86 class IfProjNode;
87 class IfFalseNode;
88 class IfTrueNode;
89 class InitializeNode;
90 class JVMState;
91 class JumpNode;
92 class JumpProjNode;
93 class LoadNode;
94 class LoadStoreNode;
95 class LoadStoreConditionalNode;
96 class LockNode;
97 class LongCountedLoopNode;
98 class LongCountedLoopEndNode;
99 class LoopNode;
100 class LShiftNode;
101 class MachBranchNode;
102 class MachCallDynamicJavaNode;
103 class MachCallJavaNode;
104 class MachCallLeafNode;
105 class MachCallNode;
106 class MachCallRuntimeNode;
107 class MachCallStaticJavaNode;
108 class MachConstantBaseNode;
109 class MachConstantNode;
110 class MachGotoNode;
111 class MachIfNode;
112 class MachJumpNode;
113 class MachNode;
114 class MachNullCheckNode;
115 class MachProjNode;
116 class MachReturnNode;
117 class MachSafePointNode;
118 class MachSpillCopyNode;
119 class MachTempNode;
120 class MachMergeNode;
121 class MachMemBarNode;
122 class Matcher;
123 class MemBarNode;
124 class MemBarStoreStoreNode;
125 class MemNode;
126 class MergeMemNode;
127 class MoveNode;
128 class MulNode;
129 class MultiNode;
130 class MultiBranchNode;
131 class NeverBranchNode;
132 class Opaque1Node;
133 class OuterStripMinedLoopNode;
134 class OuterStripMinedLoopEndNode;
135 class Node;
136 class Node_Array;
137 class Node_List;
138 class Node_Stack;
139 class OopMap;
140 class ParmNode;
141 class PCTableNode;
146 class PhaseTransform;
147 class PhaseValues;
148 class PhiNode;
149 class Pipeline;
150 class PopulateIndexNode;
151 class ProjNode;
152 class RangeCheckNode;
153 class RegMask;
154 class RegionNode;
155 class RootNode;
156 class SafePointNode;
157 class SafePointScalarObjectNode;
158 class StartNode;
159 class State;
160 class StoreNode;
161 class SubNode;
162 class SubTypeCheckNode;
163 class Type;
164 class TypeNode;
165 class UnlockNode;
166 class VectorNode;
167 class LoadVectorNode;
168 class LoadVectorMaskedNode;
169 class StoreVectorMaskedNode;
170 class LoadVectorGatherNode;
171 class StoreVectorNode;
172 class StoreVectorScatterNode;
173 class VectorMaskCmpNode;
174 class VectorUnboxNode;
175 class VectorSet;
176 class VectorReinterpretNode;
177 class ShiftVNode;
178 class ExpandVNode;
179 class CompressVNode;
180 class CompressMNode;
181
182
183 #ifndef OPTO_DU_ITERATOR_ASSERT
184 #ifdef ASSERT
185 #define OPTO_DU_ITERATOR_ASSERT 1
647 DEFINE_CLASS_ID(AllocateArray, Allocate, 0)
648 DEFINE_CLASS_ID(AbstractLock, Call, 3)
649 DEFINE_CLASS_ID(Lock, AbstractLock, 0)
650 DEFINE_CLASS_ID(Unlock, AbstractLock, 1)
651 DEFINE_CLASS_ID(ArrayCopy, Call, 4)
652 DEFINE_CLASS_ID(MultiBranch, Multi, 1)
653 DEFINE_CLASS_ID(PCTable, MultiBranch, 0)
654 DEFINE_CLASS_ID(Catch, PCTable, 0)
655 DEFINE_CLASS_ID(Jump, PCTable, 1)
656 DEFINE_CLASS_ID(If, MultiBranch, 1)
657 DEFINE_CLASS_ID(BaseCountedLoopEnd, If, 0)
658 DEFINE_CLASS_ID(CountedLoopEnd, BaseCountedLoopEnd, 0)
659 DEFINE_CLASS_ID(LongCountedLoopEnd, BaseCountedLoopEnd, 1)
660 DEFINE_CLASS_ID(RangeCheck, If, 1)
661 DEFINE_CLASS_ID(OuterStripMinedLoopEnd, If, 2)
662 DEFINE_CLASS_ID(NeverBranch, MultiBranch, 2)
663 DEFINE_CLASS_ID(Start, Multi, 2)
664 DEFINE_CLASS_ID(MemBar, Multi, 3)
665 DEFINE_CLASS_ID(Initialize, MemBar, 0)
666 DEFINE_CLASS_ID(MemBarStoreStore, MemBar, 1)
667
668 DEFINE_CLASS_ID(Mach, Node, 1)
669 DEFINE_CLASS_ID(MachReturn, Mach, 0)
670 DEFINE_CLASS_ID(MachSafePoint, MachReturn, 0)
671 DEFINE_CLASS_ID(MachCall, MachSafePoint, 0)
672 DEFINE_CLASS_ID(MachCallJava, MachCall, 0)
673 DEFINE_CLASS_ID(MachCallStaticJava, MachCallJava, 0)
674 DEFINE_CLASS_ID(MachCallDynamicJava, MachCallJava, 1)
675 DEFINE_CLASS_ID(MachCallRuntime, MachCall, 1)
676 DEFINE_CLASS_ID(MachCallLeaf, MachCallRuntime, 0)
677 DEFINE_CLASS_ID(MachBranch, Mach, 1)
678 DEFINE_CLASS_ID(MachIf, MachBranch, 0)
679 DEFINE_CLASS_ID(MachGoto, MachBranch, 1)
680 DEFINE_CLASS_ID(MachNullCheck, MachBranch, 2)
681 DEFINE_CLASS_ID(MachSpillCopy, Mach, 2)
682 DEFINE_CLASS_ID(MachTemp, Mach, 3)
683 DEFINE_CLASS_ID(MachConstantBase, Mach, 4)
684 DEFINE_CLASS_ID(MachConstant, Mach, 5)
685 DEFINE_CLASS_ID(MachJump, MachConstant, 0)
686 DEFINE_CLASS_ID(MachMerge, Mach, 6)
687 DEFINE_CLASS_ID(MachMemBar, Mach, 7)
688
689 DEFINE_CLASS_ID(Type, Node, 2)
690 DEFINE_CLASS_ID(Phi, Type, 0)
691 DEFINE_CLASS_ID(ConstraintCast, Type, 1)
692 DEFINE_CLASS_ID(CastII, ConstraintCast, 0)
693 DEFINE_CLASS_ID(CheckCastPP, ConstraintCast, 1)
694 DEFINE_CLASS_ID(CastLL, ConstraintCast, 2)
695 DEFINE_CLASS_ID(CastFF, ConstraintCast, 3)
696 DEFINE_CLASS_ID(CastDD, ConstraintCast, 4)
697 DEFINE_CLASS_ID(CastVV, ConstraintCast, 5)
698 DEFINE_CLASS_ID(CMove, Type, 3)
699 DEFINE_CLASS_ID(SafePointScalarObject, Type, 4)
700 DEFINE_CLASS_ID(DecodeNarrowPtr, Type, 5)
701 DEFINE_CLASS_ID(DecodeN, DecodeNarrowPtr, 0)
702 DEFINE_CLASS_ID(DecodeNKlass, DecodeNarrowPtr, 1)
703 DEFINE_CLASS_ID(EncodeNarrowPtr, Type, 6)
704 DEFINE_CLASS_ID(EncodeP, EncodeNarrowPtr, 0)
705 DEFINE_CLASS_ID(EncodePKlass, EncodeNarrowPtr, 1)
706 DEFINE_CLASS_ID(Vector, Type, 7)
707 DEFINE_CLASS_ID(VectorMaskCmp, Vector, 0)
708 DEFINE_CLASS_ID(VectorUnbox, Vector, 1)
709 DEFINE_CLASS_ID(VectorReinterpret, Vector, 2)
710 DEFINE_CLASS_ID(ShiftV, Vector, 3)
711 DEFINE_CLASS_ID(CompressV, Vector, 4)
712 DEFINE_CLASS_ID(ExpandV, Vector, 5)
713 DEFINE_CLASS_ID(CompressM, Vector, 6)
714
715 DEFINE_CLASS_ID(Proj, Node, 3)
716 DEFINE_CLASS_ID(CatchProj, Proj, 0)
717 DEFINE_CLASS_ID(JumpProj, Proj, 1)
718 DEFINE_CLASS_ID(IfProj, Proj, 2)
719 DEFINE_CLASS_ID(IfTrue, IfProj, 0)
720 DEFINE_CLASS_ID(IfFalse, IfProj, 1)
721 DEFINE_CLASS_ID(Parm, Proj, 4)
722 DEFINE_CLASS_ID(MachProj, Proj, 5)
723
724 DEFINE_CLASS_ID(Mem, Node, 4)
725 DEFINE_CLASS_ID(Load, Mem, 0)
726 DEFINE_CLASS_ID(LoadVector, Load, 0)
727 DEFINE_CLASS_ID(LoadVectorGather, LoadVector, 0)
728 DEFINE_CLASS_ID(LoadVectorGatherMasked, LoadVector, 1)
729 DEFINE_CLASS_ID(LoadVectorMasked, LoadVector, 2)
730 DEFINE_CLASS_ID(Store, Mem, 1)
731 DEFINE_CLASS_ID(StoreVector, Store, 0)
732 DEFINE_CLASS_ID(StoreVectorScatter, StoreVector, 0)
733 DEFINE_CLASS_ID(StoreVectorScatterMasked, StoreVector, 1)
734 DEFINE_CLASS_ID(StoreVectorMasked, StoreVector, 2)
735 DEFINE_CLASS_ID(LoadStore, Mem, 2)
736 DEFINE_CLASS_ID(LoadStoreConditional, LoadStore, 0)
737 DEFINE_CLASS_ID(CompareAndSwap, LoadStoreConditional, 0)
738 DEFINE_CLASS_ID(CompareAndExchangeNode, LoadStore, 1)
739
740 DEFINE_CLASS_ID(Region, Node, 5)
741 DEFINE_CLASS_ID(Loop, Region, 0)
742 DEFINE_CLASS_ID(Root, Loop, 0)
743 DEFINE_CLASS_ID(BaseCountedLoop, Loop, 1)
744 DEFINE_CLASS_ID(CountedLoop, BaseCountedLoop, 0)
745 DEFINE_CLASS_ID(LongCountedLoop, BaseCountedLoop, 1)
746 DEFINE_CLASS_ID(OuterStripMinedLoop, Loop, 2)
747
748 DEFINE_CLASS_ID(Sub, Node, 6)
749 DEFINE_CLASS_ID(Cmp, Sub, 0)
750 DEFINE_CLASS_ID(FastLock, Cmp, 0)
751 DEFINE_CLASS_ID(FastUnlock, Cmp, 1)
752 DEFINE_CLASS_ID(SubTypeCheck,Cmp, 2)
753
754 DEFINE_CLASS_ID(MergeMem, Node, 7)
755 DEFINE_CLASS_ID(Bool, Node, 8)
756 DEFINE_CLASS_ID(AddP, Node, 9)
757 DEFINE_CLASS_ID(BoxLock, Node, 10)
758 DEFINE_CLASS_ID(Add, Node, 11)
759 DEFINE_CLASS_ID(Mul, Node, 12)
760 DEFINE_CLASS_ID(ClearArray, Node, 14)
761 DEFINE_CLASS_ID(Halt, Node, 15)
762 DEFINE_CLASS_ID(Opaque1, Node, 16)
763 DEFINE_CLASS_ID(Move, Node, 17)
764 DEFINE_CLASS_ID(LShift, Node, 18)
765
766 _max_classes = ClassMask_LShift
767 };
768 #undef DEFINE_CLASS_ID
769
770 // Flags are sorted by usage frequency.
771 enum NodeFlags {
772 Flag_is_Copy = 1 << 0, // should be first bit to avoid shift
831 #define DEFINE_CLASS_QUERY(type) \
832 bool is_##type() const { \
833 return ((_class_id & ClassMask_##type) == Class_##type); \
834 } \
835 type##Node *as_##type() const { \
836 assert(is_##type(), "invalid node class: %s", Name()); \
837 return (type##Node*)this; \
838 } \
839 type##Node* isa_##type() const { \
840 return (is_##type()) ? as_##type() : NULL; \
841 }
842
843 DEFINE_CLASS_QUERY(AbstractLock)
844 DEFINE_CLASS_QUERY(Add)
845 DEFINE_CLASS_QUERY(AddP)
846 DEFINE_CLASS_QUERY(Allocate)
847 DEFINE_CLASS_QUERY(AllocateArray)
848 DEFINE_CLASS_QUERY(ArrayCopy)
849 DEFINE_CLASS_QUERY(BaseCountedLoop)
850 DEFINE_CLASS_QUERY(BaseCountedLoopEnd)
851 DEFINE_CLASS_QUERY(Bool)
852 DEFINE_CLASS_QUERY(BoxLock)
853 DEFINE_CLASS_QUERY(Call)
854 DEFINE_CLASS_QUERY(CallDynamicJava)
855 DEFINE_CLASS_QUERY(CallJava)
856 DEFINE_CLASS_QUERY(CallLeaf)
857 DEFINE_CLASS_QUERY(CallLeafNoFP)
858 DEFINE_CLASS_QUERY(CallRuntime)
859 DEFINE_CLASS_QUERY(CallStaticJava)
860 DEFINE_CLASS_QUERY(Catch)
861 DEFINE_CLASS_QUERY(CatchProj)
862 DEFINE_CLASS_QUERY(CheckCastPP)
863 DEFINE_CLASS_QUERY(CastII)
864 DEFINE_CLASS_QUERY(CastLL)
865 DEFINE_CLASS_QUERY(ConstraintCast)
866 DEFINE_CLASS_QUERY(ClearArray)
867 DEFINE_CLASS_QUERY(CMove)
868 DEFINE_CLASS_QUERY(Cmp)
869 DEFINE_CLASS_QUERY(CountedLoop)
870 DEFINE_CLASS_QUERY(CountedLoopEnd)
871 DEFINE_CLASS_QUERY(DecodeNarrowPtr)
872 DEFINE_CLASS_QUERY(DecodeN)
873 DEFINE_CLASS_QUERY(DecodeNKlass)
874 DEFINE_CLASS_QUERY(EncodeNarrowPtr)
875 DEFINE_CLASS_QUERY(EncodeP)
876 DEFINE_CLASS_QUERY(EncodePKlass)
877 DEFINE_CLASS_QUERY(FastLock)
878 DEFINE_CLASS_QUERY(FastUnlock)
879 DEFINE_CLASS_QUERY(Halt)
880 DEFINE_CLASS_QUERY(If)
881 DEFINE_CLASS_QUERY(RangeCheck)
882 DEFINE_CLASS_QUERY(IfProj)
883 DEFINE_CLASS_QUERY(IfFalse)
884 DEFINE_CLASS_QUERY(IfTrue)
885 DEFINE_CLASS_QUERY(Initialize)
886 DEFINE_CLASS_QUERY(Jump)
887 DEFINE_CLASS_QUERY(JumpProj)
888 DEFINE_CLASS_QUERY(LongCountedLoop)
889 DEFINE_CLASS_QUERY(LongCountedLoopEnd)
890 DEFINE_CLASS_QUERY(Load)
891 DEFINE_CLASS_QUERY(LoadStore)
892 DEFINE_CLASS_QUERY(LoadStoreConditional)
893 DEFINE_CLASS_QUERY(Lock)
894 DEFINE_CLASS_QUERY(Loop)
895 DEFINE_CLASS_QUERY(LShift)
896 DEFINE_CLASS_QUERY(Mach)
897 DEFINE_CLASS_QUERY(MachBranch)
898 DEFINE_CLASS_QUERY(MachCall)
899 DEFINE_CLASS_QUERY(MachCallDynamicJava)
900 DEFINE_CLASS_QUERY(MachCallJava)
901 DEFINE_CLASS_QUERY(MachCallLeaf)
902 DEFINE_CLASS_QUERY(MachCallRuntime)
903 DEFINE_CLASS_QUERY(MachCallStaticJava)
904 DEFINE_CLASS_QUERY(MachConstantBase)
905 DEFINE_CLASS_QUERY(MachConstant)
906 DEFINE_CLASS_QUERY(MachGoto)
907 DEFINE_CLASS_QUERY(MachIf)
908 DEFINE_CLASS_QUERY(MachJump)
909 DEFINE_CLASS_QUERY(MachNullCheck)
910 DEFINE_CLASS_QUERY(MachProj)
911 DEFINE_CLASS_QUERY(MachReturn)
912 DEFINE_CLASS_QUERY(MachSafePoint)
913 DEFINE_CLASS_QUERY(MachSpillCopy)
914 DEFINE_CLASS_QUERY(MachTemp)
915 DEFINE_CLASS_QUERY(MachMemBar)
916 DEFINE_CLASS_QUERY(MachMerge)
917 DEFINE_CLASS_QUERY(Mem)
918 DEFINE_CLASS_QUERY(MemBar)
919 DEFINE_CLASS_QUERY(MemBarStoreStore)
920 DEFINE_CLASS_QUERY(MergeMem)
921 DEFINE_CLASS_QUERY(Move)
922 DEFINE_CLASS_QUERY(Mul)
923 DEFINE_CLASS_QUERY(Multi)
924 DEFINE_CLASS_QUERY(MultiBranch)
925 DEFINE_CLASS_QUERY(NeverBranch)
926 DEFINE_CLASS_QUERY(Opaque1)
927 DEFINE_CLASS_QUERY(OuterStripMinedLoop)
928 DEFINE_CLASS_QUERY(OuterStripMinedLoopEnd)
929 DEFINE_CLASS_QUERY(Parm)
930 DEFINE_CLASS_QUERY(PCTable)
931 DEFINE_CLASS_QUERY(Phi)
932 DEFINE_CLASS_QUERY(Proj)
933 DEFINE_CLASS_QUERY(Region)
934 DEFINE_CLASS_QUERY(Root)
935 DEFINE_CLASS_QUERY(SafePoint)
936 DEFINE_CLASS_QUERY(SafePointScalarObject)
937 DEFINE_CLASS_QUERY(Start)
938 DEFINE_CLASS_QUERY(Store)
939 DEFINE_CLASS_QUERY(Sub)
940 DEFINE_CLASS_QUERY(SubTypeCheck)
941 DEFINE_CLASS_QUERY(Type)
942 DEFINE_CLASS_QUERY(Vector)
943 DEFINE_CLASS_QUERY(VectorMaskCmp)
944 DEFINE_CLASS_QUERY(VectorUnbox)
945 DEFINE_CLASS_QUERY(VectorReinterpret)
946 DEFINE_CLASS_QUERY(CompressV)
947 DEFINE_CLASS_QUERY(ExpandV)
948 DEFINE_CLASS_QUERY(CompressM)
949 DEFINE_CLASS_QUERY(LoadVector)
950 DEFINE_CLASS_QUERY(LoadVectorGather)
951 DEFINE_CLASS_QUERY(StoreVector)
952 DEFINE_CLASS_QUERY(StoreVectorScatter)
953 DEFINE_CLASS_QUERY(ShiftV)
954 DEFINE_CLASS_QUERY(Unlock)
955
956 #undef DEFINE_CLASS_QUERY
957
958 // duplicate of is_MachSpillCopy()
959 bool is_SpillCopy () const {
960 return ((_class_id & ClassMask_MachSpillCopy) == Class_MachSpillCopy);
961 }
|
64 class CatchNode;
65 class CatchProjNode;
66 class CheckCastPPNode;
67 class ClearArrayNode;
68 class CmpNode;
69 class CodeBuffer;
70 class ConstraintCastNode;
71 class ConNode;
72 class CompareAndSwapNode;
73 class CompareAndExchangeNode;
74 class CountedLoopNode;
75 class CountedLoopEndNode;
76 class DecodeNarrowPtrNode;
77 class DecodeNNode;
78 class DecodeNKlassNode;
79 class EncodeNarrowPtrNode;
80 class EncodePNode;
81 class EncodePKlassNode;
82 class FastLockNode;
83 class FastUnlockNode;
84 class FlatArrayCheckNode;
85 class HaltNode;
86 class IfNode;
87 class IfProjNode;
88 class IfFalseNode;
89 class IfTrueNode;
90 class InitializeNode;
91 class JVMState;
92 class JumpNode;
93 class JumpProjNode;
94 class LoadNode;
95 class LoadStoreNode;
96 class LoadStoreConditionalNode;
97 class LockNode;
98 class LongCountedLoopNode;
99 class LongCountedLoopEndNode;
100 class LoopNode;
101 class LShiftNode;
102 class MachBranchNode;
103 class MachCallDynamicJavaNode;
104 class MachCallJavaNode;
105 class MachCallLeafNode;
106 class MachCallNode;
107 class MachCallRuntimeNode;
108 class MachCallStaticJavaNode;
109 class MachConstantBaseNode;
110 class MachConstantNode;
111 class MachGotoNode;
112 class MachIfNode;
113 class MachJumpNode;
114 class MachNode;
115 class MachNullCheckNode;
116 class MachProjNode;
117 class MachPrologNode;
118 class MachReturnNode;
119 class MachSafePointNode;
120 class MachSpillCopyNode;
121 class MachTempNode;
122 class MachMergeNode;
123 class MachMemBarNode;
124 class MachVEPNode;
125 class Matcher;
126 class MemBarNode;
127 class MemBarStoreStoreNode;
128 class MemNode;
129 class MergeMemNode;
130 class MoveNode;
131 class MulNode;
132 class MultiNode;
133 class MultiBranchNode;
134 class NeverBranchNode;
135 class Opaque1Node;
136 class OuterStripMinedLoopNode;
137 class OuterStripMinedLoopEndNode;
138 class Node;
139 class Node_Array;
140 class Node_List;
141 class Node_Stack;
142 class OopMap;
143 class ParmNode;
144 class PCTableNode;
149 class PhaseTransform;
150 class PhaseValues;
151 class PhiNode;
152 class Pipeline;
153 class PopulateIndexNode;
154 class ProjNode;
155 class RangeCheckNode;
156 class RegMask;
157 class RegionNode;
158 class RootNode;
159 class SafePointNode;
160 class SafePointScalarObjectNode;
161 class StartNode;
162 class State;
163 class StoreNode;
164 class SubNode;
165 class SubTypeCheckNode;
166 class Type;
167 class TypeNode;
168 class UnlockNode;
169 class InlineTypeNode;
170 class VectorNode;
171 class LoadVectorNode;
172 class LoadVectorMaskedNode;
173 class StoreVectorMaskedNode;
174 class LoadVectorGatherNode;
175 class StoreVectorNode;
176 class StoreVectorScatterNode;
177 class VectorMaskCmpNode;
178 class VectorUnboxNode;
179 class VectorSet;
180 class VectorReinterpretNode;
181 class ShiftVNode;
182 class ExpandVNode;
183 class CompressVNode;
184 class CompressMNode;
185
186
187 #ifndef OPTO_DU_ITERATOR_ASSERT
188 #ifdef ASSERT
189 #define OPTO_DU_ITERATOR_ASSERT 1
651 DEFINE_CLASS_ID(AllocateArray, Allocate, 0)
652 DEFINE_CLASS_ID(AbstractLock, Call, 3)
653 DEFINE_CLASS_ID(Lock, AbstractLock, 0)
654 DEFINE_CLASS_ID(Unlock, AbstractLock, 1)
655 DEFINE_CLASS_ID(ArrayCopy, Call, 4)
656 DEFINE_CLASS_ID(MultiBranch, Multi, 1)
657 DEFINE_CLASS_ID(PCTable, MultiBranch, 0)
658 DEFINE_CLASS_ID(Catch, PCTable, 0)
659 DEFINE_CLASS_ID(Jump, PCTable, 1)
660 DEFINE_CLASS_ID(If, MultiBranch, 1)
661 DEFINE_CLASS_ID(BaseCountedLoopEnd, If, 0)
662 DEFINE_CLASS_ID(CountedLoopEnd, BaseCountedLoopEnd, 0)
663 DEFINE_CLASS_ID(LongCountedLoopEnd, BaseCountedLoopEnd, 1)
664 DEFINE_CLASS_ID(RangeCheck, If, 1)
665 DEFINE_CLASS_ID(OuterStripMinedLoopEnd, If, 2)
666 DEFINE_CLASS_ID(NeverBranch, MultiBranch, 2)
667 DEFINE_CLASS_ID(Start, Multi, 2)
668 DEFINE_CLASS_ID(MemBar, Multi, 3)
669 DEFINE_CLASS_ID(Initialize, MemBar, 0)
670 DEFINE_CLASS_ID(MemBarStoreStore, MemBar, 1)
671 DEFINE_CLASS_ID(Blackhole, MemBar, 2)
672
673 DEFINE_CLASS_ID(Mach, Node, 1)
674 DEFINE_CLASS_ID(MachReturn, Mach, 0)
675 DEFINE_CLASS_ID(MachSafePoint, MachReturn, 0)
676 DEFINE_CLASS_ID(MachCall, MachSafePoint, 0)
677 DEFINE_CLASS_ID(MachCallJava, MachCall, 0)
678 DEFINE_CLASS_ID(MachCallStaticJava, MachCallJava, 0)
679 DEFINE_CLASS_ID(MachCallDynamicJava, MachCallJava, 1)
680 DEFINE_CLASS_ID(MachCallRuntime, MachCall, 1)
681 DEFINE_CLASS_ID(MachCallLeaf, MachCallRuntime, 0)
682 DEFINE_CLASS_ID(MachBranch, Mach, 1)
683 DEFINE_CLASS_ID(MachIf, MachBranch, 0)
684 DEFINE_CLASS_ID(MachGoto, MachBranch, 1)
685 DEFINE_CLASS_ID(MachNullCheck, MachBranch, 2)
686 DEFINE_CLASS_ID(MachSpillCopy, Mach, 2)
687 DEFINE_CLASS_ID(MachTemp, Mach, 3)
688 DEFINE_CLASS_ID(MachConstantBase, Mach, 4)
689 DEFINE_CLASS_ID(MachConstant, Mach, 5)
690 DEFINE_CLASS_ID(MachJump, MachConstant, 0)
691 DEFINE_CLASS_ID(MachMerge, Mach, 6)
692 DEFINE_CLASS_ID(MachMemBar, Mach, 7)
693 DEFINE_CLASS_ID(MachProlog, Mach, 8)
694 DEFINE_CLASS_ID(MachVEP, Mach, 9)
695
696 DEFINE_CLASS_ID(Type, Node, 2)
697 DEFINE_CLASS_ID(Phi, Type, 0)
698 DEFINE_CLASS_ID(ConstraintCast, Type, 1)
699 DEFINE_CLASS_ID(CastII, ConstraintCast, 0)
700 DEFINE_CLASS_ID(CheckCastPP, ConstraintCast, 1)
701 DEFINE_CLASS_ID(CastLL, ConstraintCast, 2)
702 DEFINE_CLASS_ID(CastFF, ConstraintCast, 3)
703 DEFINE_CLASS_ID(CastDD, ConstraintCast, 4)
704 DEFINE_CLASS_ID(CastVV, ConstraintCast, 5)
705 DEFINE_CLASS_ID(CMove, Type, 3)
706 DEFINE_CLASS_ID(SafePointScalarObject, Type, 4)
707 DEFINE_CLASS_ID(DecodeNarrowPtr, Type, 5)
708 DEFINE_CLASS_ID(DecodeN, DecodeNarrowPtr, 0)
709 DEFINE_CLASS_ID(DecodeNKlass, DecodeNarrowPtr, 1)
710 DEFINE_CLASS_ID(EncodeNarrowPtr, Type, 6)
711 DEFINE_CLASS_ID(EncodeP, EncodeNarrowPtr, 0)
712 DEFINE_CLASS_ID(EncodePKlass, EncodeNarrowPtr, 1)
713 DEFINE_CLASS_ID(Vector, Type, 7)
714 DEFINE_CLASS_ID(VectorMaskCmp, Vector, 0)
715 DEFINE_CLASS_ID(VectorUnbox, Vector, 1)
716 DEFINE_CLASS_ID(VectorReinterpret, Vector, 2)
717 DEFINE_CLASS_ID(ShiftV, Vector, 3)
718 DEFINE_CLASS_ID(CompressV, Vector, 4)
719 DEFINE_CLASS_ID(ExpandV, Vector, 5)
720 DEFINE_CLASS_ID(CompressM, Vector, 6)
721 DEFINE_CLASS_ID(InlineType, Type, 8)
722
723 DEFINE_CLASS_ID(Proj, Node, 3)
724 DEFINE_CLASS_ID(CatchProj, Proj, 0)
725 DEFINE_CLASS_ID(JumpProj, Proj, 1)
726 DEFINE_CLASS_ID(IfProj, Proj, 2)
727 DEFINE_CLASS_ID(IfTrue, IfProj, 0)
728 DEFINE_CLASS_ID(IfFalse, IfProj, 1)
729 DEFINE_CLASS_ID(Parm, Proj, 4)
730 DEFINE_CLASS_ID(MachProj, Proj, 5)
731
732 DEFINE_CLASS_ID(Mem, Node, 4)
733 DEFINE_CLASS_ID(Load, Mem, 0)
734 DEFINE_CLASS_ID(LoadVector, Load, 0)
735 DEFINE_CLASS_ID(LoadVectorGather, LoadVector, 0)
736 DEFINE_CLASS_ID(LoadVectorGatherMasked, LoadVector, 1)
737 DEFINE_CLASS_ID(LoadVectorMasked, LoadVector, 2)
738 DEFINE_CLASS_ID(Store, Mem, 1)
739 DEFINE_CLASS_ID(StoreVector, Store, 0)
740 DEFINE_CLASS_ID(StoreVectorScatter, StoreVector, 0)
741 DEFINE_CLASS_ID(StoreVectorScatterMasked, StoreVector, 1)
742 DEFINE_CLASS_ID(StoreVectorMasked, StoreVector, 2)
743 DEFINE_CLASS_ID(LoadStore, Mem, 2)
744 DEFINE_CLASS_ID(LoadStoreConditional, LoadStore, 0)
745 DEFINE_CLASS_ID(CompareAndSwap, LoadStoreConditional, 0)
746 DEFINE_CLASS_ID(CompareAndExchangeNode, LoadStore, 1)
747
748 DEFINE_CLASS_ID(Region, Node, 5)
749 DEFINE_CLASS_ID(Loop, Region, 0)
750 DEFINE_CLASS_ID(Root, Loop, 0)
751 DEFINE_CLASS_ID(BaseCountedLoop, Loop, 1)
752 DEFINE_CLASS_ID(CountedLoop, BaseCountedLoop, 0)
753 DEFINE_CLASS_ID(LongCountedLoop, BaseCountedLoop, 1)
754 DEFINE_CLASS_ID(OuterStripMinedLoop, Loop, 2)
755
756 DEFINE_CLASS_ID(Sub, Node, 6)
757 DEFINE_CLASS_ID(Cmp, Sub, 0)
758 DEFINE_CLASS_ID(FastLock, Cmp, 0)
759 DEFINE_CLASS_ID(FastUnlock, Cmp, 1)
760 DEFINE_CLASS_ID(SubTypeCheck, Cmp, 2)
761 DEFINE_CLASS_ID(FlatArrayCheck, Cmp, 3)
762
763 DEFINE_CLASS_ID(MergeMem, Node, 7)
764 DEFINE_CLASS_ID(Bool, Node, 8)
765 DEFINE_CLASS_ID(AddP, Node, 9)
766 DEFINE_CLASS_ID(BoxLock, Node, 10)
767 DEFINE_CLASS_ID(Add, Node, 11)
768 DEFINE_CLASS_ID(Mul, Node, 12)
769 DEFINE_CLASS_ID(ClearArray, Node, 14)
770 DEFINE_CLASS_ID(Halt, Node, 15)
771 DEFINE_CLASS_ID(Opaque1, Node, 16)
772 DEFINE_CLASS_ID(Move, Node, 17)
773 DEFINE_CLASS_ID(LShift, Node, 18)
774
775 _max_classes = ClassMask_LShift
776 };
777 #undef DEFINE_CLASS_ID
778
779 // Flags are sorted by usage frequency.
780 enum NodeFlags {
781 Flag_is_Copy = 1 << 0, // should be first bit to avoid shift
840 #define DEFINE_CLASS_QUERY(type) \
841 bool is_##type() const { \
842 return ((_class_id & ClassMask_##type) == Class_##type); \
843 } \
844 type##Node *as_##type() const { \
845 assert(is_##type(), "invalid node class: %s", Name()); \
846 return (type##Node*)this; \
847 } \
848 type##Node* isa_##type() const { \
849 return (is_##type()) ? as_##type() : NULL; \
850 }
851
852 DEFINE_CLASS_QUERY(AbstractLock)
853 DEFINE_CLASS_QUERY(Add)
854 DEFINE_CLASS_QUERY(AddP)
855 DEFINE_CLASS_QUERY(Allocate)
856 DEFINE_CLASS_QUERY(AllocateArray)
857 DEFINE_CLASS_QUERY(ArrayCopy)
858 DEFINE_CLASS_QUERY(BaseCountedLoop)
859 DEFINE_CLASS_QUERY(BaseCountedLoopEnd)
860 DEFINE_CLASS_QUERY(Blackhole)
861 DEFINE_CLASS_QUERY(Bool)
862 DEFINE_CLASS_QUERY(BoxLock)
863 DEFINE_CLASS_QUERY(Call)
864 DEFINE_CLASS_QUERY(CallDynamicJava)
865 DEFINE_CLASS_QUERY(CallJava)
866 DEFINE_CLASS_QUERY(CallLeaf)
867 DEFINE_CLASS_QUERY(CallLeafNoFP)
868 DEFINE_CLASS_QUERY(CallRuntime)
869 DEFINE_CLASS_QUERY(CallStaticJava)
870 DEFINE_CLASS_QUERY(Catch)
871 DEFINE_CLASS_QUERY(CatchProj)
872 DEFINE_CLASS_QUERY(CheckCastPP)
873 DEFINE_CLASS_QUERY(CastII)
874 DEFINE_CLASS_QUERY(CastLL)
875 DEFINE_CLASS_QUERY(ConstraintCast)
876 DEFINE_CLASS_QUERY(ClearArray)
877 DEFINE_CLASS_QUERY(CMove)
878 DEFINE_CLASS_QUERY(Cmp)
879 DEFINE_CLASS_QUERY(CountedLoop)
880 DEFINE_CLASS_QUERY(CountedLoopEnd)
881 DEFINE_CLASS_QUERY(DecodeNarrowPtr)
882 DEFINE_CLASS_QUERY(DecodeN)
883 DEFINE_CLASS_QUERY(DecodeNKlass)
884 DEFINE_CLASS_QUERY(EncodeNarrowPtr)
885 DEFINE_CLASS_QUERY(EncodeP)
886 DEFINE_CLASS_QUERY(EncodePKlass)
887 DEFINE_CLASS_QUERY(FastLock)
888 DEFINE_CLASS_QUERY(FastUnlock)
889 DEFINE_CLASS_QUERY(FlatArrayCheck)
890 DEFINE_CLASS_QUERY(Halt)
891 DEFINE_CLASS_QUERY(If)
892 DEFINE_CLASS_QUERY(RangeCheck)
893 DEFINE_CLASS_QUERY(IfProj)
894 DEFINE_CLASS_QUERY(IfFalse)
895 DEFINE_CLASS_QUERY(IfTrue)
896 DEFINE_CLASS_QUERY(Initialize)
897 DEFINE_CLASS_QUERY(Jump)
898 DEFINE_CLASS_QUERY(JumpProj)
899 DEFINE_CLASS_QUERY(LongCountedLoop)
900 DEFINE_CLASS_QUERY(LongCountedLoopEnd)
901 DEFINE_CLASS_QUERY(Load)
902 DEFINE_CLASS_QUERY(LoadStore)
903 DEFINE_CLASS_QUERY(LoadStoreConditional)
904 DEFINE_CLASS_QUERY(Lock)
905 DEFINE_CLASS_QUERY(Loop)
906 DEFINE_CLASS_QUERY(LShift)
907 DEFINE_CLASS_QUERY(Mach)
908 DEFINE_CLASS_QUERY(MachBranch)
909 DEFINE_CLASS_QUERY(MachCall)
910 DEFINE_CLASS_QUERY(MachCallDynamicJava)
911 DEFINE_CLASS_QUERY(MachCallJava)
912 DEFINE_CLASS_QUERY(MachCallLeaf)
913 DEFINE_CLASS_QUERY(MachCallRuntime)
914 DEFINE_CLASS_QUERY(MachCallStaticJava)
915 DEFINE_CLASS_QUERY(MachConstantBase)
916 DEFINE_CLASS_QUERY(MachConstant)
917 DEFINE_CLASS_QUERY(MachGoto)
918 DEFINE_CLASS_QUERY(MachIf)
919 DEFINE_CLASS_QUERY(MachJump)
920 DEFINE_CLASS_QUERY(MachNullCheck)
921 DEFINE_CLASS_QUERY(MachProj)
922 DEFINE_CLASS_QUERY(MachProlog)
923 DEFINE_CLASS_QUERY(MachReturn)
924 DEFINE_CLASS_QUERY(MachSafePoint)
925 DEFINE_CLASS_QUERY(MachSpillCopy)
926 DEFINE_CLASS_QUERY(MachTemp)
927 DEFINE_CLASS_QUERY(MachMemBar)
928 DEFINE_CLASS_QUERY(MachMerge)
929 DEFINE_CLASS_QUERY(MachVEP)
930 DEFINE_CLASS_QUERY(Mem)
931 DEFINE_CLASS_QUERY(MemBar)
932 DEFINE_CLASS_QUERY(MemBarStoreStore)
933 DEFINE_CLASS_QUERY(MergeMem)
934 DEFINE_CLASS_QUERY(Move)
935 DEFINE_CLASS_QUERY(Mul)
936 DEFINE_CLASS_QUERY(Multi)
937 DEFINE_CLASS_QUERY(MultiBranch)
938 DEFINE_CLASS_QUERY(NeverBranch)
939 DEFINE_CLASS_QUERY(Opaque1)
940 DEFINE_CLASS_QUERY(OuterStripMinedLoop)
941 DEFINE_CLASS_QUERY(OuterStripMinedLoopEnd)
942 DEFINE_CLASS_QUERY(Parm)
943 DEFINE_CLASS_QUERY(PCTable)
944 DEFINE_CLASS_QUERY(Phi)
945 DEFINE_CLASS_QUERY(Proj)
946 DEFINE_CLASS_QUERY(Region)
947 DEFINE_CLASS_QUERY(Root)
948 DEFINE_CLASS_QUERY(SafePoint)
949 DEFINE_CLASS_QUERY(SafePointScalarObject)
950 DEFINE_CLASS_QUERY(Start)
951 DEFINE_CLASS_QUERY(Store)
952 DEFINE_CLASS_QUERY(Sub)
953 DEFINE_CLASS_QUERY(SubTypeCheck)
954 DEFINE_CLASS_QUERY(Type)
955 DEFINE_CLASS_QUERY(InlineType)
956 DEFINE_CLASS_QUERY(Vector)
957 DEFINE_CLASS_QUERY(VectorMaskCmp)
958 DEFINE_CLASS_QUERY(VectorUnbox)
959 DEFINE_CLASS_QUERY(VectorReinterpret)
960 DEFINE_CLASS_QUERY(CompressV)
961 DEFINE_CLASS_QUERY(ExpandV)
962 DEFINE_CLASS_QUERY(CompressM)
963 DEFINE_CLASS_QUERY(LoadVector)
964 DEFINE_CLASS_QUERY(LoadVectorGather)
965 DEFINE_CLASS_QUERY(StoreVector)
966 DEFINE_CLASS_QUERY(StoreVectorScatter)
967 DEFINE_CLASS_QUERY(ShiftV)
968 DEFINE_CLASS_QUERY(Unlock)
969
970 #undef DEFINE_CLASS_QUERY
971
972 // duplicate of is_MachSpillCopy()
973 bool is_SpillCopy () const {
974 return ((_class_id & ClassMask_MachSpillCopy) == Class_MachSpillCopy);
975 }
|