xref: /freebsd/contrib/llvm-project/llvm/lib/IR/Constants.cpp (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
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