1 //===- ScalableSize.h - Scalable vector size info ---------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file provides a struct that can be used to query the size of IR types
10 // which may be scalable vectors. It provides convenience operators so that
11 // it can be used in much the same way as a single scalar value.
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_SUPPORT_SCALABLESIZE_H
16 #define LLVM_SUPPORT_SCALABLESIZE_H
22 unsigned Min
; // Minimum number of vector elements.
23 bool Scalable
; // If true, NumElements is a multiple of 'Min' determined
24 // at runtime rather than compile time.
26 ElementCount(unsigned Min
, bool Scalable
)
27 : Min(Min
), Scalable(Scalable
) {}
29 ElementCount
operator*(unsigned RHS
) {
30 return { Min
* RHS
, Scalable
};
32 ElementCount
operator/(unsigned RHS
) {
33 return { Min
/ RHS
, Scalable
};
36 bool operator==(const ElementCount
& RHS
) const {
37 return Min
== RHS
.Min
&& Scalable
== RHS
.Scalable
;
39 bool operator!=(const ElementCount
& RHS
) const {
40 return !(*this == RHS
);
44 } // end namespace llvm
46 #endif // LLVM_SUPPORT_SCALABLESIZE_H