src/share/vm/opto/node.hpp

Print this page
rev 3361 : 7173584: Implement arraycopy as a macro node
Summary: delay the conversion of arraycopy to stub calls to macro expansion
Reviewed-by:


  24 
  25 #ifndef SHARE_VM_OPTO_NODE_HPP
  26 #define SHARE_VM_OPTO_NODE_HPP
  27 
  28 #include "libadt/port.hpp"
  29 #include "libadt/vectset.hpp"
  30 #include "opto/compile.hpp"
  31 #include "opto/type.hpp"
  32 
  33 // Portions of code courtesy of Clifford Click
  34 
  35 // Optimization - Graph Style
  36 
  37 
  38 class AbstractLockNode;
  39 class AddNode;
  40 class AddPNode;
  41 class AliasInfo;
  42 class AllocateArrayNode;
  43 class AllocateNode;

  44 class Block;
  45 class Block_Array;
  46 class BoolNode;
  47 class BoxLockNode;
  48 class CMoveNode;
  49 class CallDynamicJavaNode;
  50 class CallJavaNode;
  51 class CallLeafNode;
  52 class CallNode;
  53 class CallRuntimeNode;
  54 class CallStaticJavaNode;
  55 class CatchNode;
  56 class CatchProjNode;
  57 class CheckCastPPNode;
  58 class ClearArrayNode;
  59 class CmpNode;
  60 class CodeBuffer;
  61 class ConstraintCastNode;
  62 class ConNode;
  63 class CountedLoopNode;


 543   // This enum is used only for C2 ideal and mach nodes with is_<node>() methods
 544   // so that it's values fits into 16 bits.
 545   enum NodeClasses {
 546     Bit_Node   = 0x0000,
 547     Class_Node = 0x0000,
 548     ClassMask_Node = 0xFFFF,
 549 
 550     DEFINE_CLASS_ID(Multi, Node, 0)
 551       DEFINE_CLASS_ID(SafePoint, Multi, 0)
 552         DEFINE_CLASS_ID(Call,      SafePoint, 0)
 553           DEFINE_CLASS_ID(CallJava,         Call, 0)
 554             DEFINE_CLASS_ID(CallStaticJava,   CallJava, 0)
 555             DEFINE_CLASS_ID(CallDynamicJava,  CallJava, 1)
 556           DEFINE_CLASS_ID(CallRuntime,      Call, 1)
 557             DEFINE_CLASS_ID(CallLeaf,         CallRuntime, 0)
 558           DEFINE_CLASS_ID(Allocate,         Call, 2)
 559             DEFINE_CLASS_ID(AllocateArray,    Allocate, 0)
 560           DEFINE_CLASS_ID(AbstractLock,     Call, 3)
 561             DEFINE_CLASS_ID(Lock,             AbstractLock, 0)
 562             DEFINE_CLASS_ID(Unlock,           AbstractLock, 1)

 563       DEFINE_CLASS_ID(MultiBranch, Multi, 1)
 564         DEFINE_CLASS_ID(PCTable,     MultiBranch, 0)
 565           DEFINE_CLASS_ID(Catch,       PCTable, 0)
 566           DEFINE_CLASS_ID(Jump,        PCTable, 1)
 567         DEFINE_CLASS_ID(If,          MultiBranch, 1)
 568           DEFINE_CLASS_ID(CountedLoopEnd, If, 0)
 569         DEFINE_CLASS_ID(NeverBranch, MultiBranch, 2)
 570       DEFINE_CLASS_ID(Start,       Multi, 2)
 571       DEFINE_CLASS_ID(MemBar,      Multi, 3)
 572         DEFINE_CLASS_ID(Initialize,       MemBar, 0)
 573         DEFINE_CLASS_ID(MemBarStoreStore, MemBar, 1)
 574 
 575     DEFINE_CLASS_ID(Mach,  Node, 1)
 576       DEFINE_CLASS_ID(MachReturn, Mach, 0)
 577         DEFINE_CLASS_ID(MachSafePoint, MachReturn, 0)
 578           DEFINE_CLASS_ID(MachCall, MachSafePoint, 0)
 579             DEFINE_CLASS_ID(MachCallJava,         MachCall, 0)
 580               DEFINE_CLASS_ID(MachCallStaticJava,   MachCallJava, 0)
 581               DEFINE_CLASS_ID(MachCallDynamicJava,  MachCallJava, 1)
 582             DEFINE_CLASS_ID(MachCallRuntime,      MachCall, 1)


 682   virtual uint size_of() const;
 683 
 684   // Other interesting Node properties
 685   #define DEFINE_CLASS_QUERY(type)                           \
 686   bool is_##type() const {                                   \
 687     return ((_class_id & ClassMask_##type) == Class_##type); \
 688   }                                                          \
 689   type##Node *as_##type() const {                            \
 690     assert(is_##type(), "invalid node class");               \
 691     return (type##Node*)this;                                \
 692   }                                                          \
 693   type##Node* isa_##type() const {                           \
 694     return (is_##type()) ? as_##type() : NULL;               \
 695   }
 696 
 697   DEFINE_CLASS_QUERY(AbstractLock)
 698   DEFINE_CLASS_QUERY(Add)
 699   DEFINE_CLASS_QUERY(AddP)
 700   DEFINE_CLASS_QUERY(Allocate)
 701   DEFINE_CLASS_QUERY(AllocateArray)

 702   DEFINE_CLASS_QUERY(Bool)
 703   DEFINE_CLASS_QUERY(BoxLock)
 704   DEFINE_CLASS_QUERY(Call)
 705   DEFINE_CLASS_QUERY(CallDynamicJava)
 706   DEFINE_CLASS_QUERY(CallJava)
 707   DEFINE_CLASS_QUERY(CallLeaf)
 708   DEFINE_CLASS_QUERY(CallRuntime)
 709   DEFINE_CLASS_QUERY(CallStaticJava)
 710   DEFINE_CLASS_QUERY(Catch)
 711   DEFINE_CLASS_QUERY(CatchProj)
 712   DEFINE_CLASS_QUERY(CheckCastPP)
 713   DEFINE_CLASS_QUERY(ConstraintCast)
 714   DEFINE_CLASS_QUERY(ClearArray)
 715   DEFINE_CLASS_QUERY(CMove)
 716   DEFINE_CLASS_QUERY(Cmp)
 717   DEFINE_CLASS_QUERY(CountedLoop)
 718   DEFINE_CLASS_QUERY(CountedLoopEnd)
 719   DEFINE_CLASS_QUERY(DecodeN)
 720   DEFINE_CLASS_QUERY(EncodeP)
 721   DEFINE_CLASS_QUERY(FastLock)




  24 
  25 #ifndef SHARE_VM_OPTO_NODE_HPP
  26 #define SHARE_VM_OPTO_NODE_HPP
  27 
  28 #include "libadt/port.hpp"
  29 #include "libadt/vectset.hpp"
  30 #include "opto/compile.hpp"
  31 #include "opto/type.hpp"
  32 
  33 // Portions of code courtesy of Clifford Click
  34 
  35 // Optimization - Graph Style
  36 
  37 
  38 class AbstractLockNode;
  39 class AddNode;
  40 class AddPNode;
  41 class AliasInfo;
  42 class AllocateArrayNode;
  43 class AllocateNode;
  44 class ArrayCopyNode;
  45 class Block;
  46 class Block_Array;
  47 class BoolNode;
  48 class BoxLockNode;
  49 class CMoveNode;
  50 class CallDynamicJavaNode;
  51 class CallJavaNode;
  52 class CallLeafNode;
  53 class CallNode;
  54 class CallRuntimeNode;
  55 class CallStaticJavaNode;
  56 class CatchNode;
  57 class CatchProjNode;
  58 class CheckCastPPNode;
  59 class ClearArrayNode;
  60 class CmpNode;
  61 class CodeBuffer;
  62 class ConstraintCastNode;
  63 class ConNode;
  64 class CountedLoopNode;


 544   // This enum is used only for C2 ideal and mach nodes with is_<node>() methods
 545   // so that it's values fits into 16 bits.
 546   enum NodeClasses {
 547     Bit_Node   = 0x0000,
 548     Class_Node = 0x0000,
 549     ClassMask_Node = 0xFFFF,
 550 
 551     DEFINE_CLASS_ID(Multi, Node, 0)
 552       DEFINE_CLASS_ID(SafePoint, Multi, 0)
 553         DEFINE_CLASS_ID(Call,      SafePoint, 0)
 554           DEFINE_CLASS_ID(CallJava,         Call, 0)
 555             DEFINE_CLASS_ID(CallStaticJava,   CallJava, 0)
 556             DEFINE_CLASS_ID(CallDynamicJava,  CallJava, 1)
 557           DEFINE_CLASS_ID(CallRuntime,      Call, 1)
 558             DEFINE_CLASS_ID(CallLeaf,         CallRuntime, 0)
 559           DEFINE_CLASS_ID(Allocate,         Call, 2)
 560             DEFINE_CLASS_ID(AllocateArray,    Allocate, 0)
 561           DEFINE_CLASS_ID(AbstractLock,     Call, 3)
 562             DEFINE_CLASS_ID(Lock,             AbstractLock, 0)
 563             DEFINE_CLASS_ID(Unlock,           AbstractLock, 1)
 564           DEFINE_CLASS_ID(ArrayCopy,        Call, 4)
 565       DEFINE_CLASS_ID(MultiBranch, Multi, 1)
 566         DEFINE_CLASS_ID(PCTable,     MultiBranch, 0)
 567           DEFINE_CLASS_ID(Catch,       PCTable, 0)
 568           DEFINE_CLASS_ID(Jump,        PCTable, 1)
 569         DEFINE_CLASS_ID(If,          MultiBranch, 1)
 570           DEFINE_CLASS_ID(CountedLoopEnd, If, 0)
 571         DEFINE_CLASS_ID(NeverBranch, MultiBranch, 2)
 572       DEFINE_CLASS_ID(Start,       Multi, 2)
 573       DEFINE_CLASS_ID(MemBar,      Multi, 3)
 574         DEFINE_CLASS_ID(Initialize,       MemBar, 0)
 575         DEFINE_CLASS_ID(MemBarStoreStore, MemBar, 1)
 576 
 577     DEFINE_CLASS_ID(Mach,  Node, 1)
 578       DEFINE_CLASS_ID(MachReturn, Mach, 0)
 579         DEFINE_CLASS_ID(MachSafePoint, MachReturn, 0)
 580           DEFINE_CLASS_ID(MachCall, MachSafePoint, 0)
 581             DEFINE_CLASS_ID(MachCallJava,         MachCall, 0)
 582               DEFINE_CLASS_ID(MachCallStaticJava,   MachCallJava, 0)
 583               DEFINE_CLASS_ID(MachCallDynamicJava,  MachCallJava, 1)
 584             DEFINE_CLASS_ID(MachCallRuntime,      MachCall, 1)


 684   virtual uint size_of() const;
 685 
 686   // Other interesting Node properties
 687   #define DEFINE_CLASS_QUERY(type)                           \
 688   bool is_##type() const {                                   \
 689     return ((_class_id & ClassMask_##type) == Class_##type); \
 690   }                                                          \
 691   type##Node *as_##type() const {                            \
 692     assert(is_##type(), "invalid node class");               \
 693     return (type##Node*)this;                                \
 694   }                                                          \
 695   type##Node* isa_##type() const {                           \
 696     return (is_##type()) ? as_##type() : NULL;               \
 697   }
 698 
 699   DEFINE_CLASS_QUERY(AbstractLock)
 700   DEFINE_CLASS_QUERY(Add)
 701   DEFINE_CLASS_QUERY(AddP)
 702   DEFINE_CLASS_QUERY(Allocate)
 703   DEFINE_CLASS_QUERY(AllocateArray)
 704   DEFINE_CLASS_QUERY(ArrayCopy)
 705   DEFINE_CLASS_QUERY(Bool)
 706   DEFINE_CLASS_QUERY(BoxLock)
 707   DEFINE_CLASS_QUERY(Call)
 708   DEFINE_CLASS_QUERY(CallDynamicJava)
 709   DEFINE_CLASS_QUERY(CallJava)
 710   DEFINE_CLASS_QUERY(CallLeaf)
 711   DEFINE_CLASS_QUERY(CallRuntime)
 712   DEFINE_CLASS_QUERY(CallStaticJava)
 713   DEFINE_CLASS_QUERY(Catch)
 714   DEFINE_CLASS_QUERY(CatchProj)
 715   DEFINE_CLASS_QUERY(CheckCastPP)
 716   DEFINE_CLASS_QUERY(ConstraintCast)
 717   DEFINE_CLASS_QUERY(ClearArray)
 718   DEFINE_CLASS_QUERY(CMove)
 719   DEFINE_CLASS_QUERY(Cmp)
 720   DEFINE_CLASS_QUERY(CountedLoop)
 721   DEFINE_CLASS_QUERY(CountedLoopEnd)
 722   DEFINE_CLASS_QUERY(DecodeN)
 723   DEFINE_CLASS_QUERY(EncodeP)
 724   DEFINE_CLASS_QUERY(FastLock)