LLVM 22.0.0git
Constants.h
Go to the documentation of this file.
1//===-- llvm/Constants.h - Constant class subclass definitions --*- 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/// @file
10/// This file contains the declarations for the subclasses of Constant,
11/// which represent the different flavors of constant values that live in LLVM.
12/// Note that Constants are immutable (once created they never change) and are
13/// fully shared by structural equivalence. This means that two structurally
14/// equivalent constants will always have the same address. Constants are
15/// created on demand as needed and never deleted: thus clients don't have to
16/// worry about the lifetime of the objects.
17//
18//===----------------------------------------------------------------------===//
19
20#ifndef LLVM_IR_CONSTANTS_H
21#define LLVM_IR_CONSTANTS_H
22
23#include "llvm/ADT/APFloat.h"
24#include "llvm/ADT/APInt.h"
25#include "llvm/ADT/ArrayRef.h"
26#include "llvm/ADT/STLExtras.h"
27#include "llvm/ADT/StringRef.h"
28#include "llvm/IR/Constant.h"
32#include "llvm/IR/Intrinsics.h"
34#include "llvm/IR/User.h"
35#include "llvm/IR/Value.h"
39#include <cassert>
40#include <cstddef>
41#include <cstdint>
42#include <optional>
43
44namespace llvm {
45
46template <class ConstantClass> struct ConstantAggrKeyType;
47
48/// Base class for constants with no operands.
49///
50/// These constants have no operands; they represent their data directly.
51/// Since they can be in use by unrelated modules (and are never based on
52/// GlobalValues), it never makes sense to RAUW them.
53///
54/// These do not have use lists. It is illegal to inspect the uses. These behave
55/// as if they have no uses (i.e. use_empty() is always true).
56class ConstantData : public Constant {
57 constexpr static IntrusiveOperandsAllocMarker AllocMarker{0};
58
59 friend class Constant;
60
61 Value *handleOperandChangeImpl(Value *From, Value *To) {
62 llvm_unreachable("Constant data does not have operands!");
63 }
64
65protected:
66 explicit ConstantData(Type *Ty, ValueTy VT) : Constant(Ty, VT, AllocMarker) {}
67
68 void *operator new(size_t S) { return User::operator new(S, AllocMarker); }
69
70public:
71 void operator delete(void *Ptr) { User::operator delete(Ptr); }
72
73 ConstantData(const ConstantData &) = delete;
74
75 /// Methods to support type inquiry through isa, cast, and dyn_cast.
76 static bool classof(const Value *V) {
77 static_assert(Value::ConstantDataFirstVal == 0,
78 "V->getValueID() >= Value::ConstantDataFirstVal");
79 return V->getValueID() <= ConstantDataLastVal;
80 }
81};
82
83//===----------------------------------------------------------------------===//
84/// This is the shared class of boolean and integer constants. This class
85/// represents both boolean and integral constants.
86/// Class for constant integers.
87class ConstantInt final : public ConstantData {
88 friend class Constant;
89 friend class ConstantVector;
90
91 APInt Val;
92
93 ConstantInt(Type *Ty, const APInt &V);
94
95 void destroyConstantImpl();
96
97 /// Return a ConstantInt with the specified value and an implied Type. The
98 /// type is the vector type whose integer element type corresponds to the bit
99 /// width of the value.
100 static ConstantInt *get(LLVMContext &Context, ElementCount EC,
101 const APInt &V);
102
103public:
104 ConstantInt(const ConstantInt &) = delete;
105
106 LLVM_ABI static ConstantInt *getTrue(LLVMContext &Context);
107 LLVM_ABI static ConstantInt *getFalse(LLVMContext &Context);
108 LLVM_ABI static ConstantInt *getBool(LLVMContext &Context, bool V);
109 LLVM_ABI static Constant *getTrue(Type *Ty);
110 LLVM_ABI static Constant *getFalse(Type *Ty);
111 LLVM_ABI static Constant *getBool(Type *Ty, bool V);
112
113 /// If Ty is a vector type, return a Constant with a splat of the given
114 /// value. Otherwise return a ConstantInt for the given value.
115 /// \param ImplicitTrunc Whether to allow implicit truncation of the value.
116 // TODO: Make ImplicitTrunc default to false.
117 LLVM_ABI static Constant *get(Type *Ty, uint64_t V, bool IsSigned = false,
118 bool ImplicitTrunc = true);
119
120 /// Return a ConstantInt with the specified integer value for the specified
121 /// type. If the type is wider than 64 bits, the value will be zero-extended
122 /// to fit the type, unless IsSigned is true, in which case the value will
123 /// be interpreted as a 64-bit signed integer and sign-extended to fit
124 /// the type.
125 /// \param ImplicitTrunc Whether to allow implicit truncation of the value.
126 // TODO: Make ImplicitTrunc default to false.
127 LLVM_ABI static ConstantInt *get(IntegerType *Ty, uint64_t V,
128 bool IsSigned = false,
129 bool ImplicitTrunc = true);
130
131 /// Return a ConstantInt with the specified value for the specified type. The
132 /// value V will be canonicalized to an unsigned APInt. Accessing it with
133 /// either getSExtValue() or getZExtValue() will yield a correctly sized and
134 /// signed value for the type Ty.
135 /// Get a ConstantInt for a specific signed value.
136 static ConstantInt *getSigned(IntegerType *Ty, int64_t V) {
137 return get(Ty, V, true);
138 }
139 static Constant *getSigned(Type *Ty, int64_t V) {
140 return get(Ty, V, true);
141 }
142
143 /// Return a ConstantInt with the specified value and an implied Type. The
144 /// type is the integer type that corresponds to the bit width of the value.
145 LLVM_ABI static ConstantInt *get(LLVMContext &Context, const APInt &V);
146
147 /// Return a ConstantInt constructed from the string strStart with the given
148 /// radix.
150 uint8_t Radix);
151
152 /// If Ty is a vector type, return a Constant with a splat of the given
153 /// value. Otherwise return a ConstantInt for the given value.
154 LLVM_ABI static Constant *get(Type *Ty, const APInt &V);
155
156 /// Return the constant as an APInt value reference. This allows clients to
157 /// obtain a full-precision copy of the value.
158 /// Return the constant's value.
159 inline const APInt &getValue() const { return Val; }
160
161 /// getBitWidth - Return the scalar bitwidth of this constant.
162 unsigned getBitWidth() const { return Val.getBitWidth(); }
163
164 /// Return the constant as a 64-bit unsigned integer value after it
165 /// has been zero extended as appropriate for the type of this constant. Note
166 /// that this method can assert if the value does not fit in 64 bits.
167 /// Return the zero extended value.
168 inline uint64_t getZExtValue() const { return Val.getZExtValue(); }
169
170 /// Return the constant as a 64-bit integer value after it has been sign
171 /// extended as appropriate for the type of this constant. Note that
172 /// this method can assert if the value does not fit in 64 bits.
173 /// Return the sign extended value.
174 inline int64_t getSExtValue() const { return Val.getSExtValue(); }
175
176 /// Return the constant as an llvm::MaybeAlign.
177 /// Note that this method can assert if the value does not fit in 64 bits or
178 /// is not a power of two.
180 return MaybeAlign(getZExtValue());
181 }
182
183 /// Return the constant as an llvm::Align, interpreting `0` as `Align(1)`.
184 /// Note that this method can assert if the value does not fit in 64 bits or
185 /// is not a power of two.
186 inline Align getAlignValue() const {
188 }
189
190 /// A helper method that can be used to determine if the constant contained
191 /// within is equal to a constant. This only works for very small values,
192 /// because this is all that can be represented with all types.
193 /// Determine if this constant's value is same as an unsigned char.
194 bool equalsInt(uint64_t V) const { return Val == V; }
195
196 /// Variant of the getType() method to always return an IntegerType, which
197 /// reduces the amount of casting needed in parts of the compiler.
198 inline IntegerType *getIntegerType() const {
200 }
201
202 /// This static method returns true if the type Ty is big enough to
203 /// represent the value V. This can be used to avoid having the get method
204 /// assert when V is larger than Ty can represent. Note that there are two
205 /// versions of this method, one for unsigned and one for signed integers.
206 /// Although ConstantInt canonicalizes everything to an unsigned integer,
207 /// the signed version avoids callers having to convert a signed quantity
208 /// to the appropriate unsigned type before calling the method.
209 /// @returns true if V is a valid value for type Ty
210 /// Determine if the value is in range for the given type.
211 LLVM_ABI static bool isValueValidForType(Type *Ty, uint64_t V);
212 LLVM_ABI static bool isValueValidForType(Type *Ty, int64_t V);
213
214 bool isNegative() const { return Val.isNegative(); }
215
216 /// This is just a convenience method to make client code smaller for a
217 /// common code. It also correctly performs the comparison without the
218 /// potential for an assertion from getZExtValue().
219 bool isZero() const { return Val.isZero(); }
220
221 /// This is just a convenience method to make client code smaller for a
222 /// common case. It also correctly performs the comparison without the
223 /// potential for an assertion from getZExtValue().
224 /// Determine if the value is one.
225 bool isOne() const { return Val.isOne(); }
226
227 /// This function will return true iff every bit in this constant is set
228 /// to true.
229 /// @returns true iff this constant's bits are all set to true.
230 /// Determine if the value is all ones.
231 bool isMinusOne() const { return Val.isAllOnes(); }
232
233 /// This function will return true iff this constant represents the largest
234 /// value that may be represented by the constant's type.
235 /// @returns true iff this is the largest value that may be represented
236 /// by this type.
237 /// Determine if the value is maximal.
238 bool isMaxValue(bool IsSigned) const {
239 if (IsSigned)
240 return Val.isMaxSignedValue();
241 else
242 return Val.isMaxValue();
243 }
244
245 /// This function will return true iff this constant represents the smallest
246 /// value that may be represented by this constant's type.
247 /// @returns true if this is the smallest value that may be represented by
248 /// this type.
249 /// Determine if the value is minimal.
250 bool isMinValue(bool IsSigned) const {
251 if (IsSigned)
252 return Val.isMinSignedValue();
253 else
254 return Val.isMinValue();
255 }
256
257 /// This function will return true iff this constant represents a value with
258 /// active bits bigger than 64 bits or a value greater than the given uint64_t
259 /// value.
260 /// @returns true iff this constant is greater or equal to the given number.
261 /// Determine if the value is greater or equal to the given number.
262 bool uge(uint64_t Num) const { return Val.uge(Num); }
263
264 /// getLimitedValue - If the value is smaller than the specified limit,
265 /// return it, otherwise return the limit value. This causes the value
266 /// to saturate to the limit.
267 /// @returns the min of the value of the constant and the specified value
268 /// Get the constant's value with a saturation limit
269 uint64_t getLimitedValue(uint64_t Limit = ~0ULL) const {
270 return Val.getLimitedValue(Limit);
271 }
272
273 /// Methods to support type inquiry through isa, cast, and dyn_cast.
274 static bool classof(const Value *V) {
275 return V->getValueID() == ConstantIntVal;
276 }
277};
278
279//===----------------------------------------------------------------------===//
280/// ConstantFP - Floating Point Values [float, double]
281///
282class ConstantFP final : public ConstantData {
283 friend class Constant;
284 friend class ConstantVector;
285
286 APFloat Val;
287
288 ConstantFP(Type *Ty, const APFloat &V);
289
290 void destroyConstantImpl();
291
292 /// Return a ConstantFP with the specified value and an implied Type. The
293 /// type is the vector type whose element type has the same floating point
294 /// semantics as the value.
295 static ConstantFP *get(LLVMContext &Context, ElementCount EC,
296 const APFloat &V);
297
298public:
299 ConstantFP(const ConstantFP &) = delete;
300
301 /// This returns a ConstantFP, or a vector containing a splat of a ConstantFP,
302 /// for the specified value in the specified type. This should only be used
303 /// for simple constant values like 2.0/1.0 etc, that are known-valid both as
304 /// host double and as the target format.
305 LLVM_ABI static Constant *get(Type *Ty, double V);
306
307 /// If Ty is a vector type, return a Constant with a splat of the given
308 /// value. Otherwise return a ConstantFP for the given value.
309 LLVM_ABI static Constant *get(Type *Ty, const APFloat &V);
310
311 LLVM_ABI static Constant *get(Type *Ty, StringRef Str);
312 LLVM_ABI static ConstantFP *get(LLVMContext &Context, const APFloat &V);
313 LLVM_ABI static Constant *getNaN(Type *Ty, bool Negative = false,
314 uint64_t Payload = 0);
315 LLVM_ABI static Constant *getQNaN(Type *Ty, bool Negative = false,
316 APInt *Payload = nullptr);
317 LLVM_ABI static Constant *getSNaN(Type *Ty, bool Negative = false,
318 APInt *Payload = nullptr);
319 LLVM_ABI static Constant *getZero(Type *Ty, bool Negative = false);
320 static Constant *getNegativeZero(Type *Ty) { return getZero(Ty, true); }
321 LLVM_ABI static Constant *getInfinity(Type *Ty, bool Negative = false);
322
323 /// Return true if Ty is big enough to represent V.
324 LLVM_ABI static bool isValueValidForType(Type *Ty, const APFloat &V);
325 inline const APFloat &getValueAPF() const { return Val; }
326 inline const APFloat &getValue() const { return Val; }
327
328 /// Return true if the value is positive or negative zero.
329 bool isZero() const { return Val.isZero(); }
330
331 /// Return true if the sign bit is set.
332 bool isNegative() const { return Val.isNegative(); }
333
334 /// Return true if the value is infinity
335 bool isInfinity() const { return Val.isInfinity(); }
336
337 /// Return true if the value is a NaN.
338 bool isNaN() const { return Val.isNaN(); }
339
340 /// We don't rely on operator== working on double values, as it returns true
341 /// for things that are clearly not equal, like -0.0 and 0.0.
342 /// As such, this method can be used to do an exact bit-for-bit comparison of
343 /// two floating point values. The version with a double operand is retained
344 /// because it's so convenient to write isExactlyValue(2.0), but please use
345 /// it only for simple constants.
346 LLVM_ABI bool isExactlyValue(const APFloat &V) const;
347
348 bool isExactlyValue(double V) const {
349 bool ignored;
350 APFloat FV(V);
351 FV.convert(Val.getSemantics(), APFloat::rmNearestTiesToEven, &ignored);
352 return isExactlyValue(FV);
353 }
354
355 /// Methods for support type inquiry through isa, cast, and dyn_cast:
356 static bool classof(const Value *V) {
357 return V->getValueID() == ConstantFPVal;
358 }
359};
360
361//===----------------------------------------------------------------------===//
362/// All zero aggregate value
363///
364class ConstantAggregateZero final : public ConstantData {
365 friend class Constant;
366
367 explicit ConstantAggregateZero(Type *Ty)
368 : ConstantData(Ty, ConstantAggregateZeroVal) {}
369
370 void destroyConstantImpl();
371
372public:
373 ConstantAggregateZero(const ConstantAggregateZero &) = delete;
374
375 LLVM_ABI static ConstantAggregateZero *get(Type *Ty);
376
377 /// If this CAZ has array or vector type, return a zero with the right element
378 /// type.
380
381 /// If this CAZ has struct type, return a zero with the right element type for
382 /// the specified element.
383 LLVM_ABI Constant *getStructElement(unsigned Elt) const;
384
385 /// Return a zero of the right value for the specified GEP index if we can,
386 /// otherwise return null (e.g. if C is a ConstantExpr).
388
389 /// Return a zero of the right value for the specified GEP index.
390 LLVM_ABI Constant *getElementValue(unsigned Idx) const;
391
392 /// Return the number of elements in the array, vector, or struct.
394
395 /// Methods for support type inquiry through isa, cast, and dyn_cast:
396 ///
397 static bool classof(const Value *V) {
398 return V->getValueID() == ConstantAggregateZeroVal;
399 }
400};
401
402/// Base class for aggregate constants (with operands).
403///
404/// These constants are aggregates of other constants, which are stored as
405/// operands.
406///
407/// Subclasses are \a ConstantStruct, \a ConstantArray, and \a
408/// ConstantVector.
409///
410/// \note Some subclasses of \a ConstantData are semantically aggregates --
411/// such as \a ConstantDataArray -- but are not subclasses of this because they
412/// use operands.
414protected:
417
418public:
419 /// Transparently provide more efficient getOperand methods.
421
422 /// Methods for support type inquiry through isa, cast, and dyn_cast:
423 static bool classof(const Value *V) {
424 return V->getValueID() >= ConstantAggregateFirstVal &&
425 V->getValueID() <= ConstantAggregateLastVal;
426 }
427};
428
429template <>
431 : public VariadicOperandTraits<ConstantAggregate> {};
432
434
435//===----------------------------------------------------------------------===//
436/// ConstantArray - Constant Array Declarations
437///
438class ConstantArray final : public ConstantAggregate {
439 friend struct ConstantAggrKeyType<ConstantArray>;
440 friend class Constant;
441
442 ConstantArray(ArrayType *T, ArrayRef<Constant *> Val, AllocInfo AllocInfo);
443
444 void destroyConstantImpl();
445 Value *handleOperandChangeImpl(Value *From, Value *To);
446
447public:
448 // ConstantArray accessors
450
451private:
452 static Constant *getImpl(ArrayType *T, ArrayRef<Constant *> V);
453
454public:
455 /// Specialize the getType() method to always return an ArrayType,
456 /// which reduces the amount of casting needed in parts of the compiler.
457 inline ArrayType *getType() const {
459 }
460
461 /// Methods for support type inquiry through isa, cast, and dyn_cast:
462 static bool classof(const Value *V) {
463 return V->getValueID() == ConstantArrayVal;
464 }
465};
466
467//===----------------------------------------------------------------------===//
468// Constant Struct Declarations
469//
470class ConstantStruct final : public ConstantAggregate {
471 friend struct ConstantAggrKeyType<ConstantStruct>;
472 friend class Constant;
473
474 ConstantStruct(StructType *T, ArrayRef<Constant *> Val, AllocInfo AllocInfo);
475
476 void destroyConstantImpl();
477 Value *handleOperandChangeImpl(Value *From, Value *To);
478
479public:
480 // ConstantStruct accessors
482
483 template <typename... Csts>
484 static std::enable_if_t<are_base_of<Constant, Csts...>::value, Constant *>
485 get(StructType *T, Csts *...Vs) {
486 return get(T, ArrayRef<Constant *>({Vs...}));
487 }
488
489 /// Return an anonymous struct that has the specified elements.
490 /// If the struct is possibly empty, then you must specify a context.
491 static Constant *getAnon(ArrayRef<Constant *> V, bool Packed = false) {
492 return get(getTypeForElements(V, Packed), V);
493 }
495 bool Packed = false) {
496 return get(getTypeForElements(Ctx, V, Packed), V);
497 }
498
499 /// Return an anonymous struct type to use for a constant with the specified
500 /// set of elements. The list must not be empty.
502 bool Packed = false);
503 /// This version of the method allows an empty list.
506 bool Packed = false);
507
508 /// Specialization - reduce amount of casting.
509 inline StructType *getType() const {
511 }
512
513 /// Methods for support type inquiry through isa, cast, and dyn_cast:
514 static bool classof(const Value *V) {
515 return V->getValueID() == ConstantStructVal;
516 }
517};
518
519//===----------------------------------------------------------------------===//
520/// Constant Vector Declarations
521///
522class ConstantVector final : public ConstantAggregate {
523 friend struct ConstantAggrKeyType<ConstantVector>;
524 friend class Constant;
525
526 ConstantVector(VectorType *T, ArrayRef<Constant *> Val, AllocInfo AllocInfo);
527
528 void destroyConstantImpl();
529 Value *handleOperandChangeImpl(Value *From, Value *To);
530
531public:
532 // ConstantVector accessors
534
535private:
536 static Constant *getImpl(ArrayRef<Constant *> V);
537
538public:
539 /// Return a ConstantVector with the specified constant in each element.
540 /// Note that this might not return an instance of ConstantVector
542
543 /// Specialize the getType() method to always return a FixedVectorType,
544 /// which reduces the amount of casting needed in parts of the compiler.
545 inline FixedVectorType *getType() const {
547 }
548
549 /// If all elements of the vector constant have the same value, return that
550 /// value. Otherwise, return nullptr. Ignore poison elements by setting
551 /// AllowPoison to true.
552 LLVM_ABI Constant *getSplatValue(bool AllowPoison = false) const;
553
554 /// Methods for support type inquiry through isa, cast, and dyn_cast:
555 static bool classof(const Value *V) {
556 return V->getValueID() == ConstantVectorVal;
557 }
558};
559
560//===----------------------------------------------------------------------===//
561/// A constant pointer value that points to null
562///
563class ConstantPointerNull final : public ConstantData {
564 friend class Constant;
565
566 explicit ConstantPointerNull(PointerType *T)
567 : ConstantData(T, Value::ConstantPointerNullVal) {}
568
569 void destroyConstantImpl();
570
571public:
572 ConstantPointerNull(const ConstantPointerNull &) = delete;
573
574 /// Static factory methods - Return objects of the specified value
575 LLVM_ABI static ConstantPointerNull *get(PointerType *T);
576
577 /// Specialize the getType() method to always return an PointerType,
578 /// which reduces the amount of casting needed in parts of the compiler.
579 inline PointerType *getType() const {
581 }
582
583 /// Methods for support type inquiry through isa, cast, and dyn_cast:
584 static bool classof(const Value *V) {
585 return V->getValueID() == ConstantPointerNullVal;
586 }
587};
588
589//===----------------------------------------------------------------------===//
590/// ConstantDataSequential - A vector or array constant whose element type is a
591/// simple 1/2/4/8-byte integer or half/bfloat/float/double, and whose elements
592/// are just simple data values (i.e. ConstantInt/ConstantFP). This Constant
593/// node has no operands because it stores all of the elements of the constant
594/// as densely packed data, instead of as Value*'s.
595///
596/// This is the common base class of ConstantDataArray and ConstantDataVector.
597///
599 friend class LLVMContextImpl;
600 friend class Constant;
601
602 /// A pointer to the bytes underlying this constant (which is owned by the
603 /// uniquing StringMap).
604 const char *DataElements;
605
606 /// This forms a link list of ConstantDataSequential nodes that have
607 /// the same value but different type. For example, 0,0,0,1 could be a 4
608 /// element array of i8, or a 1-element array of i32. They'll both end up in
609 /// the same StringMap bucket, linked up.
610 std::unique_ptr<ConstantDataSequential> Next;
611
612 void destroyConstantImpl();
613
614protected:
615 explicit ConstantDataSequential(Type *ty, ValueTy VT, const char *Data)
616 : ConstantData(ty, VT), DataElements(Data) {}
617
618 LLVM_ABI static Constant *getImpl(StringRef Bytes, Type *Ty);
619
620public:
622
623 /// Return true if a ConstantDataSequential can be formed with a vector or
624 /// array of the specified element type.
625 /// ConstantDataArray only works with normal float and int types that are
626 /// stored densely in memory, not with things like i42 or x86_f80.
627 LLVM_ABI static bool isElementTypeCompatible(Type *Ty);
628
629 /// If this is a sequential container of integers (of any size), return the
630 /// specified element in the low bits of a uint64_t.
632
633 /// If this is a sequential container of integers (of any size), return the
634 /// specified element as an APInt.
636
637 /// If this is a sequential container of floating point type, return the
638 /// specified element as an APFloat.
640
641 /// If this is an sequential container of floats, return the specified element
642 /// as a float.
643 LLVM_ABI float getElementAsFloat(uint64_t i) const;
644
645 /// If this is an sequential container of doubles, return the specified
646 /// element as a double.
647 LLVM_ABI double getElementAsDouble(uint64_t i) const;
648
649 /// Return a Constant for a specified index's element.
650 /// Note that this has to compute a new constant to return, so it isn't as
651 /// efficient as getElementAsInteger/Float/Double.
653
654 /// Return the element type of the array/vector.
656
657 /// Return the number of elements in the array or vector.
659
660 /// Return the size (in bytes) of each element in the array/vector.
661 /// The size of the elements is known to be a multiple of one byte.
663
664 /// This method returns true if this is an array of \p CharSize integers.
665 LLVM_ABI bool isString(unsigned CharSize = 8) const;
666
667 /// This method returns true if the array "isString", ends with a null byte,
668 /// and does not contains any other null bytes.
669 LLVM_ABI bool isCString() const;
670
671 /// If this array is isString(), then this method returns the array as a
672 /// StringRef. Otherwise, it asserts out.
674 assert(isString() && "Not a string");
675 return getRawDataValues();
676 }
677
678 /// If this array is isCString(), then this method returns the array (without
679 /// the trailing null byte) as a StringRef. Otherwise, it asserts out.
681 assert(isCString() && "Isn't a C string");
682 StringRef Str = getAsString();
683 return Str.drop_back();
684 }
685
686 /// Return the raw, underlying, bytes of this data. Note that this is an
687 /// extremely tricky thing to work with, as it exposes the host endianness of
688 /// the data elements.
690
691 /// Methods for support type inquiry through isa, cast, and dyn_cast:
692 static bool classof(const Value *V) {
693 return V->getValueID() == ConstantDataArrayVal ||
694 V->getValueID() == ConstantDataVectorVal;
695 }
696
697private:
698 const char *getElementPointer(uint64_t Elt) const;
699};
700
701//===----------------------------------------------------------------------===//
702/// An array constant whose element type is a simple 1/2/4/8-byte integer or
703/// float/double, and whose elements are just simple data values
704/// (i.e. ConstantInt/ConstantFP). This Constant node has no operands because it
705/// stores all of the elements of the constant as densely packed data, instead
706/// of as Value*'s.
707class ConstantDataArray final : public ConstantDataSequential {
709
710 explicit ConstantDataArray(Type *ty, const char *Data)
711 : ConstantDataSequential(ty, ConstantDataArrayVal, Data) {}
712
713public:
714 ConstantDataArray(const ConstantDataArray &) = delete;
715
716 /// get() constructor - Return a constant with array type with an element
717 /// count and element type matching the ArrayRef passed in. Note that this
718 /// can return a ConstantAggregateZero object.
719 template <typename ElementTy>
720 static Constant *get(LLVMContext &Context, ArrayRef<ElementTy> Elts) {
721 const char *Data = reinterpret_cast<const char *>(Elts.data());
722 return getRaw(StringRef(Data, Elts.size() * sizeof(ElementTy)), Elts.size(),
724 }
725
726 /// get() constructor - ArrayTy needs to be compatible with
727 /// ArrayRef<ElementTy>. Calls get(LLVMContext, ArrayRef<ElementTy>).
728 template <typename ArrayTy>
729 static Constant *get(LLVMContext &Context, ArrayTy &Elts) {
730 return ConstantDataArray::get(Context, ArrayRef(Elts));
731 }
732
733 /// getRaw() constructor - Return a constant with array type with an element
734 /// count and element type matching the NumElements and ElementTy parameters
735 /// passed in. Note that this can return a ConstantAggregateZero object.
736 /// ElementTy must be one of i8/i16/i32/i64/half/bfloat/float/double. Data is
737 /// the buffer containing the elements. Be careful to make sure Data uses the
738 /// right endianness, the buffer will be used as-is.
739 static Constant *getRaw(StringRef Data, uint64_t NumElements,
740 Type *ElementTy) {
741 Type *Ty = ArrayType::get(ElementTy, NumElements);
742 return getImpl(Data, Ty);
743 }
744
745 /// getFP() constructors - Return a constant of array type with a float
746 /// element type taken from argument `ElementType', and count taken from
747 /// argument `Elts'. The amount of bits of the contained type must match the
748 /// number of bits of the type contained in the passed in ArrayRef.
749 /// (i.e. half or bfloat for 16bits, float for 32bits, double for 64bits) Note
750 /// that this can return a ConstantAggregateZero object.
751 LLVM_ABI static Constant *getFP(Type *ElementType, ArrayRef<uint16_t> Elts);
752 LLVM_ABI static Constant *getFP(Type *ElementType, ArrayRef<uint32_t> Elts);
753 LLVM_ABI static Constant *getFP(Type *ElementType, ArrayRef<uint64_t> Elts);
754
755 /// This method constructs a CDS and initializes it with a text string.
756 /// The default behavior (AddNull==true) causes a null terminator to
757 /// be placed at the end of the array (increasing the length of the string by
758 /// one more than the StringRef would normally indicate. Pass AddNull=false
759 /// to disable this behavior.
760 LLVM_ABI static Constant *
761 getString(LLVMContext &Context, StringRef Initializer, bool AddNull = true);
762
763 /// Specialize the getType() method to always return an ArrayType,
764 /// which reduces the amount of casting needed in parts of the compiler.
765 inline ArrayType *getType() const {
767 }
768
769 /// Methods for support type inquiry through isa, cast, and dyn_cast:
770 static bool classof(const Value *V) {
771 return V->getValueID() == ConstantDataArrayVal;
772 }
773};
774
775//===----------------------------------------------------------------------===//
776/// A vector constant whose element type is a simple 1/2/4/8-byte integer or
777/// float/double, and whose elements are just simple data values
778/// (i.e. ConstantInt/ConstantFP). This Constant node has no operands because it
779/// stores all of the elements of the constant as densely packed data, instead
780/// of as Value*'s.
781class ConstantDataVector final : public ConstantDataSequential {
783
784 explicit ConstantDataVector(Type *ty, const char *Data)
785 : ConstantDataSequential(ty, ConstantDataVectorVal, Data),
786 IsSplatSet(false) {}
787 // Cache whether or not the constant is a splat.
788 mutable bool IsSplatSet : 1;
789 mutable bool IsSplat : 1;
790 bool isSplatData() const;
791
792public:
793 ConstantDataVector(const ConstantDataVector &) = delete;
794
795 /// get() constructors - Return a constant with vector type with an element
796 /// count and element type matching the ArrayRef passed in. Note that this
797 /// can return a ConstantAggregateZero object.
798 LLVM_ABI static Constant *get(LLVMContext &Context, ArrayRef<uint8_t> Elts);
799 LLVM_ABI static Constant *get(LLVMContext &Context, ArrayRef<uint16_t> Elts);
800 LLVM_ABI static Constant *get(LLVMContext &Context, ArrayRef<uint32_t> Elts);
801 LLVM_ABI static Constant *get(LLVMContext &Context, ArrayRef<uint64_t> Elts);
802 LLVM_ABI static Constant *get(LLVMContext &Context, ArrayRef<float> Elts);
803 LLVM_ABI static Constant *get(LLVMContext &Context, ArrayRef<double> Elts);
804
805 /// getRaw() constructor - Return a constant with vector type with an element
806 /// count and element type matching the NumElements and ElementTy parameters
807 /// passed in. Note that this can return a ConstantAggregateZero object.
808 /// ElementTy must be one of i8/i16/i32/i64/half/bfloat/float/double. Data is
809 /// the buffer containing the elements. Be careful to make sure Data uses the
810 /// right endianness, the buffer will be used as-is.
811 static Constant *getRaw(StringRef Data, uint64_t NumElements,
812 Type *ElementTy) {
813 Type *Ty = VectorType::get(ElementTy, ElementCount::getFixed(NumElements));
814 return getImpl(Data, Ty);
815 }
816
817 /// getFP() constructors - Return a constant of vector type with a float
818 /// element type taken from argument `ElementType', and count taken from
819 /// argument `Elts'. The amount of bits of the contained type must match the
820 /// number of bits of the type contained in the passed in ArrayRef.
821 /// (i.e. half or bfloat for 16bits, float for 32bits, double for 64bits) Note
822 /// that this can return a ConstantAggregateZero object.
823 LLVM_ABI static Constant *getFP(Type *ElementType, ArrayRef<uint16_t> Elts);
824 LLVM_ABI static Constant *getFP(Type *ElementType, ArrayRef<uint32_t> Elts);
825 LLVM_ABI static Constant *getFP(Type *ElementType, ArrayRef<uint64_t> Elts);
826
827 /// Return a ConstantVector with the specified constant in each element.
828 /// The specified constant has to be a of a compatible type (i8/i16/
829 /// i32/i64/half/bfloat/float/double) and must be a ConstantFP or ConstantInt.
830 LLVM_ABI static Constant *getSplat(unsigned NumElts, Constant *Elt);
831
832 /// Returns true if this is a splat constant, meaning that all elements have
833 /// the same value.
834 LLVM_ABI bool isSplat() const;
835
836 /// If this is a splat constant, meaning that all of the elements have the
837 /// same value, return that value. Otherwise return NULL.
839
840 /// Specialize the getType() method to always return a FixedVectorType,
841 /// which reduces the amount of casting needed in parts of the compiler.
842 inline FixedVectorType *getType() const {
844 }
845
846 /// Methods for support type inquiry through isa, cast, and dyn_cast:
847 static bool classof(const Value *V) {
848 return V->getValueID() == ConstantDataVectorVal;
849 }
850};
851
852//===----------------------------------------------------------------------===//
853/// A constant token which is empty
854///
855class ConstantTokenNone final : public ConstantData {
856 friend class Constant;
857
858 explicit ConstantTokenNone(LLVMContext &Context)
859 : ConstantData(Type::getTokenTy(Context), ConstantTokenNoneVal) {}
860
861 void destroyConstantImpl();
862
863public:
864 ConstantTokenNone(const ConstantTokenNone &) = delete;
865
866 /// Return the ConstantTokenNone.
867 LLVM_ABI static ConstantTokenNone *get(LLVMContext &Context);
868
869 /// Methods to support type inquiry through isa, cast, and dyn_cast.
870 static bool classof(const Value *V) {
871 return V->getValueID() == ConstantTokenNoneVal;
872 }
873};
874
875/// A constant target extension type default initializer
876class ConstantTargetNone final : public ConstantData {
877 friend class Constant;
878
879 explicit ConstantTargetNone(TargetExtType *T)
880 : ConstantData(T, Value::ConstantTargetNoneVal) {}
881
882 void destroyConstantImpl();
883
884public:
885 ConstantTargetNone(const ConstantTargetNone &) = delete;
886
887 /// Static factory methods - Return objects of the specified value.
888 LLVM_ABI static ConstantTargetNone *get(TargetExtType *T);
889
890 /// Specialize the getType() method to always return an TargetExtType,
891 /// which reduces the amount of casting needed in parts of the compiler.
892 inline TargetExtType *getType() const {
894 }
895
896 /// Methods for support type inquiry through isa, cast, and dyn_cast.
897 static bool classof(const Value *V) {
898 return V->getValueID() == ConstantTargetNoneVal;
899 }
900};
901
902/// The address of a basic block.
903///
904class BlockAddress final : public Constant {
905 friend class Constant;
906
907 constexpr static IntrusiveOperandsAllocMarker AllocMarker{1};
908
909 BlockAddress(Type *Ty, BasicBlock *BB);
910
911 void *operator new(size_t S) { return User::operator new(S, AllocMarker); }
912
913 void destroyConstantImpl();
914 Value *handleOperandChangeImpl(Value *From, Value *To);
915
916public:
917 void operator delete(void *Ptr) { User::operator delete(Ptr); }
918
919 /// Return a BlockAddress for the specified function and basic block.
921
922 /// Return a BlockAddress for the specified basic block. The basic
923 /// block must be embedded into a function.
924 LLVM_ABI static BlockAddress *get(BasicBlock *BB);
925
926 /// Return a BlockAddress for the specified basic block, which may not be
927 /// part of a function. The specified type must match the type of the function
928 /// the block will be inserted into.
929 LLVM_ABI static BlockAddress *get(Type *Ty, BasicBlock *BB);
930
931 /// Lookup an existing \c BlockAddress constant for the given BasicBlock.
932 ///
933 /// \returns 0 if \c !BB->hasAddressTaken(), otherwise the \c BlockAddress.
934 LLVM_ABI static BlockAddress *lookup(const BasicBlock *BB);
935
936 /// Transparently provide more efficient getOperand methods.
938
940 Function *getFunction() const { return getBasicBlock()->getParent(); }
941
942 /// Methods for support type inquiry through isa, cast, and dyn_cast:
943 static bool classof(const Value *V) {
944 return V->getValueID() == BlockAddressVal;
945 }
946};
947
948template <>
950 : public FixedNumOperandTraits<BlockAddress, 1> {};
951
953
954/// Wrapper for a function that represents a value that
955/// functionally represents the original function. This can be a function,
956/// global alias to a function, or an ifunc.
957class DSOLocalEquivalent final : public Constant {
958 friend class Constant;
959
960 constexpr static IntrusiveOperandsAllocMarker AllocMarker{1};
961
963
964 void *operator new(size_t S) { return User::operator new(S, AllocMarker); }
965
966 void destroyConstantImpl();
967 Value *handleOperandChangeImpl(Value *From, Value *To);
968
969public:
970 void operator delete(void *Ptr) { User::operator delete(Ptr); }
971
972 /// Return a DSOLocalEquivalent for the specified global value.
974
975 /// Transparently provide more efficient getOperand methods.
977
979 return cast<GlobalValue>(Op<0>().get());
980 }
981
982 /// Methods for support type inquiry through isa, cast, and dyn_cast:
983 static bool classof(const Value *V) {
984 return V->getValueID() == DSOLocalEquivalentVal;
985 }
986};
987
988template <>
990 : public FixedNumOperandTraits<DSOLocalEquivalent, 1> {};
991
993
994/// Wrapper for a value that won't be replaced with a CFI jump table
995/// pointer in LowerTypeTestsModule.
996class NoCFIValue final : public Constant {
997 friend class Constant;
998
999 constexpr static IntrusiveOperandsAllocMarker AllocMarker{1};
1000
1002
1003 void *operator new(size_t S) { return User::operator new(S, AllocMarker); }
1004
1005 void destroyConstantImpl();
1006 Value *handleOperandChangeImpl(Value *From, Value *To);
1007
1008public:
1009 /// Return a NoCFIValue for the specified function.
1010 LLVM_ABI static NoCFIValue *get(GlobalValue *GV);
1011
1012 /// Transparently provide more efficient getOperand methods.
1014
1016 return cast<GlobalValue>(Op<0>().get());
1017 }
1018
1019 /// NoCFIValue is always a pointer.
1022 }
1023
1024 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1025 static bool classof(const Value *V) {
1026 return V->getValueID() == NoCFIValueVal;
1027 }
1028};
1029
1030template <>
1031struct OperandTraits<NoCFIValue> : public FixedNumOperandTraits<NoCFIValue, 1> {
1032};
1033
1035
1036/// A signed pointer, in the ptrauth sense.
1037class ConstantPtrAuth final : public Constant {
1039 friend class Constant;
1040
1041 constexpr static IntrusiveOperandsAllocMarker AllocMarker{5};
1042
1044 Constant *AddrDisc, Constant *DeactivationSymbol);
1045
1046 void *operator new(size_t s) { return User::operator new(s, AllocMarker); }
1047
1048 void destroyConstantImpl();
1049 Value *handleOperandChangeImpl(Value *From, Value *To);
1050
1051public:
1052 /// Return a pointer signed with the specified parameters.
1053 LLVM_ABI static ConstantPtrAuth *get(Constant *Ptr, ConstantInt *Key,
1054 ConstantInt *Disc, Constant *AddrDisc,
1055 Constant *DeactivationSymbol);
1056
1057 /// Produce a new ptrauth expression signing the given value using
1058 /// the same schema as is stored in one.
1059 LLVM_ABI ConstantPtrAuth *getWithSameSchema(Constant *Pointer) const;
1060
1061 /// Transparently provide more efficient getOperand methods.
1063
1064 /// The pointer that is signed in this ptrauth signed pointer.
1065 Constant *getPointer() const { return cast<Constant>(Op<0>().get()); }
1066
1067 /// The Key ID, an i32 constant.
1069
1070 /// The integer discriminator, an i64 constant, or 0.
1072 return cast<ConstantInt>(Op<2>().get());
1073 }
1074
1075 /// The address discriminator if any, or the null constant.
1076 /// If present, this must be a value equivalent to the storage location of
1077 /// the only global-initializer user of the ptrauth signed pointer.
1079 return cast<Constant>(Op<3>().get());
1080 }
1081
1082 /// Whether there is any non-null address discriminator.
1084 return !getAddrDiscriminator()->isNullValue();
1085 }
1086
1088 return cast<Constant>(Op<4>().get());
1089 }
1090
1091 /// A constant value for the address discriminator which has special
1092 /// significance to ctors/dtors lowering. Regular address discrimination can't
1093 /// be applied for them since uses of llvm.global_{c|d}tors are disallowed
1094 /// (see Verifier::visitGlobalVariable) and we can't emit getelementptr
1095 /// expressions referencing these special arrays.
1097
1098 /// Whether the address uses a special address discriminator.
1099 /// These discriminators can't be used in real pointer-auth values; they
1100 /// can only be used in "prototype" values that indicate how some real
1101 /// schema is supposed to be produced.
1102 LLVM_ABI bool hasSpecialAddressDiscriminator(uint64_t Value) const;
1103
1104 /// Check whether an authentication operation with key \p Key and (possibly
1105 /// blended) discriminator \p Discriminator is known to be compatible with
1106 /// this ptrauth signed pointer.
1107 LLVM_ABI bool isKnownCompatibleWith(const Value *Key,
1108 const Value *Discriminator,
1109 const DataLayout &DL) const;
1110
1111 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1112 static bool classof(const Value *V) {
1113 return V->getValueID() == ConstantPtrAuthVal;
1114 }
1115};
1116
1117template <>
1119 : public FixedNumOperandTraits<ConstantPtrAuth, 5> {};
1120
1122
1123//===----------------------------------------------------------------------===//
1124/// A constant value that is initialized with an expression using
1125/// other constant values.
1126///
1127/// This class uses the standard Instruction opcodes to define the various
1128/// constant expressions. The Opcode field for the ConstantExpr class is
1129/// maintained in the Value::SubclassData field.
1130class ConstantExpr : public Constant {
1131 friend struct ConstantExprKeyType;
1132 friend class Constant;
1133
1134 void destroyConstantImpl();
1135 Value *handleOperandChangeImpl(Value *From, Value *To);
1136
1137protected:
1138 ConstantExpr(Type *ty, unsigned Opcode, AllocInfo AllocInfo)
1139 : Constant(ty, ConstantExprVal, AllocInfo) {
1140 // Operation type (an Instruction opcode) is stored as the SubclassData.
1141 setValueSubclassData(Opcode);
1142 }
1143
1144 ~ConstantExpr() = default;
1145
1146public:
1147 // Static methods to construct a ConstantExpr of different kinds. Note that
1148 // these methods may return a object that is not an instance of the
1149 // ConstantExpr class, because they will attempt to fold the constant
1150 // expression into something simpler if possible.
1151
1152 /// getAlignOf constant expr - computes the alignment of a type in a target
1153 /// independent way (Note: the return type is an i64).
1154 LLVM_ABI static Constant *getAlignOf(Type *Ty);
1155
1156 /// getSizeOf constant expr - computes the (alloc) size of a type (in
1157 /// address-units, not bits) in a target independent way (Note: the return
1158 /// type is an i64).
1159 ///
1160 LLVM_ABI static Constant *getSizeOf(Type *Ty);
1161
1162 LLVM_ABI static Constant *getNeg(Constant *C, bool HasNSW = false);
1163 LLVM_ABI static Constant *getNot(Constant *C);
1164 LLVM_ABI static Constant *getAdd(Constant *C1, Constant *C2,
1165 bool HasNUW = false, bool HasNSW = false);
1166 LLVM_ABI static Constant *getSub(Constant *C1, Constant *C2,
1167 bool HasNUW = false, bool HasNSW = false);
1168 LLVM_ABI static Constant *getXor(Constant *C1, Constant *C2);
1169 LLVM_ABI static Constant *getTrunc(Constant *C, Type *Ty,
1170 bool OnlyIfReduced = false);
1172 bool OnlyIfReduced = false);
1174 bool OnlyIfReduced = false);
1176 bool OnlyIfReduced = false);
1177 LLVM_ABI static Constant *getBitCast(Constant *C, Type *Ty,
1178 bool OnlyIfReduced = false);
1180 bool OnlyIfReduced = false);
1181
1182 static Constant *getNSWNeg(Constant *C) { return getNeg(C, /*HasNSW=*/true); }
1183
1185 return getAdd(C1, C2, false, true);
1186 }
1187
1189 return getAdd(C1, C2, true, false);
1190 }
1191
1193 return getSub(C1, C2, false, true);
1194 }
1195
1197 return getSub(C1, C2, true, false);
1198 }
1199
1200 /// If C is a scalar/fixed width vector of known powers of 2, then this
1201 /// function returns a new scalar/fixed width vector obtained from logBase2
1202 /// of C. Undef vector elements are set to zero.
1203 /// Return a null pointer otherwise.
1204 LLVM_ABI static Constant *getExactLogBase2(Constant *C);
1205
1206 /// Return the identity constant for a binary opcode.
1207 /// If the binop is not commutative, callers can acquire the operand 1
1208 /// identity constant by setting AllowRHSConstant to true. For example, any
1209 /// shift has a zero identity constant for operand 1: X shift 0 = X. If this
1210 /// is a fadd/fsub operation and we don't care about signed zeros, then
1211 /// setting NSZ to true returns the identity +0.0 instead of -0.0. Return
1212 /// nullptr if the operator does not have an identity constant.
1213 LLVM_ABI static Constant *getBinOpIdentity(unsigned Opcode, Type *Ty,
1214 bool AllowRHSConstant = false,
1215 bool NSZ = false);
1216
1217 LLVM_ABI static Constant *getIntrinsicIdentity(Intrinsic::ID, Type *Ty);
1218
1219 /// Return the identity constant for a binary or intrinsic Instruction.
1220 /// The identity constant C is defined as X op C = X and C op X = X where C
1221 /// and X are the first two operands, and the operation is commutative.
1222 LLVM_ABI static Constant *getIdentity(Instruction *I, Type *Ty,
1223 bool AllowRHSConstant = false,
1224 bool NSZ = false);
1225
1226 /// Return the absorbing element for the given binary
1227 /// operation, i.e. a constant C such that X op C = C and C op X = C for
1228 /// every X. For example, this returns zero for integer multiplication.
1229 /// If AllowLHSConstant is true, the LHS operand is a constant C that must be
1230 /// defined as C op X = C. It returns null if the operator doesn't have
1231 /// an absorbing element.
1232 LLVM_ABI static Constant *getBinOpAbsorber(unsigned Opcode, Type *Ty,
1233 bool AllowLHSConstant = false);
1234
1235 /// Transparently provide more efficient getOperand methods.
1237
1238 /// Convenience function for getting a Cast operation.
1239 ///
1240 /// \param ops The opcode for the conversion
1241 /// \param C The constant to be converted
1242 /// \param Ty The type to which the constant is converted
1243 /// \param OnlyIfReduced see \a getWithOperands() docs.
1244 LLVM_ABI static Constant *getCast(unsigned ops, Constant *C, Type *Ty,
1245 bool OnlyIfReduced = false);
1246
1247 // Create a Trunc or BitCast cast constant expression
1248 LLVM_ABI static Constant *
1249 getTruncOrBitCast(Constant *C, ///< The constant to trunc or bitcast
1250 Type *Ty ///< The type to trunc or bitcast C to
1251 );
1252
1253 /// Create a BitCast, AddrSpaceCast, or a PtrToInt cast constant
1254 /// expression.
1255 LLVM_ABI static Constant *
1256 getPointerCast(Constant *C, ///< The pointer value to be casted (operand 0)
1257 Type *Ty ///< The type to which cast should be made
1258 );
1259
1260 /// Create a BitCast or AddrSpaceCast for a pointer type depending on
1261 /// the address space.
1263 Constant *C, ///< The constant to addrspacecast or bitcast
1264 Type *Ty ///< The type to bitcast or addrspacecast C to
1265 );
1266
1267 /// Return true if this is a convert constant expression
1268 LLVM_ABI bool isCast() const;
1269
1270 /// get - Return a binary or shift operator constant expression,
1271 /// folding if possible.
1272 ///
1273 /// \param OnlyIfReducedTy see \a getWithOperands() docs.
1274 LLVM_ABI static Constant *get(unsigned Opcode, Constant *C1, Constant *C2,
1275 unsigned Flags = 0,
1276 Type *OnlyIfReducedTy = nullptr);
1277
1278 /// Getelementptr form. Value* is only accepted for convenience;
1279 /// all elements must be Constants.
1280 ///
1281 /// \param InRange the inrange range if present or std::nullopt.
1282 /// \param OnlyIfReducedTy see \a getWithOperands() docs.
1283 static Constant *
1286 std::optional<ConstantRange> InRange = std::nullopt,
1287 Type *OnlyIfReducedTy = nullptr) {
1288 return getGetElementPtr(
1289 Ty, C, ArrayRef((Value *const *)IdxList.data(), IdxList.size()), NW,
1290 InRange, OnlyIfReducedTy);
1291 }
1292 static Constant *
1295 std::optional<ConstantRange> InRange = std::nullopt,
1296 Type *OnlyIfReducedTy = nullptr) {
1297 // This form of the function only exists to avoid ambiguous overload
1298 // warnings about whether to convert Idx to ArrayRef<Constant *> or
1299 // ArrayRef<Value *>.
1300 return getGetElementPtr(Ty, C, cast<Value>(Idx), NW, InRange,
1301 OnlyIfReducedTy);
1302 }
1303 LLVM_ABI static Constant *
1304 getGetElementPtr(Type *Ty, Constant *C, ArrayRef<Value *> IdxList,
1306 std::optional<ConstantRange> InRange = std::nullopt,
1307 Type *OnlyIfReducedTy = nullptr);
1308
1309 /// Create an "inbounds" getelementptr. See the documentation for the
1310 /// "inbounds" flag in LangRef.html for details.
1312 ArrayRef<Constant *> IdxList) {
1313 return getGetElementPtr(Ty, C, IdxList, GEPNoWrapFlags::inBounds());
1314 }
1316 Constant *Idx) {
1317 // This form of the function only exists to avoid ambiguous overload
1318 // warnings about whether to convert Idx to ArrayRef<Constant *> or
1319 // ArrayRef<Value *>.
1320 return getGetElementPtr(Ty, C, Idx, GEPNoWrapFlags::inBounds());
1321 }
1323 ArrayRef<Value *> IdxList) {
1324 return getGetElementPtr(Ty, C, IdxList, GEPNoWrapFlags::inBounds());
1325 }
1326
1327 LLVM_ABI static Constant *getExtractElement(Constant *Vec, Constant *Idx,
1328 Type *OnlyIfReducedTy = nullptr);
1329 LLVM_ABI static Constant *getInsertElement(Constant *Vec, Constant *Elt,
1330 Constant *Idx,
1331 Type *OnlyIfReducedTy = nullptr);
1332 LLVM_ABI static Constant *getShuffleVector(Constant *V1, Constant *V2,
1333 ArrayRef<int> Mask,
1334 Type *OnlyIfReducedTy = nullptr);
1335
1336 /// Return the opcode at the root of this constant expression
1337 unsigned getOpcode() const { return getSubclassDataFromValue(); }
1338
1339 /// Assert that this is a shufflevector and return the mask. See class
1340 /// ShuffleVectorInst for a description of the mask representation.
1341 LLVM_ABI ArrayRef<int> getShuffleMask() const;
1342
1343 /// Assert that this is a shufflevector and return the mask.
1344 ///
1345 /// TODO: This is a temporary hack until we update the bitcode format for
1346 /// shufflevector.
1347 LLVM_ABI Constant *getShuffleMaskForBitcode() const;
1348
1349 /// Return a string representation for an opcode.
1350 LLVM_ABI const char *getOpcodeName() const;
1351
1352 /// This returns the current constant expression with the operands replaced
1353 /// with the specified values. The specified array must have the same number
1354 /// of operands as our current one.
1358
1359 /// Get the current expression with the operands replaced.
1360 ///
1361 /// Return the current constant expression with the operands replaced with \c
1362 /// Ops and the type with \c Ty. The new operands must have the same number
1363 /// as the current ones.
1364 ///
1365 /// If \c OnlyIfReduced is \c true, nullptr will be returned unless something
1366 /// gets constant-folded, the type changes, or the expression is otherwise
1367 /// canonicalized. This parameter should almost always be \c false.
1368 LLVM_ABI Constant *getWithOperands(ArrayRef<Constant *> Ops, Type *Ty,
1369 bool OnlyIfReduced = false,
1370 Type *SrcTy = nullptr) const;
1371
1372 /// Returns an Instruction which implements the same operation as this
1373 /// ConstantExpr. It is not inserted into any basic block.
1374 ///
1375 /// A better approach to this could be to have a constructor for Instruction
1376 /// which would take a ConstantExpr parameter, but that would have spread
1377 /// implementation details of ConstantExpr outside of Constants.cpp, which
1378 /// would make it harder to remove ConstantExprs altogether.
1379 LLVM_ABI Instruction *getAsInstruction() const;
1380
1381 /// Whether creating a constant expression for this binary operator is
1382 /// desirable.
1383 LLVM_ABI static bool isDesirableBinOp(unsigned Opcode);
1384
1385 /// Whether creating a constant expression for this binary operator is
1386 /// supported.
1387 LLVM_ABI static bool isSupportedBinOp(unsigned Opcode);
1388
1389 /// Whether creating a constant expression for this cast is desirable.
1390 LLVM_ABI static bool isDesirableCastOp(unsigned Opcode);
1391
1392 /// Whether creating a constant expression for this cast is supported.
1393 LLVM_ABI static bool isSupportedCastOp(unsigned Opcode);
1394
1395 /// Whether creating a constant expression for this getelementptr type is
1396 /// supported.
1397 static bool isSupportedGetElementPtr(const Type *SrcElemTy) {
1398 return !SrcElemTy->isScalableTy();
1399 }
1400
1401 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1402 static bool classof(const Value *V) {
1403 return V->getValueID() == ConstantExprVal;
1404 }
1405
1406private:
1407 // Shadow Value::setValueSubclassData with a private forwarding method so that
1408 // subclasses cannot accidentally use it.
1409 void setValueSubclassData(unsigned short D) {
1411 }
1412};
1413
1414template <>
1416 : public VariadicOperandTraits<ConstantExpr> {};
1417
1419
1420//===----------------------------------------------------------------------===//
1421/// 'undef' values are things that do not have specified contents.
1422/// These are used for a variety of purposes, including global variable
1423/// initializers and operands to instructions. 'undef' values can occur with
1424/// any first-class type.
1425///
1426/// Undef values aren't exactly constants; if they have multiple uses, they
1427/// can appear to have different bit patterns at each use. See
1428/// LangRef.html#undefvalues for details.
1429///
1430class UndefValue : public ConstantData {
1431 friend class Constant;
1432
1433 explicit UndefValue(Type *T) : ConstantData(T, UndefValueVal) {}
1434
1435 void destroyConstantImpl();
1436
1437protected:
1438 explicit UndefValue(Type *T, ValueTy vty) : ConstantData(T, vty) {}
1439
1440public:
1441 UndefValue(const UndefValue &) = delete;
1442
1443 /// Static factory methods - Return an 'undef' object of the specified type.
1444 LLVM_ABI static UndefValue *get(Type *T);
1445
1446 /// If this Undef has array or vector type, return a undef with the right
1447 /// element type.
1448 LLVM_ABI UndefValue *getSequentialElement() const;
1449
1450 /// If this undef has struct type, return a undef with the right element type
1451 /// for the specified element.
1452 LLVM_ABI UndefValue *getStructElement(unsigned Elt) const;
1453
1454 /// Return an undef of the right value for the specified GEP index if we can,
1455 /// otherwise return null (e.g. if C is a ConstantExpr).
1456 LLVM_ABI UndefValue *getElementValue(Constant *C) const;
1457
1458 /// Return an undef of the right value for the specified GEP index.
1459 LLVM_ABI UndefValue *getElementValue(unsigned Idx) const;
1460
1461 /// Return the number of elements in the array, vector, or struct.
1462 LLVM_ABI unsigned getNumElements() const;
1463
1464 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1465 static bool classof(const Value *V) {
1466 return V->getValueID() == UndefValueVal ||
1467 V->getValueID() == PoisonValueVal;
1468 }
1469};
1470
1471//===----------------------------------------------------------------------===//
1472/// In order to facilitate speculative execution, many instructions do not
1473/// invoke immediate undefined behavior when provided with illegal operands,
1474/// and return a poison value instead.
1475///
1476/// see LangRef.html#poisonvalues for details.
1477///
1478class PoisonValue final : public UndefValue {
1479 friend class Constant;
1480
1481 explicit PoisonValue(Type *T) : UndefValue(T, PoisonValueVal) {}
1482
1483 void destroyConstantImpl();
1484
1485public:
1486 PoisonValue(const PoisonValue &) = delete;
1487
1488 /// Static factory methods - Return an 'poison' object of the specified type.
1489 LLVM_ABI static PoisonValue *get(Type *T);
1490
1491 /// If this poison has array or vector type, return a poison with the right
1492 /// element type.
1493 LLVM_ABI PoisonValue *getSequentialElement() const;
1494
1495 /// If this poison has struct type, return a poison with the right element
1496 /// type for the specified element.
1497 LLVM_ABI PoisonValue *getStructElement(unsigned Elt) const;
1498
1499 /// Return an poison of the right value for the specified GEP index if we can,
1500 /// otherwise return null (e.g. if C is a ConstantExpr).
1501 LLVM_ABI PoisonValue *getElementValue(Constant *C) const;
1502
1503 /// Return an poison of the right value for the specified GEP index.
1504 LLVM_ABI PoisonValue *getElementValue(unsigned Idx) const;
1505
1506 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1507 static bool classof(const Value *V) {
1508 return V->getValueID() == PoisonValueVal;
1509 }
1510};
1511
1512} // end namespace llvm
1513
1514#endif // LLVM_IR_CONSTANTS_H
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file declares a class to represent arbitrary precision floating point values and provide a varie...
This file implements a class to represent arbitrary precision integral constant values and operations...
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
#define LLVM_ABI
Definition Compiler.h:213
static StringRef getOpcodeName(uint8_t Opcode, uint8_t OpcodeBase)
const AbstractManglingParser< Derived, Alloc >::OperatorInfo AbstractManglingParser< Derived, Alloc >::Ops[]
#define F(x, y, z)
Definition MD5.cpp:54
#define I(x, y, z)
Definition MD5.cpp:57
static bool InRange(int64_t Value, unsigned short Shift, int LBound, int HBound)
#define T
#define DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CLASS, VALUECLASS)
Macro for generating out-of-class operand accessor definitions.
static unsigned getNumElements(Type *Ty)
This file contains some templates that are useful if you are working with the STL at all.
static SymbolRef::Type getType(const Symbol *Sym)
Definition TapiFile.cpp:39
xray Insert XRay ops
static constexpr roundingMode rmNearestTiesToEven
Definition APFloat.h:344
LLVM_ABI opStatus convert(const fltSemantics &ToSemantics, roundingMode RM, bool *losesInfo)
Definition APFloat.cpp:6053
Class for arbitrary precision integers.
Definition APInt.h:78
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
size_t size() const
size - Get the array size.
Definition ArrayRef.h:142
const T * data() const
Definition ArrayRef.h:139
Class to represent array types.
static LLVM_ABI ArrayType * get(Type *ElementType, uint64_t NumElements)
This static method is the primary way to construct an ArrayType.
LLVM Basic Block Representation.
Definition BasicBlock.h:62
const Function * getParent() const
Return the enclosing method, or null if none.
Definition BasicBlock.h:213
The address of a basic block.
Definition Constants.h:904
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value)
Transparently provide more efficient getOperand methods.
static LLVM_ABI BlockAddress * lookup(const BasicBlock *BB)
Lookup an existing BlockAddress constant for the given BasicBlock.
friend class Constant
Definition Constants.h:905
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:943
Function * getFunction() const
Definition Constants.h:940
BasicBlock * getBasicBlock() const
Definition Constants.h:939
static LLVM_ABI BlockAddress * get(Function *F, BasicBlock *BB)
Return a BlockAddress for the specified function and basic block.
LLVM_ABI ElementCount getElementCount() const
Return the number of elements in the array, vector, or struct.
ConstantAggregateZero(const ConstantAggregateZero &)=delete
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:397
LLVM_ABI Constant * getSequentialElement() const
If this CAZ has array or vector type, return a zero with the right element type.
LLVM_ABI Constant * getElementValue(Constant *C) const
Return a zero of the right value for the specified GEP index if we can, otherwise return null (e....
LLVM_ABI Constant * getStructElement(unsigned Elt) const
If this CAZ has struct type, return a zero with the right element type for the specified element.
static LLVM_ABI ConstantAggregateZero * get(Type *Ty)
Base class for aggregate constants (with operands).
Definition Constants.h:413
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Constant)
Transparently provide more efficient getOperand methods.
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:423
LLVM_ABI ConstantAggregate(Type *T, ValueTy VT, ArrayRef< Constant * > V, AllocInfo AllocInfo)
friend class Constant
Definition Constants.h:440
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:462
ArrayType * getType() const
Specialize the getType() method to always return an ArrayType, which reduces the amount of casting ne...
Definition Constants.h:457
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:770
static LLVM_ABI Constant * getString(LLVMContext &Context, StringRef Initializer, bool AddNull=true)
This method constructs a CDS and initializes it with a text string.
static Constant * get(LLVMContext &Context, ArrayRef< ElementTy > Elts)
get() constructor - Return a constant with array type with an element count and element type matching...
Definition Constants.h:720
static LLVM_ABI Constant * getFP(Type *ElementType, ArrayRef< uint16_t > Elts)
getFP() constructors - Return a constant of array type with a float element type taken from argument ...
friend class ConstantDataSequential
Definition Constants.h:708
static Constant * get(LLVMContext &Context, ArrayTy &Elts)
get() constructor - ArrayTy needs to be compatible with ArrayRef<ElementTy>.
Definition Constants.h:729
ConstantDataArray(const ConstantDataArray &)=delete
static Constant * getRaw(StringRef Data, uint64_t NumElements, Type *ElementTy)
getRaw() constructor - Return a constant with array type with an element count and element type match...
Definition Constants.h:739
ArrayType * getType() const
Specialize the getType() method to always return an ArrayType, which reduces the amount of casting ne...
Definition Constants.h:765
LLVM_ABI APFloat getElementAsAPFloat(uint64_t i) const
If this is a sequential container of floating point type, return the specified element as an APFloat.
LLVM_ABI uint64_t getElementAsInteger(uint64_t i) const
If this is a sequential container of integers (of any size), return the specified element in the low ...
StringRef getAsString() const
If this array is isString(), then this method returns the array as a StringRef.
Definition Constants.h:673
LLVM_ABI Constant * getElementAsConstant(uint64_t i) const
Return a Constant for a specified index's element.
LLVM_ABI uint64_t getElementByteSize() const
Return the size (in bytes) of each element in the array/vector.
ConstantDataSequential(const ConstantDataSequential &)=delete
LLVM_ABI float getElementAsFloat(uint64_t i) const
If this is an sequential container of floats, return the specified element as a float.
LLVM_ABI bool isString(unsigned CharSize=8) const
This method returns true if this is an array of CharSize integers.
LLVM_ABI uint64_t getNumElements() const
Return the number of elements in the array or vector.
StringRef getAsCString() const
If this array is isCString(), then this method returns the array (without the trailing null byte) as ...
Definition Constants.h:680
LLVM_ABI APInt getElementAsAPInt(uint64_t i) const
If this is a sequential container of integers (of any size), return the specified element as an APInt...
static LLVM_ABI Constant * getImpl(StringRef Bytes, Type *Ty)
This is the underlying implementation of all of the ConstantDataSequential::get methods.
LLVM_ABI double getElementAsDouble(uint64_t i) const
If this is an sequential container of doubles, return the specified element as a double.
LLVM_ABI Type * getElementType() const
Return the element type of the array/vector.
LLVM_ABI bool isCString() const
This method returns true if the array "isString", ends with a null byte, and does not contains any ot...
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:692
LLVM_ABI StringRef getRawDataValues() const
Return the raw, underlying, bytes of this data.
static LLVM_ABI bool isElementTypeCompatible(Type *Ty)
Return true if a ConstantDataSequential can be formed with a vector or array of the specified element...
ConstantDataSequential(Type *ty, ValueTy VT, const char *Data)
Definition Constants.h:615
static Constant * getRaw(StringRef Data, uint64_t NumElements, Type *ElementTy)
getRaw() constructor - Return a constant with vector type with an element count and element type matc...
Definition Constants.h:811
LLVM_ABI Constant * getSplatValue() const
If this is a splat constant, meaning that all of the elements have the same value,...
static LLVM_ABI Constant * getSplat(unsigned NumElts, Constant *Elt)
Return a ConstantVector with the specified constant in each element.
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:847
LLVM_ABI bool isSplat() const
Returns true if this is a splat constant, meaning that all elements have the same value.
friend class ConstantDataSequential
Definition Constants.h:782
FixedVectorType * getType() const
Specialize the getType() method to always return a FixedVectorType, which reduces the amount of casti...
Definition Constants.h:842
ConstantDataVector(const ConstantDataVector &)=delete
static LLVM_ABI Constant * get(LLVMContext &Context, ArrayRef< uint8_t > Elts)
get() constructors - Return a constant with vector type with an element count and element type matchi...
static LLVM_ABI Constant * getFP(Type *ElementType, ArrayRef< uint16_t > Elts)
getFP() constructors - Return a constant of vector type with a float element type taken from argument...
static bool classof(const Value *V)
Methods to support type inquiry through isa, cast, and dyn_cast.
Definition Constants.h:76
friend class Constant
Definition Constants.h:59
ConstantData(const ConstantData &)=delete
ConstantData(Type *Ty, ValueTy VT)
Definition Constants.h:66
A constant value that is initialized with an expression using other constant values.
Definition Constants.h:1130
static LLVM_ABI Constant * getIntToPtr(Constant *C, Type *Ty, bool OnlyIfReduced=false)
ConstantExpr(Type *ty, unsigned Opcode, AllocInfo AllocInfo)
Definition Constants.h:1138
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:1402
static LLVM_ABI Constant * getAlignOf(Type *Ty)
getAlignOf constant expr - computes the alignment of a type in a target independent way (Note: the re...
static Constant * getNUWSub(Constant *C1, Constant *C2)
Definition Constants.h:1196
static Constant * getInBoundsGetElementPtr(Type *Ty, Constant *C, ArrayRef< Constant * > IdxList)
Create an "inbounds" getelementptr.
Definition Constants.h:1311
friend struct ConstantExprKeyType
Definition Constants.h:1131
static LLVM_ABI Constant * getPointerCast(Constant *C, Type *Ty)
Create a BitCast, AddrSpaceCast, or a PtrToInt cast constant expression.
static LLVM_ABI Constant * getTruncOrBitCast(Constant *C, Type *Ty)
static LLVM_ABI Constant * getPointerBitCastOrAddrSpaceCast(Constant *C, Type *Ty)
Create a BitCast or AddrSpaceCast for a pointer type depending on the address space.
LLVM_ABI bool isCast() const
Return true if this is a convert constant expression.
static Constant * getNSWAdd(Constant *C1, Constant *C2)
Definition Constants.h:1184
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Constant)
Transparently provide more efficient getOperand methods.
static LLVM_ABI Constant * getCast(unsigned ops, Constant *C, Type *Ty, bool OnlyIfReduced=false)
Convenience function for getting a Cast operation.
static LLVM_ABI Constant * getSub(Constant *C1, Constant *C2, bool HasNUW=false, bool HasNSW=false)
static LLVM_ABI Constant * getNot(Constant *C)
friend class Constant
Definition Constants.h:1132
static LLVM_ABI Constant * getPtrToInt(Constant *C, Type *Ty, bool OnlyIfReduced=false)
static LLVM_ABI Constant * getPtrToAddr(Constant *C, Type *Ty, bool OnlyIfReduced=false)
static LLVM_ABI Constant * getSizeOf(Type *Ty)
getSizeOf constant expr - computes the (alloc) size of a type (in address-units, not bits) in a targe...
static bool isSupportedGetElementPtr(const Type *SrcElemTy)
Whether creating a constant expression for this getelementptr type is supported.
Definition Constants.h:1397
static Constant * getGetElementPtr(Type *Ty, Constant *C, Constant *Idx, GEPNoWrapFlags NW=GEPNoWrapFlags::none(), std::optional< ConstantRange > InRange=std::nullopt, Type *OnlyIfReducedTy=nullptr)
Definition Constants.h:1293
static LLVM_ABI Constant * getXor(Constant *C1, Constant *C2)
static Constant * getInBoundsGetElementPtr(Type *Ty, Constant *C, ArrayRef< Value * > IdxList)
Definition Constants.h:1322
static Constant * getNSWNeg(Constant *C)
Definition Constants.h:1182
static Constant * getNSWSub(Constant *C1, Constant *C2)
Definition Constants.h:1192
static Constant * getInBoundsGetElementPtr(Type *Ty, Constant *C, Constant *Idx)
Definition Constants.h:1315
static Constant * getNUWAdd(Constant *C1, Constant *C2)
Definition Constants.h:1188
static LLVM_ABI Constant * getAddrSpaceCast(Constant *C, Type *Ty, bool OnlyIfReduced=false)
~ConstantExpr()=default
unsigned getOpcode() const
Return the opcode at the root of this constant expression.
Definition Constants.h:1337
static Constant * getGetElementPtr(Type *Ty, Constant *C, ArrayRef< Constant * > IdxList, GEPNoWrapFlags NW=GEPNoWrapFlags::none(), std::optional< ConstantRange > InRange=std::nullopt, Type *OnlyIfReducedTy=nullptr)
Getelementptr form.
Definition Constants.h:1284
static LLVM_ABI Constant * getAdd(Constant *C1, Constant *C2, bool HasNUW=false, bool HasNSW=false)
static LLVM_ABI Constant * getBitCast(Constant *C, Type *Ty, bool OnlyIfReduced=false)
static LLVM_ABI Constant * getNeg(Constant *C, bool HasNSW=false)
static LLVM_ABI Constant * getTrunc(Constant *C, Type *Ty, bool OnlyIfReduced=false)
Constant * getWithOperands(ArrayRef< Constant * > Ops) const
This returns the current constant expression with the operands replaced with the specified values.
Definition Constants.h:1355
ConstantFP(const ConstantFP &)=delete
const APFloat & getValue() const
Definition Constants.h:326
friend class ConstantVector
Definition Constants.h:284
static LLVM_ABI Constant * getSNaN(Type *Ty, bool Negative=false, APInt *Payload=nullptr)
const APFloat & getValueAPF() const
Definition Constants.h:325
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:356
bool isInfinity() const
Return true if the value is infinity.
Definition Constants.h:335
friend class Constant
Definition Constants.h:283
bool isNegative() const
Return true if the sign bit is set.
Definition Constants.h:332
bool isExactlyValue(double V) const
Definition Constants.h:348
static LLVM_ABI Constant * getInfinity(Type *Ty, bool Negative=false)
static LLVM_ABI Constant * getZero(Type *Ty, bool Negative=false)
static Constant * getNegativeZero(Type *Ty)
Definition Constants.h:320
static LLVM_ABI Constant * getNaN(Type *Ty, bool Negative=false, uint64_t Payload=0)
bool isNaN() const
Return true if the value is a NaN.
Definition Constants.h:338
LLVM_ABI bool isExactlyValue(const APFloat &V) const
We don't rely on operator== working on double values, as it returns true for things that are clearly ...
static LLVM_ABI bool isValueValidForType(Type *Ty, const APFloat &V)
Return true if Ty is big enough to represent V.
static LLVM_ABI Constant * getQNaN(Type *Ty, bool Negative=false, APInt *Payload=nullptr)
bool isZero() const
Return true if the value is positive or negative zero.
Definition Constants.h:329
This is the shared class of boolean and integer constants.
Definition Constants.h:87
static Constant * getSigned(Type *Ty, int64_t V)
Definition Constants.h:139
bool isMinusOne() const
This function will return true iff every bit in this constant is set to true.
Definition Constants.h:231
friend class ConstantVector
Definition Constants.h:89
bool isOne() const
This is just a convenience method to make client code smaller for a common case.
Definition Constants.h:225
bool isNegative() const
Definition Constants.h:214
uint64_t getLimitedValue(uint64_t Limit=~0ULL) const
getLimitedValue - If the value is smaller than the specified limit, return it, otherwise return the l...
Definition Constants.h:269
IntegerType * getIntegerType() const
Variant of the getType() method to always return an IntegerType, which reduces the amount of casting ...
Definition Constants.h:198
static LLVM_ABI bool isValueValidForType(Type *Ty, uint64_t V)
This static method returns true if the type Ty is big enough to represent the value V.
friend class Constant
Definition Constants.h:88
static bool classof(const Value *V)
Methods to support type inquiry through isa, cast, and dyn_cast.
Definition Constants.h:274
static LLVM_ABI ConstantInt * getTrue(LLVMContext &Context)
ConstantInt(const ConstantInt &)=delete
bool isZero() const
This is just a convenience method to make client code smaller for a common code.
Definition Constants.h:219
MaybeAlign getMaybeAlignValue() const
Return the constant as an llvm::MaybeAlign.
Definition Constants.h:179
static ConstantInt * getSigned(IntegerType *Ty, int64_t V)
Return a ConstantInt with the specified value for the specified type.
Definition Constants.h:136
bool isMinValue(bool IsSigned) const
This function will return true iff this constant represents the smallest value that may be represente...
Definition Constants.h:250
static LLVM_ABI ConstantInt * getFalse(LLVMContext &Context)
int64_t getSExtValue() const
Return the constant as a 64-bit integer value after it has been sign extended as appropriate for the ...
Definition Constants.h:174
bool isMaxValue(bool IsSigned) const
This function will return true iff this constant represents the largest value that may be represented...
Definition Constants.h:238
unsigned getBitWidth() const
getBitWidth - Return the scalar bitwidth of this constant.
Definition Constants.h:162
uint64_t getZExtValue() const
Return the constant as a 64-bit unsigned integer value after it has been zero extended as appropriate...
Definition Constants.h:168
Align getAlignValue() const
Return the constant as an llvm::Align, interpreting 0 as Align(1).
Definition Constants.h:186
bool equalsInt(uint64_t V) const
A helper method that can be used to determine if the constant contained within is equal to a constant...
Definition Constants.h:194
const APInt & getValue() const
Return the constant as an APInt value reference.
Definition Constants.h:159
bool uge(uint64_t Num) const
This function will return true iff this constant represents a value with active bits bigger than 64 b...
Definition Constants.h:262
static LLVM_ABI ConstantInt * getBool(LLVMContext &Context, bool V)
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:584
static LLVM_ABI ConstantPointerNull * get(PointerType *T)
Static factory methods - Return objects of the specified value.
PointerType * getType() const
Specialize the getType() method to always return an PointerType, which reduces the amount of casting ...
Definition Constants.h:579
ConstantPointerNull(const ConstantPointerNull &)=delete
A signed pointer, in the ptrauth sense.
Definition Constants.h:1037
Constant * getAddrDiscriminator() const
The address discriminator if any, or the null constant.
Definition Constants.h:1078
friend struct ConstantPtrAuthKeyType
Definition Constants.h:1038
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Constant)
Transparently provide more efficient getOperand methods.
Constant * getPointer() const
The pointer that is signed in this ptrauth signed pointer.
Definition Constants.h:1065
friend class Constant
Definition Constants.h:1039
ConstantInt * getKey() const
The Key ID, an i32 constant.
Definition Constants.h:1068
Constant * getDeactivationSymbol() const
Definition Constants.h:1087
bool hasAddressDiscriminator() const
Whether there is any non-null address discriminator.
Definition Constants.h:1083
ConstantInt * getDiscriminator() const
The integer discriminator, an i64 constant, or 0.
Definition Constants.h:1071
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:1112
static Constant * getAnon(LLVMContext &Ctx, ArrayRef< Constant * > V, bool Packed=false)
Definition Constants.h:494
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:514
static LLVM_ABI Constant * get(StructType *T, ArrayRef< Constant * > V)
friend class Constant
Definition Constants.h:472
static LLVM_ABI StructType * getTypeForElements(ArrayRef< Constant * > V, bool Packed=false)
Return an anonymous struct type to use for a constant with the specified set of elements.
static std::enable_if_t< are_base_of< Constant, Csts... >::value, Constant * > get(StructType *T, Csts *...Vs)
Definition Constants.h:485
StructType * getType() const
Specialization - reduce amount of casting.
Definition Constants.h:509
static Constant * getAnon(ArrayRef< Constant * > V, bool Packed=false)
Return an anonymous struct that has the specified elements.
Definition Constants.h:491
static LLVM_ABI ConstantTargetNone * get(TargetExtType *T)
Static factory methods - Return objects of the specified value.
TargetExtType * getType() const
Specialize the getType() method to always return an TargetExtType, which reduces the amount of castin...
Definition Constants.h:892
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast.
Definition Constants.h:897
ConstantTargetNone(const ConstantTargetNone &)=delete
ConstantTokenNone(const ConstantTokenNone &)=delete
friend class Constant
Definition Constants.h:856
static LLVM_ABI ConstantTokenNone * get(LLVMContext &Context)
Return the ConstantTokenNone.
static bool classof(const Value *V)
Methods to support type inquiry through isa, cast, and dyn_cast.
Definition Constants.h:870
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:555
friend class Constant
Definition Constants.h:524
FixedVectorType * getType() const
Specialize the getType() method to always return a FixedVectorType, which reduces the amount of casti...
Definition Constants.h:545
LLVM_ABI Constant * getSplatValue(bool AllowPoison=false) const
If all elements of the vector constant have the same value, return that value.
static LLVM_ABI Constant * getSplat(ElementCount EC, Constant *Elt)
Return a ConstantVector with the specified constant in each element.
static LLVM_ABI Constant * get(ArrayRef< Constant * > V)
This is an important base class in LLVM.
Definition Constant.h:43
Constant(Type *ty, ValueTy vty, AllocInfo AllocInfo)
Definition Constant.h:45
Wrapper for a function that represents a value that functionally represents the original function.
Definition Constants.h:957
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:983
GlobalValue * getGlobalValue() const
Definition Constants.h:978
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value)
Transparently provide more efficient getOperand methods.
A parsed version of the target data layout string in and methods for querying it.
Definition DataLayout.h:63
static constexpr ElementCount getFixed(ScalarTy MinVal)
Definition TypeSize.h:309
Class to represent fixed width SIMD vectors.
Represents flags for the getelementptr instruction/expression.
static GEPNoWrapFlags inBounds()
static GEPNoWrapFlags none()
Class to represent integer types.
This is an important class for using LLVM in a threaded context.
Definition LLVMContext.h:68
Wrapper for a value that won't be replaced with a CFI jump table pointer in LowerTypeTestsModule.
Definition Constants.h:996
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:1025
friend class Constant
Definition Constants.h:997
PointerType * getType() const
NoCFIValue is always a pointer.
Definition Constants.h:1020
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value)
Transparently provide more efficient getOperand methods.
GlobalValue * getGlobalValue() const
Definition Constants.h:1015
Class to represent pointers.
static LLVM_ABI PoisonValue * get(Type *T)
Static factory methods - Return an 'poison' object of the specified type.
PoisonValue(const PoisonValue &)=delete
friend class Constant
Definition Constants.h:1479
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:1507
LLVM_ABI PoisonValue * getStructElement(unsigned Elt) const
If this poison has struct type, return a poison with the right element type for the specified element...
LLVM_ABI PoisonValue * getSequentialElement() const
If this poison has array or vector type, return a poison with the right element type.
LLVM_ABI PoisonValue * getElementValue(Constant *C) const
Return an poison of the right value for the specified GEP index if we can, otherwise return null (e....
StringRef - Represent a constant reference to a string, i.e.
Definition StringRef.h:55
Class to represent struct types.
Class to represent target extensions types, which are generally unintrospectable from target-independ...
The instances of the Type class are immutable: once they are created, they are never changed.
Definition Type.h:45
LLVM_ABI bool isScalableTy(SmallPtrSetImpl< const Type * > &Visited) const
Return true if this is a type whose size is a known multiple of vscale.
Definition Type.cpp:61
static Type * getScalarTy(LLVMContext &C)
Definition Type.h:461
LLVM_ABI UndefValue * getElementValue(Constant *C) const
Return an undef of the right value for the specified GEP index if we can, otherwise return null (e....
LLVM_ABI UndefValue * getStructElement(unsigned Elt) const
If this undef has struct type, return a undef with the right element type for the specified element.
UndefValue(const UndefValue &)=delete
friend class Constant
Definition Constants.h:1431
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:1465
UndefValue(Type *T, ValueTy vty)
Definition Constants.h:1438
LLVM_ABI UndefValue * getSequentialElement() const
If this Undef has array or vector type, return a undef with the right element type.
LLVM Value Representation.
Definition Value.h:75
Type * getType() const
All values are typed, get the type of this value.
Definition Value.h:256
unsigned short getSubclassDataFromValue() const
Definition Value.h:889
void setValueSubclassData(unsigned short D)
Definition Value.h:890
ValueTy
Concrete subclass of this.
Definition Value.h:524
Base class of all SIMD vector types.
static LLVM_ABI VectorType * get(Type *ElementType, ElementCount EC)
This static method is the primary way to construct an VectorType.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
@ C
The default llvm calling convention, compatible with C.
Definition CallingConv.h:34
This is an optimization pass for GlobalISel generic memory operations.
decltype(auto) get(const PointerIntPair< PointerTy, IntBits, IntType, PtrTraits, Info > &Pair)
LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key
FunctionAddr VTableAddr uintptr_t uintptr_t Data
Definition InstrProf.h:189
DWARFExpression::Operation Op
ArrayRef(const T &OneElt) -> ArrayRef< T >
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:559
std::conjunction< std::is_base_of< T, Ts >... > are_base_of
traits class for checking whether type T is a base class for all the given types in the variadic list...
Definition STLExtras.h:115
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition Alignment.h:39
FixedNumOperandTraits - determine the allocation regime of the Use array when it is a prefix to the U...
This struct is a compact representation of a valid (power of two) or undefined (0) alignment.
Definition Alignment.h:106
Align valueOrOne() const
For convenience, returns a valid alignment or 1 if undefined.
Definition Alignment.h:130
Compile-time customization of User operands.
Definition User.h:42
Information about how a User object was allocated, to be passed into the User constructor.
Definition User.h:79
Indicates this User has operands co-allocated.
Definition User.h:60
VariadicOperandTraits - determine the allocation regime of the Use array when it is a prefix to the U...