[llvm] [cmake] Add possibility to use ChooseMSVCCRT.cmake when include LLVM library
[llvm-core.git] / include / llvm / Support / ScalableSize.h
bloba057d5ea7ce59289de274ddcc65fba1c91e95bcc
1 //===- ScalableSize.h - Scalable vector size info ---------------*- C++ -*-===//
2 //
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
6 //
7 //===----------------------------------------------------------------------===//
8 //
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
18 namespace llvm {
20 class ElementCount {
21 public:
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