LLVM 19.0.0git
TypeSize.cpp
Go to the documentation of this file.
1//===- TypeSize.cpp - Wrapper around type sizes------------------*- 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
12
13#include "DebugOptions.h"
14
15using namespace llvm;
16
17#ifndef STRICT_FIXED_SIZE_VECTORS
18namespace {
19struct CreateScalableErrorAsWarning {
20 /// The ScalableErrorAsWarning is a temporary measure to suppress errors from
21 /// using the wrong interface on a scalable vector.
22 static void *call() {
23 return new cl::opt<bool>(
24 "treat-scalable-fixed-error-as-warning", cl::Hidden,
26 "Treat issues where a fixed-width property is requested from a "
27 "scalable type as a warning, instead of an error"));
28 }
29};
30} // namespace
31static ManagedStatic<cl::opt<bool>, CreateScalableErrorAsWarning>
34#else
36#endif
37
38void llvm::reportInvalidSizeRequest(const char *Msg) {
39#ifndef STRICT_FIXED_SIZE_VECTORS
41 WithColor::warning() << "Invalid size request on a scalable vector; " << Msg
42 << "\n";
43 return;
44 }
45#endif
46 report_fatal_error("Invalid size request on a scalable vector.");
47}
48
49TypeSize::operator TypeSize::ScalarTy() const {
50 if (isScalable()) {
52 "Cannot implicitly convert a scalable size to a fixed-width size in "
53 "`TypeSize::operator ScalarTy()`");
54 return getKnownMinValue();
55 }
56 return getFixedValue();
57}
static ManagedStatic< cl::opt< bool >, CreateScalableErrorAsWarning > ScalableErrorAsWarning
Definition: TypeSize.cpp:32
ManagedStatic - This transparently changes the behavior of global statics to be lazily constructed on...
Definition: ManagedStatic.h:83
static raw_ostream & warning()
Convenience method for printing "warning: " to stderr.
Definition: WithColor.cpp:85
constexpr bool isScalable() const
Returns whether the quantity is scaled by a runtime quantity (vscale).
Definition: TypeSize.h:171
constexpr ScalarTy getKnownMinValue() const
Returns the minimum value this quantity can represent.
Definition: TypeSize.h:168
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
Definition: Error.cpp:156
void initTypeSizeOptions()
Definition: TypeSize.cpp:33
void reportInvalidSizeRequest(const char *Msg)
Reports a diagnostic message to indicate an invalid size request has been done on a scalable vector.
Definition: TypeSize.cpp:38