< prev index next >

src/hotspot/share/opto/node.hpp

Print this page

  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   }
< prev index next >