< prev index next >

src/hotspot/share/opto/type.hpp

Print this page
rev 60615 : 8231441: Initial SVE backend support
Reviewed-by: adinn, pli
Contributed-by: joshua.zhu@arm.com, yang.zhang@arm.com, ningsheng.jian@arm.com

*** 1,7 **** /* ! * Copyright (c) 1997, 2019, 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. --- 1,7 ---- /* ! * 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,60 **** --- 51,61 ---- class TypeNarrowOop; class TypeNarrowKlass; class TypeAry; class TypeTuple; class TypeVect; + class TypeVectA; class TypeVectS; class TypeVectD; class TypeVectX; class TypeVectY; class TypeVectZ;
*** 85,94 **** --- 86,96 ---- 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,764 **** --- 757,767 ---- 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,775 **** --- 769,783 ---- #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,1635 **** 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" ); return (TypeVect*)this; } inline const TypeVect *Type::isa_vect() const { ! return (_base >= VectorS && _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"); --- 1628,1643 ---- inline const TypeAry *Type::isa_ary() const { return ((_base == Array) ? (TypeAry*)this : NULL); } inline const TypeVect *Type::is_vect() const { ! assert( _base >= VectorA && _base <= VectorZ, "Not a Vector" ); return (TypeVect*)this; } inline const TypeVect *Type::isa_vect() const { ! 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 >