746 virtual const Type* remove_speculative() const; 747 virtual const Type* cleanup_speculative() const; 748 749 bool is_value_type_array() const { return _elem->isa_valuetype() != NULL; } 750 751 #ifdef ASSERT 752 // One type is interface, the other is oop 753 virtual bool interface_vs_oop(const Type *t) const; 754 #endif 755 #ifndef PRODUCT 756 virtual void dump2( Dict &d, uint, outputStream *st ) const; // Specialized per-Type dumping 757 #endif 758 }; 759 760 761 //------------------------------TypeValue--------------------------------------- 762 // Class of Value Type Types 763 class TypeValueType : public Type { 764 private: 765 ciValueKlass* _vk; 766 767 protected: 768 TypeValueType(ciValueKlass* vk) : Type(ValueType) { _vk = vk; } 769 770 public: 771 static const TypeValueType* make(ciValueKlass* vk); 772 ciValueKlass* value_klass() const { return _vk; } 773 774 virtual bool eq(const Type* t) const; 775 virtual int hash() const; // Type specific hashing 776 virtual bool singleton(void) const; // TRUE if type is a singleton 777 virtual bool empty(void) const; // TRUE if type is vacuous 778 779 virtual const Type* xmeet(const Type* t) const; 780 virtual const Type* xdual() const; // Compute dual right now. 781 782 virtual bool would_improve_type(ciKlass* exact_kls, int inline_depth) const { return false; } 783 virtual bool would_improve_ptr(ProfilePtrKind ptr_kind) const { return false; } 784 785 #ifndef PRODUCT 786 virtual void dump2(Dict &d, uint, outputStream* st) const; // Specialized per-Type dumping 787 #endif 788 }; 789 790 //------------------------------TypeVect--------------------------------------- 791 // Class of Vector Types 792 class TypeVect : public Type { 1863 #define CmpUXNode CmpULNode 1864 #define SubXNode SubLNode 1865 #define LShiftXNode LShiftLNode 1866 // For object size computation: 1867 #define AddXNode AddLNode 1868 #define RShiftXNode RShiftLNode 1869 // For card marks and hashcodes 1870 #define URShiftXNode URShiftLNode 1871 // UseOptoBiasInlining 1872 #define XorXNode XorLNode 1873 #define StoreXConditionalNode StoreLConditionalNode 1874 #define LoadXNode LoadLNode 1875 #define StoreXNode StoreLNode 1876 // Opcodes 1877 #define Op_LShiftX Op_LShiftL 1878 #define Op_AndX Op_AndL 1879 #define Op_AddX Op_AddL 1880 #define Op_SubX Op_SubL 1881 #define Op_XorX Op_XorL 1882 #define Op_URShiftX Op_URShiftL 1883 // conversions 1884 #define ConvI2X(x) ConvI2L(x) 1885 #define ConvL2X(x) (x) 1886 #define ConvX2I(x) ConvL2I(x) 1887 #define ConvX2L(x) (x) 1888 #define ConvX2UL(x) (x) 1889 1890 #else 1891 1892 // For type queries and asserts 1893 #define is_intptr_t is_int 1894 #define isa_intptr_t isa_int 1895 #define find_intptr_t_type find_int_type 1896 #define find_intptr_t_con find_int_con 1897 #define TypeX TypeInt 1898 #define Type_X Type::Int 1899 #define TypeX_X TypeInt::INT 1900 #define TypeX_ZERO TypeInt::ZERO 1901 // For 'ideal_reg' machine registers 1902 #define Op_RegX Op_RegI 1911 #define CmpUXNode CmpUNode 1912 #define SubXNode SubINode 1913 #define LShiftXNode LShiftINode 1914 // For object size computation: 1915 #define AddXNode AddINode 1916 #define RShiftXNode RShiftINode 1917 // For card marks and hashcodes 1918 #define URShiftXNode URShiftINode 1919 // UseOptoBiasInlining 1920 #define XorXNode XorINode 1921 #define StoreXConditionalNode StoreIConditionalNode 1922 #define LoadXNode LoadINode 1923 #define StoreXNode StoreINode 1924 // Opcodes 1925 #define Op_LShiftX Op_LShiftI 1926 #define Op_AndX Op_AndI 1927 #define Op_AddX Op_AddI 1928 #define Op_SubX Op_SubI 1929 #define Op_XorX Op_XorI 1930 #define Op_URShiftX Op_URShiftI 1931 // conversions 1932 #define ConvI2X(x) (x) 1933 #define ConvL2X(x) ConvL2I(x) 1934 #define ConvX2I(x) (x) 1935 #define ConvX2L(x) ConvI2L(x) 1936 #define ConvX2UL(x) ConvI2UL(x) 1937 1938 #endif 1939 1940 #endif // SHARE_OPTO_TYPE_HPP | 746 virtual const Type* remove_speculative() const; 747 virtual const Type* cleanup_speculative() const; 748 749 bool is_value_type_array() const { return _elem->isa_valuetype() != NULL; } 750 751 #ifdef ASSERT 752 // One type is interface, the other is oop 753 virtual bool interface_vs_oop(const Type *t) const; 754 #endif 755 #ifndef PRODUCT 756 virtual void dump2( Dict &d, uint, outputStream *st ) const; // Specialized per-Type dumping 757 #endif 758 }; 759 760 761 //------------------------------TypeValue--------------------------------------- 762 // Class of Value Type Types 763 class TypeValueType : public Type { 764 private: 765 ciValueKlass* _vk; 766 bool _larval; 767 768 protected: 769 TypeValueType(ciValueKlass* vk, bool larval) 770 : Type(ValueType), 771 _vk(vk), _larval(larval) { 772 } 773 774 public: 775 static const TypeValueType* make(ciValueKlass* vk, bool larval = false); 776 ciValueKlass* value_klass() const { return _vk; } 777 bool larval() const { return _larval; } 778 779 virtual bool eq(const Type* t) const; 780 virtual int hash() const; // Type specific hashing 781 virtual bool singleton(void) const; // TRUE if type is a singleton 782 virtual bool empty(void) const; // TRUE if type is vacuous 783 784 virtual const Type* xmeet(const Type* t) const; 785 virtual const Type* xdual() const; // Compute dual right now. 786 787 virtual bool would_improve_type(ciKlass* exact_kls, int inline_depth) const { return false; } 788 virtual bool would_improve_ptr(ProfilePtrKind ptr_kind) const { return false; } 789 790 #ifndef PRODUCT 791 virtual void dump2(Dict &d, uint, outputStream* st) const; // Specialized per-Type dumping 792 #endif 793 }; 794 795 //------------------------------TypeVect--------------------------------------- 796 // Class of Vector Types 797 class TypeVect : public Type { 1868 #define CmpUXNode CmpULNode 1869 #define SubXNode SubLNode 1870 #define LShiftXNode LShiftLNode 1871 // For object size computation: 1872 #define AddXNode AddLNode 1873 #define RShiftXNode RShiftLNode 1874 // For card marks and hashcodes 1875 #define URShiftXNode URShiftLNode 1876 // UseOptoBiasInlining 1877 #define XorXNode XorLNode 1878 #define StoreXConditionalNode StoreLConditionalNode 1879 #define LoadXNode LoadLNode 1880 #define StoreXNode StoreLNode 1881 // Opcodes 1882 #define Op_LShiftX Op_LShiftL 1883 #define Op_AndX Op_AndL 1884 #define Op_AddX Op_AddL 1885 #define Op_SubX Op_SubL 1886 #define Op_XorX Op_XorL 1887 #define Op_URShiftX Op_URShiftL 1888 #define Op_LoadX Op_LoadL 1889 #define Op_StoreX Op_StoreL 1890 // conversions 1891 #define ConvI2X(x) ConvI2L(x) 1892 #define ConvL2X(x) (x) 1893 #define ConvX2I(x) ConvL2I(x) 1894 #define ConvX2L(x) (x) 1895 #define ConvX2UL(x) (x) 1896 1897 #else 1898 1899 // For type queries and asserts 1900 #define is_intptr_t is_int 1901 #define isa_intptr_t isa_int 1902 #define find_intptr_t_type find_int_type 1903 #define find_intptr_t_con find_int_con 1904 #define TypeX TypeInt 1905 #define Type_X Type::Int 1906 #define TypeX_X TypeInt::INT 1907 #define TypeX_ZERO TypeInt::ZERO 1908 // For 'ideal_reg' machine registers 1909 #define Op_RegX Op_RegI 1918 #define CmpUXNode CmpUNode 1919 #define SubXNode SubINode 1920 #define LShiftXNode LShiftINode 1921 // For object size computation: 1922 #define AddXNode AddINode 1923 #define RShiftXNode RShiftINode 1924 // For card marks and hashcodes 1925 #define URShiftXNode URShiftINode 1926 // UseOptoBiasInlining 1927 #define XorXNode XorINode 1928 #define StoreXConditionalNode StoreIConditionalNode 1929 #define LoadXNode LoadINode 1930 #define StoreXNode StoreINode 1931 // Opcodes 1932 #define Op_LShiftX Op_LShiftI 1933 #define Op_AndX Op_AndI 1934 #define Op_AddX Op_AddI 1935 #define Op_SubX Op_SubI 1936 #define Op_XorX Op_XorI 1937 #define Op_URShiftX Op_URShiftI 1938 #define Op_LoadX Op_LoadI 1939 #define Op_StoreX Op_StoreI 1940 // conversions 1941 #define ConvI2X(x) (x) 1942 #define ConvL2X(x) ConvL2I(x) 1943 #define ConvX2I(x) (x) 1944 #define ConvX2L(x) ConvI2L(x) 1945 #define ConvX2UL(x) ConvI2UL(x) 1946 1947 #endif 1948 1949 #endif // SHARE_OPTO_TYPE_HPP |