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)
|