< prev index next >

src/hotspot/share/opto/type.hpp

Print this page




 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
< prev index next >