hotspot/src/share/vm/opto/node.hpp
changeset 10266 2ea344c79e33
parent 10264 6879f93d268d
child 10547 ea4a2ec31ae2
equal deleted inserted replaced
10265:4c869854aebd 10266:2ea344c79e33
    75 class JumpProjNode;
    75 class JumpProjNode;
    76 class LoadNode;
    76 class LoadNode;
    77 class LoadStoreNode;
    77 class LoadStoreNode;
    78 class LockNode;
    78 class LockNode;
    79 class LoopNode;
    79 class LoopNode;
       
    80 class MachBranchNode;
    80 class MachCallDynamicJavaNode;
    81 class MachCallDynamicJavaNode;
    81 class MachCallJavaNode;
    82 class MachCallJavaNode;
    82 class MachCallLeafNode;
    83 class MachCallLeafNode;
    83 class MachCallNode;
    84 class MachCallNode;
    84 class MachCallRuntimeNode;
    85 class MachCallRuntimeNode;
   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 {