85 class LoadBarrierSlowRegNode;
86 class LoadBarrierWeakSlowRegNode;
87 class LoadStoreNode;
88 class LockNode;
89 class LoopNode;
90 class MachBranchNode;
91 class MachCallDynamicJavaNode;
92 class MachCallJavaNode;
93 class MachCallLeafNode;
94 class MachCallNode;
95 class MachCallRuntimeNode;
96 class MachCallStaticJavaNode;
97 class MachConstantBaseNode;
98 class MachConstantNode;
99 class MachGotoNode;
100 class MachIfNode;
101 class MachJumpNode;
102 class MachNode;
103 class MachNullCheckNode;
104 class MachProjNode;
105 class MachReturnNode;
106 class MachSafePointNode;
107 class MachSpillCopyNode;
108 class MachTempNode;
109 class MachMergeNode;
110 class MachMemBarNode;
111 class Matcher;
112 class MemBarNode;
113 class MemBarStoreStoreNode;
114 class MemNode;
115 class MergeMemNode;
116 class MulNode;
117 class MultiNode;
118 class MultiBranchNode;
119 class NeverBranchNode;
120 class OuterStripMinedLoopNode;
121 class OuterStripMinedLoopEndNode;
122 class Node;
123 class Node_Array;
124 class Node_List;
133 class PhaseRegAlloc;
134 class PhaseTransform;
135 class PhaseValues;
136 class PhiNode;
137 class Pipeline;
138 class ProjNode;
139 class RangeCheckNode;
140 class RegMask;
141 class RegionNode;
142 class RootNode;
143 class SafePointNode;
144 class SafePointScalarObjectNode;
145 class ShenandoahBarrierNode;
146 class StartNode;
147 class State;
148 class StoreNode;
149 class SubNode;
150 class Type;
151 class TypeNode;
152 class UnlockNode;
153 class VectorNode;
154 class LoadVectorNode;
155 class StoreVectorNode;
156 class VectorSet;
157 typedef void (*NFunc)(Node&,void*);
158 extern "C" {
159 typedef int (*C_sort_func_t)(const void *, const void *);
160 }
161
162 // The type of all node counts and indexes.
163 // It must hold at least 16 bits, but must also be fast to load and store.
164 // This type, if less than 32 bits, could limit the number of possible nodes.
165 // (To make this type platform-specific, move to globalDefinitions_xxx.hpp.)
166 typedef unsigned int node_idx_t;
167
168
169 #ifndef OPTO_DU_ITERATOR_ASSERT
170 #ifdef ASSERT
171 #define OPTO_DU_ITERATOR_ASSERT 1
172 #else
645 DEFINE_CLASS_ID(Mach, Node, 1)
646 DEFINE_CLASS_ID(MachReturn, Mach, 0)
647 DEFINE_CLASS_ID(MachSafePoint, MachReturn, 0)
648 DEFINE_CLASS_ID(MachCall, MachSafePoint, 0)
649 DEFINE_CLASS_ID(MachCallJava, MachCall, 0)
650 DEFINE_CLASS_ID(MachCallStaticJava, MachCallJava, 0)
651 DEFINE_CLASS_ID(MachCallDynamicJava, MachCallJava, 1)
652 DEFINE_CLASS_ID(MachCallRuntime, MachCall, 1)
653 DEFINE_CLASS_ID(MachCallLeaf, MachCallRuntime, 0)
654 DEFINE_CLASS_ID(MachBranch, Mach, 1)
655 DEFINE_CLASS_ID(MachIf, MachBranch, 0)
656 DEFINE_CLASS_ID(MachGoto, MachBranch, 1)
657 DEFINE_CLASS_ID(MachNullCheck, MachBranch, 2)
658 DEFINE_CLASS_ID(MachSpillCopy, Mach, 2)
659 DEFINE_CLASS_ID(MachTemp, Mach, 3)
660 DEFINE_CLASS_ID(MachConstantBase, Mach, 4)
661 DEFINE_CLASS_ID(MachConstant, Mach, 5)
662 DEFINE_CLASS_ID(MachJump, MachConstant, 0)
663 DEFINE_CLASS_ID(MachMerge, Mach, 6)
664 DEFINE_CLASS_ID(MachMemBar, Mach, 7)
665
666 DEFINE_CLASS_ID(Type, Node, 2)
667 DEFINE_CLASS_ID(Phi, Type, 0)
668 DEFINE_CLASS_ID(ConstraintCast, Type, 1)
669 DEFINE_CLASS_ID(CastII, ConstraintCast, 0)
670 DEFINE_CLASS_ID(CheckCastPP, ConstraintCast, 1)
671 DEFINE_CLASS_ID(CMove, Type, 3)
672 DEFINE_CLASS_ID(SafePointScalarObject, Type, 4)
673 DEFINE_CLASS_ID(DecodeNarrowPtr, Type, 5)
674 DEFINE_CLASS_ID(DecodeN, DecodeNarrowPtr, 0)
675 DEFINE_CLASS_ID(DecodeNKlass, DecodeNarrowPtr, 1)
676 DEFINE_CLASS_ID(EncodeNarrowPtr, Type, 6)
677 DEFINE_CLASS_ID(EncodeP, EncodeNarrowPtr, 0)
678 DEFINE_CLASS_ID(EncodePKlass, EncodeNarrowPtr, 1)
679 DEFINE_CLASS_ID(ShenandoahBarrier, Type, 7)
680
681 DEFINE_CLASS_ID(Proj, Node, 3)
682 DEFINE_CLASS_ID(CatchProj, Proj, 0)
683 DEFINE_CLASS_ID(JumpProj, Proj, 1)
684 DEFINE_CLASS_ID(IfProj, Proj, 2)
685 DEFINE_CLASS_ID(IfTrue, IfProj, 0)
686 DEFINE_CLASS_ID(IfFalse, IfProj, 1)
687 DEFINE_CLASS_ID(Parm, Proj, 4)
688 DEFINE_CLASS_ID(MachProj, Proj, 5)
689
690 DEFINE_CLASS_ID(Mem, Node, 4)
691 DEFINE_CLASS_ID(Load, Mem, 0)
692 DEFINE_CLASS_ID(LoadVector, Load, 0)
693 DEFINE_CLASS_ID(LoadBarrierSlowReg, Load, 1)
694 DEFINE_CLASS_ID(LoadBarrierWeakSlowReg, Load, 2)
695 DEFINE_CLASS_ID(Store, Mem, 1)
696 DEFINE_CLASS_ID(StoreVector, Store, 0)
697 DEFINE_CLASS_ID(LoadStore, Mem, 2)
698 DEFINE_CLASS_ID(LoadStoreConditional, LoadStore, 0)
699 DEFINE_CLASS_ID(CompareAndSwap, LoadStoreConditional, 0)
835 DEFINE_CLASS_QUERY(LoadBarrier)
836 DEFINE_CLASS_QUERY(LoadBarrierSlowReg)
837 DEFINE_CLASS_QUERY(LoadBarrierWeakSlowReg)
838 DEFINE_CLASS_QUERY(Lock)
839 DEFINE_CLASS_QUERY(Loop)
840 DEFINE_CLASS_QUERY(Mach)
841 DEFINE_CLASS_QUERY(MachBranch)
842 DEFINE_CLASS_QUERY(MachCall)
843 DEFINE_CLASS_QUERY(MachCallDynamicJava)
844 DEFINE_CLASS_QUERY(MachCallJava)
845 DEFINE_CLASS_QUERY(MachCallLeaf)
846 DEFINE_CLASS_QUERY(MachCallRuntime)
847 DEFINE_CLASS_QUERY(MachCallStaticJava)
848 DEFINE_CLASS_QUERY(MachConstantBase)
849 DEFINE_CLASS_QUERY(MachConstant)
850 DEFINE_CLASS_QUERY(MachGoto)
851 DEFINE_CLASS_QUERY(MachIf)
852 DEFINE_CLASS_QUERY(MachJump)
853 DEFINE_CLASS_QUERY(MachNullCheck)
854 DEFINE_CLASS_QUERY(MachProj)
855 DEFINE_CLASS_QUERY(MachReturn)
856 DEFINE_CLASS_QUERY(MachSafePoint)
857 DEFINE_CLASS_QUERY(MachSpillCopy)
858 DEFINE_CLASS_QUERY(MachTemp)
859 DEFINE_CLASS_QUERY(MachMemBar)
860 DEFINE_CLASS_QUERY(MachMerge)
861 DEFINE_CLASS_QUERY(Mem)
862 DEFINE_CLASS_QUERY(MemBar)
863 DEFINE_CLASS_QUERY(MemBarStoreStore)
864 DEFINE_CLASS_QUERY(MergeMem)
865 DEFINE_CLASS_QUERY(Mul)
866 DEFINE_CLASS_QUERY(Multi)
867 DEFINE_CLASS_QUERY(MultiBranch)
868 DEFINE_CLASS_QUERY(OuterStripMinedLoop)
869 DEFINE_CLASS_QUERY(OuterStripMinedLoopEnd)
870 DEFINE_CLASS_QUERY(Parm)
871 DEFINE_CLASS_QUERY(PCTable)
872 DEFINE_CLASS_QUERY(Phi)
873 DEFINE_CLASS_QUERY(Proj)
874 DEFINE_CLASS_QUERY(Region)
875 DEFINE_CLASS_QUERY(Root)
876 DEFINE_CLASS_QUERY(SafePoint)
877 DEFINE_CLASS_QUERY(SafePointScalarObject)
878 DEFINE_CLASS_QUERY(ShenandoahBarrier)
879 DEFINE_CLASS_QUERY(Start)
880 DEFINE_CLASS_QUERY(Store)
881 DEFINE_CLASS_QUERY(Sub)
882 DEFINE_CLASS_QUERY(Type)
883 DEFINE_CLASS_QUERY(Vector)
884 DEFINE_CLASS_QUERY(LoadVector)
885 DEFINE_CLASS_QUERY(StoreVector)
886 DEFINE_CLASS_QUERY(Unlock)
887
888 #undef DEFINE_CLASS_QUERY
889
890 // duplicate of is_MachSpillCopy()
891 bool is_SpillCopy () const {
892 return ((_class_id & ClassMask_MachSpillCopy) == Class_MachSpillCopy);
893 }
894
895 bool is_Con () const { return (_flags & Flag_is_Con) != 0; }
896 // The data node which is safe to leave in dead loop during IGVN optimization.
897 bool is_dead_loop_safe() const {
898 return is_Phi() || (is_Proj() && in(0) == NULL) ||
899 ((_flags & (Flag_is_dead_loop_safe | Flag_is_Con)) != 0 &&
900 (!is_Proj() || !in(0)->is_Allocate()));
901 }
902
|
85 class LoadBarrierSlowRegNode;
86 class LoadBarrierWeakSlowRegNode;
87 class LoadStoreNode;
88 class LockNode;
89 class LoopNode;
90 class MachBranchNode;
91 class MachCallDynamicJavaNode;
92 class MachCallJavaNode;
93 class MachCallLeafNode;
94 class MachCallNode;
95 class MachCallRuntimeNode;
96 class MachCallStaticJavaNode;
97 class MachConstantBaseNode;
98 class MachConstantNode;
99 class MachGotoNode;
100 class MachIfNode;
101 class MachJumpNode;
102 class MachNode;
103 class MachNullCheckNode;
104 class MachProjNode;
105 class MachPrologNode;
106 class MachReturnNode;
107 class MachSafePointNode;
108 class MachSpillCopyNode;
109 class MachTempNode;
110 class MachMergeNode;
111 class MachMemBarNode;
112 class Matcher;
113 class MemBarNode;
114 class MemBarStoreStoreNode;
115 class MemNode;
116 class MergeMemNode;
117 class MulNode;
118 class MultiNode;
119 class MultiBranchNode;
120 class NeverBranchNode;
121 class OuterStripMinedLoopNode;
122 class OuterStripMinedLoopEndNode;
123 class Node;
124 class Node_Array;
125 class Node_List;
134 class PhaseRegAlloc;
135 class PhaseTransform;
136 class PhaseValues;
137 class PhiNode;
138 class Pipeline;
139 class ProjNode;
140 class RangeCheckNode;
141 class RegMask;
142 class RegionNode;
143 class RootNode;
144 class SafePointNode;
145 class SafePointScalarObjectNode;
146 class ShenandoahBarrierNode;
147 class StartNode;
148 class State;
149 class StoreNode;
150 class SubNode;
151 class Type;
152 class TypeNode;
153 class UnlockNode;
154 class ValueTypeBaseNode;
155 class ValueTypeNode;
156 class ValueTypePtrNode;
157 class VectorNode;
158 class LoadVectorNode;
159 class StoreVectorNode;
160 class VectorSet;
161 typedef void (*NFunc)(Node&,void*);
162 extern "C" {
163 typedef int (*C_sort_func_t)(const void *, const void *);
164 }
165
166 // The type of all node counts and indexes.
167 // It must hold at least 16 bits, but must also be fast to load and store.
168 // This type, if less than 32 bits, could limit the number of possible nodes.
169 // (To make this type platform-specific, move to globalDefinitions_xxx.hpp.)
170 typedef unsigned int node_idx_t;
171
172
173 #ifndef OPTO_DU_ITERATOR_ASSERT
174 #ifdef ASSERT
175 #define OPTO_DU_ITERATOR_ASSERT 1
176 #else
649 DEFINE_CLASS_ID(Mach, Node, 1)
650 DEFINE_CLASS_ID(MachReturn, Mach, 0)
651 DEFINE_CLASS_ID(MachSafePoint, MachReturn, 0)
652 DEFINE_CLASS_ID(MachCall, MachSafePoint, 0)
653 DEFINE_CLASS_ID(MachCallJava, MachCall, 0)
654 DEFINE_CLASS_ID(MachCallStaticJava, MachCallJava, 0)
655 DEFINE_CLASS_ID(MachCallDynamicJava, MachCallJava, 1)
656 DEFINE_CLASS_ID(MachCallRuntime, MachCall, 1)
657 DEFINE_CLASS_ID(MachCallLeaf, MachCallRuntime, 0)
658 DEFINE_CLASS_ID(MachBranch, Mach, 1)
659 DEFINE_CLASS_ID(MachIf, MachBranch, 0)
660 DEFINE_CLASS_ID(MachGoto, MachBranch, 1)
661 DEFINE_CLASS_ID(MachNullCheck, MachBranch, 2)
662 DEFINE_CLASS_ID(MachSpillCopy, Mach, 2)
663 DEFINE_CLASS_ID(MachTemp, Mach, 3)
664 DEFINE_CLASS_ID(MachConstantBase, Mach, 4)
665 DEFINE_CLASS_ID(MachConstant, Mach, 5)
666 DEFINE_CLASS_ID(MachJump, MachConstant, 0)
667 DEFINE_CLASS_ID(MachMerge, Mach, 6)
668 DEFINE_CLASS_ID(MachMemBar, Mach, 7)
669 DEFINE_CLASS_ID(MachProlog, Mach, 8)
670
671 DEFINE_CLASS_ID(Type, Node, 2)
672 DEFINE_CLASS_ID(Phi, Type, 0)
673 DEFINE_CLASS_ID(ConstraintCast, Type, 1)
674 DEFINE_CLASS_ID(CastII, ConstraintCast, 0)
675 DEFINE_CLASS_ID(CheckCastPP, ConstraintCast, 1)
676 DEFINE_CLASS_ID(CMove, Type, 3)
677 DEFINE_CLASS_ID(SafePointScalarObject, Type, 4)
678 DEFINE_CLASS_ID(DecodeNarrowPtr, Type, 5)
679 DEFINE_CLASS_ID(DecodeN, DecodeNarrowPtr, 0)
680 DEFINE_CLASS_ID(DecodeNKlass, DecodeNarrowPtr, 1)
681 DEFINE_CLASS_ID(EncodeNarrowPtr, Type, 6)
682 DEFINE_CLASS_ID(EncodeP, EncodeNarrowPtr, 0)
683 DEFINE_CLASS_ID(EncodePKlass, EncodeNarrowPtr, 1)
684 DEFINE_CLASS_ID(ShenandoahBarrier, Type, 7)
685 DEFINE_CLASS_ID(ValueTypeBase, Type, 8)
686 DEFINE_CLASS_ID(ValueType, ValueTypeBase, 0)
687 DEFINE_CLASS_ID(ValueTypePtr, ValueTypeBase, 1)
688
689 DEFINE_CLASS_ID(Proj, Node, 3)
690 DEFINE_CLASS_ID(CatchProj, Proj, 0)
691 DEFINE_CLASS_ID(JumpProj, Proj, 1)
692 DEFINE_CLASS_ID(IfProj, Proj, 2)
693 DEFINE_CLASS_ID(IfTrue, IfProj, 0)
694 DEFINE_CLASS_ID(IfFalse, IfProj, 1)
695 DEFINE_CLASS_ID(Parm, Proj, 4)
696 DEFINE_CLASS_ID(MachProj, Proj, 5)
697
698 DEFINE_CLASS_ID(Mem, Node, 4)
699 DEFINE_CLASS_ID(Load, Mem, 0)
700 DEFINE_CLASS_ID(LoadVector, Load, 0)
701 DEFINE_CLASS_ID(LoadBarrierSlowReg, Load, 1)
702 DEFINE_CLASS_ID(LoadBarrierWeakSlowReg, Load, 2)
703 DEFINE_CLASS_ID(Store, Mem, 1)
704 DEFINE_CLASS_ID(StoreVector, Store, 0)
705 DEFINE_CLASS_ID(LoadStore, Mem, 2)
706 DEFINE_CLASS_ID(LoadStoreConditional, LoadStore, 0)
707 DEFINE_CLASS_ID(CompareAndSwap, LoadStoreConditional, 0)
843 DEFINE_CLASS_QUERY(LoadBarrier)
844 DEFINE_CLASS_QUERY(LoadBarrierSlowReg)
845 DEFINE_CLASS_QUERY(LoadBarrierWeakSlowReg)
846 DEFINE_CLASS_QUERY(Lock)
847 DEFINE_CLASS_QUERY(Loop)
848 DEFINE_CLASS_QUERY(Mach)
849 DEFINE_CLASS_QUERY(MachBranch)
850 DEFINE_CLASS_QUERY(MachCall)
851 DEFINE_CLASS_QUERY(MachCallDynamicJava)
852 DEFINE_CLASS_QUERY(MachCallJava)
853 DEFINE_CLASS_QUERY(MachCallLeaf)
854 DEFINE_CLASS_QUERY(MachCallRuntime)
855 DEFINE_CLASS_QUERY(MachCallStaticJava)
856 DEFINE_CLASS_QUERY(MachConstantBase)
857 DEFINE_CLASS_QUERY(MachConstant)
858 DEFINE_CLASS_QUERY(MachGoto)
859 DEFINE_CLASS_QUERY(MachIf)
860 DEFINE_CLASS_QUERY(MachJump)
861 DEFINE_CLASS_QUERY(MachNullCheck)
862 DEFINE_CLASS_QUERY(MachProj)
863 DEFINE_CLASS_QUERY(MachProlog)
864 DEFINE_CLASS_QUERY(MachReturn)
865 DEFINE_CLASS_QUERY(MachSafePoint)
866 DEFINE_CLASS_QUERY(MachSpillCopy)
867 DEFINE_CLASS_QUERY(MachTemp)
868 DEFINE_CLASS_QUERY(MachMemBar)
869 DEFINE_CLASS_QUERY(MachMerge)
870 DEFINE_CLASS_QUERY(Mem)
871 DEFINE_CLASS_QUERY(MemBar)
872 DEFINE_CLASS_QUERY(MemBarStoreStore)
873 DEFINE_CLASS_QUERY(MergeMem)
874 DEFINE_CLASS_QUERY(Mul)
875 DEFINE_CLASS_QUERY(Multi)
876 DEFINE_CLASS_QUERY(MultiBranch)
877 DEFINE_CLASS_QUERY(OuterStripMinedLoop)
878 DEFINE_CLASS_QUERY(OuterStripMinedLoopEnd)
879 DEFINE_CLASS_QUERY(Parm)
880 DEFINE_CLASS_QUERY(PCTable)
881 DEFINE_CLASS_QUERY(Phi)
882 DEFINE_CLASS_QUERY(Proj)
883 DEFINE_CLASS_QUERY(Region)
884 DEFINE_CLASS_QUERY(Root)
885 DEFINE_CLASS_QUERY(SafePoint)
886 DEFINE_CLASS_QUERY(SafePointScalarObject)
887 DEFINE_CLASS_QUERY(ShenandoahBarrier)
888 DEFINE_CLASS_QUERY(Start)
889 DEFINE_CLASS_QUERY(Store)
890 DEFINE_CLASS_QUERY(Sub)
891 DEFINE_CLASS_QUERY(Type)
892 DEFINE_CLASS_QUERY(ValueType)
893 DEFINE_CLASS_QUERY(ValueTypeBase)
894 DEFINE_CLASS_QUERY(ValueTypePtr)
895 DEFINE_CLASS_QUERY(Vector)
896 DEFINE_CLASS_QUERY(LoadVector)
897 DEFINE_CLASS_QUERY(StoreVector)
898 DEFINE_CLASS_QUERY(Unlock)
899
900 #undef DEFINE_CLASS_QUERY
901
902 // duplicate of is_MachSpillCopy()
903 bool is_SpillCopy () const {
904 return ((_class_id & ClassMask_MachSpillCopy) == Class_MachSpillCopy);
905 }
906
907 bool is_Con () const { return (_flags & Flag_is_Con) != 0; }
908 // The data node which is safe to leave in dead loop during IGVN optimization.
909 bool is_dead_loop_safe() const {
910 return is_Phi() || (is_Proj() && in(0) == NULL) ||
911 ((_flags & (Flag_is_dead_loop_safe | Flag_is_Con)) != 0 &&
912 (!is_Proj() || !in(0)->is_Allocate()));
913 }
914
|