LLVM 23.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 ::operator new(S); }
69
70public:
71 void operator delete(void *Ptr) { ::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 LLVM_ABI static Constant *get(Type *Ty, uint64_t V, bool IsSigned = false,
117 bool ImplicitTrunc = false);
118
119 /// Return a ConstantInt with the specified integer value for the specified
120 /// type. If the type is wider than 64 bits, the value will be zero-extended
121 /// to fit the type, unless IsSigned is true, in which case the value will
122 /// be interpreted as a 64-bit signed integer and sign-extended to fit
123 /// the type.
124 /// \param ImplicitTrunc Whether to allow implicit truncation of the value.
125 LLVM_ABI static ConstantInt *get(IntegerType *Ty, uint64_t V,
126 bool IsSigned = false,
127 bool ImplicitTrunc = false);
128
129 /// Return a ConstantInt with the specified value for the specified type. The
130 /// value V will be canonicalized to an unsigned APInt. Accessing it with
131 /// either getSExtValue() or getZExtValue() will yield a correctly sized and
132 /// signed value for the type Ty.
133 /// Get a ConstantInt for a specific signed value.
134 /// \param ImplicitTrunc Whether to allow implicit truncation of the value.
135 static ConstantInt *getSigned(IntegerType *Ty, int64_t V,
136 bool ImplicitTrunc = false) {
137 return get(Ty, V, /*IsSigned=*/true, ImplicitTrunc);
138 }
139 static Constant *getSigned(Type *Ty, int64_t V, bool ImplicitTrunc = false) {
140 return get(Ty, V, /*IsSigned=*/true, ImplicitTrunc);
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 isNullValue(); }
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/// Class for constant bytes.
281class ConstantByte final : public ConstantData {
282 friend class Constant;
283 friend class ConstantVector;
284
285 APInt Val;
286
287 ConstantByte(Type *Ty, const APInt &V);
288
289 void destroyConstantImpl();
290
291 /// Return a ConstantByte with the specified value and an implied Type. The
292 /// type is the vector type whose byte element type corresponds to the bit
293 /// width of the value.
294 static ConstantByte *get(LLVMContext &Context, ElementCount EC,
295 const APInt &V);
296
297public:
298 ConstantByte(const ConstantByte &) = delete;
299
300 /// If Ty is a vector type, return a Constant with a splat of the given
301 /// value. Otherwise return a ConstantByte for the given value.
302 /// \param ImplicitTrunc Whether to allow implicit truncation of the value.
303 LLVM_ABI static Constant *get(Type *Ty, uint64_t V, bool isSigned = false,
304 bool ImplicitTrunc = false);
305
306 /// Return a ConstantByte with the specified byte value for the specified
307 /// type. If the type is wider than 64 bits, the value will be zero-extended
308 /// to fit the type, unless IsSigned is true, in which case the value will
309 /// be interpreted as a 64-bit signed byte and sign-extended to fit
310 /// the type.
311 /// \param ImplicitTrunc Whether to allow implicit truncation of the value.
312 LLVM_ABI static ConstantByte *get(ByteType *Ty, uint64_t V,
313 bool isSigned = false,
314 bool ImplicitTrunc = false);
315
316 /// Return a ConstantByte with the specified value for the specified type. The
317 /// value V will be canonicalized to an unsigned APInt. Accessing it with
318 /// either getSExtValue() or getZExtValue() will yield a correctly sized and
319 /// signed value for the type Ty.
320 /// Get a ConstantByte for a specific signed value.
321 /// \param ImplicitTrunc Whether to allow implicit truncation of the value.
322 static ConstantByte *getSigned(ByteType *Ty, int64_t V,
323 bool ImplicitTrunc = false) {
324 return get(Ty, V, /*IsSigned=*/true, ImplicitTrunc);
325 }
326 static Constant *getSigned(Type *Ty, int64_t V, bool ImplicitTrunc = false) {
327 return get(Ty, V, /*IsSigned=*/true, ImplicitTrunc);
328 }
329
330 /// Return a ConstantByte with the specified value and an implied Type. The
331 /// type is the byte type that corresponds to the bit width of the value.
332 LLVM_ABI static ConstantByte *get(LLVMContext &Context, const APInt &V);
333
334 /// Return a ConstantByte constructed from the string strStart with the given
335 /// radix.
336 LLVM_ABI static ConstantByte *get(ByteType *Ty, StringRef Str, uint8_t Radix);
337
338 /// If Ty is a vector type, return a Constant with a splat of the given
339 /// value. Otherwise return a ConstantByte for the given value.
340 LLVM_ABI static Constant *get(Type *Ty, const APInt &V);
341
342 /// Return the constant as an APInt value reference. This allows clients to
343 /// obtain a full-precision copy of the value.
344 /// Return the constant's value.
345 inline const APInt &getValue() const { return Val; }
346
347 /// getBitWidth - Return the scalar bitwidth of this constant.
348 unsigned getBitWidth() const { return Val.getBitWidth(); }
349
350 /// Return the constant as a 64-bit byte value after it
351 /// has been zero extended as appropriate for the type of this constant. Note
352 /// that this method can assert if the value does not fit in 64 bits.
353 /// Return the zero extended value.
354 inline uint64_t getZExtValue() const { return Val.getZExtValue(); }
355
356 /// Return the constant as a 64-bit byte value after it has been sign
357 /// extended as appropriate for the type of this constant. Note that
358 /// this method can assert if the value does not fit in 64 bits.
359 /// Return the sign extended value.
360 inline int64_t getSExtValue() const { return Val.getSExtValue(); }
361
362 /// Variant of the getType() method to always return a ByteType, which
363 /// reduces the amount of casting needed in parts of the compiler.
364 inline ByteType *getByteType() const {
366 }
367
368 bool isNegative() const { return Val.isNegative(); }
369
370 /// This is just a convenience method to make client code smaller for a
371 /// common code. It also correctly performs the comparison without the
372 /// potential for an assertion from getZExtValue().
373 bool isZero() const { return Val.isZero(); }
374
375 /// This is just a convenience method to make client code smaller for a
376 /// common case. It also correctly performs the comparison without the
377 /// potential for an assertion from getZExtValue().
378 /// Determine if the value is one.
379 bool isOne() const { return Val.isOne(); }
380
381 /// This function will return true iff every bit in this constant is set
382 /// to true.
383 /// @returns true iff this constant's bits are all set to true.
384 /// Determine if the value is all ones.
385 bool isMinusOne() const { return Val.isAllOnes(); }
386
387 /// This function will return true iff this constant represents the largest
388 /// value that may be represented by the constant's type.
389 /// @returns true iff this is the largest value that may be represented
390 /// by this type.
391 /// Determine if the value is maximal.
392 bool isMaxValue(bool IsSigned) const {
393 if (IsSigned)
394 return Val.isMaxSignedValue();
395 else
396 return Val.isMaxValue();
397 }
398
399 /// This function will return true iff this constant represents the smallest
400 /// value that may be represented by this constant's type.
401 /// @returns true if this is the smallest value that may be represented by
402 /// this type.
403 /// Determine if the value is minimal.
404 bool isMinValue(bool IsSigned) const {
405 if (IsSigned)
406 return Val.isMinSignedValue();
407 else
408 return Val.isMinValue();
409 }
410
411 /// Methods to support type inquiry through isa, cast, and dyn_cast.
412 static bool classof(const Value *V) {
413 return V->getValueID() == ConstantByteVal;
414 }
415};
416
417//===----------------------------------------------------------------------===//
418/// ConstantFP - Floating Point Values [float, double]
419///
420class ConstantFP final : public ConstantData {
421 friend class Constant;
422 friend class ConstantVector;
423
424 APFloat Val;
425
426 ConstantFP(Type *Ty, const APFloat &V);
427
428 void destroyConstantImpl();
429
430 /// Return a ConstantFP with the specified value and an implied Type. The
431 /// type is the vector type whose element type has the same floating point
432 /// semantics as the value.
433 static ConstantFP *get(LLVMContext &Context, ElementCount EC,
434 const APFloat &V);
435
436public:
437 ConstantFP(const ConstantFP &) = delete;
438
439 /// This returns a ConstantFP, or a vector containing a splat of a ConstantFP,
440 /// for the specified value in the specified type. This should only be used
441 /// for simple constant values like 2.0/1.0 etc, that are known-valid both as
442 /// host double and as the target format.
443 LLVM_ABI static ConstantFP *get(Type *Ty, double V);
444
445 /// If Ty is a vector type, return a Constant with a splat of the given
446 /// value. Otherwise return a ConstantFP for the given value.
447 LLVM_ABI static ConstantFP *get(Type *Ty, const APFloat &V);
448
449 LLVM_ABI static ConstantFP *get(Type *Ty, StringRef Str);
450 LLVM_ABI static ConstantFP *get(LLVMContext &Context, const APFloat &V);
451 LLVM_ABI static ConstantFP *getNaN(Type *Ty, bool Negative = false,
452 uint64_t Payload = 0);
453 LLVM_ABI static ConstantFP *getQNaN(Type *Ty, bool Negative = false,
454 APInt *Payload = nullptr);
455 LLVM_ABI static ConstantFP *getSNaN(Type *Ty, bool Negative = false,
456 APInt *Payload = nullptr);
457 LLVM_ABI static ConstantFP *getZero(Type *Ty, bool Negative = false);
458 static ConstantFP *getNegativeZero(Type *Ty) { return getZero(Ty, true); }
459 LLVM_ABI static ConstantFP *getInfinity(Type *Ty, bool Negative = false);
460
461 /// Return true if Ty is big enough to represent V.
462 LLVM_ABI static bool isValueValidForType(Type *Ty, const APFloat &V);
463 inline const APFloat &getValueAPF() const { return Val; }
464 inline const APFloat &getValue() const { return Val; }
465
466 /// Return true if the value is positive or negative zero.
467 bool isZero() const { return Val.isZero(); }
468
469 /// Return true if the value is positive zero.
470 bool isPosZero() const { return Val.isPosZero(); }
471
472 /// Return true if the value is negative zero.
473 bool isNegZero() const { return Val.isNegZero(); }
474
475 /// Return true if the sign bit is set.
476 bool isNegative() const { return Val.isNegative(); }
477
478 /// Return true if the value is infinity
479 bool isInfinity() const { return Val.isInfinity(); }
480
481 /// Return true if the value is a NaN.
482 bool isNaN() const { return Val.isNaN(); }
483
484 /// We don't rely on operator== working on double values, as it returns true
485 /// for things that are clearly not equal, like -0.0 and 0.0.
486 /// As such, this method can be used to do an exact bit-for-bit comparison of
487 /// two floating point values. The version with a double operand is retained
488 /// because it's so convenient to write isExactlyValue(2.0), but please use
489 /// it only for simple constants.
490 LLVM_ABI bool isExactlyValue(const APFloat &V) const;
491
492 bool isExactlyValue(double V) const {
493 bool ignored;
494 APFloat FV(V);
495 FV.convert(Val.getSemantics(), APFloat::rmNearestTiesToEven, &ignored);
496 return isExactlyValue(FV);
497 }
498
499 /// Methods for support type inquiry through isa, cast, and dyn_cast:
500 static bool classof(const Value *V) {
501 return V->getValueID() == ConstantFPVal;
502 }
503};
504
505//===----------------------------------------------------------------------===//
506/// All zero aggregate value
507///
508class ConstantAggregateZero final : public ConstantData {
509 friend class Constant;
510
511 explicit ConstantAggregateZero(Type *Ty)
512 : ConstantData(Ty, ConstantAggregateZeroVal) {
514 }
515
516 void destroyConstantImpl();
517
518public:
519 ConstantAggregateZero(const ConstantAggregateZero &) = delete;
520
521 LLVM_ABI static ConstantAggregateZero *get(Type *Ty);
522
523 /// If this CAZ has array or vector type, return a zero with the right element
524 /// type.
526
527 /// If this CAZ has struct type, return a zero with the right element type for
528 /// the specified element.
529 LLVM_ABI Constant *getStructElement(unsigned Elt) const;
530
531 /// Return a zero of the right value for the specified GEP index if we can,
532 /// otherwise return null (e.g. if C is a ConstantExpr).
534
535 /// Return a zero of the right value for the specified GEP index.
536 LLVM_ABI Constant *getElementValue(unsigned Idx) const;
537
538 /// Return the number of elements in the array, vector, or struct.
540
541 /// Methods for support type inquiry through isa, cast, and dyn_cast:
542 ///
543 static bool classof(const Value *V) {
544 return V->getValueID() == ConstantAggregateZeroVal;
545 }
546};
547
548/// Base class for aggregate constants (with operands).
549///
550/// These constants are aggregates of other constants, which are stored as
551/// operands.
552///
553/// Subclasses are \a ConstantStruct, \a ConstantArray, and \a
554/// ConstantVector.
555///
556/// \note Some subclasses of \a ConstantData are semantically aggregates --
557/// such as \a ConstantDataArray -- but are not subclasses of this because they
558/// use operands.
560protected:
563
564public:
565 /// Transparently provide more efficient getOperand methods.
567
568 /// Methods for support type inquiry through isa, cast, and dyn_cast:
569 static bool classof(const Value *V) {
570 return V->getValueID() >= ConstantAggregateFirstVal &&
571 V->getValueID() <= ConstantAggregateLastVal;
572 }
573};
574
575template <>
577 : public VariadicOperandTraits<ConstantAggregate> {};
578
580
581//===----------------------------------------------------------------------===//
582/// ConstantArray - Constant Array Declarations
583///
584class ConstantArray final : public ConstantAggregate {
585 friend struct ConstantAggrKeyType<ConstantArray>;
586 friend class Constant;
587
588 ConstantArray(ArrayType *T, ArrayRef<Constant *> Val, AllocInfo AllocInfo);
589
590 void destroyConstantImpl();
591 Value *handleOperandChangeImpl(Value *From, Value *To);
592
593public:
594 // ConstantArray accessors
596
597private:
598 static Constant *getImpl(ArrayType *T, ArrayRef<Constant *> V);
599
600public:
601 /// Specialize the getType() method to always return an ArrayType,
602 /// which reduces the amount of casting needed in parts of the compiler.
603 inline ArrayType *getType() const {
605 }
606
607 /// Methods for support type inquiry through isa, cast, and dyn_cast:
608 static bool classof(const Value *V) {
609 return V->getValueID() == ConstantArrayVal;
610 }
611};
612
613//===----------------------------------------------------------------------===//
614// Constant Struct Declarations
615//
616class ConstantStruct final : public ConstantAggregate {
617 friend struct ConstantAggrKeyType<ConstantStruct>;
618 friend class Constant;
619
620 ConstantStruct(StructType *T, ArrayRef<Constant *> Val, AllocInfo AllocInfo);
621
622 void destroyConstantImpl();
623 Value *handleOperandChangeImpl(Value *From, Value *To);
624
625public:
626 // ConstantStruct accessors
628
629 template <typename... Csts>
630 static std::enable_if_t<are_base_of<Constant, Csts...>::value, Constant *>
631 get(StructType *T, Csts *...Vs) {
632 return get(T, ArrayRef<Constant *>({Vs...}));
633 }
634
635 /// Return an anonymous struct that has the specified elements.
636 /// If the struct is possibly empty, then you must specify a context.
637 static Constant *getAnon(ArrayRef<Constant *> V, bool Packed = false) {
638 return get(getTypeForElements(V, Packed), V);
639 }
641 bool Packed = false) {
642 return get(getTypeForElements(Ctx, V, Packed), V);
643 }
644
645 /// Return an anonymous struct type to use for a constant with the specified
646 /// set of elements. The list must not be empty.
648 bool Packed = false);
649 /// This version of the method allows an empty list.
652 bool Packed = false);
653
654 /// Specialization - reduce amount of casting.
655 inline StructType *getType() const {
657 }
658
659 /// Methods for support type inquiry through isa, cast, and dyn_cast:
660 static bool classof(const Value *V) {
661 return V->getValueID() == ConstantStructVal;
662 }
663};
664
665//===----------------------------------------------------------------------===//
666/// Constant Vector Declarations
667///
668class ConstantVector final : public ConstantAggregate {
669 friend struct ConstantAggrKeyType<ConstantVector>;
670 friend class Constant;
671
672 ConstantVector(VectorType *T, ArrayRef<Constant *> Val, AllocInfo AllocInfo);
673
674 void destroyConstantImpl();
675 Value *handleOperandChangeImpl(Value *From, Value *To);
676
677public:
678 // ConstantVector accessors
680
681private:
682 static Constant *getImpl(ArrayRef<Constant *> V);
683
684public:
685 /// Return a ConstantVector with the specified constant in each element.
686 /// Note that this might not return an instance of ConstantVector
688
689 /// Specialize the getType() method to always return a FixedVectorType,
690 /// which reduces the amount of casting needed in parts of the compiler.
691 inline FixedVectorType *getType() const {
693 }
694
695 /// If all elements of the vector constant have the same value, return that
696 /// value. Otherwise, return nullptr. Ignore poison elements by setting
697 /// AllowPoison to true.
698 LLVM_ABI Constant *getSplatValue(bool AllowPoison = false) const;
699
700 /// Methods for support type inquiry through isa, cast, and dyn_cast:
701 static bool classof(const Value *V) {
702 return V->getValueID() == ConstantVectorVal;
703 }
704};
705
706//===----------------------------------------------------------------------===//
707/// A constant pointer value that points to null. This represents both scalar
708/// pointer nulls and vector splats of pointer nulls.
709///
710class ConstantPointerNull final : public ConstantData {
711 friend class Constant;
712
713 explicit ConstantPointerNull(Type *T)
714 : ConstantData(T, Value::ConstantPointerNullVal) {
716 }
717
718 void destroyConstantImpl();
719
720public:
721 ConstantPointerNull(const ConstantPointerNull &) = delete;
722
723 /// Static factory methods - Return objects of the specified value. If Ty is a
724 /// vector type, return a ConstantPointerNull with a splat of null pointer
725 /// values. Otherwise return a ConstantPointerNull for the given pointer type.
726 LLVM_ABI static ConstantPointerNull *get(PointerType *T);
727 LLVM_ABI static ConstantPointerNull *get(Type *T);
728
729 /// Return the scalar pointer type for this null value.
731 return cast<PointerType>(Value::getType()->getScalarType());
732 }
733
734 /// Methods for support type inquiry through isa, cast, and dyn_cast:
735 static bool classof(const Value *V) {
736 return V->getValueID() == ConstantPointerNullVal;
737 }
738};
739
740//===----------------------------------------------------------------------===//
741/// ConstantDataSequential - A vector or array constant whose element type is a
742/// simple 1/2/4/8-byte integer/byte or half/bfloat/float/double, and whose
743/// elements are just simple data values (i.e. ConstantInt/ConstantByte/
744/// ConstantFP). This Constant node has no operands because it stores all of
745/// the elements of the constant as densely packed data, instead of as Value*'s.
746///
747/// This is the common base class of ConstantDataArray and ConstantDataVector.
748///
750 friend class LLVMContextImpl;
751 friend class Constant;
752
753 /// A pointer to the bytes underlying this constant (which is owned by the
754 /// uniquing StringMap).
755 const char *DataElements;
756
757 /// This forms a link list of ConstantDataSequential nodes that have
758 /// the same value but different type. For example, 0,0,0,1 could be a 4
759 /// element array of i8, or a 1-element array of i32. They'll both end up in
760 /// the same StringMap bucket, linked up.
761 std::unique_ptr<ConstantDataSequential> Next;
762
763 void destroyConstantImpl();
764
765protected:
766 explicit ConstantDataSequential(Type *ty, ValueTy VT, const char *Data)
767 : ConstantData(ty, VT), DataElements(Data) {}
768
769 LLVM_ABI static Constant *getImpl(StringRef Bytes, Type *Ty);
770
771public:
773
774 /// Return true if a ConstantDataSequential can be formed with a vector or
775 /// array of the specified element type.
776 /// ConstantDataArray only works with normal float and int types that are
777 /// stored densely in memory, not with things like i42 or x86_f80.
778 LLVM_ABI static bool isElementTypeCompatible(Type *Ty);
779
780 /// If this is a sequential container of integers (of any size), return the
781 /// specified element in the low bits of a uint64_t.
783
784 /// If this is a sequential container of integers (of any size), return the
785 /// specified element as an APInt.
787
788 /// If this is a sequential container of floating point type, return the
789 /// specified element as an APFloat.
791
792 /// If this is an sequential container of floats, return the specified element
793 /// as a float.
794 LLVM_ABI float getElementAsFloat(uint64_t i) const;
795
796 /// If this is an sequential container of doubles, return the specified
797 /// element as a double.
798 LLVM_ABI double getElementAsDouble(uint64_t i) const;
799
800 /// Return a Constant for a specified index's element.
801 /// Note that this has to compute a new constant to return, so it isn't as
802 /// efficient as getElementAsInteger/Float/Double.
804
805 /// Return the element type of the array/vector.
807
808 /// Return the number of elements in the array or vector.
810
811 /// Return the size (in bytes) of each element in the array/vector.
812 /// The size of the elements is known to be a multiple of one byte.
814
815 /// This method returns true if this is an array of \p CharSize integers or
816 /// bytes.
817 LLVM_ABI bool isString(unsigned CharSize = 8) const;
818
819 /// This method returns true if the array "isString", ends with a null byte,
820 /// and does not contains any other null bytes.
821 LLVM_ABI bool isCString() const;
822
823 /// If this array is isString(), then this method returns the array as a
824 /// StringRef. Otherwise, it asserts out.
826 assert(isString() && "Not a string");
827 return getRawDataValues();
828 }
829
830 /// If this array is isCString(), then this method returns the array (without
831 /// the trailing null byte) as a StringRef. Otherwise, it asserts out.
833 assert(isCString() && "Isn't a C string");
834 StringRef Str = getAsString();
835 return Str.drop_back();
836 }
837
838 /// Return the raw, underlying, bytes of this data. Note that this is an
839 /// extremely tricky thing to work with, as it exposes the host endianness of
840 /// the data elements.
842
843 /// Methods for support type inquiry through isa, cast, and dyn_cast:
844 static bool classof(const Value *V) {
845 return V->getValueID() == ConstantDataArrayVal ||
846 V->getValueID() == ConstantDataVectorVal;
847 }
848
849private:
850 const char *getElementPointer(uint64_t Elt) const;
851};
852
853//===----------------------------------------------------------------------===//
854/// An array constant whose element type is a simple 1/2/4/8-byte integer, bytes
855/// or float/double, and whose elements are just simple data values
856/// (i.e. ConstantInt/ConstantFP). This Constant node has no operands because it
857/// stores all of the elements of the constant as densely packed data, instead
858/// of as Value*'s.
859class ConstantDataArray final : public ConstantDataSequential {
861
862 explicit ConstantDataArray(Type *ty, const char *Data)
863 : ConstantDataSequential(ty, ConstantDataArrayVal, Data) {}
864
865public:
866 ConstantDataArray(const ConstantDataArray &) = delete;
867
868 /// get() constructor - Return a constant with array type with an element
869 /// count and element type matching the ArrayRef passed in. Note that this
870 /// can return a ConstantAggregateZero object.
871 template <typename ElementTy>
872 static Constant *get(LLVMContext &Context, ArrayRef<ElementTy> Elts) {
873 const char *Data = reinterpret_cast<const char *>(Elts.data());
874 return getRaw(StringRef(Data, Elts.size() * sizeof(ElementTy)), Elts.size(),
876 }
877
878 /// get() constructor - ArrayTy needs to be compatible with
879 /// ArrayRef<ElementTy>. Calls get(LLVMContext, ArrayRef<ElementTy>).
880 template <typename ArrayTy>
881 static Constant *get(LLVMContext &Context, ArrayTy &Elts) {
882 return ConstantDataArray::get(Context, ArrayRef(Elts));
883 }
884
885 /// getRaw() constructor - Return a constant with array type with an element
886 /// count and element type matching the NumElements and ElementTy parameters
887 /// passed in. Note that this can return a ConstantAggregateZero object.
888 /// ElementTy must be one of i8/i16/i32/i64/b8/b16/b32/b64/half/bfloat/float/
889 /// double. Data is the buffer containing the elements. Be careful to make
890 /// sure Data uses the right endianness, the buffer will be used as-is.
891 static Constant *getRaw(StringRef Data, uint64_t NumElements,
892 Type *ElementTy) {
893 Type *Ty = ArrayType::get(ElementTy, NumElements);
894 return getImpl(Data, Ty);
895 }
896
897 /// getFP() constructors - Return a constant of array type with a float
898 /// element type taken from argument `ElementType', and count taken from
899 /// argument `Elts'. The amount of bits of the contained type must match the
900 /// number of bits of the type contained in the passed in ArrayRef.
901 /// (i.e. half or bfloat for 16bits, float for 32bits, double for 64bits) Note
902 /// that this can return a ConstantAggregateZero object.
903 LLVM_ABI static Constant *getFP(Type *ElementType, ArrayRef<uint16_t> Elts);
904 LLVM_ABI static Constant *getFP(Type *ElementType, ArrayRef<uint32_t> Elts);
905 LLVM_ABI static Constant *getFP(Type *ElementType, ArrayRef<uint64_t> Elts);
906
907 /// getByte() constructors - Return a constant of array type with a byte
908 /// element type taken from argument `ElementType', and count taken from
909 /// argument `Elts'. The amount of bits of the contained type must match the
910 /// number of bits of the type contained in the passed in ArrayRef.
911 /// Note that this can return a ConstantAggregateZero object.
912 LLVM_ABI static Constant *getByte(Type *ElementType, ArrayRef<uint8_t> Elts);
913 LLVM_ABI static Constant *getByte(Type *ElementType, ArrayRef<uint16_t> Elts);
914 LLVM_ABI static Constant *getByte(Type *ElementType, ArrayRef<uint32_t> Elts);
915 LLVM_ABI static Constant *getByte(Type *ElementType, ArrayRef<uint64_t> Elts);
916
917 /// This method constructs a CDS and initializes it with a text string.
918 /// The default behavior (AddNull==true) causes a null terminator to
919 /// be placed at the end of the array (increasing the length of the string by
920 /// one more than the StringRef would normally indicate. Pass AddNull=false
921 /// to disable this behavior.
922 LLVM_ABI static Constant *getString(LLVMContext &Context,
923 StringRef Initializer,
924 bool AddNull = true,
925 bool ByteString = false);
926
927 /// Specialize the getType() method to always return an ArrayType,
928 /// which reduces the amount of casting needed in parts of the compiler.
929 inline ArrayType *getType() const {
931 }
932
933 /// Methods for support type inquiry through isa, cast, and dyn_cast:
934 static bool classof(const Value *V) {
935 return V->getValueID() == ConstantDataArrayVal;
936 }
937};
938
939//===----------------------------------------------------------------------===//
940/// A vector constant whose element type is a simple 1/2/4/8-byte integer or
941/// float/double, and whose elements are just simple data values
942/// (i.e. ConstantInt/ConstantFP). This Constant node has no operands because it
943/// stores all of the elements of the constant as densely packed data, instead
944/// of as Value*'s.
945class ConstantDataVector final : public ConstantDataSequential {
947
948 explicit ConstantDataVector(Type *ty, const char *Data)
949 : ConstantDataSequential(ty, ConstantDataVectorVal, Data),
950 IsSplatSet(false) {}
951 // Cache whether or not the constant is a splat.
952 mutable bool IsSplatSet : 1;
953 mutable bool IsSplat : 1;
954 bool isSplatData() const;
955
956public:
957 ConstantDataVector(const ConstantDataVector &) = delete;
958
959 /// get() constructors - Return a constant with vector type with an element
960 /// count and element type matching the ArrayRef passed in. Note that this
961 /// can return a ConstantAggregateZero object.
962 LLVM_ABI static Constant *get(LLVMContext &Context, ArrayRef<uint8_t> Elts);
963 LLVM_ABI static Constant *get(LLVMContext &Context, ArrayRef<uint16_t> Elts);
964 LLVM_ABI static Constant *get(LLVMContext &Context, ArrayRef<uint32_t> Elts);
965 LLVM_ABI static Constant *get(LLVMContext &Context, ArrayRef<uint64_t> Elts);
966 LLVM_ABI static Constant *get(LLVMContext &Context, ArrayRef<float> Elts);
967 LLVM_ABI static Constant *get(LLVMContext &Context, ArrayRef<double> Elts);
968
969 /// getRaw() constructor - Return a constant with vector type with an element
970 /// count and element type matching the NumElements and ElementTy parameters
971 /// passed in. Note that this can return a ConstantAggregateZero object.
972 /// ElementTy must be one of i8/i16/i32/i64/b8/b16/b32/b64/half/bfloat/float/
973 /// double. Data is the buffer containing the elements. Be careful to make
974 /// sure Data uses the right endianness, the buffer will be used as-is.
975 static Constant *getRaw(StringRef Data, uint64_t NumElements,
976 Type *ElementTy) {
977 Type *Ty = VectorType::get(ElementTy, ElementCount::getFixed(NumElements));
978 return getImpl(Data, Ty);
979 }
980
981 /// getByte() constructors - Return a constant of vector type with a byte
982 /// element type taken from argument `ElementType', and count taken from
983 /// argument `Elts'. The amount of bits of the contained type must match the
984 /// number of bits of the type contained in the passed in ArrayRef.
985 LLVM_ABI static Constant *getByte(Type *ElementType, ArrayRef<uint8_t> Elts);
986 LLVM_ABI static Constant *getByte(Type *ElementType, ArrayRef<uint16_t> Elts);
987 LLVM_ABI static Constant *getByte(Type *ElementType, ArrayRef<uint32_t> Elts);
988 LLVM_ABI static Constant *getByte(Type *ElementType, ArrayRef<uint64_t> Elts);
989
990 /// getFP() constructors - Return a constant of vector type with a float
991 /// element type taken from argument `ElementType', and count taken from
992 /// argument `Elts'. The amount of bits of the contained type must match the
993 /// number of bits of the type contained in the passed in ArrayRef.
994 /// (i.e. half or bfloat for 16bits, float for 32bits, double for 64bits) Note
995 /// that this can return a ConstantAggregateZero object.
996 LLVM_ABI static Constant *getFP(Type *ElementType, ArrayRef<uint16_t> Elts);
997 LLVM_ABI static Constant *getFP(Type *ElementType, ArrayRef<uint32_t> Elts);
998 LLVM_ABI static Constant *getFP(Type *ElementType, ArrayRef<uint64_t> Elts);
999
1000 /// Return a ConstantVector with the specified constant in each element.
1001 /// The specified constant has to be a of a compatible type (i8/i16/
1002 /// i32/i64/b8/b16/b32/b64/half/bfloat/float/double) and must be a ConstantFP,
1003 /// ConstantByte or ConstantInt.
1004 LLVM_ABI static Constant *getSplat(unsigned NumElts, Constant *Elt);
1005
1006 /// Returns true if this is a splat constant, meaning that all elements have
1007 /// the same value.
1008 LLVM_ABI bool isSplat() const;
1009
1010 /// If this is a splat constant, meaning that all of the elements have the
1011 /// same value, return that value. Otherwise return NULL.
1013
1014 /// Specialize the getType() method to always return a FixedVectorType,
1015 /// which reduces the amount of casting needed in parts of the compiler.
1016 inline FixedVectorType *getType() const {
1018 }
1019
1020 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1021 static bool classof(const Value *V) {
1022 return V->getValueID() == ConstantDataVectorVal;
1023 }
1024};
1025
1026//===----------------------------------------------------------------------===//
1027/// A constant token which is empty
1028///
1029class ConstantTokenNone final : public ConstantData {
1030 friend class Constant;
1031
1032 explicit ConstantTokenNone(LLVMContext &Context)
1033 : ConstantData(Type::getTokenTy(Context), ConstantTokenNoneVal) {
1035 }
1036
1037 void destroyConstantImpl();
1038
1039public:
1040 ConstantTokenNone(const ConstantTokenNone &) = delete;
1041
1042 /// Return the ConstantTokenNone.
1043 LLVM_ABI static ConstantTokenNone *get(LLVMContext &Context);
1044
1045 /// Methods to support type inquiry through isa, cast, and dyn_cast.
1046 static bool classof(const Value *V) {
1047 return V->getValueID() == ConstantTokenNoneVal;
1048 }
1049};
1050
1051/// A constant target extension type default initializer
1052class ConstantTargetNone final : public ConstantData {
1053 friend class Constant;
1054
1055 explicit ConstantTargetNone(TargetExtType *T)
1056 : ConstantData(T, Value::ConstantTargetNoneVal) {
1058 }
1059
1060 void destroyConstantImpl();
1061
1062public:
1063 ConstantTargetNone(const ConstantTargetNone &) = delete;
1064
1065 /// Static factory methods - Return objects of the specified value.
1066 LLVM_ABI static ConstantTargetNone *get(TargetExtType *T);
1067
1068 /// Specialize the getType() method to always return an TargetExtType,
1069 /// which reduces the amount of casting needed in parts of the compiler.
1070 inline TargetExtType *getType() const {
1072 }
1073
1074 /// Methods for support type inquiry through isa, cast, and dyn_cast.
1075 static bool classof(const Value *V) {
1076 return V->getValueID() == ConstantTargetNoneVal;
1077 }
1078};
1079
1080/// The address of a basic block.
1081///
1082class BlockAddress final : public Constant {
1083 friend class Constant;
1084
1085 constexpr static IntrusiveOperandsAllocMarker AllocMarker{0};
1086
1088
1089 BlockAddress(Type *Ty, BasicBlock *BB);
1090
1091 void *operator new(size_t S) { return User::operator new(S, AllocMarker); }
1092
1093 void destroyConstantImpl();
1094 Value *handleOperandChangeImpl(Value *From, Value *To);
1095
1096public:
1097 void operator delete(void *Ptr) { User::operator delete(Ptr, AllocMarker); }
1098
1099 /// Return a BlockAddress for the specified function and basic block.
1101
1102 /// Return a BlockAddress for the specified basic block. The basic
1103 /// block must be embedded into a function.
1104 LLVM_ABI static BlockAddress *get(BasicBlock *BB);
1105
1106 /// Return a BlockAddress for the specified basic block, which may not be
1107 /// part of a function. The specified type must match the type of the function
1108 /// the block will be inserted into.
1109 LLVM_ABI static BlockAddress *get(Type *Ty, BasicBlock *BB);
1110
1111 /// Lookup an existing \c BlockAddress constant for the given BasicBlock.
1112 ///
1113 /// \returns 0 if \c !BB->hasAddressTaken(), otherwise the \c BlockAddress.
1114 LLVM_ABI static BlockAddress *lookup(const BasicBlock *BB);
1115
1116 /// Transparently provide more efficient getOperand methods.
1118
1119 BasicBlock *getBasicBlock() const { return Block; }
1121
1122 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1123 static bool classof(const Value *V) {
1124 return V->getValueID() == BlockAddressVal;
1125 }
1126};
1127
1128template <>
1130 : public FixedNumOperandTraits<BlockAddress, 0> {};
1131
1133
1134/// Wrapper for a function that represents a value that
1135/// functionally represents the original function. This can be a function,
1136/// global alias to a function, or an ifunc.
1137class DSOLocalEquivalent final : public Constant {
1138 friend class Constant;
1139
1140 constexpr static IntrusiveOperandsAllocMarker AllocMarker{1};
1141
1143
1144 void *operator new(size_t S) { return User::operator new(S, AllocMarker); }
1145
1146 void destroyConstantImpl();
1147 Value *handleOperandChangeImpl(Value *From, Value *To);
1148
1149public:
1150 void operator delete(void *Ptr) { User::operator delete(Ptr, AllocMarker); }
1151
1152 /// Return a DSOLocalEquivalent for the specified global value.
1154
1155 /// Transparently provide more efficient getOperand methods.
1157
1159 return cast<GlobalValue>(Op<0>().get());
1160 }
1161
1162 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1163 static bool classof(const Value *V) {
1164 return V->getValueID() == DSOLocalEquivalentVal;
1165 }
1166};
1167
1168template <>
1170 : public FixedNumOperandTraits<DSOLocalEquivalent, 1> {};
1171
1173
1174/// Wrapper for a value that won't be replaced with a CFI jump table
1175/// pointer in LowerTypeTestsModule.
1176class NoCFIValue final : public Constant {
1177 friend class Constant;
1178
1179 constexpr static IntrusiveOperandsAllocMarker AllocMarker{1};
1180
1182
1183 void *operator new(size_t S) { return User::operator new(S, AllocMarker); }
1184
1185 void destroyConstantImpl();
1186 Value *handleOperandChangeImpl(Value *From, Value *To);
1187
1188public:
1189 /// Return a NoCFIValue for the specified function.
1190 LLVM_ABI static NoCFIValue *get(GlobalValue *GV);
1191
1192 /// Transparently provide more efficient getOperand methods.
1194
1196 return cast<GlobalValue>(Op<0>().get());
1197 }
1198
1199 /// NoCFIValue is always a pointer.
1202 }
1203
1204 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1205 static bool classof(const Value *V) {
1206 return V->getValueID() == NoCFIValueVal;
1207 }
1208};
1209
1210template <>
1211struct OperandTraits<NoCFIValue> : public FixedNumOperandTraits<NoCFIValue, 1> {
1212};
1213
1215
1216/// A signed pointer, in the ptrauth sense.
1217class ConstantPtrAuth final : public Constant {
1219 friend class Constant;
1220
1221 constexpr static IntrusiveOperandsAllocMarker AllocMarker{5};
1222
1224 Constant *AddrDisc, Constant *DeactivationSymbol);
1225
1226 void *operator new(size_t s) { return User::operator new(s, AllocMarker); }
1227
1228 void destroyConstantImpl();
1229 Value *handleOperandChangeImpl(Value *From, Value *To);
1230
1231public:
1232 /// Return a pointer signed with the specified parameters.
1233 LLVM_ABI static ConstantPtrAuth *get(Constant *Ptr, ConstantInt *Key,
1234 ConstantInt *Disc, Constant *AddrDisc,
1235 Constant *DeactivationSymbol);
1236
1237 /// Produce a new ptrauth expression signing the given value using
1238 /// the same schema as is stored in one.
1239 LLVM_ABI ConstantPtrAuth *getWithSameSchema(Constant *Pointer) const;
1240
1241 /// Transparently provide more efficient getOperand methods.
1243
1244 /// The pointer that is signed in this ptrauth signed pointer.
1245 Constant *getPointer() const { return cast<Constant>(Op<0>().get()); }
1246
1247 /// The Key ID, an i32 constant.
1249
1250 /// The integer discriminator, an i64 constant, or 0.
1252 return cast<ConstantInt>(Op<2>().get());
1253 }
1254
1255 /// The address discriminator if any, or the null constant.
1256 /// If present, this must be a value equivalent to the storage location of
1257 /// the only global-initializer user of the ptrauth signed pointer.
1259 return cast<Constant>(Op<3>().get());
1260 }
1261
1262 /// Whether there is any non-null address discriminator.
1266
1268 return cast<Constant>(Op<4>().get());
1269 }
1270
1271 /// A constant value for the address discriminator which has special
1272 /// significance to ctors/dtors lowering. Regular address discrimination can't
1273 /// be applied for them since uses of llvm.global_{c|d}tors are disallowed
1274 /// (see Verifier::visitGlobalVariable) and we can't emit getelementptr
1275 /// expressions referencing these special arrays.
1277
1278 /// Whether the address uses a special address discriminator.
1279 /// These discriminators can't be used in real pointer-auth values; they
1280 /// can only be used in "prototype" values that indicate how some real
1281 /// schema is supposed to be produced.
1282 LLVM_ABI bool hasSpecialAddressDiscriminator(uint64_t Value) const;
1283
1284 /// Check whether an authentication operation with key \p Key and (possibly
1285 /// blended) discriminator \p Discriminator is known to be compatible with
1286 /// this ptrauth signed pointer.
1287 LLVM_ABI bool isKnownCompatibleWith(const Value *Key,
1288 const Value *Discriminator,
1289 const DataLayout &DL) const;
1290
1291 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1292 static bool classof(const Value *V) {
1293 return V->getValueID() == ConstantPtrAuthVal;
1294 }
1295};
1296
1297template <>
1299 : public FixedNumOperandTraits<ConstantPtrAuth, 5> {};
1300
1302
1303//===----------------------------------------------------------------------===//
1304/// A constant value that is initialized with an expression using
1305/// other constant values.
1306///
1307/// This class uses the standard Instruction opcodes to define the various
1308/// constant expressions. The Opcode field for the ConstantExpr class is
1309/// maintained in the Value::SubclassData field.
1310class ConstantExpr : public Constant {
1311 friend struct ConstantExprKeyType;
1312 friend class Constant;
1313
1314 void destroyConstantImpl();
1315 Value *handleOperandChangeImpl(Value *From, Value *To);
1316
1317protected:
1318 ConstantExpr(Type *ty, unsigned Opcode, AllocInfo AllocInfo)
1319 : Constant(ty, ConstantExprVal, AllocInfo) {
1320 // Operation type (an Instruction opcode) is stored as the SubclassData.
1321 setValueSubclassData(Opcode);
1322 }
1323
1324 ~ConstantExpr() = default;
1325
1326public:
1327 // Static methods to construct a ConstantExpr of different kinds. Note that
1328 // these methods may return a object that is not an instance of the
1329 // ConstantExpr class, because they will attempt to fold the constant
1330 // expression into something simpler if possible.
1331
1332 /// getAlignOf constant expr - computes the alignment of a type in a target
1333 /// independent way (Note: the return type is an i64).
1334 LLVM_ABI static Constant *getAlignOf(Type *Ty);
1335
1336 /// getSizeOf constant expr - computes the (alloc) size of a type (in
1337 /// address-units, not bits) in a target independent way (Note: the return
1338 /// type is an i64).
1339 ///
1340 LLVM_ABI static Constant *getSizeOf(Type *Ty);
1341
1342 LLVM_ABI static Constant *getNeg(Constant *C, bool HasNSW = false);
1343 LLVM_ABI static Constant *getNot(Constant *C);
1344 LLVM_ABI static Constant *getAdd(Constant *C1, Constant *C2,
1345 bool HasNUW = false, bool HasNSW = false);
1346 LLVM_ABI static Constant *getSub(Constant *C1, Constant *C2,
1347 bool HasNUW = false, bool HasNSW = false);
1348 LLVM_ABI static Constant *getXor(Constant *C1, Constant *C2);
1349 LLVM_ABI static Constant *getTrunc(Constant *C, Type *Ty,
1350 bool OnlyIfReduced = false);
1352 bool OnlyIfReduced = false);
1354 bool OnlyIfReduced = false);
1356 bool OnlyIfReduced = false);
1357 LLVM_ABI static Constant *getBitCast(Constant *C, Type *Ty,
1358 bool OnlyIfReduced = false);
1360 bool OnlyIfReduced = false);
1361
1362 static Constant *getNSWNeg(Constant *C) { return getNeg(C, /*HasNSW=*/true); }
1363
1365 return getAdd(C1, C2, false, true);
1366 }
1367
1369 return getAdd(C1, C2, true, false);
1370 }
1371
1373 return getSub(C1, C2, false, true);
1374 }
1375
1377 return getSub(C1, C2, true, false);
1378 }
1379
1380 /// If C is a scalar/fixed width vector of known powers of 2, then this
1381 /// function returns a new scalar/fixed width vector obtained from logBase2
1382 /// of C. Undef vector elements are set to zero.
1383 /// Return a null pointer otherwise.
1384 LLVM_ABI static Constant *getExactLogBase2(Constant *C);
1385
1386 /// Return the identity constant for a binary opcode.
1387 /// If the binop is not commutative, callers can acquire the operand 1
1388 /// identity constant by setting AllowRHSConstant to true. For example, any
1389 /// shift has a zero identity constant for operand 1: X shift 0 = X. If this
1390 /// is a fadd/fsub operation and we don't care about signed zeros, then
1391 /// setting NSZ to true returns the identity +0.0 instead of -0.0. Return
1392 /// nullptr if the operator does not have an identity constant.
1393 LLVM_ABI static Constant *getBinOpIdentity(unsigned Opcode, Type *Ty,
1394 bool AllowRHSConstant = false,
1395 bool NSZ = false);
1396
1397 LLVM_ABI static Constant *getIntrinsicIdentity(Intrinsic::ID, Type *Ty);
1398
1399 /// Return the identity constant for a binary or intrinsic Instruction.
1400 /// The identity constant C is defined as X op C = X and C op X = X where C
1401 /// and X are the first two operands, and the operation is commutative.
1402 LLVM_ABI static Constant *getIdentity(Instruction *I, Type *Ty,
1403 bool AllowRHSConstant = false,
1404 bool NSZ = false);
1405
1406 /// Return the absorbing element for the given binary
1407 /// operation, i.e. a constant C such that X op C = C and C op X = C for
1408 /// every X. For example, this returns zero for integer multiplication.
1409 /// If AllowLHSConstant is true, the LHS operand is a constant C that must be
1410 /// defined as C op X = C. It returns null if the operator doesn't have
1411 /// an absorbing element.
1412 LLVM_ABI static Constant *getBinOpAbsorber(unsigned Opcode, Type *Ty,
1413 bool AllowLHSConstant = false);
1414
1415 /// Transparently provide more efficient getOperand methods.
1417
1418 /// Convenience function for getting a Cast operation.
1419 ///
1420 /// \param ops The opcode for the conversion
1421 /// \param C The constant to be converted
1422 /// \param Ty The type to which the constant is converted
1423 /// \param OnlyIfReduced see \a getWithOperands() docs.
1424 LLVM_ABI static Constant *getCast(unsigned ops, Constant *C, Type *Ty,
1425 bool OnlyIfReduced = false);
1426
1427 // Create a Trunc or BitCast cast constant expression
1428 LLVM_ABI static Constant *
1429 getTruncOrBitCast(Constant *C, ///< The constant to trunc or bitcast
1430 Type *Ty ///< The type to trunc or bitcast C to
1431 );
1432
1433 /// Create a BitCast, AddrSpaceCast, or a PtrToInt cast constant
1434 /// expression.
1435 LLVM_ABI static Constant *
1436 getPointerCast(Constant *C, ///< The pointer value to be casted (operand 0)
1437 Type *Ty ///< The type to which cast should be made
1438 );
1439
1440 /// Create a BitCast or AddrSpaceCast for a pointer type depending on
1441 /// the address space.
1443 Constant *C, ///< The constant to addrspacecast or bitcast
1444 Type *Ty ///< The type to bitcast or addrspacecast C to
1445 );
1446
1447 /// Return true if this is a convert constant expression
1448 LLVM_ABI bool isCast() const;
1449
1450 /// get - Return a binary or shift operator constant expression,
1451 /// folding if possible.
1452 ///
1453 /// \param OnlyIfReducedTy see \a getWithOperands() docs.
1454 LLVM_ABI static Constant *get(unsigned Opcode, Constant *C1, Constant *C2,
1455 unsigned Flags = 0,
1456 Type *OnlyIfReducedTy = nullptr);
1457
1458 /// Getelementptr form. Value* is only accepted for convenience;
1459 /// all elements must be Constants.
1460 ///
1461 /// \param InRange the inrange range if present or std::nullopt.
1462 /// \param OnlyIfReducedTy see \a getWithOperands() docs.
1463 static Constant *
1466 std::optional<ConstantRange> InRange = std::nullopt,
1467 Type *OnlyIfReducedTy = nullptr) {
1468 return getGetElementPtr(
1469 Ty, C, ArrayRef((Value *const *)IdxList.data(), IdxList.size()), NW,
1470 InRange, OnlyIfReducedTy);
1471 }
1472 static Constant *
1475 std::optional<ConstantRange> InRange = std::nullopt,
1476 Type *OnlyIfReducedTy = nullptr) {
1477 // This form of the function only exists to avoid ambiguous overload
1478 // warnings about whether to convert Idx to ArrayRef<Constant *> or
1479 // ArrayRef<Value *>.
1480 return getGetElementPtr(Ty, C, cast<Value>(Idx), NW, InRange,
1481 OnlyIfReducedTy);
1482 }
1483 LLVM_ABI static Constant *
1484 getGetElementPtr(Type *Ty, Constant *C, ArrayRef<Value *> IdxList,
1486 std::optional<ConstantRange> InRange = std::nullopt,
1487 Type *OnlyIfReducedTy = nullptr);
1488
1489 /// Create a getelementptr i8, ptr, offset constant expression.
1490 static Constant *
1493 std::optional<ConstantRange> InRange = std::nullopt,
1494 Type *OnlyIfReduced = nullptr) {
1495 return getGetElementPtr(Type::getInt8Ty(Ptr->getContext()), Ptr, Offset, NW,
1496 InRange, OnlyIfReduced);
1497 }
1498
1499 /// Create an "inbounds" getelementptr. See the documentation for the
1500 /// "inbounds" flag in LangRef.html for details.
1502 ArrayRef<Constant *> IdxList) {
1503 return getGetElementPtr(Ty, C, IdxList, GEPNoWrapFlags::inBounds());
1504 }
1506 Constant *Idx) {
1507 // This form of the function only exists to avoid ambiguous overload
1508 // warnings about whether to convert Idx to ArrayRef<Constant *> or
1509 // ArrayRef<Value *>.
1510 return getGetElementPtr(Ty, C, Idx, GEPNoWrapFlags::inBounds());
1511 }
1513 ArrayRef<Value *> IdxList) {
1514 return getGetElementPtr(Ty, C, IdxList, GEPNoWrapFlags::inBounds());
1515 }
1516
1517 /// Create a getelementptr inbounds i8, ptr, offset constant expression.
1521
1522 LLVM_ABI static Constant *getExtractElement(Constant *Vec, Constant *Idx,
1523 Type *OnlyIfReducedTy = nullptr);
1524 LLVM_ABI static Constant *getInsertElement(Constant *Vec, Constant *Elt,
1525 Constant *Idx,
1526 Type *OnlyIfReducedTy = nullptr);
1527 LLVM_ABI static Constant *getShuffleVector(Constant *V1, Constant *V2,
1528 ArrayRef<int> Mask,
1529 Type *OnlyIfReducedTy = nullptr);
1530
1531 /// Return the opcode at the root of this constant expression
1532 unsigned getOpcode() const { return getSubclassDataFromValue(); }
1533
1534 /// Assert that this is a shufflevector and return the mask. See class
1535 /// ShuffleVectorInst for a description of the mask representation.
1536 LLVM_ABI ArrayRef<int> getShuffleMask() const;
1537
1538 /// Assert that this is a shufflevector and return the mask.
1539 ///
1540 /// TODO: This is a temporary hack until we update the bitcode format for
1541 /// shufflevector.
1542 LLVM_ABI Constant *getShuffleMaskForBitcode() const;
1543
1544 /// Return a string representation for an opcode.
1545 LLVM_ABI const char *getOpcodeName() const;
1546
1547 /// This returns the current constant expression with the operands replaced
1548 /// with the specified values. The specified array must have the same number
1549 /// of operands as our current one.
1553
1554 /// Get the current expression with the operands replaced.
1555 ///
1556 /// Return the current constant expression with the operands replaced with \c
1557 /// Ops and the type with \c Ty. The new operands must have the same number
1558 /// as the current ones.
1559 ///
1560 /// If \c OnlyIfReduced is \c true, nullptr will be returned unless something
1561 /// gets constant-folded, the type changes, or the expression is otherwise
1562 /// canonicalized. This parameter should almost always be \c false.
1563 LLVM_ABI Constant *getWithOperands(ArrayRef<Constant *> Ops, Type *Ty,
1564 bool OnlyIfReduced = false,
1565 Type *SrcTy = nullptr) const;
1566
1567 /// Returns an Instruction which implements the same operation as this
1568 /// ConstantExpr. It is not inserted into any basic block.
1569 ///
1570 /// A better approach to this could be to have a constructor for Instruction
1571 /// which would take a ConstantExpr parameter, but that would have spread
1572 /// implementation details of ConstantExpr outside of Constants.cpp, which
1573 /// would make it harder to remove ConstantExprs altogether.
1574 LLVM_ABI Instruction *getAsInstruction() const;
1575
1576 /// Whether creating a constant expression for this binary operator is
1577 /// desirable.
1578 LLVM_ABI static bool isDesirableBinOp(unsigned Opcode);
1579
1580 /// Whether creating a constant expression for this binary operator is
1581 /// supported.
1582 LLVM_ABI static bool isSupportedBinOp(unsigned Opcode);
1583
1584 /// Whether creating a constant expression for this cast is desirable.
1585 LLVM_ABI static bool isDesirableCastOp(unsigned Opcode);
1586
1587 /// Whether creating a constant expression for this cast is supported.
1588 LLVM_ABI static bool isSupportedCastOp(unsigned Opcode);
1589
1590 /// Whether creating a constant expression for this getelementptr type is
1591 /// supported.
1592 static bool isSupportedGetElementPtr(const Type *SrcElemTy) {
1593 return !SrcElemTy->isScalableTy();
1594 }
1595
1596 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1597 static bool classof(const Value *V) {
1598 return V->getValueID() == ConstantExprVal;
1599 }
1600
1601private:
1602 // Shadow Value::setValueSubclassData with a private forwarding method so that
1603 // subclasses cannot accidentally use it.
1604 void setValueSubclassData(unsigned short D) {
1606 }
1607};
1608
1609template <>
1611 : public VariadicOperandTraits<ConstantExpr> {};
1612
1614
1615//===----------------------------------------------------------------------===//
1616/// 'undef' values are things that do not have specified contents.
1617/// These are used for a variety of purposes, including global variable
1618/// initializers and operands to instructions. 'undef' values can occur with
1619/// any first-class type.
1620///
1621/// Undef values aren't exactly constants; if they have multiple uses, they
1622/// can appear to have different bit patterns at each use. See
1623/// LangRef.html#undefvalues for details.
1624///
1625class UndefValue : public ConstantData {
1626 friend class Constant;
1627
1628 explicit UndefValue(Type *T) : ConstantData(T, UndefValueVal) {}
1629
1630 void destroyConstantImpl();
1631
1632protected:
1633 explicit UndefValue(Type *T, ValueTy vty) : ConstantData(T, vty) {}
1634
1635public:
1636 UndefValue(const UndefValue &) = delete;
1637
1638 /// Static factory methods - Return an 'undef' object of the specified type.
1639 LLVM_ABI static UndefValue *get(Type *T);
1640
1641 /// If this Undef has array or vector type, return a undef with the right
1642 /// element type.
1643 LLVM_ABI UndefValue *getSequentialElement() const;
1644
1645 /// If this undef has struct type, return a undef with the right element type
1646 /// for the specified element.
1647 LLVM_ABI UndefValue *getStructElement(unsigned Elt) const;
1648
1649 /// Return an undef of the right value for the specified GEP index if we can,
1650 /// otherwise return null (e.g. if C is a ConstantExpr).
1651 LLVM_ABI UndefValue *getElementValue(Constant *C) const;
1652
1653 /// Return an undef of the right value for the specified GEP index.
1654 LLVM_ABI UndefValue *getElementValue(unsigned Idx) const;
1655
1656 /// Return the number of elements in the array, vector, or struct.
1657 LLVM_ABI unsigned getNumElements() const;
1658
1659 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1660 static bool classof(const Value *V) {
1661 return V->getValueID() == UndefValueVal ||
1662 V->getValueID() == PoisonValueVal;
1663 }
1664};
1665
1666//===----------------------------------------------------------------------===//
1667/// In order to facilitate speculative execution, many instructions do not
1668/// invoke immediate undefined behavior when provided with illegal operands,
1669/// and return a poison value instead.
1670///
1671/// see LangRef.html#poisonvalues for details.
1672///
1673class PoisonValue final : public UndefValue {
1674 friend class Constant;
1675
1676 explicit PoisonValue(Type *T) : UndefValue(T, PoisonValueVal) {}
1677
1678 void destroyConstantImpl();
1679
1680public:
1681 PoisonValue(const PoisonValue &) = delete;
1682
1683 /// Static factory methods - Return an 'poison' object of the specified type.
1684 LLVM_ABI static PoisonValue *get(Type *T);
1685
1686 /// If this poison has array or vector type, return a poison with the right
1687 /// element type.
1688 LLVM_ABI PoisonValue *getSequentialElement() const;
1689
1690 /// If this poison has struct type, return a poison with the right element
1691 /// type for the specified element.
1692 LLVM_ABI PoisonValue *getStructElement(unsigned Elt) const;
1693
1694 /// Return an poison of the right value for the specified GEP index if we can,
1695 /// otherwise return null (e.g. if C is a ConstantExpr).
1696 LLVM_ABI PoisonValue *getElementValue(Constant *C) const;
1697
1698 /// Return an poison of the right value for the specified GEP index.
1699 LLVM_ABI PoisonValue *getElementValue(unsigned Idx) const;
1700
1701 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1702 static bool classof(const Value *V) {
1703 return V->getValueID() == PoisonValueVal;
1704 }
1705};
1706
1707} // end namespace llvm
1708
1709#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)
static bool isSigned(unsigned Opcode)
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:5912
Class for arbitrary precision integers.
Definition APInt.h:78
Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
size_t size() const
Get the array size.
Definition ArrayRef.h:141
const T * data() const
Definition ArrayRef.h:138
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:1082
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:1083
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:1123
Function * getFunction() const
Definition Constants.h:1120
BasicBlock * getBasicBlock() const
Definition Constants.h:1119
static LLVM_ABI BlockAddress * get(Function *F, BasicBlock *BB)
Return a BlockAddress for the specified function and basic block.
Class to represent byte types.
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:543
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:559
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:569
LLVM_ABI ConstantAggregate(Type *T, ValueTy VT, ArrayRef< Constant * > V, AllocInfo AllocInfo)
friend class Constant
Definition Constants.h:586
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:608
ArrayType * getType() const
Specialize the getType() method to always return an ArrayType, which reduces the amount of casting ne...
Definition Constants.h:603
Class for constant bytes.
Definition Constants.h:281
static bool classof(const Value *V)
Methods to support type inquiry through isa, cast, and dyn_cast.
Definition Constants.h:412
bool isNegative() const
Definition Constants.h:368
friend class ConstantVector
Definition Constants.h:283
bool isMinusOne() const
This function will return true iff every bit in this constant is set to true.
Definition Constants.h:385
int64_t getSExtValue() const
Return the constant as a 64-bit byte value after it has been sign extended as appropriate for the typ...
Definition Constants.h:360
ConstantByte(const ConstantByte &)=delete
friend class Constant
Definition Constants.h:282
uint64_t getZExtValue() const
Return the constant as a 64-bit byte value after it has been zero extended as appropriate for the typ...
Definition Constants.h:354
ByteType * getByteType() const
Variant of the getType() method to always return a ByteType, which reduces the amount of casting need...
Definition Constants.h:364
static ConstantByte * getSigned(ByteType *Ty, int64_t V, bool ImplicitTrunc=false)
Return a ConstantByte with the specified value for the specified type.
Definition Constants.h:322
bool isZero() const
This is just a convenience method to make client code smaller for a common code.
Definition Constants.h:373
bool isOne() const
This is just a convenience method to make client code smaller for a common case.
Definition Constants.h:379
const APInt & getValue() const
Return the constant as an APInt value reference.
Definition Constants.h:345
static Constant * getSigned(Type *Ty, int64_t V, bool ImplicitTrunc=false)
Definition Constants.h:326
unsigned getBitWidth() const
getBitWidth - Return the scalar bitwidth of this constant.
Definition Constants.h:348
bool isMinValue(bool IsSigned) const
This function will return true iff this constant represents the smallest value that may be represente...
Definition Constants.h:404
bool isMaxValue(bool IsSigned) const
This function will return true iff this constant represents the largest value that may be represented...
Definition Constants.h:392
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:934
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:872
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:860
static Constant * get(LLVMContext &Context, ArrayTy &Elts)
get() constructor - ArrayTy needs to be compatible with ArrayRef<ElementTy>.
Definition Constants.h:881
static LLVM_ABI Constant * getString(LLVMContext &Context, StringRef Initializer, bool AddNull=true, bool ByteString=false)
This method constructs a CDS and initializes it with a text string.
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:891
ArrayType * getType() const
Specialize the getType() method to always return an ArrayType, which reduces the amount of casting ne...
Definition Constants.h:929
static LLVM_ABI Constant * getByte(Type *ElementType, ArrayRef< uint8_t > Elts)
getByte() constructors - Return a constant of array type with a byte element type taken from argument...
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:825
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 or bytes.
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:832
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:844
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:766
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:975
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:1021
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:946
FixedVectorType * getType() const
Specialize the getType() method to always return a FixedVectorType, which reduces the amount of casti...
Definition Constants.h:1016
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 LLVM_ABI Constant * getByte(Type *ElementType, ArrayRef< uint8_t > Elts)
getByte() constructors - Return a constant of vector type with a byte element type taken from argumen...
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:1310
static LLVM_ABI Constant * getIntToPtr(Constant *C, Type *Ty, bool OnlyIfReduced=false)
ConstantExpr(Type *ty, unsigned Opcode, AllocInfo AllocInfo)
Definition Constants.h:1318
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:1597
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:1376
static Constant * getInBoundsGetElementPtr(Type *Ty, Constant *C, ArrayRef< Constant * > IdxList)
Create an "inbounds" getelementptr.
Definition Constants.h:1501
friend struct ConstantExprKeyType
Definition Constants.h:1311
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:1364
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:1312
static Constant * getPtrAdd(Constant *Ptr, Constant *Offset, GEPNoWrapFlags NW=GEPNoWrapFlags::none(), std::optional< ConstantRange > InRange=std::nullopt, Type *OnlyIfReduced=nullptr)
Create a getelementptr i8, ptr, offset constant expression.
Definition Constants.h:1491
static LLVM_ABI Constant * getPtrToInt(Constant *C, Type *Ty, bool OnlyIfReduced=false)
static Constant * getInBoundsPtrAdd(Constant *Ptr, Constant *Offset)
Create a getelementptr inbounds i8, ptr, offset constant expression.
Definition Constants.h:1518
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:1592
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:1473
static LLVM_ABI Constant * getXor(Constant *C1, Constant *C2)
static Constant * getInBoundsGetElementPtr(Type *Ty, Constant *C, ArrayRef< Value * > IdxList)
Definition Constants.h:1512
static Constant * getNSWNeg(Constant *C)
Definition Constants.h:1362
static Constant * getNSWSub(Constant *C1, Constant *C2)
Definition Constants.h:1372
static Constant * getInBoundsGetElementPtr(Type *Ty, Constant *C, Constant *Idx)
Definition Constants.h:1505
static Constant * getNUWAdd(Constant *C1, Constant *C2)
Definition Constants.h:1368
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:1532
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:1464
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:1550
ConstantFP - Floating Point Values [float, double].
Definition Constants.h:420
ConstantFP(const ConstantFP &)=delete
const APFloat & getValue() const
Definition Constants.h:464
friend class ConstantVector
Definition Constants.h:422
const APFloat & getValueAPF() const
Definition Constants.h:463
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:500
bool isInfinity() const
Return true if the value is infinity.
Definition Constants.h:479
friend class Constant
Definition Constants.h:421
bool isNegative() const
Return true if the sign bit is set.
Definition Constants.h:476
bool isExactlyValue(double V) const
Definition Constants.h:492
static ConstantFP * getNegativeZero(Type *Ty)
Definition Constants.h:458
static LLVM_ABI ConstantFP * getZero(Type *Ty, bool Negative=false)
static LLVM_ABI ConstantFP * getNaN(Type *Ty, bool Negative=false, uint64_t Payload=0)
static LLVM_ABI ConstantFP * getQNaN(Type *Ty, bool Negative=false, APInt *Payload=nullptr)
bool isNaN() const
Return true if the value is a NaN.
Definition Constants.h:482
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 ...
bool isPosZero() const
Return true if the value is positive zero.
Definition Constants.h:470
static LLVM_ABI bool isValueValidForType(Type *Ty, const APFloat &V)
Return true if Ty is big enough to represent V.
static LLVM_ABI ConstantFP * getSNaN(Type *Ty, bool Negative=false, APInt *Payload=nullptr)
bool isNegZero() const
Return true if the value is negative zero.
Definition Constants.h:473
bool isZero() const
Return true if the value is positive or negative zero.
Definition Constants.h:467
static LLVM_ABI ConstantFP * getInfinity(Type *Ty, bool Negative=false)
This is the shared class of boolean and integer constants.
Definition Constants.h:87
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 Constant * getSigned(Type *Ty, int64_t V, bool ImplicitTrunc=false)
Definition Constants.h:139
static LLVM_ABI ConstantInt * getTrue(LLVMContext &Context)
ConstantInt(const ConstantInt &)=delete
static ConstantInt * getSigned(IntegerType *Ty, int64_t V, bool ImplicitTrunc=false)
Return a ConstantInt with the specified value for the specified type.
Definition Constants.h:135
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
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:735
PointerType * getPointerType() const
Return the scalar pointer type for this null value.
Definition Constants.h:730
static LLVM_ABI ConstantPointerNull * get(PointerType *T)
Static factory methods - Return objects of the specified value.
ConstantPointerNull(const ConstantPointerNull &)=delete
A signed pointer, in the ptrauth sense.
Definition Constants.h:1217
Constant * getAddrDiscriminator() const
The address discriminator if any, or the null constant.
Definition Constants.h:1258
friend struct ConstantPtrAuthKeyType
Definition Constants.h:1218
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:1245
friend class Constant
Definition Constants.h:1219
ConstantInt * getKey() const
The Key ID, an i32 constant.
Definition Constants.h:1248
Constant * getDeactivationSymbol() const
Definition Constants.h:1267
bool hasAddressDiscriminator() const
Whether there is any non-null address discriminator.
Definition Constants.h:1263
ConstantInt * getDiscriminator() const
The integer discriminator, an i64 constant, or 0.
Definition Constants.h:1251
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:1292
static Constant * getAnon(LLVMContext &Ctx, ArrayRef< Constant * > V, bool Packed=false)
Definition Constants.h:640
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:660
static LLVM_ABI Constant * get(StructType *T, ArrayRef< Constant * > V)
friend class Constant
Definition Constants.h:618
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:631
StructType * getType() const
Specialization - reduce amount of casting.
Definition Constants.h:655
static Constant * getAnon(ArrayRef< Constant * > V, bool Packed=false)
Return an anonymous struct that has the specified elements.
Definition Constants.h:637
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:1070
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast.
Definition Constants.h:1075
ConstantTargetNone(const ConstantTargetNone &)=delete
ConstantTokenNone(const ConstantTokenNone &)=delete
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:1046
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:701
friend class Constant
Definition Constants.h:670
FixedVectorType * getType() const
Specialize the getType() method to always return a FixedVectorType, which reduces the amount of casti...
Definition Constants.h:691
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
bool isNullValue() const
Return true if this is the value that would be returned by getNullValue.
Definition Constant.h:64
Constant(Type *ty, ValueTy vty, AllocInfo AllocInfo)
Definition Constant.h:54
Wrapper for a function that represents a value that functionally represents the original function.
Definition Constants.h:1137
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:1163
GlobalValue * getGlobalValue() const
Definition Constants.h:1158
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:64
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:1176
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:1205
friend class Constant
Definition Constants.h:1177
PointerType * getType() const
NoCFIValue is always a pointer.
Definition Constants.h:1200
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value)
Transparently provide more efficient getOperand methods.
GlobalValue * getGlobalValue() const
Definition Constants.h:1195
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:1674
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:1702
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....
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
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:46
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 LLVM_ABI IntegerType * getInt8Ty(LLVMContext &C)
Definition Type.cpp:307
static Type * getScalarTy(LLVMContext &C)
Definition Type.h:489
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:1626
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition Constants.h:1660
UndefValue(Type *T, ValueTy vty)
Definition Constants.h:1633
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:255
unsigned short getSubclassDataFromValue() const
Definition Value.h:857
unsigned char SubclassOptionalData
Hold arbitary subclass data.
Definition Value.h:85
LLVMContext & getContext() const
All values hold a context through their type.
Definition Value.h:258
void setValueSubclassData(unsigned short D)
Definition Value.h:858
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.
@ Offset
Definition DWP.cpp:558
decltype(auto) get(const PointerIntPair< PointerTy, IntBits, IntType, PtrTraits, Info > &Pair)
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
Definition Casting.h:547
LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key
FunctionAddr VTableAddr uintptr_t uintptr_t Data
Definition InstrProf.h:221
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:114
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...