1 //===-- Constants.cpp - Implement Constant nodes --------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements the Constant* classes.
10 //
11 //===----------------------------------------------------------------------===//
12
13 #include "llvm/IR/Constants.h"
14 #include "LLVMContextImpl.h"
15 #include "llvm/ADT/STLExtras.h"
16 #include "llvm/ADT/SmallVector.h"
17 #include "llvm/ADT/StringMap.h"
18 #include "llvm/IR/BasicBlock.h"
19 #include "llvm/IR/ConstantFold.h"
20 #include "llvm/IR/DerivedTypes.h"
21 #include "llvm/IR/Function.h"
22 #include "llvm/IR/GetElementPtrTypeIterator.h"
23 #include "llvm/IR/GlobalAlias.h"
24 #include "llvm/IR/GlobalIFunc.h"
25 #include "llvm/IR/GlobalValue.h"
26 #include "llvm/IR/GlobalVariable.h"
27 #include "llvm/IR/Instructions.h"
28 #include "llvm/IR/Operator.h"
29 #include "llvm/IR/PatternMatch.h"
30 #include "llvm/Support/ErrorHandling.h"
31 #include "llvm/Support/MathExtras.h"
32 #include "llvm/Support/raw_ostream.h"
33 #include <algorithm>
34
35 using namespace llvm;
36 using namespace PatternMatch;
37
38 // As set of temporary options to help migrate how splats are represented.
39 static cl::opt<bool> UseConstantIntForFixedLengthSplat(
40 "use-constant-int-for-fixed-length-splat", cl::init(false), cl::Hidden,
41 cl::desc("Use ConstantInt's native fixed-length vector splat support."));
42 static cl::opt<bool> UseConstantFPForFixedLengthSplat(
43 "use-constant-fp-for-fixed-length-splat", cl::init(false), cl::Hidden,
44 cl::desc("Use ConstantFP's native fixed-length vector splat support."));
45 static cl::opt<bool> UseConstantIntForScalableSplat(
46 "use-constant-int-for-scalable-splat", cl::init(false), cl::Hidden,
47 cl::desc("Use ConstantInt's native scalable vector splat support."));
48 static cl::opt<bool> UseConstantFPForScalableSplat(
49 "use-constant-fp-for-scalable-splat", cl::init(false), cl::Hidden,
50 cl::desc("Use ConstantFP's native scalable vector splat support."));
51
52 //===----------------------------------------------------------------------===//
53 // Constant Class
54 //===----------------------------------------------------------------------===//
55
isNegativeZeroValue() const56 bool Constant::isNegativeZeroValue() const {
57 // Floating point values have an explicit -0.0 value.
58 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
59 return CFP->isZero() && CFP->isNegative();
60
61 // Equivalent for a vector of -0.0's.
62 if (getType()->isVectorTy())
63 if (const auto *SplatCFP = dyn_cast_or_null<ConstantFP>(getSplatValue()))
64 return SplatCFP->isNegativeZeroValue();
65
66 // We've already handled true FP case; any other FP vectors can't represent -0.0.
67 if (getType()->isFPOrFPVectorTy())
68 return false;
69
70 // Otherwise, just use +0.0.
71 return isNullValue();
72 }
73
74 // Return true iff this constant is positive zero (floating point), negative
75 // zero (floating point), or a null value.
isZeroValue() const76 bool Constant::isZeroValue() const {
77 // Floating point values have an explicit -0.0 value.
78 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
79 return CFP->isZero();
80
81 // Check for constant splat vectors of 1 values.
82 if (getType()->isVectorTy())
83 if (const auto *SplatCFP = dyn_cast_or_null<ConstantFP>(getSplatValue()))
84 return SplatCFP->isZero();
85
86 // Otherwise, just use +0.0.
87 return isNullValue();
88 }
89
isNullValue() const90 bool Constant::isNullValue() const {
91 // 0 is null.
92 if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
93 return CI->isZero();
94
95 // +0.0 is null.
96 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
97 // ppc_fp128 determine isZero using high order double only
98 // Should check the bitwise value to make sure all bits are zero.
99 return CFP->isExactlyValue(+0.0);
100
101 // constant zero is zero for aggregates, cpnull is null for pointers, none for
102 // tokens.
103 return isa<ConstantAggregateZero>(this) || isa<ConstantPointerNull>(this) ||
104 isa<ConstantTokenNone>(this) || isa<ConstantTargetNone>(this);
105 }
106
isAllOnesValue() const107 bool Constant::isAllOnesValue() const {
108 // Check for -1 integers
109 if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
110 return CI->isMinusOne();
111
112 // Check for FP which are bitcasted from -1 integers
113 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
114 return CFP->getValueAPF().bitcastToAPInt().isAllOnes();
115
116 // Check for constant splat vectors of 1 values.
117 if (getType()->isVectorTy())
118 if (const auto *SplatVal = getSplatValue())
119 return SplatVal->isAllOnesValue();
120
121 return false;
122 }
123
isOneValue() const124 bool Constant::isOneValue() const {
125 // Check for 1 integers
126 if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
127 return CI->isOne();
128
129 // Check for FP which are bitcasted from 1 integers
130 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
131 return CFP->getValueAPF().bitcastToAPInt().isOne();
132
133 // Check for constant splat vectors of 1 values.
134 if (getType()->isVectorTy())
135 if (const auto *SplatVal = getSplatValue())
136 return SplatVal->isOneValue();
137
138 return false;
139 }
140
isNotOneValue() const141 bool Constant::isNotOneValue() const {
142 // Check for 1 integers
143 if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
144 return !CI->isOneValue();
145
146 // Check for FP which are bitcasted from 1 integers
147 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
148 return !CFP->getValueAPF().bitcastToAPInt().isOne();
149
150 // Check that vectors don't contain 1
151 if (auto *VTy = dyn_cast<FixedVectorType>(getType())) {
152 for (unsigned I = 0, E = VTy->getNumElements(); I != E; ++I) {
153 Constant *Elt = getAggregateElement(I);
154 if (!Elt || !Elt->isNotOneValue())
155 return false;
156 }
157 return true;
158 }
159
160 // Check for splats that don't contain 1
161 if (getType()->isVectorTy())
162 if (const auto *SplatVal = getSplatValue())
163 return SplatVal->isNotOneValue();
164
165 // It *may* contain 1, we can't tell.
166 return false;
167 }
168
isMinSignedValue() const169 bool Constant::isMinSignedValue() const {
170 // Check for INT_MIN integers
171 if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
172 return CI->isMinValue(/*isSigned=*/true);
173
174 // Check for FP which are bitcasted from INT_MIN integers
175 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
176 return CFP->getValueAPF().bitcastToAPInt().isMinSignedValue();
177
178 // Check for splats of INT_MIN values.
179 if (getType()->isVectorTy())
180 if (const auto *SplatVal = getSplatValue())
181 return SplatVal->isMinSignedValue();
182
183 return false;
184 }
185
isNotMinSignedValue() const186 bool Constant::isNotMinSignedValue() const {
187 // Check for INT_MIN integers
188 if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
189 return !CI->isMinValue(/*isSigned=*/true);
190
191 // Check for FP which are bitcasted from INT_MIN integers
192 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
193 return !CFP->getValueAPF().bitcastToAPInt().isMinSignedValue();
194
195 // Check that vectors don't contain INT_MIN
196 if (auto *VTy = dyn_cast<FixedVectorType>(getType())) {
197 for (unsigned I = 0, E = VTy->getNumElements(); I != E; ++I) {
198 Constant *Elt = getAggregateElement(I);
199 if (!Elt || !Elt->isNotMinSignedValue())
200 return false;
201 }
202 return true;
203 }
204
205 // Check for splats that aren't INT_MIN
206 if (getType()->isVectorTy())
207 if (const auto *SplatVal = getSplatValue())
208 return SplatVal->isNotMinSignedValue();
209
210 // It *may* contain INT_MIN, we can't tell.
211 return false;
212 }
213
isFiniteNonZeroFP() const214 bool Constant::isFiniteNonZeroFP() const {
215 if (auto *CFP = dyn_cast<ConstantFP>(this))
216 return CFP->getValueAPF().isFiniteNonZero();
217
218 if (auto *VTy = dyn_cast<FixedVectorType>(getType())) {
219 for (unsigned I = 0, E = VTy->getNumElements(); I != E; ++I) {
220 auto *CFP = dyn_cast_or_null<ConstantFP>(getAggregateElement(I));
221 if (!CFP || !CFP->getValueAPF().isFiniteNonZero())
222 return false;
223 }
224 return true;
225 }
226
227 if (getType()->isVectorTy())
228 if (const auto *SplatCFP = dyn_cast_or_null<ConstantFP>(getSplatValue()))
229 return SplatCFP->isFiniteNonZeroFP();
230
231 // It *may* contain finite non-zero, we can't tell.
232 return false;
233 }
234
isNormalFP() const235 bool Constant::isNormalFP() const {
236 if (auto *CFP = dyn_cast<ConstantFP>(this))
237 return CFP->getValueAPF().isNormal();
238
239 if (auto *VTy = dyn_cast<FixedVectorType>(getType())) {
240 for (unsigned I = 0, E = VTy->getNumElements(); I != E; ++I) {
241 auto *CFP = dyn_cast_or_null<ConstantFP>(getAggregateElement(I));
242 if (!CFP || !CFP->getValueAPF().isNormal())
243 return false;
244 }
245 return true;
246 }
247
248 if (getType()->isVectorTy())
249 if (const auto *SplatCFP = dyn_cast_or_null<ConstantFP>(getSplatValue()))
250 return SplatCFP->isNormalFP();
251
252 // It *may* contain a normal fp value, we can't tell.
253 return false;
254 }
255
hasExactInverseFP() const256 bool Constant::hasExactInverseFP() const {
257 if (auto *CFP = dyn_cast<ConstantFP>(this))
258 return CFP->getValueAPF().getExactInverse(nullptr);
259
260 if (auto *VTy = dyn_cast<FixedVectorType>(getType())) {
261 for (unsigned I = 0, E = VTy->getNumElements(); I != E; ++I) {
262 auto *CFP = dyn_cast_or_null<ConstantFP>(getAggregateElement(I));
263 if (!CFP || !CFP->getValueAPF().getExactInverse(nullptr))
264 return false;
265 }
266 return true;
267 }
268
269 if (getType()->isVectorTy())
270 if (const auto *SplatCFP = dyn_cast_or_null<ConstantFP>(getSplatValue()))
271 return SplatCFP->hasExactInverseFP();
272
273 // It *may* have an exact inverse fp value, we can't tell.
274 return false;
275 }
276
isNaN() const277 bool Constant::isNaN() const {
278 if (auto *CFP = dyn_cast<ConstantFP>(this))
279 return CFP->isNaN();
280
281 if (auto *VTy = dyn_cast<FixedVectorType>(getType())) {
282 for (unsigned I = 0, E = VTy->getNumElements(); I != E; ++I) {
283 auto *CFP = dyn_cast_or_null<ConstantFP>(getAggregateElement(I));
284 if (!CFP || !CFP->isNaN())
285 return false;
286 }
287 return true;
288 }
289
290 if (getType()->isVectorTy())
291 if (const auto *SplatCFP = dyn_cast_or_null<ConstantFP>(getSplatValue()))
292 return SplatCFP->isNaN();
293
294 // It *may* be NaN, we can't tell.
295 return false;
296 }
297
isElementWiseEqual(Value * Y) const298 bool Constant::isElementWiseEqual(Value *Y) const {
299 // Are they fully identical?
300 if (this == Y)
301 return true;
302
303 // The input value must be a vector constant with the same type.
304 auto *VTy = dyn_cast<VectorType>(getType());
305 if (!isa<Constant>(Y) || !VTy || VTy != Y->getType())
306 return false;
307
308 // TODO: Compare pointer constants?
309 if (!(VTy->getElementType()->isIntegerTy() ||
310 VTy->getElementType()->isFloatingPointTy()))
311 return false;
312
313 // They may still be identical element-wise (if they have `undef`s).
314 // Bitcast to integer to allow exact bitwise comparison for all types.
315 Type *IntTy = VectorType::getInteger(VTy);
316 Constant *C0 = ConstantExpr::getBitCast(const_cast<Constant *>(this), IntTy);
317 Constant *C1 = ConstantExpr::getBitCast(cast<Constant>(Y), IntTy);
318 Constant *CmpEq = ConstantFoldCompareInstruction(ICmpInst::ICMP_EQ, C0, C1);
319 return CmpEq && (isa<PoisonValue>(CmpEq) || match(CmpEq, m_One()));
320 }
321
322 static bool
containsUndefinedElement(const Constant * C,function_ref<bool (const Constant *)> HasFn)323 containsUndefinedElement(const Constant *C,
324 function_ref<bool(const Constant *)> HasFn) {
325 if (auto *VTy = dyn_cast<VectorType>(C->getType())) {
326 if (HasFn(C))
327 return true;
328 if (isa<ConstantAggregateZero>(C))
329 return false;
330 if (isa<ScalableVectorType>(C->getType()))
331 return false;
332
333 for (unsigned i = 0, e = cast<FixedVectorType>(VTy)->getNumElements();
334 i != e; ++i) {
335 if (Constant *Elem = C->getAggregateElement(i))
336 if (HasFn(Elem))
337 return true;
338 }
339 }
340
341 return false;
342 }
343
containsUndefOrPoisonElement() const344 bool Constant::containsUndefOrPoisonElement() const {
345 return containsUndefinedElement(
346 this, [&](const auto *C) { return isa<UndefValue>(C); });
347 }
348
containsPoisonElement() const349 bool Constant::containsPoisonElement() const {
350 return containsUndefinedElement(
351 this, [&](const auto *C) { return isa<PoisonValue>(C); });
352 }
353
containsUndefElement() const354 bool Constant::containsUndefElement() const {
355 return containsUndefinedElement(this, [&](const auto *C) {
356 return isa<UndefValue>(C) && !isa<PoisonValue>(C);
357 });
358 }
359
containsConstantExpression() const360 bool Constant::containsConstantExpression() const {
361 if (auto *VTy = dyn_cast<FixedVectorType>(getType())) {
362 for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i)
363 if (isa<ConstantExpr>(getAggregateElement(i)))
364 return true;
365 }
366 return false;
367 }
368
369 /// Constructor to create a '0' constant of arbitrary type.
getNullValue(Type * Ty)370 Constant *Constant::getNullValue(Type *Ty) {
371 switch (Ty->getTypeID()) {
372 case Type::IntegerTyID:
373 return ConstantInt::get(Ty, 0);
374 case Type::HalfTyID:
375 case Type::BFloatTyID:
376 case Type::FloatTyID:
377 case Type::DoubleTyID:
378 case Type::X86_FP80TyID:
379 case Type::FP128TyID:
380 case Type::PPC_FP128TyID:
381 return ConstantFP::get(Ty->getContext(),
382 APFloat::getZero(Ty->getFltSemantics()));
383 case Type::PointerTyID:
384 return ConstantPointerNull::get(cast<PointerType>(Ty));
385 case Type::StructTyID:
386 case Type::ArrayTyID:
387 case Type::FixedVectorTyID:
388 case Type::ScalableVectorTyID:
389 return ConstantAggregateZero::get(Ty);
390 case Type::TokenTyID:
391 return ConstantTokenNone::get(Ty->getContext());
392 case Type::TargetExtTyID:
393 return ConstantTargetNone::get(cast<TargetExtType>(Ty));
394 default:
395 // Function, Label, or Opaque type?
396 llvm_unreachable("Cannot create a null constant of that type!");
397 }
398 }
399
getIntegerValue(Type * Ty,const APInt & V)400 Constant *Constant::getIntegerValue(Type *Ty, const APInt &V) {
401 Type *ScalarTy = Ty->getScalarType();
402
403 // Create the base integer constant.
404 Constant *C = ConstantInt::get(Ty->getContext(), V);
405
406 // Convert an integer to a pointer, if necessary.
407 if (PointerType *PTy = dyn_cast<PointerType>(ScalarTy))
408 C = ConstantExpr::getIntToPtr(C, PTy);
409
410 // Broadcast a scalar to a vector, if necessary.
411 if (VectorType *VTy = dyn_cast<VectorType>(Ty))
412 C = ConstantVector::getSplat(VTy->getElementCount(), C);
413
414 return C;
415 }
416
getAllOnesValue(Type * Ty)417 Constant *Constant::getAllOnesValue(Type *Ty) {
418 if (IntegerType *ITy = dyn_cast<IntegerType>(Ty))
419 return ConstantInt::get(Ty->getContext(),
420 APInt::getAllOnes(ITy->getBitWidth()));
421
422 if (Ty->isFloatingPointTy()) {
423 APFloat FL = APFloat::getAllOnesValue(Ty->getFltSemantics());
424 return ConstantFP::get(Ty->getContext(), FL);
425 }
426
427 VectorType *VTy = cast<VectorType>(Ty);
428 return ConstantVector::getSplat(VTy->getElementCount(),
429 getAllOnesValue(VTy->getElementType()));
430 }
431
getAggregateElement(unsigned Elt) const432 Constant *Constant::getAggregateElement(unsigned Elt) const {
433 assert((getType()->isAggregateType() || getType()->isVectorTy()) &&
434 "Must be an aggregate/vector constant");
435
436 if (const auto *CC = dyn_cast<ConstantAggregate>(this))
437 return Elt < CC->getNumOperands() ? CC->getOperand(Elt) : nullptr;
438
439 if (const auto *CAZ = dyn_cast<ConstantAggregateZero>(this))
440 return Elt < CAZ->getElementCount().getKnownMinValue()
441 ? CAZ->getElementValue(Elt)
442 : nullptr;
443
444 // FIXME: getNumElements() will fail for non-fixed vector types.
445 if (isa<ScalableVectorType>(getType()))
446 return nullptr;
447
448 if (const auto *PV = dyn_cast<PoisonValue>(this))
449 return Elt < PV->getNumElements() ? PV->getElementValue(Elt) : nullptr;
450
451 if (const auto *UV = dyn_cast<UndefValue>(this))
452 return Elt < UV->getNumElements() ? UV->getElementValue(Elt) : nullptr;
453
454 if (const auto *CDS = dyn_cast<ConstantDataSequential>(this))
455 return Elt < CDS->getNumElements() ? CDS->getElementAsConstant(Elt)
456 : nullptr;
457
458 return nullptr;
459 }
460
getAggregateElement(Constant * Elt) const461 Constant *Constant::getAggregateElement(Constant *Elt) const {
462 assert(isa<IntegerType>(Elt->getType()) && "Index must be an integer");
463 if (ConstantInt *CI = dyn_cast<ConstantInt>(Elt)) {
464 // Check if the constant fits into an uint64_t.
465 if (CI->getValue().getActiveBits() > 64)
466 return nullptr;
467 return getAggregateElement(CI->getZExtValue());
468 }
469 return nullptr;
470 }
471
destroyConstant()472 void Constant::destroyConstant() {
473 /// First call destroyConstantImpl on the subclass. This gives the subclass
474 /// a chance to remove the constant from any maps/pools it's contained in.
475 switch (getValueID()) {
476 default:
477 llvm_unreachable("Not a constant!");
478 #define HANDLE_CONSTANT(Name) \
479 case Value::Name##Val: \
480 cast<Name>(this)->destroyConstantImpl(); \
481 break;
482 #include "llvm/IR/Value.def"
483 }
484
485 // When a Constant is destroyed, there may be lingering
486 // references to the constant by other constants in the constant pool. These
487 // constants are implicitly dependent on the module that is being deleted,
488 // but they don't know that. Because we only find out when the CPV is
489 // deleted, we must now notify all of our users (that should only be
490 // Constants) that they are, in fact, invalid now and should be deleted.
491 //
492 while (!use_empty()) {
493 Value *V = user_back();
494 #ifndef NDEBUG // Only in -g mode...
495 if (!isa<Constant>(V)) {
496 dbgs() << "While deleting: " << *this
497 << "\n\nUse still stuck around after Def is destroyed: " << *V
498 << "\n\n";
499 }
500 #endif
501 assert(isa<Constant>(V) && "References remain to Constant being destroyed");
502 cast<Constant>(V)->destroyConstant();
503
504 // The constant should remove itself from our use list...
505 assert((use_empty() || user_back() != V) && "Constant not removed!");
506 }
507
508 // Value has no outstanding references it is safe to delete it now...
509 deleteConstant(this);
510 }
511
deleteConstant(Constant * C)512 void llvm::deleteConstant(Constant *C) {
513 switch (C->getValueID()) {
514 case Constant::ConstantIntVal:
515 delete static_cast<ConstantInt *>(C);
516 break;
517 case Constant::ConstantFPVal:
518 delete static_cast<ConstantFP *>(C);
519 break;
520 case Constant::ConstantAggregateZeroVal:
521 delete static_cast<ConstantAggregateZero *>(C);
522 break;
523 case Constant::ConstantArrayVal:
524 delete static_cast<ConstantArray *>(C);
525 break;
526 case Constant::ConstantStructVal:
527 delete static_cast<ConstantStruct *>(C);
528 break;
529 case Constant::ConstantVectorVal:
530 delete static_cast<ConstantVector *>(C);
531 break;
532 case Constant::ConstantPointerNullVal:
533 delete static_cast<ConstantPointerNull *>(C);
534 break;
535 case Constant::ConstantDataArrayVal:
536 delete static_cast<ConstantDataArray *>(C);
537 break;
538 case Constant::ConstantDataVectorVal:
539 delete static_cast<ConstantDataVector *>(C);
540 break;
541 case Constant::ConstantTokenNoneVal:
542 delete static_cast<ConstantTokenNone *>(C);
543 break;
544 case Constant::BlockAddressVal:
545 delete static_cast<BlockAddress *>(C);
546 break;
547 case Constant::DSOLocalEquivalentVal:
548 delete static_cast<DSOLocalEquivalent *>(C);
549 break;
550 case Constant::NoCFIValueVal:
551 delete static_cast<NoCFIValue *>(C);
552 break;
553 case Constant::ConstantPtrAuthVal:
554 delete static_cast<ConstantPtrAuth *>(C);
555 break;
556 case Constant::UndefValueVal:
557 delete static_cast<UndefValue *>(C);
558 break;
559 case Constant::PoisonValueVal:
560 delete static_cast<PoisonValue *>(C);
561 break;
562 case Constant::ConstantExprVal:
563 if (isa<CastConstantExpr>(C))
564 delete static_cast<CastConstantExpr *>(C);
565 else if (isa<BinaryConstantExpr>(C))
566 delete static_cast<BinaryConstantExpr *>(C);
567 else if (isa<ExtractElementConstantExpr>(C))
568 delete static_cast<ExtractElementConstantExpr *>(C);
569 else if (isa<InsertElementConstantExpr>(C))
570 delete static_cast<InsertElementConstantExpr *>(C);
571 else if (isa<ShuffleVectorConstantExpr>(C))
572 delete static_cast<ShuffleVectorConstantExpr *>(C);
573 else if (isa<GetElementPtrConstantExpr>(C))
574 delete static_cast<GetElementPtrConstantExpr *>(C);
575 else
576 llvm_unreachable("Unexpected constant expr");
577 break;
578 default:
579 llvm_unreachable("Unexpected constant");
580 }
581 }
582
583 /// Check if C contains a GlobalValue for which Predicate is true.
584 static bool
ConstHasGlobalValuePredicate(const Constant * C,bool (* Predicate)(const GlobalValue *))585 ConstHasGlobalValuePredicate(const Constant *C,
586 bool (*Predicate)(const GlobalValue *)) {
587 SmallPtrSet<const Constant *, 8> Visited;
588 SmallVector<const Constant *, 8> WorkList;
589 WorkList.push_back(C);
590 Visited.insert(C);
591
592 while (!WorkList.empty()) {
593 const Constant *WorkItem = WorkList.pop_back_val();
594 if (const auto *GV = dyn_cast<GlobalValue>(WorkItem))
595 if (Predicate(GV))
596 return true;
597 for (const Value *Op : WorkItem->operands()) {
598 const Constant *ConstOp = dyn_cast<Constant>(Op);
599 if (!ConstOp)
600 continue;
601 if (Visited.insert(ConstOp).second)
602 WorkList.push_back(ConstOp);
603 }
604 }
605 return false;
606 }
607
isThreadDependent() const608 bool Constant::isThreadDependent() const {
609 auto DLLImportPredicate = [](const GlobalValue *GV) {
610 return GV->isThreadLocal();
611 };
612 return ConstHasGlobalValuePredicate(this, DLLImportPredicate);
613 }
614
isDLLImportDependent() const615 bool Constant::isDLLImportDependent() const {
616 auto DLLImportPredicate = [](const GlobalValue *GV) {
617 return GV->hasDLLImportStorageClass();
618 };
619 return ConstHasGlobalValuePredicate(this, DLLImportPredicate);
620 }
621
isConstantUsed() const622 bool Constant::isConstantUsed() const {
623 for (const User *U : users()) {
624 const Constant *UC = dyn_cast<Constant>(U);
625 if (!UC || isa<GlobalValue>(UC))
626 return true;
627
628 if (UC->isConstantUsed())
629 return true;
630 }
631 return false;
632 }
633
needsDynamicRelocation() const634 bool Constant::needsDynamicRelocation() const {
635 return getRelocationInfo() == GlobalRelocation;
636 }
637
needsRelocation() const638 bool Constant::needsRelocation() const {
639 return getRelocationInfo() != NoRelocation;
640 }
641
getRelocationInfo() const642 Constant::PossibleRelocationsTy Constant::getRelocationInfo() const {
643 if (isa<GlobalValue>(this))
644 return GlobalRelocation; // Global reference.
645
646 if (const BlockAddress *BA = dyn_cast<BlockAddress>(this))
647 return BA->getFunction()->getRelocationInfo();
648
649 if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(this)) {
650 if (CE->getOpcode() == Instruction::Sub) {
651 ConstantExpr *LHS = dyn_cast<ConstantExpr>(CE->getOperand(0));
652 ConstantExpr *RHS = dyn_cast<ConstantExpr>(CE->getOperand(1));
653 if (LHS && RHS && LHS->getOpcode() == Instruction::PtrToInt &&
654 RHS->getOpcode() == Instruction::PtrToInt) {
655 Constant *LHSOp0 = LHS->getOperand(0);
656 Constant *RHSOp0 = RHS->getOperand(0);
657
658 // While raw uses of blockaddress need to be relocated, differences
659 // between two of them don't when they are for labels in the same
660 // function. This is a common idiom when creating a table for the
661 // indirect goto extension, so we handle it efficiently here.
662 if (isa<BlockAddress>(LHSOp0) && isa<BlockAddress>(RHSOp0) &&
663 cast<BlockAddress>(LHSOp0)->getFunction() ==
664 cast<BlockAddress>(RHSOp0)->getFunction())
665 return NoRelocation;
666
667 // Relative pointers do not need to be dynamically relocated.
668 if (auto *RHSGV =
669 dyn_cast<GlobalValue>(RHSOp0->stripInBoundsConstantOffsets())) {
670 auto *LHS = LHSOp0->stripInBoundsConstantOffsets();
671 if (auto *LHSGV = dyn_cast<GlobalValue>(LHS)) {
672 if (LHSGV->isDSOLocal() && RHSGV->isDSOLocal())
673 return LocalRelocation;
674 } else if (isa<DSOLocalEquivalent>(LHS)) {
675 if (RHSGV->isDSOLocal())
676 return LocalRelocation;
677 }
678 }
679 }
680 }
681 }
682
683 PossibleRelocationsTy Result = NoRelocation;
684 for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
685 Result =
686 std::max(cast<Constant>(getOperand(i))->getRelocationInfo(), Result);
687
688 return Result;
689 }
690
691 /// Return true if the specified constantexpr is dead. This involves
692 /// recursively traversing users of the constantexpr.
693 /// If RemoveDeadUsers is true, also remove dead users at the same time.
constantIsDead(const Constant * C,bool RemoveDeadUsers)694 static bool constantIsDead(const Constant *C, bool RemoveDeadUsers) {
695 if (isa<GlobalValue>(C)) return false; // Cannot remove this
696
697 Value::const_user_iterator I = C->user_begin(), E = C->user_end();
698 while (I != E) {
699 const Constant *User = dyn_cast<Constant>(*I);
700 if (!User) return false; // Non-constant usage;
701 if (!constantIsDead(User, RemoveDeadUsers))
702 return false; // Constant wasn't dead
703
704 // Just removed User, so the iterator was invalidated.
705 // Since we return immediately upon finding a live user, we can always
706 // restart from user_begin().
707 if (RemoveDeadUsers)
708 I = C->user_begin();
709 else
710 ++I;
711 }
712
713 if (RemoveDeadUsers) {
714 // If C is only used by metadata, it should not be preserved but should
715 // have its uses replaced.
716 ReplaceableMetadataImpl::SalvageDebugInfo(*C);
717 const_cast<Constant *>(C)->destroyConstant();
718 }
719
720 return true;
721 }
722
removeDeadConstantUsers() const723 void Constant::removeDeadConstantUsers() const {
724 Value::const_user_iterator I = user_begin(), E = user_end();
725 Value::const_user_iterator LastNonDeadUser = E;
726 while (I != E) {
727 const Constant *User = dyn_cast<Constant>(*I);
728 if (!User) {
729 LastNonDeadUser = I;
730 ++I;
731 continue;
732 }
733
734 if (!constantIsDead(User, /* RemoveDeadUsers= */ true)) {
735 // If the constant wasn't dead, remember that this was the last live use
736 // and move on to the next constant.
737 LastNonDeadUser = I;
738 ++I;
739 continue;
740 }
741
742 // If the constant was dead, then the iterator is invalidated.
743 if (LastNonDeadUser == E)
744 I = user_begin();
745 else
746 I = std::next(LastNonDeadUser);
747 }
748 }
749
hasOneLiveUse() const750 bool Constant::hasOneLiveUse() const { return hasNLiveUses(1); }
751
hasZeroLiveUses() const752 bool Constant::hasZeroLiveUses() const { return hasNLiveUses(0); }
753
hasNLiveUses(unsigned N) const754 bool Constant::hasNLiveUses(unsigned N) const {
755 unsigned NumUses = 0;
756 for (const Use &U : uses()) {
757 const Constant *User = dyn_cast<Constant>(U.getUser());
758 if (!User || !constantIsDead(User, /* RemoveDeadUsers= */ false)) {
759 ++NumUses;
760
761 if (NumUses > N)
762 return false;
763 }
764 }
765 return NumUses == N;
766 }
767
replaceUndefsWith(Constant * C,Constant * Replacement)768 Constant *Constant::replaceUndefsWith(Constant *C, Constant *Replacement) {
769 assert(C && Replacement && "Expected non-nullptr constant arguments");
770 Type *Ty = C->getType();
771 if (match(C, m_Undef())) {
772 assert(Ty == Replacement->getType() && "Expected matching types");
773 return Replacement;
774 }
775
776 // Don't know how to deal with this constant.
777 auto *VTy = dyn_cast<FixedVectorType>(Ty);
778 if (!VTy)
779 return C;
780
781 unsigned NumElts = VTy->getNumElements();
782 SmallVector<Constant *, 32> NewC(NumElts);
783 for (unsigned i = 0; i != NumElts; ++i) {
784 Constant *EltC = C->getAggregateElement(i);
785 assert((!EltC || EltC->getType() == Replacement->getType()) &&
786 "Expected matching types");
787 NewC[i] = EltC && match(EltC, m_Undef()) ? Replacement : EltC;
788 }
789 return ConstantVector::get(NewC);
790 }
791
mergeUndefsWith(Constant * C,Constant * Other)792 Constant *Constant::mergeUndefsWith(Constant *C, Constant *Other) {
793 assert(C && Other && "Expected non-nullptr constant arguments");
794 if (match(C, m_Undef()))
795 return C;
796
797 Type *Ty = C->getType();
798 if (match(Other, m_Undef()))
799 return UndefValue::get(Ty);
800
801 auto *VTy = dyn_cast<FixedVectorType>(Ty);
802 if (!VTy)
803 return C;
804
805 Type *EltTy = VTy->getElementType();
806 unsigned NumElts = VTy->getNumElements();
807 assert(isa<FixedVectorType>(Other->getType()) &&
808 cast<FixedVectorType>(Other->getType())->getNumElements() == NumElts &&
809 "Type mismatch");
810
811 bool FoundExtraUndef = false;
812 SmallVector<Constant *, 32> NewC(NumElts);
813 for (unsigned I = 0; I != NumElts; ++I) {
814 NewC[I] = C->getAggregateElement(I);
815 Constant *OtherEltC = Other->getAggregateElement(I);
816 assert(NewC[I] && OtherEltC && "Unknown vector element");
817 if (!match(NewC[I], m_Undef()) && match(OtherEltC, m_Undef())) {
818 NewC[I] = UndefValue::get(EltTy);
819 FoundExtraUndef = true;
820 }
821 }
822 if (FoundExtraUndef)
823 return ConstantVector::get(NewC);
824 return C;
825 }
826
isManifestConstant() const827 bool Constant::isManifestConstant() const {
828 if (isa<ConstantData>(this))
829 return true;
830 if (isa<ConstantAggregate>(this) || isa<ConstantExpr>(this)) {
831 for (const Value *Op : operand_values())
832 if (!cast<Constant>(Op)->isManifestConstant())
833 return false;
834 return true;
835 }
836 return false;
837 }
838
839 //===----------------------------------------------------------------------===//
840 // ConstantInt
841 //===----------------------------------------------------------------------===//
842
ConstantInt(Type * Ty,const APInt & V)843 ConstantInt::ConstantInt(Type *Ty, const APInt &V)
844 : ConstantData(Ty, ConstantIntVal), Val(V) {
845 assert(V.getBitWidth() ==
846 cast<IntegerType>(Ty->getScalarType())->getBitWidth() &&
847 "Invalid constant for type");
848 }
849
getTrue(LLVMContext & Context)850 ConstantInt *ConstantInt::getTrue(LLVMContext &Context) {
851 LLVMContextImpl *pImpl = Context.pImpl;
852 if (!pImpl->TheTrueVal)
853 pImpl->TheTrueVal = ConstantInt::get(Type::getInt1Ty(Context), 1);
854 return pImpl->TheTrueVal;
855 }
856
getFalse(LLVMContext & Context)857 ConstantInt *ConstantInt::getFalse(LLVMContext &Context) {
858 LLVMContextImpl *pImpl = Context.pImpl;
859 if (!pImpl->TheFalseVal)
860 pImpl->TheFalseVal = ConstantInt::get(Type::getInt1Ty(Context), 0);
861 return pImpl->TheFalseVal;
862 }
863
getBool(LLVMContext & Context,bool V)864 ConstantInt *ConstantInt::getBool(LLVMContext &Context, bool V) {
865 return V ? getTrue(Context) : getFalse(Context);
866 }
867
getTrue(Type * Ty)868 Constant *ConstantInt::getTrue(Type *Ty) {
869 assert(Ty->isIntOrIntVectorTy(1) && "Type not i1 or vector of i1.");
870 ConstantInt *TrueC = ConstantInt::getTrue(Ty->getContext());
871 if (auto *VTy = dyn_cast<VectorType>(Ty))
872 return ConstantVector::getSplat(VTy->getElementCount(), TrueC);
873 return TrueC;
874 }
875
getFalse(Type * Ty)876 Constant *ConstantInt::getFalse(Type *Ty) {
877 assert(Ty->isIntOrIntVectorTy(1) && "Type not i1 or vector of i1.");
878 ConstantInt *FalseC = ConstantInt::getFalse(Ty->getContext());
879 if (auto *VTy = dyn_cast<VectorType>(Ty))
880 return ConstantVector::getSplat(VTy->getElementCount(), FalseC);
881 return FalseC;
882 }
883
getBool(Type * Ty,bool V)884 Constant *ConstantInt::getBool(Type *Ty, bool V) {
885 return V ? getTrue(Ty) : getFalse(Ty);
886 }
887
888 // Get a ConstantInt from an APInt.
get(LLVMContext & Context,const APInt & V)889 ConstantInt *ConstantInt::get(LLVMContext &Context, const APInt &V) {
890 // get an existing value or the insertion position
891 LLVMContextImpl *pImpl = Context.pImpl;
892 std::unique_ptr<ConstantInt> &Slot =
893 V.isZero() ? pImpl->IntZeroConstants[V.getBitWidth()]
894 : V.isOne() ? pImpl->IntOneConstants[V.getBitWidth()]
895 : pImpl->IntConstants[V];
896 if (!Slot) {
897 // Get the corresponding integer type for the bit width of the value.
898 IntegerType *ITy = IntegerType::get(Context, V.getBitWidth());
899 Slot.reset(new ConstantInt(ITy, V));
900 }
901 assert(Slot->getType() == IntegerType::get(Context, V.getBitWidth()));
902 return Slot.get();
903 }
904
905 // Get a ConstantInt vector with each lane set to the same APInt.
get(LLVMContext & Context,ElementCount EC,const APInt & V)906 ConstantInt *ConstantInt::get(LLVMContext &Context, ElementCount EC,
907 const APInt &V) {
908 // Get an existing value or the insertion position.
909 std::unique_ptr<ConstantInt> &Slot =
910 Context.pImpl->IntSplatConstants[std::make_pair(EC, V)];
911 if (!Slot) {
912 IntegerType *ITy = IntegerType::get(Context, V.getBitWidth());
913 VectorType *VTy = VectorType::get(ITy, EC);
914 Slot.reset(new ConstantInt(VTy, V));
915 }
916
917 #ifndef NDEBUG
918 IntegerType *ITy = IntegerType::get(Context, V.getBitWidth());
919 VectorType *VTy = VectorType::get(ITy, EC);
920 assert(Slot->getType() == VTy);
921 #endif
922 return Slot.get();
923 }
924
get(Type * Ty,uint64_t V,bool isSigned)925 Constant *ConstantInt::get(Type *Ty, uint64_t V, bool isSigned) {
926 Constant *C = get(cast<IntegerType>(Ty->getScalarType()), V, isSigned);
927
928 // For vectors, broadcast the value.
929 if (VectorType *VTy = dyn_cast<VectorType>(Ty))
930 return ConstantVector::getSplat(VTy->getElementCount(), C);
931
932 return C;
933 }
934
get(IntegerType * Ty,uint64_t V,bool isSigned)935 ConstantInt *ConstantInt::get(IntegerType *Ty, uint64_t V, bool isSigned) {
936 return get(Ty->getContext(), APInt(Ty->getBitWidth(), V, isSigned));
937 }
938
get(Type * Ty,const APInt & V)939 Constant *ConstantInt::get(Type *Ty, const APInt& V) {
940 ConstantInt *C = get(Ty->getContext(), V);
941 assert(C->getType() == Ty->getScalarType() &&
942 "ConstantInt type doesn't match the type implied by its value!");
943
944 // For vectors, broadcast the value.
945 if (VectorType *VTy = dyn_cast<VectorType>(Ty))
946 return ConstantVector::getSplat(VTy->getElementCount(), C);
947
948 return C;
949 }
950
get(IntegerType * Ty,StringRef Str,uint8_t radix)951 ConstantInt *ConstantInt::get(IntegerType* Ty, StringRef Str, uint8_t radix) {
952 return get(Ty->getContext(), APInt(Ty->getBitWidth(), Str, radix));
953 }
954
955 /// Remove the constant from the constant table.
destroyConstantImpl()956 void ConstantInt::destroyConstantImpl() {
957 llvm_unreachable("You can't ConstantInt->destroyConstantImpl()!");
958 }
959
960 //===----------------------------------------------------------------------===//
961 // ConstantFP
962 //===----------------------------------------------------------------------===//
963
get(Type * Ty,double V)964 Constant *ConstantFP::get(Type *Ty, double V) {
965 LLVMContext &Context = Ty->getContext();
966
967 APFloat FV(V);
968 bool ignored;
969 FV.convert(Ty->getScalarType()->getFltSemantics(),
970 APFloat::rmNearestTiesToEven, &ignored);
971 Constant *C = get(Context, FV);
972
973 // For vectors, broadcast the value.
974 if (VectorType *VTy = dyn_cast<VectorType>(Ty))
975 return ConstantVector::getSplat(VTy->getElementCount(), C);
976
977 return C;
978 }
979
get(Type * Ty,const APFloat & V)980 Constant *ConstantFP::get(Type *Ty, const APFloat &V) {
981 ConstantFP *C = get(Ty->getContext(), V);
982 assert(C->getType() == Ty->getScalarType() &&
983 "ConstantFP type doesn't match the type implied by its value!");
984
985 // For vectors, broadcast the value.
986 if (auto *VTy = dyn_cast<VectorType>(Ty))
987 return ConstantVector::getSplat(VTy->getElementCount(), C);
988
989 return C;
990 }
991
get(Type * Ty,StringRef Str)992 Constant *ConstantFP::get(Type *Ty, StringRef Str) {
993 LLVMContext &Context = Ty->getContext();
994
995 APFloat FV(Ty->getScalarType()->getFltSemantics(), Str);
996 Constant *C = get(Context, FV);
997
998 // For vectors, broadcast the value.
999 if (VectorType *VTy = dyn_cast<VectorType>(Ty))
1000 return ConstantVector::getSplat(VTy->getElementCount(), C);
1001
1002 return C;
1003 }
1004
getNaN(Type * Ty,bool Negative,uint64_t Payload)1005 Constant *ConstantFP::getNaN(Type *Ty, bool Negative, uint64_t Payload) {
1006 const fltSemantics &Semantics = Ty->getScalarType()->getFltSemantics();
1007 APFloat NaN = APFloat::getNaN(Semantics, Negative, Payload);
1008 Constant *C = get(Ty->getContext(), NaN);
1009
1010 if (VectorType *VTy = dyn_cast<VectorType>(Ty))
1011 return ConstantVector::getSplat(VTy->getElementCount(), C);
1012
1013 return C;
1014 }
1015
getQNaN(Type * Ty,bool Negative,APInt * Payload)1016 Constant *ConstantFP::getQNaN(Type *Ty, bool Negative, APInt *Payload) {
1017 const fltSemantics &Semantics = Ty->getScalarType()->getFltSemantics();
1018 APFloat NaN = APFloat::getQNaN(Semantics, Negative, Payload);
1019 Constant *C = get(Ty->getContext(), NaN);
1020
1021 if (VectorType *VTy = dyn_cast<VectorType>(Ty))
1022 return ConstantVector::getSplat(VTy->getElementCount(), C);
1023
1024 return C;
1025 }
1026
getSNaN(Type * Ty,bool Negative,APInt * Payload)1027 Constant *ConstantFP::getSNaN(Type *Ty, bool Negative, APInt *Payload) {
1028 const fltSemantics &Semantics = Ty->getScalarType()->getFltSemantics();
1029 APFloat NaN = APFloat::getSNaN(Semantics, Negative, Payload);
1030 Constant *C = get(Ty->getContext(), NaN);
1031
1032 if (VectorType *VTy = dyn_cast<VectorType>(Ty))
1033 return ConstantVector::getSplat(VTy->getElementCount(), C);
1034
1035 return C;
1036 }
1037
getZero(Type * Ty,bool Negative)1038 Constant *ConstantFP::getZero(Type *Ty, bool Negative) {
1039 const fltSemantics &Semantics = Ty->getScalarType()->getFltSemantics();
1040 APFloat NegZero = APFloat::getZero(Semantics, Negative);
1041 Constant *C = get(Ty->getContext(), NegZero);
1042
1043 if (VectorType *VTy = dyn_cast<VectorType>(Ty))
1044 return ConstantVector::getSplat(VTy->getElementCount(), C);
1045
1046 return C;
1047 }
1048
1049
1050 // ConstantFP accessors.
get(LLVMContext & Context,const APFloat & V)1051 ConstantFP* ConstantFP::get(LLVMContext &Context, const APFloat& V) {
1052 LLVMContextImpl* pImpl = Context.pImpl;
1053
1054 std::unique_ptr<ConstantFP> &Slot = pImpl->FPConstants[V];
1055
1056 if (!Slot) {
1057 Type *Ty = Type::getFloatingPointTy(Context, V.getSemantics());
1058 Slot.reset(new ConstantFP(Ty, V));
1059 }
1060
1061 return Slot.get();
1062 }
1063
1064 // Get a ConstantFP vector with each lane set to the same APFloat.
get(LLVMContext & Context,ElementCount EC,const APFloat & V)1065 ConstantFP *ConstantFP::get(LLVMContext &Context, ElementCount EC,
1066 const APFloat &V) {
1067 // Get an existing value or the insertion position.
1068 std::unique_ptr<ConstantFP> &Slot =
1069 Context.pImpl->FPSplatConstants[std::make_pair(EC, V)];
1070 if (!Slot) {
1071 Type *EltTy = Type::getFloatingPointTy(Context, V.getSemantics());
1072 VectorType *VTy = VectorType::get(EltTy, EC);
1073 Slot.reset(new ConstantFP(VTy, V));
1074 }
1075
1076 #ifndef NDEBUG
1077 Type *EltTy = Type::getFloatingPointTy(Context, V.getSemantics());
1078 VectorType *VTy = VectorType::get(EltTy, EC);
1079 assert(Slot->getType() == VTy);
1080 #endif
1081 return Slot.get();
1082 }
1083
getInfinity(Type * Ty,bool Negative)1084 Constant *ConstantFP::getInfinity(Type *Ty, bool Negative) {
1085 const fltSemantics &Semantics = Ty->getScalarType()->getFltSemantics();
1086 Constant *C = get(Ty->getContext(), APFloat::getInf(Semantics, Negative));
1087
1088 if (VectorType *VTy = dyn_cast<VectorType>(Ty))
1089 return ConstantVector::getSplat(VTy->getElementCount(), C);
1090
1091 return C;
1092 }
1093
ConstantFP(Type * Ty,const APFloat & V)1094 ConstantFP::ConstantFP(Type *Ty, const APFloat &V)
1095 : ConstantData(Ty, ConstantFPVal), Val(V) {
1096 assert(&V.getSemantics() == &Ty->getScalarType()->getFltSemantics() &&
1097 "FP type Mismatch");
1098 }
1099
isExactlyValue(const APFloat & V) const1100 bool ConstantFP::isExactlyValue(const APFloat &V) const {
1101 return Val.bitwiseIsEqual(V);
1102 }
1103
1104 /// Remove the constant from the constant table.
destroyConstantImpl()1105 void ConstantFP::destroyConstantImpl() {
1106 llvm_unreachable("You can't ConstantFP->destroyConstantImpl()!");
1107 }
1108
1109 //===----------------------------------------------------------------------===//
1110 // ConstantAggregateZero Implementation
1111 //===----------------------------------------------------------------------===//
1112
getSequentialElement() const1113 Constant *ConstantAggregateZero::getSequentialElement() const {
1114 if (auto *AT = dyn_cast<ArrayType>(getType()))
1115 return Constant::getNullValue(AT->getElementType());
1116 return Constant::getNullValue(cast<VectorType>(getType())->getElementType());
1117 }
1118
getStructElement(unsigned Elt) const1119 Constant *ConstantAggregateZero::getStructElement(unsigned Elt) const {
1120 return Constant::getNullValue(getType()->getStructElementType(Elt));
1121 }
1122
getElementValue(Constant * C) const1123 Constant *ConstantAggregateZero::getElementValue(Constant *C) const {
1124 if (isa<ArrayType>(getType()) || isa<VectorType>(getType()))
1125 return getSequentialElement();
1126 return getStructElement(cast<ConstantInt>(C)->getZExtValue());
1127 }
1128
getElementValue(unsigned Idx) const1129 Constant *ConstantAggregateZero::getElementValue(unsigned Idx) const {
1130 if (isa<ArrayType>(getType()) || isa<VectorType>(getType()))
1131 return getSequentialElement();
1132 return getStructElement(Idx);
1133 }
1134
getElementCount() const1135 ElementCount ConstantAggregateZero::getElementCount() const {
1136 Type *Ty = getType();
1137 if (auto *AT = dyn_cast<ArrayType>(Ty))
1138 return ElementCount::getFixed(AT->getNumElements());
1139 if (auto *VT = dyn_cast<VectorType>(Ty))
1140 return VT->getElementCount();
1141 return ElementCount::getFixed(Ty->getStructNumElements());
1142 }
1143
1144 //===----------------------------------------------------------------------===//
1145 // UndefValue Implementation
1146 //===----------------------------------------------------------------------===//
1147
getSequentialElement() const1148 UndefValue *UndefValue::getSequentialElement() const {
1149 if (ArrayType *ATy = dyn_cast<ArrayType>(getType()))
1150 return UndefValue::get(ATy->getElementType());
1151 return UndefValue::get(cast<VectorType>(getType())->getElementType());
1152 }
1153
getStructElement(unsigned Elt) const1154 UndefValue *UndefValue::getStructElement(unsigned Elt) const {
1155 return UndefValue::get(getType()->getStructElementType(Elt));
1156 }
1157
getElementValue(Constant * C) const1158 UndefValue *UndefValue::getElementValue(Constant *C) const {
1159 if (isa<ArrayType>(getType()) || isa<VectorType>(getType()))
1160 return getSequentialElement();
1161 return getStructElement(cast<ConstantInt>(C)->getZExtValue());
1162 }
1163
getElementValue(unsigned Idx) const1164 UndefValue *UndefValue::getElementValue(unsigned Idx) const {
1165 if (isa<ArrayType>(getType()) || isa<VectorType>(getType()))
1166 return getSequentialElement();
1167 return getStructElement(Idx);
1168 }
1169
getNumElements() const1170 unsigned UndefValue::getNumElements() const {
1171 Type *Ty = getType();
1172 if (auto *AT = dyn_cast<ArrayType>(Ty))
1173 return AT->getNumElements();
1174 if (auto *VT = dyn_cast<VectorType>(Ty))
1175 return cast<FixedVectorType>(VT)->getNumElements();
1176 return Ty->getStructNumElements();
1177 }
1178
1179 //===----------------------------------------------------------------------===//
1180 // PoisonValue Implementation
1181 //===----------------------------------------------------------------------===//
1182
getSequentialElement() const1183 PoisonValue *PoisonValue::getSequentialElement() const {
1184 if (ArrayType *ATy = dyn_cast<ArrayType>(getType()))
1185 return PoisonValue::get(ATy->getElementType());
1186 return PoisonValue::get(cast<VectorType>(getType())->getElementType());
1187 }
1188
getStructElement(unsigned Elt) const1189 PoisonValue *PoisonValue::getStructElement(unsigned Elt) const {
1190 return PoisonValue::get(getType()->getStructElementType(Elt));
1191 }
1192
getElementValue(Constant * C) const1193 PoisonValue *PoisonValue::getElementValue(Constant *C) const {
1194 if (isa<ArrayType>(getType()) || isa<VectorType>(getType()))
1195 return getSequentialElement();
1196 return getStructElement(cast<ConstantInt>(C)->getZExtValue());
1197 }
1198
getElementValue(unsigned Idx) const1199 PoisonValue *PoisonValue::getElementValue(unsigned Idx) const {
1200 if (isa<ArrayType>(getType()) || isa<VectorType>(getType()))
1201 return getSequentialElement();
1202 return getStructElement(Idx);
1203 }
1204
1205 //===----------------------------------------------------------------------===//
1206 // ConstantXXX Classes
1207 //===----------------------------------------------------------------------===//
1208
1209 template <typename ItTy, typename EltTy>
rangeOnlyContains(ItTy Start,ItTy End,EltTy Elt)1210 static bool rangeOnlyContains(ItTy Start, ItTy End, EltTy Elt) {
1211 for (; Start != End; ++Start)
1212 if (*Start != Elt)
1213 return false;
1214 return true;
1215 }
1216
1217 template <typename SequentialTy, typename ElementTy>
getIntSequenceIfElementsMatch(ArrayRef<Constant * > V)1218 static Constant *getIntSequenceIfElementsMatch(ArrayRef<Constant *> V) {
1219 assert(!V.empty() && "Cannot get empty int sequence.");
1220
1221 SmallVector<ElementTy, 16> Elts;
1222 for (Constant *C : V)
1223 if (auto *CI = dyn_cast<ConstantInt>(C))
1224 Elts.push_back(CI->getZExtValue());
1225 else
1226 return nullptr;
1227 return SequentialTy::get(V[0]->getContext(), Elts);
1228 }
1229
1230 template <typename SequentialTy, typename ElementTy>
getFPSequenceIfElementsMatch(ArrayRef<Constant * > V)1231 static Constant *getFPSequenceIfElementsMatch(ArrayRef<Constant *> V) {
1232 assert(!V.empty() && "Cannot get empty FP sequence.");
1233
1234 SmallVector<ElementTy, 16> Elts;
1235 for (Constant *C : V)
1236 if (auto *CFP = dyn_cast<ConstantFP>(C))
1237 Elts.push_back(CFP->getValueAPF().bitcastToAPInt().getLimitedValue());
1238 else
1239 return nullptr;
1240 return SequentialTy::getFP(V[0]->getType(), Elts);
1241 }
1242
1243 template <typename SequenceTy>
getSequenceIfElementsMatch(Constant * C,ArrayRef<Constant * > V)1244 static Constant *getSequenceIfElementsMatch(Constant *C,
1245 ArrayRef<Constant *> V) {
1246 // We speculatively build the elements here even if it turns out that there is
1247 // a constantexpr or something else weird, since it is so uncommon for that to
1248 // happen.
1249 if (ConstantInt *CI = dyn_cast<ConstantInt>(C)) {
1250 if (CI->getType()->isIntegerTy(8))
1251 return getIntSequenceIfElementsMatch<SequenceTy, uint8_t>(V);
1252 else if (CI->getType()->isIntegerTy(16))
1253 return getIntSequenceIfElementsMatch<SequenceTy, uint16_t>(V);
1254 else if (CI->getType()->isIntegerTy(32))
1255 return getIntSequenceIfElementsMatch<SequenceTy, uint32_t>(V);
1256 else if (CI->getType()->isIntegerTy(64))
1257 return getIntSequenceIfElementsMatch<SequenceTy, uint64_t>(V);
1258 } else if (ConstantFP *CFP = dyn_cast<ConstantFP>(C)) {
1259 if (CFP->getType()->isHalfTy() || CFP->getType()->isBFloatTy())
1260 return getFPSequenceIfElementsMatch<SequenceTy, uint16_t>(V);
1261 else if (CFP->getType()->isFloatTy())
1262 return getFPSequenceIfElementsMatch<SequenceTy, uint32_t>(V);
1263 else if (CFP->getType()->isDoubleTy())
1264 return getFPSequenceIfElementsMatch<SequenceTy, uint64_t>(V);
1265 }
1266
1267 return nullptr;
1268 }
1269
ConstantAggregate(Type * T,ValueTy VT,ArrayRef<Constant * > V)1270 ConstantAggregate::ConstantAggregate(Type *T, ValueTy VT,
1271 ArrayRef<Constant *> V)
1272 : Constant(T, VT, OperandTraits<ConstantAggregate>::op_end(this) - V.size(),
1273 V.size()) {
1274 llvm::copy(V, op_begin());
1275
1276 // Check that types match, unless this is an opaque struct.
1277 if (auto *ST = dyn_cast<StructType>(T)) {
1278 if (ST->isOpaque())
1279 return;
1280 for (unsigned I = 0, E = V.size(); I != E; ++I)
1281 assert(V[I]->getType() == ST->getTypeAtIndex(I) &&
1282 "Initializer for struct element doesn't match!");
1283 }
1284 }
1285
ConstantArray(ArrayType * T,ArrayRef<Constant * > V)1286 ConstantArray::ConstantArray(ArrayType *T, ArrayRef<Constant *> V)
1287 : ConstantAggregate(T, ConstantArrayVal, V) {
1288 assert(V.size() == T->getNumElements() &&
1289 "Invalid initializer for constant array");
1290 }
1291
get(ArrayType * Ty,ArrayRef<Constant * > V)1292 Constant *ConstantArray::get(ArrayType *Ty, ArrayRef<Constant*> V) {
1293 if (Constant *C = getImpl(Ty, V))
1294 return C;
1295 return Ty->getContext().pImpl->ArrayConstants.getOrCreate(Ty, V);
1296 }
1297
getImpl(ArrayType * Ty,ArrayRef<Constant * > V)1298 Constant *ConstantArray::getImpl(ArrayType *Ty, ArrayRef<Constant*> V) {
1299 // Empty arrays are canonicalized to ConstantAggregateZero.
1300 if (V.empty())
1301 return ConstantAggregateZero::get(Ty);
1302
1303 for (Constant *C : V) {
1304 assert(C->getType() == Ty->getElementType() &&
1305 "Wrong type in array element initializer");
1306 (void)C;
1307 }
1308
1309 // If this is an all-zero array, return a ConstantAggregateZero object. If
1310 // all undef, return an UndefValue, if "all simple", then return a
1311 // ConstantDataArray.
1312 Constant *C = V[0];
1313 if (isa<PoisonValue>(C) && rangeOnlyContains(V.begin(), V.end(), C))
1314 return PoisonValue::get(Ty);
1315
1316 if (isa<UndefValue>(C) && rangeOnlyContains(V.begin(), V.end(), C))
1317 return UndefValue::get(Ty);
1318
1319 if (C->isNullValue() && rangeOnlyContains(V.begin(), V.end(), C))
1320 return ConstantAggregateZero::get(Ty);
1321
1322 // Check to see if all of the elements are ConstantFP or ConstantInt and if
1323 // the element type is compatible with ConstantDataVector. If so, use it.
1324 if (ConstantDataSequential::isElementTypeCompatible(C->getType()))
1325 return getSequenceIfElementsMatch<ConstantDataArray>(C, V);
1326
1327 // Otherwise, we really do want to create a ConstantArray.
1328 return nullptr;
1329 }
1330
getTypeForElements(LLVMContext & Context,ArrayRef<Constant * > V,bool Packed)1331 StructType *ConstantStruct::getTypeForElements(LLVMContext &Context,
1332 ArrayRef<Constant*> V,
1333 bool Packed) {
1334 unsigned VecSize = V.size();
1335 SmallVector<Type*, 16> EltTypes(VecSize);
1336 for (unsigned i = 0; i != VecSize; ++i)
1337 EltTypes[i] = V[i]->getType();
1338
1339 return StructType::get(Context, EltTypes, Packed);
1340 }
1341
1342
getTypeForElements(ArrayRef<Constant * > V,bool Packed)1343 StructType *ConstantStruct::getTypeForElements(ArrayRef<Constant*> V,
1344 bool Packed) {
1345 assert(!V.empty() &&
1346 "ConstantStruct::getTypeForElements cannot be called on empty list");
1347 return getTypeForElements(V[0]->getContext(), V, Packed);
1348 }
1349
ConstantStruct(StructType * T,ArrayRef<Constant * > V)1350 ConstantStruct::ConstantStruct(StructType *T, ArrayRef<Constant *> V)
1351 : ConstantAggregate(T, ConstantStructVal, V) {
1352 assert((T->isOpaque() || V.size() == T->getNumElements()) &&
1353 "Invalid initializer for constant struct");
1354 }
1355
1356 // ConstantStruct accessors.
get(StructType * ST,ArrayRef<Constant * > V)1357 Constant *ConstantStruct::get(StructType *ST, ArrayRef<Constant*> V) {
1358 assert((ST->isOpaque() || ST->getNumElements() == V.size()) &&
1359 "Incorrect # elements specified to ConstantStruct::get");
1360
1361 // Create a ConstantAggregateZero value if all elements are zeros.
1362 bool isZero = true;
1363 bool isUndef = false;
1364 bool isPoison = false;
1365
1366 if (!V.empty()) {
1367 isUndef = isa<UndefValue>(V[0]);
1368 isPoison = isa<PoisonValue>(V[0]);
1369 isZero = V[0]->isNullValue();
1370 // PoisonValue inherits UndefValue, so its check is not necessary.
1371 if (isUndef || isZero) {
1372 for (Constant *C : V) {
1373 if (!C->isNullValue())
1374 isZero = false;
1375 if (!isa<PoisonValue>(C))
1376 isPoison = false;
1377 if (isa<PoisonValue>(C) || !isa<UndefValue>(C))
1378 isUndef = false;
1379 }
1380 }
1381 }
1382 if (isZero)
1383 return ConstantAggregateZero::get(ST);
1384 if (isPoison)
1385 return PoisonValue::get(ST);
1386 if (isUndef)
1387 return UndefValue::get(ST);
1388
1389 return ST->getContext().pImpl->StructConstants.getOrCreate(ST, V);
1390 }
1391
ConstantVector(VectorType * T,ArrayRef<Constant * > V)1392 ConstantVector::ConstantVector(VectorType *T, ArrayRef<Constant *> V)
1393 : ConstantAggregate(T, ConstantVectorVal, V) {
1394 assert(V.size() == cast<FixedVectorType>(T)->getNumElements() &&
1395 "Invalid initializer for constant vector");
1396 }
1397
1398 // ConstantVector accessors.
get(ArrayRef<Constant * > V)1399 Constant *ConstantVector::get(ArrayRef<Constant*> V) {
1400 if (Constant *C = getImpl(V))
1401 return C;
1402 auto *Ty = FixedVectorType::get(V.front()->getType(), V.size());
1403 return Ty->getContext().pImpl->VectorConstants.getOrCreate(Ty, V);
1404 }
1405
getImpl(ArrayRef<Constant * > V)1406 Constant *ConstantVector::getImpl(ArrayRef<Constant*> V) {
1407 assert(!V.empty() && "Vectors can't be empty");
1408 auto *T = FixedVectorType::get(V.front()->getType(), V.size());
1409
1410 // If this is an all-undef or all-zero vector, return a
1411 // ConstantAggregateZero or UndefValue.
1412 Constant *C = V[0];
1413 bool isZero = C->isNullValue();
1414 bool isUndef = isa<UndefValue>(C);
1415 bool isPoison = isa<PoisonValue>(C);
1416 bool isSplatFP = UseConstantFPForFixedLengthSplat && isa<ConstantFP>(C);
1417 bool isSplatInt = UseConstantIntForFixedLengthSplat && isa<ConstantInt>(C);
1418
1419 if (isZero || isUndef || isSplatFP || isSplatInt) {
1420 for (unsigned i = 1, e = V.size(); i != e; ++i)
1421 if (V[i] != C) {
1422 isZero = isUndef = isPoison = isSplatFP = isSplatInt = false;
1423 break;
1424 }
1425 }
1426
1427 if (isZero)
1428 return ConstantAggregateZero::get(T);
1429 if (isPoison)
1430 return PoisonValue::get(T);
1431 if (isUndef)
1432 return UndefValue::get(T);
1433 if (isSplatFP)
1434 return ConstantFP::get(C->getContext(), T->getElementCount(),
1435 cast<ConstantFP>(C)->getValue());
1436 if (isSplatInt)
1437 return ConstantInt::get(C->getContext(), T->getElementCount(),
1438 cast<ConstantInt>(C)->getValue());
1439
1440 // Check to see if all of the elements are ConstantFP or ConstantInt and if
1441 // the element type is compatible with ConstantDataVector. If so, use it.
1442 if (ConstantDataSequential::isElementTypeCompatible(C->getType()))
1443 return getSequenceIfElementsMatch<ConstantDataVector>(C, V);
1444
1445 // Otherwise, the element type isn't compatible with ConstantDataVector, or
1446 // the operand list contains a ConstantExpr or something else strange.
1447 return nullptr;
1448 }
1449
getSplat(ElementCount EC,Constant * V)1450 Constant *ConstantVector::getSplat(ElementCount EC, Constant *V) {
1451 if (!EC.isScalable()) {
1452 // Maintain special handling of zero.
1453 if (!V->isNullValue()) {
1454 if (UseConstantIntForFixedLengthSplat && isa<ConstantInt>(V))
1455 return ConstantInt::get(V->getContext(), EC,
1456 cast<ConstantInt>(V)->getValue());
1457 if (UseConstantFPForFixedLengthSplat && isa<ConstantFP>(V))
1458 return ConstantFP::get(V->getContext(), EC,
1459 cast<ConstantFP>(V)->getValue());
1460 }
1461
1462 // If this splat is compatible with ConstantDataVector, use it instead of
1463 // ConstantVector.
1464 if ((isa<ConstantFP>(V) || isa<ConstantInt>(V)) &&
1465 ConstantDataSequential::isElementTypeCompatible(V->getType()))
1466 return ConstantDataVector::getSplat(EC.getKnownMinValue(), V);
1467
1468 SmallVector<Constant *, 32> Elts(EC.getKnownMinValue(), V);
1469 return get(Elts);
1470 }
1471
1472 // Maintain special handling of zero.
1473 if (!V->isNullValue()) {
1474 if (UseConstantIntForScalableSplat && isa<ConstantInt>(V))
1475 return ConstantInt::get(V->getContext(), EC,
1476 cast<ConstantInt>(V)->getValue());
1477 if (UseConstantFPForScalableSplat && isa<ConstantFP>(V))
1478 return ConstantFP::get(V->getContext(), EC,
1479 cast<ConstantFP>(V)->getValue());
1480 }
1481
1482 Type *VTy = VectorType::get(V->getType(), EC);
1483
1484 if (V->isNullValue())
1485 return ConstantAggregateZero::get(VTy);
1486 else if (isa<UndefValue>(V))
1487 return UndefValue::get(VTy);
1488
1489 Type *IdxTy = Type::getInt64Ty(VTy->getContext());
1490
1491 // Move scalar into vector.
1492 Constant *PoisonV = PoisonValue::get(VTy);
1493 V = ConstantExpr::getInsertElement(PoisonV, V, ConstantInt::get(IdxTy, 0));
1494 // Build shuffle mask to perform the splat.
1495 SmallVector<int, 8> Zeros(EC.getKnownMinValue(), 0);
1496 // Splat.
1497 return ConstantExpr::getShuffleVector(V, PoisonV, Zeros);
1498 }
1499
get(LLVMContext & Context)1500 ConstantTokenNone *ConstantTokenNone::get(LLVMContext &Context) {
1501 LLVMContextImpl *pImpl = Context.pImpl;
1502 if (!pImpl->TheNoneToken)
1503 pImpl->TheNoneToken.reset(new ConstantTokenNone(Context));
1504 return pImpl->TheNoneToken.get();
1505 }
1506
1507 /// Remove the constant from the constant table.
destroyConstantImpl()1508 void ConstantTokenNone::destroyConstantImpl() {
1509 llvm_unreachable("You can't ConstantTokenNone->destroyConstantImpl()!");
1510 }
1511
1512 // Utility function for determining if a ConstantExpr is a CastOp or not. This
1513 // can't be inline because we don't want to #include Instruction.h into
1514 // Constant.h
isCast() const1515 bool ConstantExpr::isCast() const { return Instruction::isCast(getOpcode()); }
1516
getShuffleMask() const1517 ArrayRef<int> ConstantExpr::getShuffleMask() const {
1518 return cast<ShuffleVectorConstantExpr>(this)->ShuffleMask;
1519 }
1520
getShuffleMaskForBitcode() const1521 Constant *ConstantExpr::getShuffleMaskForBitcode() const {
1522 return cast<ShuffleVectorConstantExpr>(this)->ShuffleMaskForBitcode;
1523 }
1524
getWithOperands(ArrayRef<Constant * > Ops,Type * Ty,bool OnlyIfReduced,Type * SrcTy) const1525 Constant *ConstantExpr::getWithOperands(ArrayRef<Constant *> Ops, Type *Ty,
1526 bool OnlyIfReduced, Type *SrcTy) const {
1527 assert(Ops.size() == getNumOperands() && "Operand count mismatch!");
1528
1529 // If no operands changed return self.
1530 if (Ty == getType() && std::equal(Ops.begin(), Ops.end(), op_begin()))
1531 return const_cast<ConstantExpr*>(this);
1532
1533 Type *OnlyIfReducedTy = OnlyIfReduced ? Ty : nullptr;
1534 switch (getOpcode()) {
1535 case Instruction::Trunc:
1536 case Instruction::ZExt:
1537 case Instruction::SExt:
1538 case Instruction::FPTrunc:
1539 case Instruction::FPExt:
1540 case Instruction::UIToFP:
1541 case Instruction::SIToFP:
1542 case Instruction::FPToUI:
1543 case Instruction::FPToSI:
1544 case Instruction::PtrToInt:
1545 case Instruction::IntToPtr:
1546 case Instruction::BitCast:
1547 case Instruction::AddrSpaceCast:
1548 return ConstantExpr::getCast(getOpcode(), Ops[0], Ty, OnlyIfReduced);
1549 case Instruction::InsertElement:
1550 return ConstantExpr::getInsertElement(Ops[0], Ops[1], Ops[2],
1551 OnlyIfReducedTy);
1552 case Instruction::ExtractElement:
1553 return ConstantExpr::getExtractElement(Ops[0], Ops[1], OnlyIfReducedTy);
1554 case Instruction::ShuffleVector:
1555 return ConstantExpr::getShuffleVector(Ops[0], Ops[1], getShuffleMask(),
1556 OnlyIfReducedTy);
1557 case Instruction::GetElementPtr: {
1558 auto *GEPO = cast<GEPOperator>(this);
1559 assert(SrcTy || (Ops[0]->getType() == getOperand(0)->getType()));
1560 return ConstantExpr::getGetElementPtr(
1561 SrcTy ? SrcTy : GEPO->getSourceElementType(), Ops[0], Ops.slice(1),
1562 GEPO->getNoWrapFlags(), GEPO->getInRange(), OnlyIfReducedTy);
1563 }
1564 default:
1565 assert(getNumOperands() == 2 && "Must be binary operator?");
1566 return ConstantExpr::get(getOpcode(), Ops[0], Ops[1], SubclassOptionalData,
1567 OnlyIfReducedTy);
1568 }
1569 }
1570
1571
1572 //===----------------------------------------------------------------------===//
1573 // isValueValidForType implementations
1574
isValueValidForType(Type * Ty,uint64_t Val)1575 bool ConstantInt::isValueValidForType(Type *Ty, uint64_t Val) {
1576 unsigned NumBits = Ty->getIntegerBitWidth(); // assert okay
1577 if (Ty->isIntegerTy(1))
1578 return Val == 0 || Val == 1;
1579 return isUIntN(NumBits, Val);
1580 }
1581
isValueValidForType(Type * Ty,int64_t Val)1582 bool ConstantInt::isValueValidForType(Type *Ty, int64_t Val) {
1583 unsigned NumBits = Ty->getIntegerBitWidth();
1584 if (Ty->isIntegerTy(1))
1585 return Val == 0 || Val == 1 || Val == -1;
1586 return isIntN(NumBits, Val);
1587 }
1588
isValueValidForType(Type * Ty,const APFloat & Val)1589 bool ConstantFP::isValueValidForType(Type *Ty, const APFloat& Val) {
1590 // convert modifies in place, so make a copy.
1591 APFloat Val2 = APFloat(Val);
1592 bool losesInfo;
1593 switch (Ty->getTypeID()) {
1594 default:
1595 return false; // These can't be represented as floating point!
1596
1597 // FIXME rounding mode needs to be more flexible
1598 case Type::HalfTyID: {
1599 if (&Val2.getSemantics() == &APFloat::IEEEhalf())
1600 return true;
1601 Val2.convert(APFloat::IEEEhalf(), APFloat::rmNearestTiesToEven, &losesInfo);
1602 return !losesInfo;
1603 }
1604 case Type::BFloatTyID: {
1605 if (&Val2.getSemantics() == &APFloat::BFloat())
1606 return true;
1607 Val2.convert(APFloat::BFloat(), APFloat::rmNearestTiesToEven, &losesInfo);
1608 return !losesInfo;
1609 }
1610 case Type::FloatTyID: {
1611 if (&Val2.getSemantics() == &APFloat::IEEEsingle())
1612 return true;
1613 Val2.convert(APFloat::IEEEsingle(), APFloat::rmNearestTiesToEven, &losesInfo);
1614 return !losesInfo;
1615 }
1616 case Type::DoubleTyID: {
1617 if (&Val2.getSemantics() == &APFloat::IEEEhalf() ||
1618 &Val2.getSemantics() == &APFloat::BFloat() ||
1619 &Val2.getSemantics() == &APFloat::IEEEsingle() ||
1620 &Val2.getSemantics() == &APFloat::IEEEdouble())
1621 return true;
1622 Val2.convert(APFloat::IEEEdouble(), APFloat::rmNearestTiesToEven, &losesInfo);
1623 return !losesInfo;
1624 }
1625 case Type::X86_FP80TyID:
1626 return &Val2.getSemantics() == &APFloat::IEEEhalf() ||
1627 &Val2.getSemantics() == &APFloat::BFloat() ||
1628 &Val2.getSemantics() == &APFloat::IEEEsingle() ||
1629 &Val2.getSemantics() == &APFloat::IEEEdouble() ||
1630 &Val2.getSemantics() == &APFloat::x87DoubleExtended();
1631 case Type::FP128TyID:
1632 return &Val2.getSemantics() == &APFloat::IEEEhalf() ||
1633 &Val2.getSemantics() == &APFloat::BFloat() ||
1634 &Val2.getSemantics() == &APFloat::IEEEsingle() ||
1635 &Val2.getSemantics() == &APFloat::IEEEdouble() ||
1636 &Val2.getSemantics() == &APFloat::IEEEquad();
1637 case Type::PPC_FP128TyID:
1638 return &Val2.getSemantics() == &APFloat::IEEEhalf() ||
1639 &Val2.getSemantics() == &APFloat::BFloat() ||
1640 &Val2.getSemantics() == &APFloat::IEEEsingle() ||
1641 &Val2.getSemantics() == &APFloat::IEEEdouble() ||
1642 &Val2.getSemantics() == &APFloat::PPCDoubleDouble();
1643 }
1644 }
1645
1646
1647 //===----------------------------------------------------------------------===//
1648 // Factory Function Implementation
1649
get(Type * Ty)1650 ConstantAggregateZero *ConstantAggregateZero::get(Type *Ty) {
1651 assert((Ty->isStructTy() || Ty->isArrayTy() || Ty->isVectorTy()) &&
1652 "Cannot create an aggregate zero of non-aggregate type!");
1653
1654 std::unique_ptr<ConstantAggregateZero> &Entry =
1655 Ty->getContext().pImpl->CAZConstants[Ty];
1656 if (!Entry)
1657 Entry.reset(new ConstantAggregateZero(Ty));
1658
1659 return Entry.get();
1660 }
1661
1662 /// Remove the constant from the constant table.
destroyConstantImpl()1663 void ConstantAggregateZero::destroyConstantImpl() {
1664 getContext().pImpl->CAZConstants.erase(getType());
1665 }
1666
1667 /// Remove the constant from the constant table.
destroyConstantImpl()1668 void ConstantArray::destroyConstantImpl() {
1669 getType()->getContext().pImpl->ArrayConstants.remove(this);
1670 }
1671
1672
1673 //---- ConstantStruct::get() implementation...
1674 //
1675
1676 /// Remove the constant from the constant table.
destroyConstantImpl()1677 void ConstantStruct::destroyConstantImpl() {
1678 getType()->getContext().pImpl->StructConstants.remove(this);
1679 }
1680
1681 /// Remove the constant from the constant table.
destroyConstantImpl()1682 void ConstantVector::destroyConstantImpl() {
1683 getType()->getContext().pImpl->VectorConstants.remove(this);
1684 }
1685
getSplatValue(bool AllowPoison) const1686 Constant *Constant::getSplatValue(bool AllowPoison) const {
1687 assert(this->getType()->isVectorTy() && "Only valid for vectors!");
1688 if (isa<ConstantAggregateZero>(this))
1689 return getNullValue(cast<VectorType>(getType())->getElementType());
1690 if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(this))
1691 return CV->getSplatValue();
1692 if (const ConstantVector *CV = dyn_cast<ConstantVector>(this))
1693 return CV->getSplatValue(AllowPoison);
1694
1695 // Check if this is a constant expression splat of the form returned by
1696 // ConstantVector::getSplat()
1697 const auto *Shuf = dyn_cast<ConstantExpr>(this);
1698 if (Shuf && Shuf->getOpcode() == Instruction::ShuffleVector &&
1699 isa<UndefValue>(Shuf->getOperand(1))) {
1700
1701 const auto *IElt = dyn_cast<ConstantExpr>(Shuf->getOperand(0));
1702 if (IElt && IElt->getOpcode() == Instruction::InsertElement &&
1703 isa<UndefValue>(IElt->getOperand(0))) {
1704
1705 ArrayRef<int> Mask = Shuf->getShuffleMask();
1706 Constant *SplatVal = IElt->getOperand(1);
1707 ConstantInt *Index = dyn_cast<ConstantInt>(IElt->getOperand(2));
1708
1709 if (Index && Index->getValue() == 0 &&
1710 llvm::all_of(Mask, [](int I) { return I == 0; }))
1711 return SplatVal;
1712 }
1713 }
1714
1715 return nullptr;
1716 }
1717
getSplatValue(bool AllowPoison) const1718 Constant *ConstantVector::getSplatValue(bool AllowPoison) const {
1719 // Check out first element.
1720 Constant *Elt = getOperand(0);
1721 // Then make sure all remaining elements point to the same value.
1722 for (unsigned I = 1, E = getNumOperands(); I < E; ++I) {
1723 Constant *OpC = getOperand(I);
1724 if (OpC == Elt)
1725 continue;
1726
1727 // Strict mode: any mismatch is not a splat.
1728 if (!AllowPoison)
1729 return nullptr;
1730
1731 // Allow poison mode: ignore poison elements.
1732 if (isa<PoisonValue>(OpC))
1733 continue;
1734
1735 // If we do not have a defined element yet, use the current operand.
1736 if (isa<PoisonValue>(Elt))
1737 Elt = OpC;
1738
1739 if (OpC != Elt)
1740 return nullptr;
1741 }
1742 return Elt;
1743 }
1744
getUniqueInteger() const1745 const APInt &Constant::getUniqueInteger() const {
1746 if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
1747 return CI->getValue();
1748 // Scalable vectors can use a ConstantExpr to build a splat.
1749 if (isa<ConstantExpr>(this))
1750 return cast<ConstantInt>(this->getSplatValue())->getValue();
1751 // For non-ConstantExpr we use getAggregateElement as a fast path to avoid
1752 // calling getSplatValue in release builds.
1753 assert(this->getSplatValue() && "Doesn't contain a unique integer!");
1754 const Constant *C = this->getAggregateElement(0U);
1755 assert(C && isa<ConstantInt>(C) && "Not a vector of numbers!");
1756 return cast<ConstantInt>(C)->getValue();
1757 }
1758
toConstantRange() const1759 ConstantRange Constant::toConstantRange() const {
1760 if (auto *CI = dyn_cast<ConstantInt>(this))
1761 return ConstantRange(CI->getValue());
1762
1763 unsigned BitWidth = getType()->getScalarSizeInBits();
1764 if (!getType()->isVectorTy())
1765 return ConstantRange::getFull(BitWidth);
1766
1767 if (auto *CI = dyn_cast_or_null<ConstantInt>(
1768 getSplatValue(/*AllowPoison=*/true)))
1769 return ConstantRange(CI->getValue());
1770
1771 if (auto *CDV = dyn_cast<ConstantDataVector>(this)) {
1772 ConstantRange CR = ConstantRange::getEmpty(BitWidth);
1773 for (unsigned I = 0, E = CDV->getNumElements(); I < E; ++I)
1774 CR = CR.unionWith(CDV->getElementAsAPInt(I));
1775 return CR;
1776 }
1777
1778 if (auto *CV = dyn_cast<ConstantVector>(this)) {
1779 ConstantRange CR = ConstantRange::getEmpty(BitWidth);
1780 for (unsigned I = 0, E = CV->getNumOperands(); I < E; ++I) {
1781 Constant *Elem = CV->getOperand(I);
1782 if (!Elem)
1783 return ConstantRange::getFull(BitWidth);
1784 if (isa<PoisonValue>(Elem))
1785 continue;
1786 auto *CI = dyn_cast<ConstantInt>(Elem);
1787 if (!CI)
1788 return ConstantRange::getFull(BitWidth);
1789 CR = CR.unionWith(CI->getValue());
1790 }
1791 return CR;
1792 }
1793
1794 return ConstantRange::getFull(BitWidth);
1795 }
1796
1797 //---- ConstantPointerNull::get() implementation.
1798 //
1799
get(PointerType * Ty)1800 ConstantPointerNull *ConstantPointerNull::get(PointerType *Ty) {
1801 std::unique_ptr<ConstantPointerNull> &Entry =
1802 Ty->getContext().pImpl->CPNConstants[Ty];
1803 if (!Entry)
1804 Entry.reset(new ConstantPointerNull(Ty));
1805
1806 return Entry.get();
1807 }
1808
1809 /// Remove the constant from the constant table.
destroyConstantImpl()1810 void ConstantPointerNull::destroyConstantImpl() {
1811 getContext().pImpl->CPNConstants.erase(getType());
1812 }
1813
1814 //---- ConstantTargetNone::get() implementation.
1815 //
1816
get(TargetExtType * Ty)1817 ConstantTargetNone *ConstantTargetNone::get(TargetExtType *Ty) {
1818 assert(Ty->hasProperty(TargetExtType::HasZeroInit) &&
1819 "Target extension type not allowed to have a zeroinitializer");
1820 std::unique_ptr<ConstantTargetNone> &Entry =
1821 Ty->getContext().pImpl->CTNConstants[Ty];
1822 if (!Entry)
1823 Entry.reset(new ConstantTargetNone(Ty));
1824
1825 return Entry.get();
1826 }
1827
1828 /// Remove the constant from the constant table.
destroyConstantImpl()1829 void ConstantTargetNone::destroyConstantImpl() {
1830 getContext().pImpl->CTNConstants.erase(getType());
1831 }
1832
get(Type * Ty)1833 UndefValue *UndefValue::get(Type *Ty) {
1834 std::unique_ptr<UndefValue> &Entry = Ty->getContext().pImpl->UVConstants[Ty];
1835 if (!Entry)
1836 Entry.reset(new UndefValue(Ty));
1837
1838 return Entry.get();
1839 }
1840
1841 /// Remove the constant from the constant table.
destroyConstantImpl()1842 void UndefValue::destroyConstantImpl() {
1843 // Free the constant and any dangling references to it.
1844 if (getValueID() == UndefValueVal) {
1845 getContext().pImpl->UVConstants.erase(getType());
1846 } else if (getValueID() == PoisonValueVal) {
1847 getContext().pImpl->PVConstants.erase(getType());
1848 }
1849 llvm_unreachable("Not a undef or a poison!");
1850 }
1851
get(Type * Ty)1852 PoisonValue *PoisonValue::get(Type *Ty) {
1853 std::unique_ptr<PoisonValue> &Entry = Ty->getContext().pImpl->PVConstants[Ty];
1854 if (!Entry)
1855 Entry.reset(new PoisonValue(Ty));
1856
1857 return Entry.get();
1858 }
1859
1860 /// Remove the constant from the constant table.
destroyConstantImpl()1861 void PoisonValue::destroyConstantImpl() {
1862 // Free the constant and any dangling references to it.
1863 getContext().pImpl->PVConstants.erase(getType());
1864 }
1865
get(BasicBlock * BB)1866 BlockAddress *BlockAddress::get(BasicBlock *BB) {
1867 assert(BB->getParent() && "Block must have a parent");
1868 return get(BB->getParent(), BB);
1869 }
1870
get(Function * F,BasicBlock * BB)1871 BlockAddress *BlockAddress::get(Function *F, BasicBlock *BB) {
1872 BlockAddress *&BA =
1873 F->getContext().pImpl->BlockAddresses[std::make_pair(F, BB)];
1874 if (!BA)
1875 BA = new BlockAddress(F, BB);
1876
1877 assert(BA->getFunction() == F && "Basic block moved between functions");
1878 return BA;
1879 }
1880
BlockAddress(Function * F,BasicBlock * BB)1881 BlockAddress::BlockAddress(Function *F, BasicBlock *BB)
1882 : Constant(PointerType::get(F->getContext(), F->getAddressSpace()),
1883 Value::BlockAddressVal, &Op<0>(), 2) {
1884 setOperand(0, F);
1885 setOperand(1, BB);
1886 BB->AdjustBlockAddressRefCount(1);
1887 }
1888
lookup(const BasicBlock * BB)1889 BlockAddress *BlockAddress::lookup(const BasicBlock *BB) {
1890 if (!BB->hasAddressTaken())
1891 return nullptr;
1892
1893 const Function *F = BB->getParent();
1894 assert(F && "Block must have a parent");
1895 BlockAddress *BA =
1896 F->getContext().pImpl->BlockAddresses.lookup(std::make_pair(F, BB));
1897 assert(BA && "Refcount and block address map disagree!");
1898 return BA;
1899 }
1900
1901 /// Remove the constant from the constant table.
destroyConstantImpl()1902 void BlockAddress::destroyConstantImpl() {
1903 getFunction()->getType()->getContext().pImpl
1904 ->BlockAddresses.erase(std::make_pair(getFunction(), getBasicBlock()));
1905 getBasicBlock()->AdjustBlockAddressRefCount(-1);
1906 }
1907
handleOperandChangeImpl(Value * From,Value * To)1908 Value *BlockAddress::handleOperandChangeImpl(Value *From, Value *To) {
1909 // This could be replacing either the Basic Block or the Function. In either
1910 // case, we have to remove the map entry.
1911 Function *NewF = getFunction();
1912 BasicBlock *NewBB = getBasicBlock();
1913
1914 if (From == NewF)
1915 NewF = cast<Function>(To->stripPointerCasts());
1916 else {
1917 assert(From == NewBB && "From does not match any operand");
1918 NewBB = cast<BasicBlock>(To);
1919 }
1920
1921 // See if the 'new' entry already exists, if not, just update this in place
1922 // and return early.
1923 BlockAddress *&NewBA =
1924 getContext().pImpl->BlockAddresses[std::make_pair(NewF, NewBB)];
1925 if (NewBA)
1926 return NewBA;
1927
1928 getBasicBlock()->AdjustBlockAddressRefCount(-1);
1929
1930 // Remove the old entry, this can't cause the map to rehash (just a
1931 // tombstone will get added).
1932 getContext().pImpl->BlockAddresses.erase(std::make_pair(getFunction(),
1933 getBasicBlock()));
1934 NewBA = this;
1935 setOperand(0, NewF);
1936 setOperand(1, NewBB);
1937 getBasicBlock()->AdjustBlockAddressRefCount(1);
1938
1939 // If we just want to keep the existing value, then return null.
1940 // Callers know that this means we shouldn't delete this value.
1941 return nullptr;
1942 }
1943
get(GlobalValue * GV)1944 DSOLocalEquivalent *DSOLocalEquivalent::get(GlobalValue *GV) {
1945 DSOLocalEquivalent *&Equiv = GV->getContext().pImpl->DSOLocalEquivalents[GV];
1946 if (!Equiv)
1947 Equiv = new DSOLocalEquivalent(GV);
1948
1949 assert(Equiv->getGlobalValue() == GV &&
1950 "DSOLocalFunction does not match the expected global value");
1951 return Equiv;
1952 }
1953
DSOLocalEquivalent(GlobalValue * GV)1954 DSOLocalEquivalent::DSOLocalEquivalent(GlobalValue *GV)
1955 : Constant(GV->getType(), Value::DSOLocalEquivalentVal, &Op<0>(), 1) {
1956 setOperand(0, GV);
1957 }
1958
1959 /// Remove the constant from the constant table.
destroyConstantImpl()1960 void DSOLocalEquivalent::destroyConstantImpl() {
1961 const GlobalValue *GV = getGlobalValue();
1962 GV->getContext().pImpl->DSOLocalEquivalents.erase(GV);
1963 }
1964
handleOperandChangeImpl(Value * From,Value * To)1965 Value *DSOLocalEquivalent::handleOperandChangeImpl(Value *From, Value *To) {
1966 assert(From == getGlobalValue() && "Changing value does not match operand.");
1967 assert(isa<Constant>(To) && "Can only replace the operands with a constant");
1968
1969 // The replacement is with another global value.
1970 if (const auto *ToObj = dyn_cast<GlobalValue>(To)) {
1971 DSOLocalEquivalent *&NewEquiv =
1972 getContext().pImpl->DSOLocalEquivalents[ToObj];
1973 if (NewEquiv)
1974 return llvm::ConstantExpr::getBitCast(NewEquiv, getType());
1975 }
1976
1977 // If the argument is replaced with a null value, just replace this constant
1978 // with a null value.
1979 if (cast<Constant>(To)->isNullValue())
1980 return To;
1981
1982 // The replacement could be a bitcast or an alias to another function. We can
1983 // replace it with a bitcast to the dso_local_equivalent of that function.
1984 auto *Func = cast<Function>(To->stripPointerCastsAndAliases());
1985 DSOLocalEquivalent *&NewEquiv = getContext().pImpl->DSOLocalEquivalents[Func];
1986 if (NewEquiv)
1987 return llvm::ConstantExpr::getBitCast(NewEquiv, getType());
1988
1989 // Replace this with the new one.
1990 getContext().pImpl->DSOLocalEquivalents.erase(getGlobalValue());
1991 NewEquiv = this;
1992 setOperand(0, Func);
1993
1994 if (Func->getType() != getType()) {
1995 // It is ok to mutate the type here because this constant should always
1996 // reflect the type of the function it's holding.
1997 mutateType(Func->getType());
1998 }
1999 return nullptr;
2000 }
2001
get(GlobalValue * GV)2002 NoCFIValue *NoCFIValue::get(GlobalValue *GV) {
2003 NoCFIValue *&NC = GV->getContext().pImpl->NoCFIValues[GV];
2004 if (!NC)
2005 NC = new NoCFIValue(GV);
2006
2007 assert(NC->getGlobalValue() == GV &&
2008 "NoCFIValue does not match the expected global value");
2009 return NC;
2010 }
2011
NoCFIValue(GlobalValue * GV)2012 NoCFIValue::NoCFIValue(GlobalValue *GV)
2013 : Constant(GV->getType(), Value::NoCFIValueVal, &Op<0>(), 1) {
2014 setOperand(0, GV);
2015 }
2016
2017 /// Remove the constant from the constant table.
destroyConstantImpl()2018 void NoCFIValue::destroyConstantImpl() {
2019 const GlobalValue *GV = getGlobalValue();
2020 GV->getContext().pImpl->NoCFIValues.erase(GV);
2021 }
2022
handleOperandChangeImpl(Value * From,Value * To)2023 Value *NoCFIValue::handleOperandChangeImpl(Value *From, Value *To) {
2024 assert(From == getGlobalValue() && "Changing value does not match operand.");
2025
2026 GlobalValue *GV = dyn_cast<GlobalValue>(To->stripPointerCasts());
2027 assert(GV && "Can only replace the operands with a global value");
2028
2029 NoCFIValue *&NewNC = getContext().pImpl->NoCFIValues[GV];
2030 if (NewNC)
2031 return llvm::ConstantExpr::getBitCast(NewNC, getType());
2032
2033 getContext().pImpl->NoCFIValues.erase(getGlobalValue());
2034 NewNC = this;
2035 setOperand(0, GV);
2036
2037 if (GV->getType() != getType())
2038 mutateType(GV->getType());
2039
2040 return nullptr;
2041 }
2042
2043 //---- ConstantPtrAuth::get() implementations.
2044 //
2045
get(Constant * Ptr,ConstantInt * Key,ConstantInt * Disc,Constant * AddrDisc)2046 ConstantPtrAuth *ConstantPtrAuth::get(Constant *Ptr, ConstantInt *Key,
2047 ConstantInt *Disc, Constant *AddrDisc) {
2048 Constant *ArgVec[] = {Ptr, Key, Disc, AddrDisc};
2049 ConstantPtrAuthKeyType MapKey(ArgVec);
2050 LLVMContextImpl *pImpl = Ptr->getContext().pImpl;
2051 return pImpl->ConstantPtrAuths.getOrCreate(Ptr->getType(), MapKey);
2052 }
2053
getWithSameSchema(Constant * Pointer) const2054 ConstantPtrAuth *ConstantPtrAuth::getWithSameSchema(Constant *Pointer) const {
2055 return get(Pointer, getKey(), getDiscriminator(), getAddrDiscriminator());
2056 }
2057
ConstantPtrAuth(Constant * Ptr,ConstantInt * Key,ConstantInt * Disc,Constant * AddrDisc)2058 ConstantPtrAuth::ConstantPtrAuth(Constant *Ptr, ConstantInt *Key,
2059 ConstantInt *Disc, Constant *AddrDisc)
2060 : Constant(Ptr->getType(), Value::ConstantPtrAuthVal, &Op<0>(), 4) {
2061 assert(Ptr->getType()->isPointerTy());
2062 assert(Key->getBitWidth() == 32);
2063 assert(Disc->getBitWidth() == 64);
2064 assert(AddrDisc->getType()->isPointerTy());
2065 setOperand(0, Ptr);
2066 setOperand(1, Key);
2067 setOperand(2, Disc);
2068 setOperand(3, AddrDisc);
2069 }
2070
2071 /// Remove the constant from the constant table.
destroyConstantImpl()2072 void ConstantPtrAuth::destroyConstantImpl() {
2073 getType()->getContext().pImpl->ConstantPtrAuths.remove(this);
2074 }
2075
handleOperandChangeImpl(Value * From,Value * ToV)2076 Value *ConstantPtrAuth::handleOperandChangeImpl(Value *From, Value *ToV) {
2077 assert(isa<Constant>(ToV) && "Cannot make Constant refer to non-constant!");
2078 Constant *To = cast<Constant>(ToV);
2079
2080 SmallVector<Constant *, 4> Values;
2081 Values.reserve(getNumOperands());
2082
2083 unsigned NumUpdated = 0;
2084
2085 Use *OperandList = getOperandList();
2086 unsigned OperandNo = 0;
2087 for (Use *O = OperandList, *E = OperandList + getNumOperands(); O != E; ++O) {
2088 Constant *Val = cast<Constant>(O->get());
2089 if (Val == From) {
2090 OperandNo = (O - OperandList);
2091 Val = To;
2092 ++NumUpdated;
2093 }
2094 Values.push_back(Val);
2095 }
2096
2097 return getContext().pImpl->ConstantPtrAuths.replaceOperandsInPlace(
2098 Values, this, From, To, NumUpdated, OperandNo);
2099 }
2100
isKnownCompatibleWith(const Value * Key,const Value * Discriminator,const DataLayout & DL) const2101 bool ConstantPtrAuth::isKnownCompatibleWith(const Value *Key,
2102 const Value *Discriminator,
2103 const DataLayout &DL) const {
2104 // If the keys are different, there's no chance for this to be compatible.
2105 if (getKey() != Key)
2106 return false;
2107
2108 // We can have 3 kinds of discriminators:
2109 // - simple, integer-only: `i64 x, ptr null` vs. `i64 x`
2110 // - address-only: `i64 0, ptr p` vs. `ptr p`
2111 // - blended address/integer: `i64 x, ptr p` vs. `@llvm.ptrauth.blend(p, x)`
2112
2113 // If this constant has a simple discriminator (integer, no address), easy:
2114 // it's compatible iff the provided full discriminator is also a simple
2115 // discriminator, identical to our integer discriminator.
2116 if (!hasAddressDiscriminator())
2117 return getDiscriminator() == Discriminator;
2118
2119 // Otherwise, we can isolate address and integer discriminator components.
2120 const Value *AddrDiscriminator = nullptr;
2121
2122 // This constant may or may not have an integer discriminator (instead of 0).
2123 if (!getDiscriminator()->isNullValue()) {
2124 // If it does, there's an implicit blend. We need to have a matching blend
2125 // intrinsic in the provided full discriminator.
2126 if (!match(Discriminator,
2127 m_Intrinsic<Intrinsic::ptrauth_blend>(
2128 m_Value(AddrDiscriminator), m_Specific(getDiscriminator()))))
2129 return false;
2130 } else {
2131 // Otherwise, interpret the provided full discriminator as address-only.
2132 AddrDiscriminator = Discriminator;
2133 }
2134
2135 // Either way, we can now focus on comparing the address discriminators.
2136
2137 // Discriminators are i64, so the provided addr disc may be a ptrtoint.
2138 if (auto *Cast = dyn_cast<PtrToIntOperator>(AddrDiscriminator))
2139 AddrDiscriminator = Cast->getPointerOperand();
2140
2141 // Beyond that, we're only interested in compatible pointers.
2142 if (getAddrDiscriminator()->getType() != AddrDiscriminator->getType())
2143 return false;
2144
2145 // These are often the same constant GEP, making them trivially equivalent.
2146 if (getAddrDiscriminator() == AddrDiscriminator)
2147 return true;
2148
2149 // Finally, they may be equivalent base+offset expressions.
2150 APInt Off1(DL.getIndexTypeSizeInBits(getAddrDiscriminator()->getType()), 0);
2151 auto *Base1 = getAddrDiscriminator()->stripAndAccumulateConstantOffsets(
2152 DL, Off1, /*AllowNonInbounds=*/true);
2153
2154 APInt Off2(DL.getIndexTypeSizeInBits(AddrDiscriminator->getType()), 0);
2155 auto *Base2 = AddrDiscriminator->stripAndAccumulateConstantOffsets(
2156 DL, Off2, /*AllowNonInbounds=*/true);
2157
2158 return Base1 == Base2 && Off1 == Off2;
2159 }
2160
2161 //---- ConstantExpr::get() implementations.
2162 //
2163
2164 /// This is a utility function to handle folding of casts and lookup of the
2165 /// cast in the ExprConstants map. It is used by the various get* methods below.
getFoldedCast(Instruction::CastOps opc,Constant * C,Type * Ty,bool OnlyIfReduced=false)2166 static Constant *getFoldedCast(Instruction::CastOps opc, Constant *C, Type *Ty,
2167 bool OnlyIfReduced = false) {
2168 assert(Ty->isFirstClassType() && "Cannot cast to an aggregate type!");
2169 // Fold a few common cases
2170 if (Constant *FC = ConstantFoldCastInstruction(opc, C, Ty))
2171 return FC;
2172
2173 if (OnlyIfReduced)
2174 return nullptr;
2175
2176 LLVMContextImpl *pImpl = Ty->getContext().pImpl;
2177
2178 // Look up the constant in the table first to ensure uniqueness.
2179 ConstantExprKeyType Key(opc, C);
2180
2181 return pImpl->ExprConstants.getOrCreate(Ty, Key);
2182 }
2183
getCast(unsigned oc,Constant * C,Type * Ty,bool OnlyIfReduced)2184 Constant *ConstantExpr::getCast(unsigned oc, Constant *C, Type *Ty,
2185 bool OnlyIfReduced) {
2186 Instruction::CastOps opc = Instruction::CastOps(oc);
2187 assert(Instruction::isCast(opc) && "opcode out of range");
2188 assert(isSupportedCastOp(opc) &&
2189 "Cast opcode not supported as constant expression");
2190 assert(C && Ty && "Null arguments to getCast");
2191 assert(CastInst::castIsValid(opc, C, Ty) && "Invalid constantexpr cast!");
2192
2193 switch (opc) {
2194 default:
2195 llvm_unreachable("Invalid cast opcode");
2196 case Instruction::Trunc:
2197 return getTrunc(C, Ty, OnlyIfReduced);
2198 case Instruction::PtrToInt:
2199 return getPtrToInt(C, Ty, OnlyIfReduced);
2200 case Instruction::IntToPtr:
2201 return getIntToPtr(C, Ty, OnlyIfReduced);
2202 case Instruction::BitCast:
2203 return getBitCast(C, Ty, OnlyIfReduced);
2204 case Instruction::AddrSpaceCast:
2205 return getAddrSpaceCast(C, Ty, OnlyIfReduced);
2206 }
2207 }
2208
getTruncOrBitCast(Constant * C,Type * Ty)2209 Constant *ConstantExpr::getTruncOrBitCast(Constant *C, Type *Ty) {
2210 if (C->getType()->getScalarSizeInBits() == Ty->getScalarSizeInBits())
2211 return getBitCast(C, Ty);
2212 return getTrunc(C, Ty);
2213 }
2214
getPointerCast(Constant * S,Type * Ty)2215 Constant *ConstantExpr::getPointerCast(Constant *S, Type *Ty) {
2216 assert(S->getType()->isPtrOrPtrVectorTy() && "Invalid cast");
2217 assert((Ty->isIntOrIntVectorTy() || Ty->isPtrOrPtrVectorTy()) &&
2218 "Invalid cast");
2219
2220 if (Ty->isIntOrIntVectorTy())
2221 return getPtrToInt(S, Ty);
2222
2223 unsigned SrcAS = S->getType()->getPointerAddressSpace();
2224 if (Ty->isPtrOrPtrVectorTy() && SrcAS != Ty->getPointerAddressSpace())
2225 return getAddrSpaceCast(S, Ty);
2226
2227 return getBitCast(S, Ty);
2228 }
2229
getPointerBitCastOrAddrSpaceCast(Constant * S,Type * Ty)2230 Constant *ConstantExpr::getPointerBitCastOrAddrSpaceCast(Constant *S,
2231 Type *Ty) {
2232 assert(S->getType()->isPtrOrPtrVectorTy() && "Invalid cast");
2233 assert(Ty->isPtrOrPtrVectorTy() && "Invalid cast");
2234
2235 if (S->getType()->getPointerAddressSpace() != Ty->getPointerAddressSpace())
2236 return getAddrSpaceCast(S, Ty);
2237
2238 return getBitCast(S, Ty);
2239 }
2240
getTrunc(Constant * C,Type * Ty,bool OnlyIfReduced)2241 Constant *ConstantExpr::getTrunc(Constant *C, Type *Ty, bool OnlyIfReduced) {
2242 #ifndef NDEBUG
2243 bool fromVec = isa<VectorType>(C->getType());
2244 bool toVec = isa<VectorType>(Ty);
2245 #endif
2246 assert((fromVec == toVec) && "Cannot convert from scalar to/from vector");
2247 assert(C->getType()->isIntOrIntVectorTy() && "Trunc operand must be integer");
2248 assert(Ty->isIntOrIntVectorTy() && "Trunc produces only integral");
2249 assert(C->getType()->getScalarSizeInBits() > Ty->getScalarSizeInBits()&&
2250 "SrcTy must be larger than DestTy for Trunc!");
2251
2252 return getFoldedCast(Instruction::Trunc, C, Ty, OnlyIfReduced);
2253 }
2254
getPtrToInt(Constant * C,Type * DstTy,bool OnlyIfReduced)2255 Constant *ConstantExpr::getPtrToInt(Constant *C, Type *DstTy,
2256 bool OnlyIfReduced) {
2257 assert(C->getType()->isPtrOrPtrVectorTy() &&
2258 "PtrToInt source must be pointer or pointer vector");
2259 assert(DstTy->isIntOrIntVectorTy() &&
2260 "PtrToInt destination must be integer or integer vector");
2261 assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy));
2262 if (isa<VectorType>(C->getType()))
2263 assert(cast<VectorType>(C->getType())->getElementCount() ==
2264 cast<VectorType>(DstTy)->getElementCount() &&
2265 "Invalid cast between a different number of vector elements");
2266 return getFoldedCast(Instruction::PtrToInt, C, DstTy, OnlyIfReduced);
2267 }
2268
getIntToPtr(Constant * C,Type * DstTy,bool OnlyIfReduced)2269 Constant *ConstantExpr::getIntToPtr(Constant *C, Type *DstTy,
2270 bool OnlyIfReduced) {
2271 assert(C->getType()->isIntOrIntVectorTy() &&
2272 "IntToPtr source must be integer or integer vector");
2273 assert(DstTy->isPtrOrPtrVectorTy() &&
2274 "IntToPtr destination must be a pointer or pointer vector");
2275 assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy));
2276 if (isa<VectorType>(C->getType()))
2277 assert(cast<VectorType>(C->getType())->getElementCount() ==
2278 cast<VectorType>(DstTy)->getElementCount() &&
2279 "Invalid cast between a different number of vector elements");
2280 return getFoldedCast(Instruction::IntToPtr, C, DstTy, OnlyIfReduced);
2281 }
2282
getBitCast(Constant * C,Type * DstTy,bool OnlyIfReduced)2283 Constant *ConstantExpr::getBitCast(Constant *C, Type *DstTy,
2284 bool OnlyIfReduced) {
2285 assert(CastInst::castIsValid(Instruction::BitCast, C, DstTy) &&
2286 "Invalid constantexpr bitcast!");
2287
2288 // It is common to ask for a bitcast of a value to its own type, handle this
2289 // speedily.
2290 if (C->getType() == DstTy) return C;
2291
2292 return getFoldedCast(Instruction::BitCast, C, DstTy, OnlyIfReduced);
2293 }
2294
getAddrSpaceCast(Constant * C,Type * DstTy,bool OnlyIfReduced)2295 Constant *ConstantExpr::getAddrSpaceCast(Constant *C, Type *DstTy,
2296 bool OnlyIfReduced) {
2297 assert(CastInst::castIsValid(Instruction::AddrSpaceCast, C, DstTy) &&
2298 "Invalid constantexpr addrspacecast!");
2299 return getFoldedCast(Instruction::AddrSpaceCast, C, DstTy, OnlyIfReduced);
2300 }
2301
get(unsigned Opcode,Constant * C1,Constant * C2,unsigned Flags,Type * OnlyIfReducedTy)2302 Constant *ConstantExpr::get(unsigned Opcode, Constant *C1, Constant *C2,
2303 unsigned Flags, Type *OnlyIfReducedTy) {
2304 // Check the operands for consistency first.
2305 assert(Instruction::isBinaryOp(Opcode) &&
2306 "Invalid opcode in binary constant expression");
2307 assert(isSupportedBinOp(Opcode) &&
2308 "Binop not supported as constant expression");
2309 assert(C1->getType() == C2->getType() &&
2310 "Operand types in binary constant expression should match");
2311
2312 #ifndef NDEBUG
2313 switch (Opcode) {
2314 case Instruction::Add:
2315 case Instruction::Sub:
2316 case Instruction::Mul:
2317 assert(C1->getType()->isIntOrIntVectorTy() &&
2318 "Tried to create an integer operation on a non-integer type!");
2319 break;
2320 case Instruction::And:
2321 case Instruction::Or:
2322 case Instruction::Xor:
2323 assert(C1->getType()->isIntOrIntVectorTy() &&
2324 "Tried to create a logical operation on a non-integral type!");
2325 break;
2326 default:
2327 break;
2328 }
2329 #endif
2330
2331 if (Constant *FC = ConstantFoldBinaryInstruction(Opcode, C1, C2))
2332 return FC;
2333
2334 if (OnlyIfReducedTy == C1->getType())
2335 return nullptr;
2336
2337 Constant *ArgVec[] = {C1, C2};
2338 ConstantExprKeyType Key(Opcode, ArgVec, Flags);
2339
2340 LLVMContextImpl *pImpl = C1->getContext().pImpl;
2341 return pImpl->ExprConstants.getOrCreate(C1->getType(), Key);
2342 }
2343
isDesirableBinOp(unsigned Opcode)2344 bool ConstantExpr::isDesirableBinOp(unsigned Opcode) {
2345 switch (Opcode) {
2346 case Instruction::UDiv:
2347 case Instruction::SDiv:
2348 case Instruction::URem:
2349 case Instruction::SRem:
2350 case Instruction::FAdd:
2351 case Instruction::FSub:
2352 case Instruction::FMul:
2353 case Instruction::FDiv:
2354 case Instruction::FRem:
2355 case Instruction::And:
2356 case Instruction::Or:
2357 case Instruction::LShr:
2358 case Instruction::AShr:
2359 case Instruction::Shl:
2360 return false;
2361 case Instruction::Add:
2362 case Instruction::Sub:
2363 case Instruction::Mul:
2364 case Instruction::Xor:
2365 return true;
2366 default:
2367 llvm_unreachable("Argument must be binop opcode");
2368 }
2369 }
2370
isSupportedBinOp(unsigned Opcode)2371 bool ConstantExpr::isSupportedBinOp(unsigned Opcode) {
2372 switch (Opcode) {
2373 case Instruction::UDiv:
2374 case Instruction::SDiv:
2375 case Instruction::URem:
2376 case Instruction::SRem:
2377 case Instruction::FAdd:
2378 case Instruction::FSub:
2379 case Instruction::FMul:
2380 case Instruction::FDiv:
2381 case Instruction::FRem:
2382 case Instruction::And:
2383 case Instruction::Or:
2384 case Instruction::LShr:
2385 case Instruction::AShr:
2386 case Instruction::Shl:
2387 return false;
2388 case Instruction::Add:
2389 case Instruction::Sub:
2390 case Instruction::Mul:
2391 case Instruction::Xor:
2392 return true;
2393 default:
2394 llvm_unreachable("Argument must be binop opcode");
2395 }
2396 }
2397
isDesirableCastOp(unsigned Opcode)2398 bool ConstantExpr::isDesirableCastOp(unsigned Opcode) {
2399 switch (Opcode) {
2400 case Instruction::ZExt:
2401 case Instruction::SExt:
2402 case Instruction::FPTrunc:
2403 case Instruction::FPExt:
2404 case Instruction::UIToFP:
2405 case Instruction::SIToFP:
2406 case Instruction::FPToUI:
2407 case Instruction::FPToSI:
2408 return false;
2409 case Instruction::Trunc:
2410 case Instruction::PtrToInt:
2411 case Instruction::IntToPtr:
2412 case Instruction::BitCast:
2413 case Instruction::AddrSpaceCast:
2414 return true;
2415 default:
2416 llvm_unreachable("Argument must be cast opcode");
2417 }
2418 }
2419
isSupportedCastOp(unsigned Opcode)2420 bool ConstantExpr::isSupportedCastOp(unsigned Opcode) {
2421 switch (Opcode) {
2422 case Instruction::ZExt:
2423 case Instruction::SExt:
2424 case Instruction::FPTrunc:
2425 case Instruction::FPExt:
2426 case Instruction::UIToFP:
2427 case Instruction::SIToFP:
2428 case Instruction::FPToUI:
2429 case Instruction::FPToSI:
2430 return false;
2431 case Instruction::Trunc:
2432 case Instruction::PtrToInt:
2433 case Instruction::IntToPtr:
2434 case Instruction::BitCast:
2435 case Instruction::AddrSpaceCast:
2436 return true;
2437 default:
2438 llvm_unreachable("Argument must be cast opcode");
2439 }
2440 }
2441
getSizeOf(Type * Ty)2442 Constant *ConstantExpr::getSizeOf(Type* Ty) {
2443 // sizeof is implemented as: (i64) gep (Ty*)null, 1
2444 // Note that a non-inbounds gep is used, as null isn't within any object.
2445 Constant *GEPIdx = ConstantInt::get(Type::getInt32Ty(Ty->getContext()), 1);
2446 Constant *GEP = getGetElementPtr(
2447 Ty, Constant::getNullValue(PointerType::getUnqual(Ty)), GEPIdx);
2448 return getPtrToInt(GEP,
2449 Type::getInt64Ty(Ty->getContext()));
2450 }
2451
getAlignOf(Type * Ty)2452 Constant *ConstantExpr::getAlignOf(Type* Ty) {
2453 // alignof is implemented as: (i64) gep ({i1,Ty}*)null, 0, 1
2454 // Note that a non-inbounds gep is used, as null isn't within any object.
2455 Type *AligningTy = StructType::get(Type::getInt1Ty(Ty->getContext()), Ty);
2456 Constant *NullPtr =
2457 Constant::getNullValue(PointerType::getUnqual(AligningTy->getContext()));
2458 Constant *Zero = ConstantInt::get(Type::getInt64Ty(Ty->getContext()), 0);
2459 Constant *One = ConstantInt::get(Type::getInt32Ty(Ty->getContext()), 1);
2460 Constant *Indices[2] = {Zero, One};
2461 Constant *GEP = getGetElementPtr(AligningTy, NullPtr, Indices);
2462 return getPtrToInt(GEP, Type::getInt64Ty(Ty->getContext()));
2463 }
2464
getGetElementPtr(Type * Ty,Constant * C,ArrayRef<Value * > Idxs,GEPNoWrapFlags NW,std::optional<ConstantRange> InRange,Type * OnlyIfReducedTy)2465 Constant *ConstantExpr::getGetElementPtr(Type *Ty, Constant *C,
2466 ArrayRef<Value *> Idxs,
2467 GEPNoWrapFlags NW,
2468 std::optional<ConstantRange> InRange,
2469 Type *OnlyIfReducedTy) {
2470 assert(Ty && "Must specify element type");
2471 assert(isSupportedGetElementPtr(Ty) && "Element type is unsupported!");
2472
2473 if (Constant *FC = ConstantFoldGetElementPtr(Ty, C, InRange, Idxs))
2474 return FC; // Fold a few common cases.
2475
2476 assert(GetElementPtrInst::getIndexedType(Ty, Idxs) && "GEP indices invalid!");
2477 ;
2478
2479 // Get the result type of the getelementptr!
2480 Type *ReqTy = GetElementPtrInst::getGEPReturnType(C, Idxs);
2481 if (OnlyIfReducedTy == ReqTy)
2482 return nullptr;
2483
2484 auto EltCount = ElementCount::getFixed(0);
2485 if (VectorType *VecTy = dyn_cast<VectorType>(ReqTy))
2486 EltCount = VecTy->getElementCount();
2487
2488 // Look up the constant in the table first to ensure uniqueness
2489 std::vector<Constant*> ArgVec;
2490 ArgVec.reserve(1 + Idxs.size());
2491 ArgVec.push_back(C);
2492 auto GTI = gep_type_begin(Ty, Idxs), GTE = gep_type_end(Ty, Idxs);
2493 for (; GTI != GTE; ++GTI) {
2494 auto *Idx = cast<Constant>(GTI.getOperand());
2495 assert(
2496 (!isa<VectorType>(Idx->getType()) ||
2497 cast<VectorType>(Idx->getType())->getElementCount() == EltCount) &&
2498 "getelementptr index type missmatch");
2499
2500 if (GTI.isStruct() && Idx->getType()->isVectorTy()) {
2501 Idx = Idx->getSplatValue();
2502 } else if (GTI.isSequential() && EltCount.isNonZero() &&
2503 !Idx->getType()->isVectorTy()) {
2504 Idx = ConstantVector::getSplat(EltCount, Idx);
2505 }
2506 ArgVec.push_back(Idx);
2507 }
2508
2509 const ConstantExprKeyType Key(Instruction::GetElementPtr, ArgVec, NW.getRaw(),
2510 std::nullopt, Ty, InRange);
2511
2512 LLVMContextImpl *pImpl = C->getContext().pImpl;
2513 return pImpl->ExprConstants.getOrCreate(ReqTy, Key);
2514 }
2515
getExtractElement(Constant * Val,Constant * Idx,Type * OnlyIfReducedTy)2516 Constant *ConstantExpr::getExtractElement(Constant *Val, Constant *Idx,
2517 Type *OnlyIfReducedTy) {
2518 assert(Val->getType()->isVectorTy() &&
2519 "Tried to create extractelement operation on non-vector type!");
2520 assert(Idx->getType()->isIntegerTy() &&
2521 "Extractelement index must be an integer type!");
2522
2523 if (Constant *FC = ConstantFoldExtractElementInstruction(Val, Idx))
2524 return FC; // Fold a few common cases.
2525
2526 Type *ReqTy = cast<VectorType>(Val->getType())->getElementType();
2527 if (OnlyIfReducedTy == ReqTy)
2528 return nullptr;
2529
2530 // Look up the constant in the table first to ensure uniqueness
2531 Constant *ArgVec[] = { Val, Idx };
2532 const ConstantExprKeyType Key(Instruction::ExtractElement, ArgVec);
2533
2534 LLVMContextImpl *pImpl = Val->getContext().pImpl;
2535 return pImpl->ExprConstants.getOrCreate(ReqTy, Key);
2536 }
2537
getInsertElement(Constant * Val,Constant * Elt,Constant * Idx,Type * OnlyIfReducedTy)2538 Constant *ConstantExpr::getInsertElement(Constant *Val, Constant *Elt,
2539 Constant *Idx, Type *OnlyIfReducedTy) {
2540 assert(Val->getType()->isVectorTy() &&
2541 "Tried to create insertelement operation on non-vector type!");
2542 assert(Elt->getType() == cast<VectorType>(Val->getType())->getElementType() &&
2543 "Insertelement types must match!");
2544 assert(Idx->getType()->isIntegerTy() &&
2545 "Insertelement index must be i32 type!");
2546
2547 if (Constant *FC = ConstantFoldInsertElementInstruction(Val, Elt, Idx))
2548 return FC; // Fold a few common cases.
2549
2550 if (OnlyIfReducedTy == Val->getType())
2551 return nullptr;
2552
2553 // Look up the constant in the table first to ensure uniqueness
2554 Constant *ArgVec[] = { Val, Elt, Idx };
2555 const ConstantExprKeyType Key(Instruction::InsertElement, ArgVec);
2556
2557 LLVMContextImpl *pImpl = Val->getContext().pImpl;
2558 return pImpl->ExprConstants.getOrCreate(Val->getType(), Key);
2559 }
2560
getShuffleVector(Constant * V1,Constant * V2,ArrayRef<int> Mask,Type * OnlyIfReducedTy)2561 Constant *ConstantExpr::getShuffleVector(Constant *V1, Constant *V2,
2562 ArrayRef<int> Mask,
2563 Type *OnlyIfReducedTy) {
2564 assert(ShuffleVectorInst::isValidOperands(V1, V2, Mask) &&
2565 "Invalid shuffle vector constant expr operands!");
2566
2567 if (Constant *FC = ConstantFoldShuffleVectorInstruction(V1, V2, Mask))
2568 return FC; // Fold a few common cases.
2569
2570 unsigned NElts = Mask.size();
2571 auto V1VTy = cast<VectorType>(V1->getType());
2572 Type *EltTy = V1VTy->getElementType();
2573 bool TypeIsScalable = isa<ScalableVectorType>(V1VTy);
2574 Type *ShufTy = VectorType::get(EltTy, NElts, TypeIsScalable);
2575
2576 if (OnlyIfReducedTy == ShufTy)
2577 return nullptr;
2578
2579 // Look up the constant in the table first to ensure uniqueness
2580 Constant *ArgVec[] = {V1, V2};
2581 ConstantExprKeyType Key(Instruction::ShuffleVector, ArgVec, 0, Mask);
2582
2583 LLVMContextImpl *pImpl = ShufTy->getContext().pImpl;
2584 return pImpl->ExprConstants.getOrCreate(ShufTy, Key);
2585 }
2586
getNeg(Constant * C,bool HasNSW)2587 Constant *ConstantExpr::getNeg(Constant *C, bool HasNSW) {
2588 assert(C->getType()->isIntOrIntVectorTy() &&
2589 "Cannot NEG a nonintegral value!");
2590 return getSub(ConstantInt::get(C->getType(), 0), C, /*HasNUW=*/false, HasNSW);
2591 }
2592
getNot(Constant * C)2593 Constant *ConstantExpr::getNot(Constant *C) {
2594 assert(C->getType()->isIntOrIntVectorTy() &&
2595 "Cannot NOT a nonintegral value!");
2596 return get(Instruction::Xor, C, Constant::getAllOnesValue(C->getType()));
2597 }
2598
getAdd(Constant * C1,Constant * C2,bool HasNUW,bool HasNSW)2599 Constant *ConstantExpr::getAdd(Constant *C1, Constant *C2,
2600 bool HasNUW, bool HasNSW) {
2601 unsigned Flags = (HasNUW ? OverflowingBinaryOperator::NoUnsignedWrap : 0) |
2602 (HasNSW ? OverflowingBinaryOperator::NoSignedWrap : 0);
2603 return get(Instruction::Add, C1, C2, Flags);
2604 }
2605
getSub(Constant * C1,Constant * C2,bool HasNUW,bool HasNSW)2606 Constant *ConstantExpr::getSub(Constant *C1, Constant *C2,
2607 bool HasNUW, bool HasNSW) {
2608 unsigned Flags = (HasNUW ? OverflowingBinaryOperator::NoUnsignedWrap : 0) |
2609 (HasNSW ? OverflowingBinaryOperator::NoSignedWrap : 0);
2610 return get(Instruction::Sub, C1, C2, Flags);
2611 }
2612
getMul(Constant * C1,Constant * C2,bool HasNUW,bool HasNSW)2613 Constant *ConstantExpr::getMul(Constant *C1, Constant *C2,
2614 bool HasNUW, bool HasNSW) {
2615 unsigned Flags = (HasNUW ? OverflowingBinaryOperator::NoUnsignedWrap : 0) |
2616 (HasNSW ? OverflowingBinaryOperator::NoSignedWrap : 0);
2617 return get(Instruction::Mul, C1, C2, Flags);
2618 }
2619
getXor(Constant * C1,Constant * C2)2620 Constant *ConstantExpr::getXor(Constant *C1, Constant *C2) {
2621 return get(Instruction::Xor, C1, C2);
2622 }
2623
getExactLogBase2(Constant * C)2624 Constant *ConstantExpr::getExactLogBase2(Constant *C) {
2625 Type *Ty = C->getType();
2626 const APInt *IVal;
2627 if (match(C, m_APInt(IVal)) && IVal->isPowerOf2())
2628 return ConstantInt::get(Ty, IVal->logBase2());
2629
2630 // FIXME: We can extract pow of 2 of splat constant for scalable vectors.
2631 auto *VecTy = dyn_cast<FixedVectorType>(Ty);
2632 if (!VecTy)
2633 return nullptr;
2634
2635 SmallVector<Constant *, 4> Elts;
2636 for (unsigned I = 0, E = VecTy->getNumElements(); I != E; ++I) {
2637 Constant *Elt = C->getAggregateElement(I);
2638 if (!Elt)
2639 return nullptr;
2640 // Note that log2(iN undef) is *NOT* iN undef, because log2(iN undef) u< N.
2641 if (isa<UndefValue>(Elt)) {
2642 Elts.push_back(Constant::getNullValue(Ty->getScalarType()));
2643 continue;
2644 }
2645 if (!match(Elt, m_APInt(IVal)) || !IVal->isPowerOf2())
2646 return nullptr;
2647 Elts.push_back(ConstantInt::get(Ty->getScalarType(), IVal->logBase2()));
2648 }
2649
2650 return ConstantVector::get(Elts);
2651 }
2652
getBinOpIdentity(unsigned Opcode,Type * Ty,bool AllowRHSConstant,bool NSZ)2653 Constant *ConstantExpr::getBinOpIdentity(unsigned Opcode, Type *Ty,
2654 bool AllowRHSConstant, bool NSZ) {
2655 assert(Instruction::isBinaryOp(Opcode) && "Only binops allowed");
2656
2657 // Commutative opcodes: it does not matter if AllowRHSConstant is set.
2658 if (Instruction::isCommutative(Opcode)) {
2659 switch (Opcode) {
2660 case Instruction::Add: // X + 0 = X
2661 case Instruction::Or: // X | 0 = X
2662 case Instruction::Xor: // X ^ 0 = X
2663 return Constant::getNullValue(Ty);
2664 case Instruction::Mul: // X * 1 = X
2665 return ConstantInt::get(Ty, 1);
2666 case Instruction::And: // X & -1 = X
2667 return Constant::getAllOnesValue(Ty);
2668 case Instruction::FAdd: // X + -0.0 = X
2669 return ConstantFP::getZero(Ty, !NSZ);
2670 case Instruction::FMul: // X * 1.0 = X
2671 return ConstantFP::get(Ty, 1.0);
2672 default:
2673 llvm_unreachable("Every commutative binop has an identity constant");
2674 }
2675 }
2676
2677 // Non-commutative opcodes: AllowRHSConstant must be set.
2678 if (!AllowRHSConstant)
2679 return nullptr;
2680
2681 switch (Opcode) {
2682 case Instruction::Sub: // X - 0 = X
2683 case Instruction::Shl: // X << 0 = X
2684 case Instruction::LShr: // X >>u 0 = X
2685 case Instruction::AShr: // X >> 0 = X
2686 case Instruction::FSub: // X - 0.0 = X
2687 return Constant::getNullValue(Ty);
2688 case Instruction::SDiv: // X / 1 = X
2689 case Instruction::UDiv: // X /u 1 = X
2690 return ConstantInt::get(Ty, 1);
2691 case Instruction::FDiv: // X / 1.0 = X
2692 return ConstantFP::get(Ty, 1.0);
2693 default:
2694 return nullptr;
2695 }
2696 }
2697
getIntrinsicIdentity(Intrinsic::ID ID,Type * Ty)2698 Constant *ConstantExpr::getIntrinsicIdentity(Intrinsic::ID ID, Type *Ty) {
2699 switch (ID) {
2700 case Intrinsic::umax:
2701 return Constant::getNullValue(Ty);
2702 case Intrinsic::umin:
2703 return Constant::getAllOnesValue(Ty);
2704 case Intrinsic::smax:
2705 return Constant::getIntegerValue(
2706 Ty, APInt::getSignedMinValue(Ty->getIntegerBitWidth()));
2707 case Intrinsic::smin:
2708 return Constant::getIntegerValue(
2709 Ty, APInt::getSignedMaxValue(Ty->getIntegerBitWidth()));
2710 default:
2711 return nullptr;
2712 }
2713 }
2714
getIdentity(Instruction * I,Type * Ty,bool AllowRHSConstant,bool NSZ)2715 Constant *ConstantExpr::getIdentity(Instruction *I, Type *Ty,
2716 bool AllowRHSConstant, bool NSZ) {
2717 if (I->isBinaryOp())
2718 return getBinOpIdentity(I->getOpcode(), Ty, AllowRHSConstant, NSZ);
2719 if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(I))
2720 return getIntrinsicIdentity(II->getIntrinsicID(), Ty);
2721 return nullptr;
2722 }
2723
getBinOpAbsorber(unsigned Opcode,Type * Ty)2724 Constant *ConstantExpr::getBinOpAbsorber(unsigned Opcode, Type *Ty) {
2725 switch (Opcode) {
2726 default:
2727 // Doesn't have an absorber.
2728 return nullptr;
2729
2730 case Instruction::Or:
2731 return Constant::getAllOnesValue(Ty);
2732
2733 case Instruction::And:
2734 case Instruction::Mul:
2735 return Constant::getNullValue(Ty);
2736 }
2737 }
2738
2739 /// Remove the constant from the constant table.
destroyConstantImpl()2740 void ConstantExpr::destroyConstantImpl() {
2741 getType()->getContext().pImpl->ExprConstants.remove(this);
2742 }
2743
getOpcodeName() const2744 const char *ConstantExpr::getOpcodeName() const {
2745 return Instruction::getOpcodeName(getOpcode());
2746 }
2747
GetElementPtrConstantExpr(Type * SrcElementTy,Constant * C,ArrayRef<Constant * > IdxList,Type * DestTy,std::optional<ConstantRange> InRange)2748 GetElementPtrConstantExpr::GetElementPtrConstantExpr(
2749 Type *SrcElementTy, Constant *C, ArrayRef<Constant *> IdxList, Type *DestTy,
2750 std::optional<ConstantRange> InRange)
2751 : ConstantExpr(DestTy, Instruction::GetElementPtr,
2752 OperandTraits<GetElementPtrConstantExpr>::op_end(this) -
2753 (IdxList.size() + 1),
2754 IdxList.size() + 1),
2755 SrcElementTy(SrcElementTy),
2756 ResElementTy(GetElementPtrInst::getIndexedType(SrcElementTy, IdxList)),
2757 InRange(std::move(InRange)) {
2758 Op<0>() = C;
2759 Use *OperandList = getOperandList();
2760 for (unsigned i = 0, E = IdxList.size(); i != E; ++i)
2761 OperandList[i+1] = IdxList[i];
2762 }
2763
getSourceElementType() const2764 Type *GetElementPtrConstantExpr::getSourceElementType() const {
2765 return SrcElementTy;
2766 }
2767
getResultElementType() const2768 Type *GetElementPtrConstantExpr::getResultElementType() const {
2769 return ResElementTy;
2770 }
2771
getInRange() const2772 std::optional<ConstantRange> GetElementPtrConstantExpr::getInRange() const {
2773 return InRange;
2774 }
2775
2776 //===----------------------------------------------------------------------===//
2777 // ConstantData* implementations
2778
getElementType() const2779 Type *ConstantDataSequential::getElementType() const {
2780 if (ArrayType *ATy = dyn_cast<ArrayType>(getType()))
2781 return ATy->getElementType();
2782 return cast<VectorType>(getType())->getElementType();
2783 }
2784
getRawDataValues() const2785 StringRef ConstantDataSequential::getRawDataValues() const {
2786 return StringRef(DataElements, getNumElements()*getElementByteSize());
2787 }
2788
isElementTypeCompatible(Type * Ty)2789 bool ConstantDataSequential::isElementTypeCompatible(Type *Ty) {
2790 if (Ty->isHalfTy() || Ty->isBFloatTy() || Ty->isFloatTy() || Ty->isDoubleTy())
2791 return true;
2792 if (auto *IT = dyn_cast<IntegerType>(Ty)) {
2793 switch (IT->getBitWidth()) {
2794 case 8:
2795 case 16:
2796 case 32:
2797 case 64:
2798 return true;
2799 default: break;
2800 }
2801 }
2802 return false;
2803 }
2804
getNumElements() const2805 unsigned ConstantDataSequential::getNumElements() const {
2806 if (ArrayType *AT = dyn_cast<ArrayType>(getType()))
2807 return AT->getNumElements();
2808 return cast<FixedVectorType>(getType())->getNumElements();
2809 }
2810
2811
getElementByteSize() const2812 uint64_t ConstantDataSequential::getElementByteSize() const {
2813 return getElementType()->getPrimitiveSizeInBits()/8;
2814 }
2815
2816 /// Return the start of the specified element.
getElementPointer(unsigned Elt) const2817 const char *ConstantDataSequential::getElementPointer(unsigned Elt) const {
2818 assert(Elt < getNumElements() && "Invalid Elt");
2819 return DataElements+Elt*getElementByteSize();
2820 }
2821
2822
2823 /// Return true if the array is empty or all zeros.
isAllZeros(StringRef Arr)2824 static bool isAllZeros(StringRef Arr) {
2825 for (char I : Arr)
2826 if (I != 0)
2827 return false;
2828 return true;
2829 }
2830
2831 /// This is the underlying implementation of all of the
2832 /// ConstantDataSequential::get methods. They all thunk down to here, providing
2833 /// the correct element type. We take the bytes in as a StringRef because
2834 /// we *want* an underlying "char*" to avoid TBAA type punning violations.
getImpl(StringRef Elements,Type * Ty)2835 Constant *ConstantDataSequential::getImpl(StringRef Elements, Type *Ty) {
2836 #ifndef NDEBUG
2837 if (ArrayType *ATy = dyn_cast<ArrayType>(Ty))
2838 assert(isElementTypeCompatible(ATy->getElementType()));
2839 else
2840 assert(isElementTypeCompatible(cast<VectorType>(Ty)->getElementType()));
2841 #endif
2842 // If the elements are all zero or there are no elements, return a CAZ, which
2843 // is more dense and canonical.
2844 if (isAllZeros(Elements))
2845 return ConstantAggregateZero::get(Ty);
2846
2847 // Do a lookup to see if we have already formed one of these.
2848 auto &Slot =
2849 *Ty->getContext()
2850 .pImpl->CDSConstants.insert(std::make_pair(Elements, nullptr))
2851 .first;
2852
2853 // The bucket can point to a linked list of different CDS's that have the same
2854 // body but different types. For example, 0,0,0,1 could be a 4 element array
2855 // of i8, or a 1-element array of i32. They'll both end up in the same
2856 /// StringMap bucket, linked up by their Next pointers. Walk the list.
2857 std::unique_ptr<ConstantDataSequential> *Entry = &Slot.second;
2858 for (; *Entry; Entry = &(*Entry)->Next)
2859 if ((*Entry)->getType() == Ty)
2860 return Entry->get();
2861
2862 // Okay, we didn't get a hit. Create a node of the right class, link it in,
2863 // and return it.
2864 if (isa<ArrayType>(Ty)) {
2865 // Use reset because std::make_unique can't access the constructor.
2866 Entry->reset(new ConstantDataArray(Ty, Slot.first().data()));
2867 return Entry->get();
2868 }
2869
2870 assert(isa<VectorType>(Ty));
2871 // Use reset because std::make_unique can't access the constructor.
2872 Entry->reset(new ConstantDataVector(Ty, Slot.first().data()));
2873 return Entry->get();
2874 }
2875
destroyConstantImpl()2876 void ConstantDataSequential::destroyConstantImpl() {
2877 // Remove the constant from the StringMap.
2878 StringMap<std::unique_ptr<ConstantDataSequential>> &CDSConstants =
2879 getType()->getContext().pImpl->CDSConstants;
2880
2881 auto Slot = CDSConstants.find(getRawDataValues());
2882
2883 assert(Slot != CDSConstants.end() && "CDS not found in uniquing table");
2884
2885 std::unique_ptr<ConstantDataSequential> *Entry = &Slot->getValue();
2886
2887 // Remove the entry from the hash table.
2888 if (!(*Entry)->Next) {
2889 // If there is only one value in the bucket (common case) it must be this
2890 // entry, and removing the entry should remove the bucket completely.
2891 assert(Entry->get() == this && "Hash mismatch in ConstantDataSequential");
2892 getContext().pImpl->CDSConstants.erase(Slot);
2893 return;
2894 }
2895
2896 // Otherwise, there are multiple entries linked off the bucket, unlink the
2897 // node we care about but keep the bucket around.
2898 while (true) {
2899 std::unique_ptr<ConstantDataSequential> &Node = *Entry;
2900 assert(Node && "Didn't find entry in its uniquing hash table!");
2901 // If we found our entry, unlink it from the list and we're done.
2902 if (Node.get() == this) {
2903 Node = std::move(Node->Next);
2904 return;
2905 }
2906
2907 Entry = &Node->Next;
2908 }
2909 }
2910
2911 /// getFP() constructors - Return a constant of array type with a float
2912 /// element type taken from argument `ElementType', and count taken from
2913 /// argument `Elts'. The amount of bits of the contained type must match the
2914 /// number of bits of the type contained in the passed in ArrayRef.
2915 /// (i.e. half or bfloat for 16bits, float for 32bits, double for 64bits) Note
2916 /// that this can return a ConstantAggregateZero object.
getFP(Type * ElementType,ArrayRef<uint16_t> Elts)2917 Constant *ConstantDataArray::getFP(Type *ElementType, ArrayRef<uint16_t> Elts) {
2918 assert((ElementType->isHalfTy() || ElementType->isBFloatTy()) &&
2919 "Element type is not a 16-bit float type");
2920 Type *Ty = ArrayType::get(ElementType, Elts.size());
2921 const char *Data = reinterpret_cast<const char *>(Elts.data());
2922 return getImpl(StringRef(Data, Elts.size() * 2), Ty);
2923 }
getFP(Type * ElementType,ArrayRef<uint32_t> Elts)2924 Constant *ConstantDataArray::getFP(Type *ElementType, ArrayRef<uint32_t> Elts) {
2925 assert(ElementType->isFloatTy() && "Element type is not a 32-bit float type");
2926 Type *Ty = ArrayType::get(ElementType, Elts.size());
2927 const char *Data = reinterpret_cast<const char *>(Elts.data());
2928 return getImpl(StringRef(Data, Elts.size() * 4), Ty);
2929 }
getFP(Type * ElementType,ArrayRef<uint64_t> Elts)2930 Constant *ConstantDataArray::getFP(Type *ElementType, ArrayRef<uint64_t> Elts) {
2931 assert(ElementType->isDoubleTy() &&
2932 "Element type is not a 64-bit float type");
2933 Type *Ty = ArrayType::get(ElementType, Elts.size());
2934 const char *Data = reinterpret_cast<const char *>(Elts.data());
2935 return getImpl(StringRef(Data, Elts.size() * 8), Ty);
2936 }
2937
getString(LLVMContext & Context,StringRef Str,bool AddNull)2938 Constant *ConstantDataArray::getString(LLVMContext &Context,
2939 StringRef Str, bool AddNull) {
2940 if (!AddNull) {
2941 const uint8_t *Data = Str.bytes_begin();
2942 return get(Context, ArrayRef(Data, Str.size()));
2943 }
2944
2945 SmallVector<uint8_t, 64> ElementVals;
2946 ElementVals.append(Str.begin(), Str.end());
2947 ElementVals.push_back(0);
2948 return get(Context, ElementVals);
2949 }
2950
2951 /// get() constructors - Return a constant with vector type with an element
2952 /// count and element type matching the ArrayRef passed in. Note that this
2953 /// can return a ConstantAggregateZero object.
get(LLVMContext & Context,ArrayRef<uint8_t> Elts)2954 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint8_t> Elts){
2955 auto *Ty = FixedVectorType::get(Type::getInt8Ty(Context), Elts.size());
2956 const char *Data = reinterpret_cast<const char *>(Elts.data());
2957 return getImpl(StringRef(Data, Elts.size() * 1), Ty);
2958 }
get(LLVMContext & Context,ArrayRef<uint16_t> Elts)2959 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint16_t> Elts){
2960 auto *Ty = FixedVectorType::get(Type::getInt16Ty(Context), Elts.size());
2961 const char *Data = reinterpret_cast<const char *>(Elts.data());
2962 return getImpl(StringRef(Data, Elts.size() * 2), Ty);
2963 }
get(LLVMContext & Context,ArrayRef<uint32_t> Elts)2964 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint32_t> Elts){
2965 auto *Ty = FixedVectorType::get(Type::getInt32Ty(Context), Elts.size());
2966 const char *Data = reinterpret_cast<const char *>(Elts.data());
2967 return getImpl(StringRef(Data, Elts.size() * 4), Ty);
2968 }
get(LLVMContext & Context,ArrayRef<uint64_t> Elts)2969 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint64_t> Elts){
2970 auto *Ty = FixedVectorType::get(Type::getInt64Ty(Context), Elts.size());
2971 const char *Data = reinterpret_cast<const char *>(Elts.data());
2972 return getImpl(StringRef(Data, Elts.size() * 8), Ty);
2973 }
get(LLVMContext & Context,ArrayRef<float> Elts)2974 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<float> Elts) {
2975 auto *Ty = FixedVectorType::get(Type::getFloatTy(Context), Elts.size());
2976 const char *Data = reinterpret_cast<const char *>(Elts.data());
2977 return getImpl(StringRef(Data, Elts.size() * 4), Ty);
2978 }
get(LLVMContext & Context,ArrayRef<double> Elts)2979 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<double> Elts) {
2980 auto *Ty = FixedVectorType::get(Type::getDoubleTy(Context), Elts.size());
2981 const char *Data = reinterpret_cast<const char *>(Elts.data());
2982 return getImpl(StringRef(Data, Elts.size() * 8), Ty);
2983 }
2984
2985 /// getFP() constructors - Return a constant of vector type with a float
2986 /// element type taken from argument `ElementType', and count taken from
2987 /// argument `Elts'. The amount of bits of the contained type must match the
2988 /// number of bits of the type contained in the passed in ArrayRef.
2989 /// (i.e. half or bfloat for 16bits, float for 32bits, double for 64bits) Note
2990 /// that this can return a ConstantAggregateZero object.
getFP(Type * ElementType,ArrayRef<uint16_t> Elts)2991 Constant *ConstantDataVector::getFP(Type *ElementType,
2992 ArrayRef<uint16_t> Elts) {
2993 assert((ElementType->isHalfTy() || ElementType->isBFloatTy()) &&
2994 "Element type is not a 16-bit float type");
2995 auto *Ty = FixedVectorType::get(ElementType, Elts.size());
2996 const char *Data = reinterpret_cast<const char *>(Elts.data());
2997 return getImpl(StringRef(Data, Elts.size() * 2), Ty);
2998 }
getFP(Type * ElementType,ArrayRef<uint32_t> Elts)2999 Constant *ConstantDataVector::getFP(Type *ElementType,
3000 ArrayRef<uint32_t> Elts) {
3001 assert(ElementType->isFloatTy() && "Element type is not a 32-bit float type");
3002 auto *Ty = FixedVectorType::get(ElementType, Elts.size());
3003 const char *Data = reinterpret_cast<const char *>(Elts.data());
3004 return getImpl(StringRef(Data, Elts.size() * 4), Ty);
3005 }
getFP(Type * ElementType,ArrayRef<uint64_t> Elts)3006 Constant *ConstantDataVector::getFP(Type *ElementType,
3007 ArrayRef<uint64_t> Elts) {
3008 assert(ElementType->isDoubleTy() &&
3009 "Element type is not a 64-bit float type");
3010 auto *Ty = FixedVectorType::get(ElementType, Elts.size());
3011 const char *Data = reinterpret_cast<const char *>(Elts.data());
3012 return getImpl(StringRef(Data, Elts.size() * 8), Ty);
3013 }
3014
getSplat(unsigned NumElts,Constant * V)3015 Constant *ConstantDataVector::getSplat(unsigned NumElts, Constant *V) {
3016 assert(isElementTypeCompatible(V->getType()) &&
3017 "Element type not compatible with ConstantData");
3018 if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
3019 if (CI->getType()->isIntegerTy(8)) {
3020 SmallVector<uint8_t, 16> Elts(NumElts, CI->getZExtValue());
3021 return get(V->getContext(), Elts);
3022 }
3023 if (CI->getType()->isIntegerTy(16)) {
3024 SmallVector<uint16_t, 16> Elts(NumElts, CI->getZExtValue());
3025 return get(V->getContext(), Elts);
3026 }
3027 if (CI->getType()->isIntegerTy(32)) {
3028 SmallVector<uint32_t, 16> Elts(NumElts, CI->getZExtValue());
3029 return get(V->getContext(), Elts);
3030 }
3031 assert(CI->getType()->isIntegerTy(64) && "Unsupported ConstantData type");
3032 SmallVector<uint64_t, 16> Elts(NumElts, CI->getZExtValue());
3033 return get(V->getContext(), Elts);
3034 }
3035
3036 if (ConstantFP *CFP = dyn_cast<ConstantFP>(V)) {
3037 if (CFP->getType()->isHalfTy()) {
3038 SmallVector<uint16_t, 16> Elts(
3039 NumElts, CFP->getValueAPF().bitcastToAPInt().getLimitedValue());
3040 return getFP(V->getType(), Elts);
3041 }
3042 if (CFP->getType()->isBFloatTy()) {
3043 SmallVector<uint16_t, 16> Elts(
3044 NumElts, CFP->getValueAPF().bitcastToAPInt().getLimitedValue());
3045 return getFP(V->getType(), Elts);
3046 }
3047 if (CFP->getType()->isFloatTy()) {
3048 SmallVector<uint32_t, 16> Elts(
3049 NumElts, CFP->getValueAPF().bitcastToAPInt().getLimitedValue());
3050 return getFP(V->getType(), Elts);
3051 }
3052 if (CFP->getType()->isDoubleTy()) {
3053 SmallVector<uint64_t, 16> Elts(
3054 NumElts, CFP->getValueAPF().bitcastToAPInt().getLimitedValue());
3055 return getFP(V->getType(), Elts);
3056 }
3057 }
3058 return ConstantVector::getSplat(ElementCount::getFixed(NumElts), V);
3059 }
3060
3061
getElementAsInteger(unsigned Elt) const3062 uint64_t ConstantDataSequential::getElementAsInteger(unsigned Elt) const {
3063 assert(isa<IntegerType>(getElementType()) &&
3064 "Accessor can only be used when element is an integer");
3065 const char *EltPtr = getElementPointer(Elt);
3066
3067 // The data is stored in host byte order, make sure to cast back to the right
3068 // type to load with the right endianness.
3069 switch (getElementType()->getIntegerBitWidth()) {
3070 default: llvm_unreachable("Invalid bitwidth for CDS");
3071 case 8:
3072 return *reinterpret_cast<const uint8_t *>(EltPtr);
3073 case 16:
3074 return *reinterpret_cast<const uint16_t *>(EltPtr);
3075 case 32:
3076 return *reinterpret_cast<const uint32_t *>(EltPtr);
3077 case 64:
3078 return *reinterpret_cast<const uint64_t *>(EltPtr);
3079 }
3080 }
3081
getElementAsAPInt(unsigned Elt) const3082 APInt ConstantDataSequential::getElementAsAPInt(unsigned Elt) const {
3083 assert(isa<IntegerType>(getElementType()) &&
3084 "Accessor can only be used when element is an integer");
3085 const char *EltPtr = getElementPointer(Elt);
3086
3087 // The data is stored in host byte order, make sure to cast back to the right
3088 // type to load with the right endianness.
3089 switch (getElementType()->getIntegerBitWidth()) {
3090 default: llvm_unreachable("Invalid bitwidth for CDS");
3091 case 8: {
3092 auto EltVal = *reinterpret_cast<const uint8_t *>(EltPtr);
3093 return APInt(8, EltVal);
3094 }
3095 case 16: {
3096 auto EltVal = *reinterpret_cast<const uint16_t *>(EltPtr);
3097 return APInt(16, EltVal);
3098 }
3099 case 32: {
3100 auto EltVal = *reinterpret_cast<const uint32_t *>(EltPtr);
3101 return APInt(32, EltVal);
3102 }
3103 case 64: {
3104 auto EltVal = *reinterpret_cast<const uint64_t *>(EltPtr);
3105 return APInt(64, EltVal);
3106 }
3107 }
3108 }
3109
getElementAsAPFloat(unsigned Elt) const3110 APFloat ConstantDataSequential::getElementAsAPFloat(unsigned Elt) const {
3111 const char *EltPtr = getElementPointer(Elt);
3112
3113 switch (getElementType()->getTypeID()) {
3114 default:
3115 llvm_unreachable("Accessor can only be used when element is float/double!");
3116 case Type::HalfTyID: {
3117 auto EltVal = *reinterpret_cast<const uint16_t *>(EltPtr);
3118 return APFloat(APFloat::IEEEhalf(), APInt(16, EltVal));
3119 }
3120 case Type::BFloatTyID: {
3121 auto EltVal = *reinterpret_cast<const uint16_t *>(EltPtr);
3122 return APFloat(APFloat::BFloat(), APInt(16, EltVal));
3123 }
3124 case Type::FloatTyID: {
3125 auto EltVal = *reinterpret_cast<const uint32_t *>(EltPtr);
3126 return APFloat(APFloat::IEEEsingle(), APInt(32, EltVal));
3127 }
3128 case Type::DoubleTyID: {
3129 auto EltVal = *reinterpret_cast<const uint64_t *>(EltPtr);
3130 return APFloat(APFloat::IEEEdouble(), APInt(64, EltVal));
3131 }
3132 }
3133 }
3134
getElementAsFloat(unsigned Elt) const3135 float ConstantDataSequential::getElementAsFloat(unsigned Elt) const {
3136 assert(getElementType()->isFloatTy() &&
3137 "Accessor can only be used when element is a 'float'");
3138 return *reinterpret_cast<const float *>(getElementPointer(Elt));
3139 }
3140
getElementAsDouble(unsigned Elt) const3141 double ConstantDataSequential::getElementAsDouble(unsigned Elt) const {
3142 assert(getElementType()->isDoubleTy() &&
3143 "Accessor can only be used when element is a 'float'");
3144 return *reinterpret_cast<const double *>(getElementPointer(Elt));
3145 }
3146
getElementAsConstant(unsigned Elt) const3147 Constant *ConstantDataSequential::getElementAsConstant(unsigned Elt) const {
3148 if (getElementType()->isHalfTy() || getElementType()->isBFloatTy() ||
3149 getElementType()->isFloatTy() || getElementType()->isDoubleTy())
3150 return ConstantFP::get(getContext(), getElementAsAPFloat(Elt));
3151
3152 return ConstantInt::get(getElementType(), getElementAsInteger(Elt));
3153 }
3154
isString(unsigned CharSize) const3155 bool ConstantDataSequential::isString(unsigned CharSize) const {
3156 return isa<ArrayType>(getType()) && getElementType()->isIntegerTy(CharSize);
3157 }
3158
isCString() const3159 bool ConstantDataSequential::isCString() const {
3160 if (!isString())
3161 return false;
3162
3163 StringRef Str = getAsString();
3164
3165 // The last value must be nul.
3166 if (Str.back() != 0) return false;
3167
3168 // Other elements must be non-nul.
3169 return !Str.drop_back().contains(0);
3170 }
3171
isSplatData() const3172 bool ConstantDataVector::isSplatData() const {
3173 const char *Base = getRawDataValues().data();
3174
3175 // Compare elements 1+ to the 0'th element.
3176 unsigned EltSize = getElementByteSize();
3177 for (unsigned i = 1, e = getNumElements(); i != e; ++i)
3178 if (memcmp(Base, Base+i*EltSize, EltSize))
3179 return false;
3180
3181 return true;
3182 }
3183
isSplat() const3184 bool ConstantDataVector::isSplat() const {
3185 if (!IsSplatSet) {
3186 IsSplatSet = true;
3187 IsSplat = isSplatData();
3188 }
3189 return IsSplat;
3190 }
3191
getSplatValue() const3192 Constant *ConstantDataVector::getSplatValue() const {
3193 // If they're all the same, return the 0th one as a representative.
3194 return isSplat() ? getElementAsConstant(0) : nullptr;
3195 }
3196
3197 //===----------------------------------------------------------------------===//
3198 // handleOperandChange implementations
3199
3200 /// Update this constant array to change uses of
3201 /// 'From' to be uses of 'To'. This must update the uniquing data structures
3202 /// etc.
3203 ///
3204 /// Note that we intentionally replace all uses of From with To here. Consider
3205 /// a large array that uses 'From' 1000 times. By handling this case all here,
3206 /// ConstantArray::handleOperandChange is only invoked once, and that
3207 /// single invocation handles all 1000 uses. Handling them one at a time would
3208 /// work, but would be really slow because it would have to unique each updated
3209 /// array instance.
3210 ///
handleOperandChange(Value * From,Value * To)3211 void Constant::handleOperandChange(Value *From, Value *To) {
3212 Value *Replacement = nullptr;
3213 switch (getValueID()) {
3214 default:
3215 llvm_unreachable("Not a constant!");
3216 #define HANDLE_CONSTANT(Name) \
3217 case Value::Name##Val: \
3218 Replacement = cast<Name>(this)->handleOperandChangeImpl(From, To); \
3219 break;
3220 #include "llvm/IR/Value.def"
3221 }
3222
3223 // If handleOperandChangeImpl returned nullptr, then it handled
3224 // replacing itself and we don't want to delete or replace anything else here.
3225 if (!Replacement)
3226 return;
3227
3228 // I do need to replace this with an existing value.
3229 assert(Replacement != this && "I didn't contain From!");
3230
3231 // Everyone using this now uses the replacement.
3232 replaceAllUsesWith(Replacement);
3233
3234 // Delete the old constant!
3235 destroyConstant();
3236 }
3237
handleOperandChangeImpl(Value * From,Value * To)3238 Value *ConstantArray::handleOperandChangeImpl(Value *From, Value *To) {
3239 assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!");
3240 Constant *ToC = cast<Constant>(To);
3241
3242 SmallVector<Constant*, 8> Values;
3243 Values.reserve(getNumOperands()); // Build replacement array.
3244
3245 // Fill values with the modified operands of the constant array. Also,
3246 // compute whether this turns into an all-zeros array.
3247 unsigned NumUpdated = 0;
3248
3249 // Keep track of whether all the values in the array are "ToC".
3250 bool AllSame = true;
3251 Use *OperandList = getOperandList();
3252 unsigned OperandNo = 0;
3253 for (Use *O = OperandList, *E = OperandList+getNumOperands(); O != E; ++O) {
3254 Constant *Val = cast<Constant>(O->get());
3255 if (Val == From) {
3256 OperandNo = (O - OperandList);
3257 Val = ToC;
3258 ++NumUpdated;
3259 }
3260 Values.push_back(Val);
3261 AllSame &= Val == ToC;
3262 }
3263
3264 if (AllSame && ToC->isNullValue())
3265 return ConstantAggregateZero::get(getType());
3266
3267 if (AllSame && isa<UndefValue>(ToC))
3268 return UndefValue::get(getType());
3269
3270 // Check for any other type of constant-folding.
3271 if (Constant *C = getImpl(getType(), Values))
3272 return C;
3273
3274 // Update to the new value.
3275 return getContext().pImpl->ArrayConstants.replaceOperandsInPlace(
3276 Values, this, From, ToC, NumUpdated, OperandNo);
3277 }
3278
handleOperandChangeImpl(Value * From,Value * To)3279 Value *ConstantStruct::handleOperandChangeImpl(Value *From, Value *To) {
3280 assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!");
3281 Constant *ToC = cast<Constant>(To);
3282
3283 Use *OperandList = getOperandList();
3284
3285 SmallVector<Constant*, 8> Values;
3286 Values.reserve(getNumOperands()); // Build replacement struct.
3287
3288 // Fill values with the modified operands of the constant struct. Also,
3289 // compute whether this turns into an all-zeros struct.
3290 unsigned NumUpdated = 0;
3291 bool AllSame = true;
3292 unsigned OperandNo = 0;
3293 for (Use *O = OperandList, *E = OperandList + getNumOperands(); O != E; ++O) {
3294 Constant *Val = cast<Constant>(O->get());
3295 if (Val == From) {
3296 OperandNo = (O - OperandList);
3297 Val = ToC;
3298 ++NumUpdated;
3299 }
3300 Values.push_back(Val);
3301 AllSame &= Val == ToC;
3302 }
3303
3304 if (AllSame && ToC->isNullValue())
3305 return ConstantAggregateZero::get(getType());
3306
3307 if (AllSame && isa<UndefValue>(ToC))
3308 return UndefValue::get(getType());
3309
3310 // Update to the new value.
3311 return getContext().pImpl->StructConstants.replaceOperandsInPlace(
3312 Values, this, From, ToC, NumUpdated, OperandNo);
3313 }
3314
handleOperandChangeImpl(Value * From,Value * To)3315 Value *ConstantVector::handleOperandChangeImpl(Value *From, Value *To) {
3316 assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!");
3317 Constant *ToC = cast<Constant>(To);
3318
3319 SmallVector<Constant*, 8> Values;
3320 Values.reserve(getNumOperands()); // Build replacement array...
3321 unsigned NumUpdated = 0;
3322 unsigned OperandNo = 0;
3323 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
3324 Constant *Val = getOperand(i);
3325 if (Val == From) {
3326 OperandNo = i;
3327 ++NumUpdated;
3328 Val = ToC;
3329 }
3330 Values.push_back(Val);
3331 }
3332
3333 if (Constant *C = getImpl(Values))
3334 return C;
3335
3336 // Update to the new value.
3337 return getContext().pImpl->VectorConstants.replaceOperandsInPlace(
3338 Values, this, From, ToC, NumUpdated, OperandNo);
3339 }
3340
handleOperandChangeImpl(Value * From,Value * ToV)3341 Value *ConstantExpr::handleOperandChangeImpl(Value *From, Value *ToV) {
3342 assert(isa<Constant>(ToV) && "Cannot make Constant refer to non-constant!");
3343 Constant *To = cast<Constant>(ToV);
3344
3345 SmallVector<Constant*, 8> NewOps;
3346 unsigned NumUpdated = 0;
3347 unsigned OperandNo = 0;
3348 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
3349 Constant *Op = getOperand(i);
3350 if (Op == From) {
3351 OperandNo = i;
3352 ++NumUpdated;
3353 Op = To;
3354 }
3355 NewOps.push_back(Op);
3356 }
3357 assert(NumUpdated && "I didn't contain From!");
3358
3359 if (Constant *C = getWithOperands(NewOps, getType(), true))
3360 return C;
3361
3362 // Update to the new value.
3363 return getContext().pImpl->ExprConstants.replaceOperandsInPlace(
3364 NewOps, this, From, To, NumUpdated, OperandNo);
3365 }
3366
getAsInstruction() const3367 Instruction *ConstantExpr::getAsInstruction() const {
3368 SmallVector<Value *, 4> ValueOperands(operands());
3369 ArrayRef<Value*> Ops(ValueOperands);
3370
3371 switch (getOpcode()) {
3372 case Instruction::Trunc:
3373 case Instruction::PtrToInt:
3374 case Instruction::IntToPtr:
3375 case Instruction::BitCast:
3376 case Instruction::AddrSpaceCast:
3377 return CastInst::Create((Instruction::CastOps)getOpcode(), Ops[0],
3378 getType(), "");
3379 case Instruction::InsertElement:
3380 return InsertElementInst::Create(Ops[0], Ops[1], Ops[2], "");
3381 case Instruction::ExtractElement:
3382 return ExtractElementInst::Create(Ops[0], Ops[1], "");
3383 case Instruction::ShuffleVector:
3384 return new ShuffleVectorInst(Ops[0], Ops[1], getShuffleMask(), "");
3385
3386 case Instruction::GetElementPtr: {
3387 const auto *GO = cast<GEPOperator>(this);
3388 return GetElementPtrInst::Create(GO->getSourceElementType(), Ops[0],
3389 Ops.slice(1), GO->getNoWrapFlags(), "");
3390 }
3391 default:
3392 assert(getNumOperands() == 2 && "Must be binary operator?");
3393 BinaryOperator *BO = BinaryOperator::Create(
3394 (Instruction::BinaryOps)getOpcode(), Ops[0], Ops[1], "");
3395 if (isa<OverflowingBinaryOperator>(BO)) {
3396 BO->setHasNoUnsignedWrap(SubclassOptionalData &
3397 OverflowingBinaryOperator::NoUnsignedWrap);
3398 BO->setHasNoSignedWrap(SubclassOptionalData &
3399 OverflowingBinaryOperator::NoSignedWrap);
3400 }
3401 if (isa<PossiblyExactOperator>(BO))
3402 BO->setIsExact(SubclassOptionalData & PossiblyExactOperator::IsExact);
3403 return BO;
3404 }
3405 }
3406