84 Top, // Top of the lattice
85 Int, // Integer range (lo-hi)
86 Long, // Long integer range (lo-hi)
87 Half, // Placeholder half of doubleword
88 NarrowOop, // Compressed oop pointer
89 NarrowKlass, // Compressed klass pointer
90
91 Tuple, // Method signature or object layout
92 Array, // Array types
93 VectorS, // 32bit Vector types
94 VectorD, // 64bit Vector types
95 VectorX, // 128bit Vector types
96 VectorY, // 256bit Vector types
97 VectorZ, // 512bit Vector types
98 ValueType, // Value type
99
100 AnyPtr, // Any old raw, klass, inst, or array pointer
101 RawPtr, // Raw (non-oop) pointers
102 OopPtr, // Any and all Java heap entities
103 InstPtr, // Instance pointers (non-array objects)
104 ValueTypePtr, // Oop to heap allocated value type
105 AryPtr, // Array pointers
106 // (Ptr order matters: See is_ptr, isa_ptr, is_oopptr, isa_oopptr.)
107
108 MetadataPtr, // Generic metadata
109 KlassPtr, // Klass pointers
110
111 Function, // Function signature
112 Abio, // Abstract I/O
113 Return_Address, // Subroutine return address
114 Memory, // Abstract store
115 FloatTop, // No float value
116 FloatCon, // Floating point constant
117 FloatBot, // Any float value
118 DoubleTop, // No double value
119 DoubleCon, // Double precision constant
120 DoubleBot, // Any double value
121 Bottom, // Bottom of lattice
122 lastype // Bogus ending type (not in lattice)
123 };
124
675 public:
676 virtual bool eq( const Type *t ) const;
677 virtual int hash() const; // Type specific hashing
678 virtual bool singleton(void) const; // TRUE if type is a singleton
679 virtual bool empty(void) const; // TRUE if type is vacuous
680
681 // Accessors:
682 uint cnt() const { return _cnt; }
683 const Type* field_at(uint i) const {
684 assert(i < _cnt, "oob");
685 return _fields[i];
686 }
687 void set_field_at(uint i, const Type* t) {
688 assert(i < _cnt, "oob");
689 _fields[i] = t;
690 }
691
692 static const TypeTuple *make( uint cnt, const Type **fields );
693 static const TypeTuple *make_range(ciSignature* sig, bool ret_vt_fields = false);
694 static const TypeTuple *make_range(ciType* return_type, bool never_null = false, bool ret_vt_fields = false);
695 static const TypeTuple *make_domain(ciInstanceKlass* recv, ciSignature *sig, bool vt_fields_as_args = false);
696
697 // Subroutine call type with space allocated for argument types
698 // Memory for Control, I_O, Memory, FramePtr, and ReturnAdr is allocated implicitly
699 static const Type **fields( uint arg_cnt );
700
701 virtual const Type *xmeet( const Type *t ) const;
702 virtual const Type *xdual() const; // Compute dual right now.
703 // Convenience common pre-built types.
704 static const TypeTuple *IFBOTH;
705 static const TypeTuple *IFFALSE;
706 static const TypeTuple *IFTRUE;
707 static const TypeTuple *IFNEITHER;
708 static const TypeTuple *LOOPBODY;
709 static const TypeTuple *MEMBAR;
710 static const TypeTuple *STORECONDITIONAL;
711 static const TypeTuple *START_I2C;
712 static const TypeTuple *INT_PAIR;
713 static const TypeTuple *LONG_PAIR;
714 static const TypeTuple *INT_CC_PAIR;
715 static const TypeTuple *LONG_CC_PAIR;
|
84 Top, // Top of the lattice
85 Int, // Integer range (lo-hi)
86 Long, // Long integer range (lo-hi)
87 Half, // Placeholder half of doubleword
88 NarrowOop, // Compressed oop pointer
89 NarrowKlass, // Compressed klass pointer
90
91 Tuple, // Method signature or object layout
92 Array, // Array types
93 VectorS, // 32bit Vector types
94 VectorD, // 64bit Vector types
95 VectorX, // 128bit Vector types
96 VectorY, // 256bit Vector types
97 VectorZ, // 512bit Vector types
98 ValueType, // Value type
99
100 AnyPtr, // Any old raw, klass, inst, or array pointer
101 RawPtr, // Raw (non-oop) pointers
102 OopPtr, // Any and all Java heap entities
103 InstPtr, // Instance pointers (non-array objects)
104 AryPtr, // Array pointers
105 // (Ptr order matters: See is_ptr, isa_ptr, is_oopptr, isa_oopptr.)
106
107 MetadataPtr, // Generic metadata
108 KlassPtr, // Klass pointers
109
110 Function, // Function signature
111 Abio, // Abstract I/O
112 Return_Address, // Subroutine return address
113 Memory, // Abstract store
114 FloatTop, // No float value
115 FloatCon, // Floating point constant
116 FloatBot, // Any float value
117 DoubleTop, // No double value
118 DoubleCon, // Double precision constant
119 DoubleBot, // Any double value
120 Bottom, // Bottom of lattice
121 lastype // Bogus ending type (not in lattice)
122 };
123
674 public:
675 virtual bool eq( const Type *t ) const;
676 virtual int hash() const; // Type specific hashing
677 virtual bool singleton(void) const; // TRUE if type is a singleton
678 virtual bool empty(void) const; // TRUE if type is vacuous
679
680 // Accessors:
681 uint cnt() const { return _cnt; }
682 const Type* field_at(uint i) const {
683 assert(i < _cnt, "oob");
684 return _fields[i];
685 }
686 void set_field_at(uint i, const Type* t) {
687 assert(i < _cnt, "oob");
688 _fields[i] = t;
689 }
690
691 static const TypeTuple *make( uint cnt, const Type **fields );
692 static const TypeTuple *make_range(ciSignature* sig, bool ret_vt_fields = false);
693 static const TypeTuple *make_range(ciType* return_type, bool never_null = false, bool ret_vt_fields = false);
694 static const TypeTuple *make_domain(ciMethod* method, bool vt_fields_as_args = false);
695
696 // Subroutine call type with space allocated for argument types
697 // Memory for Control, I_O, Memory, FramePtr, and ReturnAdr is allocated implicitly
698 static const Type **fields( uint arg_cnt );
699
700 virtual const Type *xmeet( const Type *t ) const;
701 virtual const Type *xdual() const; // Compute dual right now.
702 // Convenience common pre-built types.
703 static const TypeTuple *IFBOTH;
704 static const TypeTuple *IFFALSE;
705 static const TypeTuple *IFTRUE;
706 static const TypeTuple *IFNEITHER;
707 static const TypeTuple *LOOPBODY;
708 static const TypeTuple *MEMBAR;
709 static const TypeTuple *STORECONDITIONAL;
710 static const TypeTuple *START_I2C;
711 static const TypeTuple *INT_PAIR;
712 static const TypeTuple *LONG_PAIR;
713 static const TypeTuple *INT_CC_PAIR;
714 static const TypeTuple *LONG_CC_PAIR;
|