< prev index next >

src/hotspot/share/opto/type.hpp

Print this page
@@ -1,7 +1,7 @@
  /*
-  * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
+  * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.

@@ -51,10 +51,11 @@
  class     TypeNarrowOop;
  class     TypeNarrowKlass;
  class   TypeAry;
  class   TypeTuple;
  class   TypeVect;
+ class     TypeVectA;
  class     TypeVectS;
  class     TypeVectD;
  class     TypeVectX;
  class     TypeVectY;
  class     TypeVectZ;

@@ -85,10 +86,11 @@
      NarrowOop,                  // Compressed oop pointer
      NarrowKlass,                // Compressed klass pointer
  
      Tuple,                      // Method signature or object layout
      Array,                      // Array types
+     VectorA,                    // (Scalable) Vector types for vector length agnostic
      VectorS,                    //  32bit Vector types
      VectorD,                    //  64bit Vector types
      VectorX,                    // 128bit Vector types
      VectorY,                    // 256bit Vector types
      VectorZ,                    // 512bit Vector types

@@ -755,10 +757,11 @@
    static const TypeVect *make(const Type* elem, uint length);
  
    virtual const Type *xmeet( const Type *t) const;
    virtual const Type *xdual() const;     // Compute dual right now.
  
+   static const TypeVect *VECTA;
    static const TypeVect *VECTS;
    static const TypeVect *VECTD;
    static const TypeVect *VECTX;
    static const TypeVect *VECTY;
    static const TypeVect *VECTZ;

@@ -766,10 +769,15 @@
  #ifndef PRODUCT
    virtual void dump2(Dict &d, uint, outputStream *st) const; // Specialized per-Type dumping
  #endif
  };
  
+ class TypeVectA : public TypeVect {
+   friend class TypeVect;
+   TypeVectA(const Type* elem, uint length) : TypeVect(VectorA, elem, length) {}
+ };
+ 
  class TypeVectS : public TypeVect {
    friend class TypeVect;
    TypeVectS(const Type* elem, uint length) : TypeVect(VectorS, elem, length) {}
  };
  

@@ -1620,16 +1628,16 @@
  inline const TypeAry *Type::isa_ary() const {
    return ((_base == Array) ? (TypeAry*)this : NULL);
  }
  
  inline const TypeVect *Type::is_vect() const {
-   assert( _base >= VectorS && _base <= VectorZ, "Not a Vector" );
+   assert( _base >= VectorA && _base <= VectorZ, "Not a Vector" );
    return (TypeVect*)this;
  }
  
  inline const TypeVect *Type::isa_vect() const {
-   return (_base >= VectorS && _base <= VectorZ) ? (TypeVect*)this : NULL;
+   return (_base >= VectorA && _base <= VectorZ) ? (TypeVect*)this : NULL;
  }
  
  inline const TypePtr *Type::is_ptr() const {
    // AnyPtr is the first Ptr and KlassPtr the last, with no non-ptrs between.
    assert(_base >= AnyPtr && _base <= KlassPtr, "Not a pointer");
< prev index next >