1 //===-- Constants.cpp - Implement Constant nodes --------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements the Constant* classes.
12 //===----------------------------------------------------------------------===//
14 #include "llvm/Constants.h"
15 #include "LLVMContextImpl.h"
16 #include "ConstantFold.h"
17 #include "llvm/DerivedTypes.h"
18 #include "llvm/GlobalValue.h"
19 #include "llvm/Instructions.h"
20 #include "llvm/Module.h"
21 #include "llvm/Operator.h"
22 #include "llvm/ADT/FoldingSet.h"
23 #include "llvm/ADT/StringExtras.h"
24 #include "llvm/ADT/StringMap.h"
25 #include "llvm/Support/Compiler.h"
26 #include "llvm/Support/Debug.h"
27 #include "llvm/Support/ErrorHandling.h"
28 #include "llvm/Support/ManagedStatic.h"
29 #include "llvm/Support/MathExtras.h"
30 #include "llvm/Support/raw_ostream.h"
31 #include "llvm/Support/GetElementPtrTypeIterator.h"
32 #include "llvm/ADT/DenseMap.h"
33 #include "llvm/ADT/SmallVector.h"
34 #include "llvm/ADT/STLExtras.h"
39 //===----------------------------------------------------------------------===//
41 //===----------------------------------------------------------------------===//
43 // Constructor to create a '0' constant of arbitrary type...
44 Constant
*Constant::getNullValue(const Type
*Ty
) {
45 switch (Ty
->getTypeID()) {
46 case Type::IntegerTyID
:
47 return ConstantInt::get(Ty
, 0);
49 return ConstantFP::get(Ty
->getContext(),
50 APFloat::getZero(APFloat::IEEEsingle
));
51 case Type::DoubleTyID
:
52 return ConstantFP::get(Ty
->getContext(),
53 APFloat::getZero(APFloat::IEEEdouble
));
54 case Type::X86_FP80TyID
:
55 return ConstantFP::get(Ty
->getContext(),
56 APFloat::getZero(APFloat::x87DoubleExtended
));
58 return ConstantFP::get(Ty
->getContext(),
59 APFloat::getZero(APFloat::IEEEquad
));
60 case Type::PPC_FP128TyID
:
61 return ConstantFP::get(Ty
->getContext(),
62 APFloat(APInt::getNullValue(128)));
63 case Type::PointerTyID
:
64 return ConstantPointerNull::get(cast
<PointerType
>(Ty
));
65 case Type::StructTyID
:
67 case Type::VectorTyID
:
68 return ConstantAggregateZero::get(Ty
);
70 // Function, Label, or Opaque type?
71 assert(!"Cannot create a null constant of that type!");
76 Constant
*Constant::getIntegerValue(const Type
*Ty
, const APInt
&V
) {
77 const Type
*ScalarTy
= Ty
->getScalarType();
79 // Create the base integer constant.
80 Constant
*C
= ConstantInt::get(Ty
->getContext(), V
);
82 // Convert an integer to a pointer, if necessary.
83 if (const PointerType
*PTy
= dyn_cast
<PointerType
>(ScalarTy
))
84 C
= ConstantExpr::getIntToPtr(C
, PTy
);
86 // Broadcast a scalar to a vector, if necessary.
87 if (const VectorType
*VTy
= dyn_cast
<VectorType
>(Ty
))
88 C
= ConstantVector::get(std::vector
<Constant
*>(VTy
->getNumElements(), C
));
93 Constant
*Constant::getAllOnesValue(const Type
*Ty
) {
94 if (const IntegerType
*ITy
= dyn_cast
<IntegerType
>(Ty
))
95 return ConstantInt::get(Ty
->getContext(),
96 APInt::getAllOnesValue(ITy
->getBitWidth()));
98 if (Ty
->isFloatingPointTy()) {
99 APFloat FL
= APFloat::getAllOnesValue(Ty
->getPrimitiveSizeInBits(),
100 !Ty
->isPPC_FP128Ty());
101 return ConstantFP::get(Ty
->getContext(), FL
);
104 SmallVector
<Constant
*, 16> Elts
;
105 const VectorType
*VTy
= cast
<VectorType
>(Ty
);
106 Elts
.resize(VTy
->getNumElements(), getAllOnesValue(VTy
->getElementType()));
107 assert(Elts
[0] && "Not a vector integer type!");
108 return cast
<ConstantVector
>(ConstantVector::get(Elts
));
111 void Constant::destroyConstantImpl() {
112 // When a Constant is destroyed, there may be lingering
113 // references to the constant by other constants in the constant pool. These
114 // constants are implicitly dependent on the module that is being deleted,
115 // but they don't know that. Because we only find out when the CPV is
116 // deleted, we must now notify all of our users (that should only be
117 // Constants) that they are, in fact, invalid now and should be deleted.
119 while (!use_empty()) {
120 Value
*V
= use_back();
121 #ifndef NDEBUG // Only in -g mode...
122 if (!isa
<Constant
>(V
)) {
123 dbgs() << "While deleting: " << *this
124 << "\n\nUse still stuck around after Def is destroyed: "
128 assert(isa
<Constant
>(V
) && "References remain to Constant being destroyed");
129 Constant
*CV
= cast
<Constant
>(V
);
130 CV
->destroyConstant();
132 // The constant should remove itself from our use list...
133 assert((use_empty() || use_back() != V
) && "Constant not removed!");
136 // Value has no outstanding references it is safe to delete it now...
140 /// canTrap - Return true if evaluation of this constant could trap. This is
141 /// true for things like constant expressions that could divide by zero.
142 bool Constant::canTrap() const {
143 assert(getType()->isFirstClassType() && "Cannot evaluate aggregate vals!");
144 // The only thing that could possibly trap are constant exprs.
145 const ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(this);
146 if (!CE
) return false;
148 // ConstantExpr traps if any operands can trap.
149 for (unsigned i
= 0, e
= getNumOperands(); i
!= e
; ++i
)
150 if (CE
->getOperand(i
)->canTrap())
153 // Otherwise, only specific operations can trap.
154 switch (CE
->getOpcode()) {
157 case Instruction::UDiv
:
158 case Instruction::SDiv
:
159 case Instruction::FDiv
:
160 case Instruction::URem
:
161 case Instruction::SRem
:
162 case Instruction::FRem
:
163 // Div and rem can trap if the RHS is not known to be non-zero.
164 if (!isa
<ConstantInt
>(CE
->getOperand(1)) ||CE
->getOperand(1)->isNullValue())
170 /// isConstantUsed - Return true if the constant has users other than constant
171 /// exprs and other dangling things.
172 bool Constant::isConstantUsed() const {
173 for (const_use_iterator UI
= use_begin(), E
= use_end(); UI
!= E
; ++UI
) {
174 const Constant
*UC
= dyn_cast
<Constant
>(*UI
);
175 if (UC
== 0 || isa
<GlobalValue
>(UC
))
178 if (UC
->isConstantUsed())
186 /// getRelocationInfo - This method classifies the entry according to
187 /// whether or not it may generate a relocation entry. This must be
188 /// conservative, so if it might codegen to a relocatable entry, it should say
189 /// so. The return values are:
191 /// NoRelocation: This constant pool entry is guaranteed to never have a
192 /// relocation applied to it (because it holds a simple constant like
194 /// LocalRelocation: This entry has relocations, but the entries are
195 /// guaranteed to be resolvable by the static linker, so the dynamic
196 /// linker will never see them.
197 /// GlobalRelocations: This entry may have arbitrary relocations.
199 /// FIXME: This really should not be in VMCore.
200 Constant::PossibleRelocationsTy
Constant::getRelocationInfo() const {
201 if (const GlobalValue
*GV
= dyn_cast
<GlobalValue
>(this)) {
202 if (GV
->hasLocalLinkage() || GV
->hasHiddenVisibility())
203 return LocalRelocation
; // Local to this file/library.
204 return GlobalRelocations
; // Global reference.
207 if (const BlockAddress
*BA
= dyn_cast
<BlockAddress
>(this))
208 return BA
->getFunction()->getRelocationInfo();
210 // While raw uses of blockaddress need to be relocated, differences between
211 // two of them don't when they are for labels in the same function. This is a
212 // common idiom when creating a table for the indirect goto extension, so we
213 // handle it efficiently here.
214 if (const ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(this))
215 if (CE
->getOpcode() == Instruction::Sub
) {
216 ConstantExpr
*LHS
= dyn_cast
<ConstantExpr
>(CE
->getOperand(0));
217 ConstantExpr
*RHS
= dyn_cast
<ConstantExpr
>(CE
->getOperand(1));
219 LHS
->getOpcode() == Instruction::PtrToInt
&&
220 RHS
->getOpcode() == Instruction::PtrToInt
&&
221 isa
<BlockAddress
>(LHS
->getOperand(0)) &&
222 isa
<BlockAddress
>(RHS
->getOperand(0)) &&
223 cast
<BlockAddress
>(LHS
->getOperand(0))->getFunction() ==
224 cast
<BlockAddress
>(RHS
->getOperand(0))->getFunction())
228 PossibleRelocationsTy Result
= NoRelocation
;
229 for (unsigned i
= 0, e
= getNumOperands(); i
!= e
; ++i
)
230 Result
= std::max(Result
,
231 cast
<Constant
>(getOperand(i
))->getRelocationInfo());
237 /// getVectorElements - This method, which is only valid on constant of vector
238 /// type, returns the elements of the vector in the specified smallvector.
239 /// This handles breaking down a vector undef into undef elements, etc. For
240 /// constant exprs and other cases we can't handle, we return an empty vector.
241 void Constant::getVectorElements(SmallVectorImpl
<Constant
*> &Elts
) const {
242 assert(getType()->isVectorTy() && "Not a vector constant!");
244 if (const ConstantVector
*CV
= dyn_cast
<ConstantVector
>(this)) {
245 for (unsigned i
= 0, e
= CV
->getNumOperands(); i
!= e
; ++i
)
246 Elts
.push_back(CV
->getOperand(i
));
250 const VectorType
*VT
= cast
<VectorType
>(getType());
251 if (isa
<ConstantAggregateZero
>(this)) {
252 Elts
.assign(VT
->getNumElements(),
253 Constant::getNullValue(VT
->getElementType()));
257 if (isa
<UndefValue
>(this)) {
258 Elts
.assign(VT
->getNumElements(), UndefValue::get(VT
->getElementType()));
262 // Unknown type, must be constant expr etc.
266 /// removeDeadUsersOfConstant - If the specified constantexpr is dead, remove
267 /// it. This involves recursively eliminating any dead users of the
269 static bool removeDeadUsersOfConstant(const Constant
*C
) {
270 if (isa
<GlobalValue
>(C
)) return false; // Cannot remove this
272 while (!C
->use_empty()) {
273 const Constant
*User
= dyn_cast
<Constant
>(C
->use_back());
274 if (!User
) return false; // Non-constant usage;
275 if (!removeDeadUsersOfConstant(User
))
276 return false; // Constant wasn't dead
279 const_cast<Constant
*>(C
)->destroyConstant();
284 /// removeDeadConstantUsers - If there are any dead constant users dangling
285 /// off of this constant, remove them. This method is useful for clients
286 /// that want to check to see if a global is unused, but don't want to deal
287 /// with potentially dead constants hanging off of the globals.
288 void Constant::removeDeadConstantUsers() const {
289 Value::const_use_iterator I
= use_begin(), E
= use_end();
290 Value::const_use_iterator LastNonDeadUser
= E
;
292 const Constant
*User
= dyn_cast
<Constant
>(*I
);
299 if (!removeDeadUsersOfConstant(User
)) {
300 // If the constant wasn't dead, remember that this was the last live use
301 // and move on to the next constant.
307 // If the constant was dead, then the iterator is invalidated.
308 if (LastNonDeadUser
== E
) {
320 //===----------------------------------------------------------------------===//
322 //===----------------------------------------------------------------------===//
324 ConstantInt::ConstantInt(const IntegerType
*Ty
, const APInt
& V
)
325 : Constant(Ty
, ConstantIntVal
, 0, 0), Val(V
) {
326 assert(V
.getBitWidth() == Ty
->getBitWidth() && "Invalid constant for type");
329 ConstantInt
*ConstantInt::getTrue(LLVMContext
&Context
) {
330 LLVMContextImpl
*pImpl
= Context
.pImpl
;
331 if (!pImpl
->TheTrueVal
)
332 pImpl
->TheTrueVal
= ConstantInt::get(Type::getInt1Ty(Context
), 1);
333 return pImpl
->TheTrueVal
;
336 ConstantInt
*ConstantInt::getFalse(LLVMContext
&Context
) {
337 LLVMContextImpl
*pImpl
= Context
.pImpl
;
338 if (!pImpl
->TheFalseVal
)
339 pImpl
->TheFalseVal
= ConstantInt::get(Type::getInt1Ty(Context
), 0);
340 return pImpl
->TheFalseVal
;
343 Constant
*ConstantInt::getTrue(const Type
*Ty
) {
344 const VectorType
*VTy
= dyn_cast
<VectorType
>(Ty
);
346 assert(Ty
->isIntegerTy(1) && "True must be i1 or vector of i1.");
347 return ConstantInt::getTrue(Ty
->getContext());
349 assert(VTy
->getElementType()->isIntegerTy(1) &&
350 "True must be vector of i1 or i1.");
351 SmallVector
<Constant
*, 16> Splat(VTy
->getNumElements(),
352 ConstantInt::getTrue(Ty
->getContext()));
353 return ConstantVector::get(Splat
);
356 Constant
*ConstantInt::getFalse(const Type
*Ty
) {
357 const VectorType
*VTy
= dyn_cast
<VectorType
>(Ty
);
359 assert(Ty
->isIntegerTy(1) && "False must be i1 or vector of i1.");
360 return ConstantInt::getFalse(Ty
->getContext());
362 assert(VTy
->getElementType()->isIntegerTy(1) &&
363 "False must be vector of i1 or i1.");
364 SmallVector
<Constant
*, 16> Splat(VTy
->getNumElements(),
365 ConstantInt::getFalse(Ty
->getContext()));
366 return ConstantVector::get(Splat
);
370 // Get a ConstantInt from an APInt. Note that the value stored in the DenseMap
371 // as the key, is a DenseMapAPIntKeyInfo::KeyTy which has provided the
372 // operator== and operator!= to ensure that the DenseMap doesn't attempt to
373 // compare APInt's of different widths, which would violate an APInt class
374 // invariant which generates an assertion.
375 ConstantInt
*ConstantInt::get(LLVMContext
&Context
, const APInt
&V
) {
376 // Get the corresponding integer type for the bit width of the value.
377 const IntegerType
*ITy
= IntegerType::get(Context
, V
.getBitWidth());
378 // get an existing value or the insertion position
379 DenseMapAPIntKeyInfo::KeyTy
Key(V
, ITy
);
380 ConstantInt
*&Slot
= Context
.pImpl
->IntConstants
[Key
];
381 if (!Slot
) Slot
= new ConstantInt(ITy
, V
);
385 Constant
*ConstantInt::get(const Type
*Ty
, uint64_t V
, bool isSigned
) {
386 Constant
*C
= get(cast
<IntegerType
>(Ty
->getScalarType()), V
, isSigned
);
388 // For vectors, broadcast the value.
389 if (const VectorType
*VTy
= dyn_cast
<VectorType
>(Ty
))
390 return ConstantVector::get(SmallVector
<Constant
*,
391 16>(VTy
->getNumElements(), C
));
396 ConstantInt
* ConstantInt::get(const IntegerType
* Ty
, uint64_t V
,
398 return get(Ty
->getContext(), APInt(Ty
->getBitWidth(), V
, isSigned
));
401 ConstantInt
* ConstantInt::getSigned(const IntegerType
* Ty
, int64_t V
) {
402 return get(Ty
, V
, true);
405 Constant
*ConstantInt::getSigned(const Type
*Ty
, int64_t V
) {
406 return get(Ty
, V
, true);
409 Constant
*ConstantInt::get(const Type
* Ty
, const APInt
& V
) {
410 ConstantInt
*C
= get(Ty
->getContext(), V
);
411 assert(C
->getType() == Ty
->getScalarType() &&
412 "ConstantInt type doesn't match the type implied by its value!");
414 // For vectors, broadcast the value.
415 if (const VectorType
*VTy
= dyn_cast
<VectorType
>(Ty
))
416 return ConstantVector::get(
417 SmallVector
<Constant
*, 16>(VTy
->getNumElements(), C
));
422 ConstantInt
* ConstantInt::get(const IntegerType
* Ty
, StringRef Str
,
424 return get(Ty
->getContext(), APInt(Ty
->getBitWidth(), Str
, radix
));
427 //===----------------------------------------------------------------------===//
429 //===----------------------------------------------------------------------===//
431 static const fltSemantics
*TypeToFloatSemantics(const Type
*Ty
) {
433 return &APFloat::IEEEsingle
;
434 if (Ty
->isDoubleTy())
435 return &APFloat::IEEEdouble
;
436 if (Ty
->isX86_FP80Ty())
437 return &APFloat::x87DoubleExtended
;
438 else if (Ty
->isFP128Ty())
439 return &APFloat::IEEEquad
;
441 assert(Ty
->isPPC_FP128Ty() && "Unknown FP format");
442 return &APFloat::PPCDoubleDouble
;
445 /// get() - This returns a constant fp for the specified value in the
446 /// specified type. This should only be used for simple constant values like
447 /// 2.0/1.0 etc, that are known-valid both as double and as the target format.
448 Constant
*ConstantFP::get(const Type
* Ty
, double V
) {
449 LLVMContext
&Context
= Ty
->getContext();
453 FV
.convert(*TypeToFloatSemantics(Ty
->getScalarType()),
454 APFloat::rmNearestTiesToEven
, &ignored
);
455 Constant
*C
= get(Context
, FV
);
457 // For vectors, broadcast the value.
458 if (const VectorType
*VTy
= dyn_cast
<VectorType
>(Ty
))
459 return ConstantVector::get(
460 SmallVector
<Constant
*, 16>(VTy
->getNumElements(), C
));
466 Constant
*ConstantFP::get(const Type
* Ty
, StringRef Str
) {
467 LLVMContext
&Context
= Ty
->getContext();
469 APFloat
FV(*TypeToFloatSemantics(Ty
->getScalarType()), Str
);
470 Constant
*C
= get(Context
, FV
);
472 // For vectors, broadcast the value.
473 if (const VectorType
*VTy
= dyn_cast
<VectorType
>(Ty
))
474 return ConstantVector::get(
475 SmallVector
<Constant
*, 16>(VTy
->getNumElements(), C
));
481 ConstantFP
* ConstantFP::getNegativeZero(const Type
* Ty
) {
482 LLVMContext
&Context
= Ty
->getContext();
483 APFloat apf
= cast
<ConstantFP
>(Constant::getNullValue(Ty
))->getValueAPF();
485 return get(Context
, apf
);
489 Constant
*ConstantFP::getZeroValueForNegation(const Type
* Ty
) {
490 if (const VectorType
*PTy
= dyn_cast
<VectorType
>(Ty
))
491 if (PTy
->getElementType()->isFloatingPointTy()) {
492 SmallVector
<Constant
*, 16> zeros(PTy
->getNumElements(),
493 getNegativeZero(PTy
->getElementType()));
494 return ConstantVector::get(zeros
);
497 if (Ty
->isFloatingPointTy())
498 return getNegativeZero(Ty
);
500 return Constant::getNullValue(Ty
);
504 // ConstantFP accessors.
505 ConstantFP
* ConstantFP::get(LLVMContext
&Context
, const APFloat
& V
) {
506 DenseMapAPFloatKeyInfo::KeyTy
Key(V
);
508 LLVMContextImpl
* pImpl
= Context
.pImpl
;
510 ConstantFP
*&Slot
= pImpl
->FPConstants
[Key
];
514 if (&V
.getSemantics() == &APFloat::IEEEsingle
)
515 Ty
= Type::getFloatTy(Context
);
516 else if (&V
.getSemantics() == &APFloat::IEEEdouble
)
517 Ty
= Type::getDoubleTy(Context
);
518 else if (&V
.getSemantics() == &APFloat::x87DoubleExtended
)
519 Ty
= Type::getX86_FP80Ty(Context
);
520 else if (&V
.getSemantics() == &APFloat::IEEEquad
)
521 Ty
= Type::getFP128Ty(Context
);
523 assert(&V
.getSemantics() == &APFloat::PPCDoubleDouble
&&
524 "Unknown FP format");
525 Ty
= Type::getPPC_FP128Ty(Context
);
527 Slot
= new ConstantFP(Ty
, V
);
533 ConstantFP
*ConstantFP::getInfinity(const Type
*Ty
, bool Negative
) {
534 const fltSemantics
&Semantics
= *TypeToFloatSemantics(Ty
);
535 return ConstantFP::get(Ty
->getContext(),
536 APFloat::getInf(Semantics
, Negative
));
539 ConstantFP::ConstantFP(const Type
*Ty
, const APFloat
& V
)
540 : Constant(Ty
, ConstantFPVal
, 0, 0), Val(V
) {
541 assert(&V
.getSemantics() == TypeToFloatSemantics(Ty
) &&
545 bool ConstantFP::isNullValue() const {
546 return Val
.isZero() && !Val
.isNegative();
549 bool ConstantFP::isExactlyValue(const APFloat
& V
) const {
550 return Val
.bitwiseIsEqual(V
);
553 //===----------------------------------------------------------------------===//
554 // ConstantXXX Classes
555 //===----------------------------------------------------------------------===//
558 ConstantArray::ConstantArray(const ArrayType
*T
,
559 const std::vector
<Constant
*> &V
)
560 : Constant(T
, ConstantArrayVal
,
561 OperandTraits
<ConstantArray
>::op_end(this) - V
.size(),
563 assert(V
.size() == T
->getNumElements() &&
564 "Invalid initializer vector for constant array");
565 Use
*OL
= OperandList
;
566 for (std::vector
<Constant
*>::const_iterator I
= V
.begin(), E
= V
.end();
569 assert(C
->getType() == T
->getElementType() &&
570 "Initializer for array element doesn't match array element type!");
575 Constant
*ConstantArray::get(const ArrayType
*Ty
, ArrayRef
<Constant
*> V
) {
576 for (unsigned i
= 0, e
= V
.size(); i
!= e
; ++i
) {
577 assert(V
[i
]->getType() == Ty
->getElementType() &&
578 "Wrong type in array element initializer");
580 LLVMContextImpl
*pImpl
= Ty
->getContext().pImpl
;
581 // If this is an all-zero array, return a ConstantAggregateZero object
584 if (!C
->isNullValue())
585 return pImpl
->ArrayConstants
.getOrCreate(Ty
, V
);
587 for (unsigned i
= 1, e
= V
.size(); i
!= e
; ++i
)
589 return pImpl
->ArrayConstants
.getOrCreate(Ty
, V
);
592 return ConstantAggregateZero::get(Ty
);
595 /// ConstantArray::get(const string&) - Return an array that is initialized to
596 /// contain the specified string. If length is zero then a null terminator is
597 /// added to the specified string so that it may be used in a natural way.
598 /// Otherwise, the length parameter specifies how much of the string to use
599 /// and it won't be null terminated.
601 Constant
*ConstantArray::get(LLVMContext
&Context
, StringRef Str
,
603 std::vector
<Constant
*> ElementVals
;
604 ElementVals
.reserve(Str
.size() + size_t(AddNull
));
605 for (unsigned i
= 0; i
< Str
.size(); ++i
)
606 ElementVals
.push_back(ConstantInt::get(Type::getInt8Ty(Context
), Str
[i
]));
608 // Add a null terminator to the string...
610 ElementVals
.push_back(ConstantInt::get(Type::getInt8Ty(Context
), 0));
613 ArrayType
*ATy
= ArrayType::get(Type::getInt8Ty(Context
), ElementVals
.size());
614 return get(ATy
, ElementVals
);
617 /// getTypeForElements - Return an anonymous struct type to use for a constant
618 /// with the specified set of elements. The list must not be empty.
619 StructType
*ConstantStruct::getTypeForElements(LLVMContext
&Context
,
620 ArrayRef
<Constant
*> V
,
622 SmallVector
<const Type
*, 16> EltTypes
;
623 for (unsigned i
= 0, e
= V
.size(); i
!= e
; ++i
)
624 EltTypes
.push_back(V
[i
]->getType());
626 return StructType::get(Context
, EltTypes
, Packed
);
630 StructType
*ConstantStruct::getTypeForElements(ArrayRef
<Constant
*> V
,
633 "ConstantStruct::getTypeForElements cannot be called on empty list");
634 return getTypeForElements(V
[0]->getContext(), V
, Packed
);
638 ConstantStruct::ConstantStruct(const StructType
*T
,
639 const std::vector
<Constant
*> &V
)
640 : Constant(T
, ConstantStructVal
,
641 OperandTraits
<ConstantStruct
>::op_end(this) - V
.size(),
643 assert((T
->isOpaque() || V
.size() == T
->getNumElements()) &&
644 "Invalid initializer vector for constant structure");
645 Use
*OL
= OperandList
;
646 for (std::vector
<Constant
*>::const_iterator I
= V
.begin(), E
= V
.end();
649 assert((T
->isOpaque() || C
->getType() == T
->getElementType(I
-V
.begin())) &&
650 "Initializer for struct element doesn't match struct element type!");
655 // ConstantStruct accessors.
656 Constant
*ConstantStruct::get(const StructType
*ST
, ArrayRef
<Constant
*> V
) {
657 // Create a ConstantAggregateZero value if all elements are zeros.
658 for (unsigned i
= 0, e
= V
.size(); i
!= e
; ++i
)
659 if (!V
[i
]->isNullValue())
660 return ST
->getContext().pImpl
->StructConstants
.getOrCreate(ST
, V
);
662 assert((ST
->isOpaque() || ST
->getNumElements() == V
.size()) &&
663 "Incorrect # elements specified to ConstantStruct::get");
664 return ConstantAggregateZero::get(ST
);
667 Constant
* ConstantStruct::get(const StructType
*T
, ...) {
669 SmallVector
<Constant
*, 8> Values
;
671 while (Constant
*Val
= va_arg(ap
, llvm::Constant
*))
672 Values
.push_back(Val
);
674 return get(T
, Values
);
677 ConstantVector::ConstantVector(const VectorType
*T
,
678 const std::vector
<Constant
*> &V
)
679 : Constant(T
, ConstantVectorVal
,
680 OperandTraits
<ConstantVector
>::op_end(this) - V
.size(),
682 Use
*OL
= OperandList
;
683 for (std::vector
<Constant
*>::const_iterator I
= V
.begin(), E
= V
.end();
686 assert(C
->getType() == T
->getElementType() &&
687 "Initializer for vector element doesn't match vector element type!");
692 // ConstantVector accessors.
693 Constant
*ConstantVector::get(ArrayRef
<Constant
*> V
) {
694 assert(!V
.empty() && "Vectors can't be empty");
695 const VectorType
*T
= VectorType::get(V
.front()->getType(), V
.size());
696 LLVMContextImpl
*pImpl
= T
->getContext().pImpl
;
698 // If this is an all-undef or all-zero vector, return a
699 // ConstantAggregateZero or UndefValue.
701 bool isZero
= C
->isNullValue();
702 bool isUndef
= isa
<UndefValue
>(C
);
704 if (isZero
|| isUndef
) {
705 for (unsigned i
= 1, e
= V
.size(); i
!= e
; ++i
)
707 isZero
= isUndef
= false;
713 return ConstantAggregateZero::get(T
);
715 return UndefValue::get(T
);
717 return pImpl
->VectorConstants
.getOrCreate(T
, V
);
720 // Utility function for determining if a ConstantExpr is a CastOp or not. This
721 // can't be inline because we don't want to #include Instruction.h into
723 bool ConstantExpr::isCast() const {
724 return Instruction::isCast(getOpcode());
727 bool ConstantExpr::isCompare() const {
728 return getOpcode() == Instruction::ICmp
|| getOpcode() == Instruction::FCmp
;
731 bool ConstantExpr::isGEPWithNoNotionalOverIndexing() const {
732 if (getOpcode() != Instruction::GetElementPtr
) return false;
734 gep_type_iterator GEPI
= gep_type_begin(this), E
= gep_type_end(this);
735 User::const_op_iterator OI
= llvm::next(this->op_begin());
737 // Skip the first index, as it has no static limit.
741 // The remaining indices must be compile-time known integers within the
742 // bounds of the corresponding notional static array types.
743 for (; GEPI
!= E
; ++GEPI
, ++OI
) {
744 ConstantInt
*CI
= dyn_cast
<ConstantInt
>(*OI
);
745 if (!CI
) return false;
746 if (const ArrayType
*ATy
= dyn_cast
<ArrayType
>(*GEPI
))
747 if (CI
->getValue().getActiveBits() > 64 ||
748 CI
->getZExtValue() >= ATy
->getNumElements())
752 // All the indices checked out.
756 bool ConstantExpr::hasIndices() const {
757 return getOpcode() == Instruction::ExtractValue
||
758 getOpcode() == Instruction::InsertValue
;
761 ArrayRef
<unsigned> ConstantExpr::getIndices() const {
762 if (const ExtractValueConstantExpr
*EVCE
=
763 dyn_cast
<ExtractValueConstantExpr
>(this))
764 return EVCE
->Indices
;
766 return cast
<InsertValueConstantExpr
>(this)->Indices
;
769 unsigned ConstantExpr::getPredicate() const {
770 assert(getOpcode() == Instruction::FCmp
||
771 getOpcode() == Instruction::ICmp
);
772 return ((const CompareConstantExpr
*)this)->predicate
;
775 /// getWithOperandReplaced - Return a constant expression identical to this
776 /// one, but with the specified operand set to the specified value.
778 ConstantExpr::getWithOperandReplaced(unsigned OpNo
, Constant
*Op
) const {
779 assert(OpNo
< getNumOperands() && "Operand num is out of range!");
780 assert(Op
->getType() == getOperand(OpNo
)->getType() &&
781 "Replacing operand with value of different type!");
782 if (getOperand(OpNo
) == Op
)
783 return const_cast<ConstantExpr
*>(this);
785 Constant
*Op0
, *Op1
, *Op2
;
786 switch (getOpcode()) {
787 case Instruction::Trunc
:
788 case Instruction::ZExt
:
789 case Instruction::SExt
:
790 case Instruction::FPTrunc
:
791 case Instruction::FPExt
:
792 case Instruction::UIToFP
:
793 case Instruction::SIToFP
:
794 case Instruction::FPToUI
:
795 case Instruction::FPToSI
:
796 case Instruction::PtrToInt
:
797 case Instruction::IntToPtr
:
798 case Instruction::BitCast
:
799 return ConstantExpr::getCast(getOpcode(), Op
, getType());
800 case Instruction::Select
:
801 Op0
= (OpNo
== 0) ? Op
: getOperand(0);
802 Op1
= (OpNo
== 1) ? Op
: getOperand(1);
803 Op2
= (OpNo
== 2) ? Op
: getOperand(2);
804 return ConstantExpr::getSelect(Op0
, Op1
, Op2
);
805 case Instruction::InsertElement
:
806 Op0
= (OpNo
== 0) ? Op
: getOperand(0);
807 Op1
= (OpNo
== 1) ? Op
: getOperand(1);
808 Op2
= (OpNo
== 2) ? Op
: getOperand(2);
809 return ConstantExpr::getInsertElement(Op0
, Op1
, Op2
);
810 case Instruction::ExtractElement
:
811 Op0
= (OpNo
== 0) ? Op
: getOperand(0);
812 Op1
= (OpNo
== 1) ? Op
: getOperand(1);
813 return ConstantExpr::getExtractElement(Op0
, Op1
);
814 case Instruction::ShuffleVector
:
815 Op0
= (OpNo
== 0) ? Op
: getOperand(0);
816 Op1
= (OpNo
== 1) ? Op
: getOperand(1);
817 Op2
= (OpNo
== 2) ? Op
: getOperand(2);
818 return ConstantExpr::getShuffleVector(Op0
, Op1
, Op2
);
819 case Instruction::GetElementPtr
: {
820 SmallVector
<Constant
*, 8> Ops
;
821 Ops
.resize(getNumOperands()-1);
822 for (unsigned i
= 1, e
= getNumOperands(); i
!= e
; ++i
)
823 Ops
[i
-1] = getOperand(i
);
825 return cast
<GEPOperator
>(this)->isInBounds() ?
826 ConstantExpr::getInBoundsGetElementPtr(Op
, &Ops
[0], Ops
.size()) :
827 ConstantExpr::getGetElementPtr(Op
, &Ops
[0], Ops
.size());
829 return cast
<GEPOperator
>(this)->isInBounds() ?
830 ConstantExpr::getInBoundsGetElementPtr(getOperand(0), &Ops
[0],Ops
.size()):
831 ConstantExpr::getGetElementPtr(getOperand(0), &Ops
[0], Ops
.size());
834 assert(getNumOperands() == 2 && "Must be binary operator?");
835 Op0
= (OpNo
== 0) ? Op
: getOperand(0);
836 Op1
= (OpNo
== 1) ? Op
: getOperand(1);
837 return ConstantExpr::get(getOpcode(), Op0
, Op1
, SubclassOptionalData
);
841 /// getWithOperands - This returns the current constant expression with the
842 /// operands replaced with the specified values. The specified array must
843 /// have the same number of operands as our current one.
844 Constant
*ConstantExpr::
845 getWithOperands(ArrayRef
<Constant
*> Ops
, const Type
*Ty
) const {
846 assert(Ops
.size() == getNumOperands() && "Operand count mismatch!");
847 bool AnyChange
= Ty
!= getType();
848 for (unsigned i
= 0; i
!= Ops
.size(); ++i
)
849 AnyChange
|= Ops
[i
] != getOperand(i
);
851 if (!AnyChange
) // No operands changed, return self.
852 return const_cast<ConstantExpr
*>(this);
854 switch (getOpcode()) {
855 case Instruction::Trunc
:
856 case Instruction::ZExt
:
857 case Instruction::SExt
:
858 case Instruction::FPTrunc
:
859 case Instruction::FPExt
:
860 case Instruction::UIToFP
:
861 case Instruction::SIToFP
:
862 case Instruction::FPToUI
:
863 case Instruction::FPToSI
:
864 case Instruction::PtrToInt
:
865 case Instruction::IntToPtr
:
866 case Instruction::BitCast
:
867 return ConstantExpr::getCast(getOpcode(), Ops
[0], Ty
);
868 case Instruction::Select
:
869 return ConstantExpr::getSelect(Ops
[0], Ops
[1], Ops
[2]);
870 case Instruction::InsertElement
:
871 return ConstantExpr::getInsertElement(Ops
[0], Ops
[1], Ops
[2]);
872 case Instruction::ExtractElement
:
873 return ConstantExpr::getExtractElement(Ops
[0], Ops
[1]);
874 case Instruction::ShuffleVector
:
875 return ConstantExpr::getShuffleVector(Ops
[0], Ops
[1], Ops
[2]);
876 case Instruction::GetElementPtr
:
877 return cast
<GEPOperator
>(this)->isInBounds() ?
878 ConstantExpr::getInBoundsGetElementPtr(Ops
[0], &Ops
[1], Ops
.size()-1) :
879 ConstantExpr::getGetElementPtr(Ops
[0], &Ops
[1], Ops
.size()-1);
880 case Instruction::ICmp
:
881 case Instruction::FCmp
:
882 return ConstantExpr::getCompare(getPredicate(), Ops
[0], Ops
[1]);
884 assert(getNumOperands() == 2 && "Must be binary operator?");
885 return ConstantExpr::get(getOpcode(), Ops
[0], Ops
[1], SubclassOptionalData
);
890 //===----------------------------------------------------------------------===//
891 // isValueValidForType implementations
893 bool ConstantInt::isValueValidForType(const Type
*Ty
, uint64_t Val
) {
894 unsigned NumBits
= cast
<IntegerType
>(Ty
)->getBitWidth(); // assert okay
895 if (Ty
== Type::getInt1Ty(Ty
->getContext()))
896 return Val
== 0 || Val
== 1;
898 return true; // always true, has to fit in largest type
899 uint64_t Max
= (1ll << NumBits
) - 1;
903 bool ConstantInt::isValueValidForType(const Type
*Ty
, int64_t Val
) {
904 unsigned NumBits
= cast
<IntegerType
>(Ty
)->getBitWidth(); // assert okay
905 if (Ty
== Type::getInt1Ty(Ty
->getContext()))
906 return Val
== 0 || Val
== 1 || Val
== -1;
908 return true; // always true, has to fit in largest type
909 int64_t Min
= -(1ll << (NumBits
-1));
910 int64_t Max
= (1ll << (NumBits
-1)) - 1;
911 return (Val
>= Min
&& Val
<= Max
);
914 bool ConstantFP::isValueValidForType(const Type
*Ty
, const APFloat
& Val
) {
915 // convert modifies in place, so make a copy.
916 APFloat Val2
= APFloat(Val
);
918 switch (Ty
->getTypeID()) {
920 return false; // These can't be represented as floating point!
922 // FIXME rounding mode needs to be more flexible
923 case Type::FloatTyID
: {
924 if (&Val2
.getSemantics() == &APFloat::IEEEsingle
)
926 Val2
.convert(APFloat::IEEEsingle
, APFloat::rmNearestTiesToEven
, &losesInfo
);
929 case Type::DoubleTyID
: {
930 if (&Val2
.getSemantics() == &APFloat::IEEEsingle
||
931 &Val2
.getSemantics() == &APFloat::IEEEdouble
)
933 Val2
.convert(APFloat::IEEEdouble
, APFloat::rmNearestTiesToEven
, &losesInfo
);
936 case Type::X86_FP80TyID
:
937 return &Val2
.getSemantics() == &APFloat::IEEEsingle
||
938 &Val2
.getSemantics() == &APFloat::IEEEdouble
||
939 &Val2
.getSemantics() == &APFloat::x87DoubleExtended
;
940 case Type::FP128TyID
:
941 return &Val2
.getSemantics() == &APFloat::IEEEsingle
||
942 &Val2
.getSemantics() == &APFloat::IEEEdouble
||
943 &Val2
.getSemantics() == &APFloat::IEEEquad
;
944 case Type::PPC_FP128TyID
:
945 return &Val2
.getSemantics() == &APFloat::IEEEsingle
||
946 &Val2
.getSemantics() == &APFloat::IEEEdouble
||
947 &Val2
.getSemantics() == &APFloat::PPCDoubleDouble
;
951 //===----------------------------------------------------------------------===//
952 // Factory Function Implementation
954 ConstantAggregateZero
* ConstantAggregateZero::get(const Type
* Ty
) {
955 assert((Ty
->isStructTy() || Ty
->isArrayTy() || Ty
->isVectorTy()) &&
956 "Cannot create an aggregate zero of non-aggregate type!");
958 LLVMContextImpl
*pImpl
= Ty
->getContext().pImpl
;
959 return pImpl
->AggZeroConstants
.getOrCreate(Ty
, 0);
962 /// destroyConstant - Remove the constant from the constant table...
964 void ConstantAggregateZero::destroyConstant() {
965 getType()->getContext().pImpl
->AggZeroConstants
.remove(this);
966 destroyConstantImpl();
969 /// destroyConstant - Remove the constant from the constant table...
971 void ConstantArray::destroyConstant() {
972 getType()->getContext().pImpl
->ArrayConstants
.remove(this);
973 destroyConstantImpl();
976 /// isString - This method returns true if the array is an array of i8, and
977 /// if the elements of the array are all ConstantInt's.
978 bool ConstantArray::isString() const {
979 // Check the element type for i8...
980 if (!getType()->getElementType()->isIntegerTy(8))
982 // Check the elements to make sure they are all integers, not constant
984 for (unsigned i
= 0, e
= getNumOperands(); i
!= e
; ++i
)
985 if (!isa
<ConstantInt
>(getOperand(i
)))
990 /// isCString - This method returns true if the array is a string (see
991 /// isString) and it ends in a null byte \\0 and does not contains any other
992 /// null bytes except its terminator.
993 bool ConstantArray::isCString() const {
994 // Check the element type for i8...
995 if (!getType()->getElementType()->isIntegerTy(8))
998 // Last element must be a null.
999 if (!getOperand(getNumOperands()-1)->isNullValue())
1001 // Other elements must be non-null integers.
1002 for (unsigned i
= 0, e
= getNumOperands()-1; i
!= e
; ++i
) {
1003 if (!isa
<ConstantInt
>(getOperand(i
)))
1005 if (getOperand(i
)->isNullValue())
1012 /// convertToString - Helper function for getAsString() and getAsCString().
1013 static std::string
convertToString(const User
*U
, unsigned len
)
1016 Result
.reserve(len
);
1017 for (unsigned i
= 0; i
!= len
; ++i
)
1018 Result
.push_back((char)cast
<ConstantInt
>(U
->getOperand(i
))->getZExtValue());
1022 /// getAsString - If this array is isString(), then this method converts the
1023 /// array to an std::string and returns it. Otherwise, it asserts out.
1025 std::string
ConstantArray::getAsString() const {
1026 assert(isString() && "Not a string!");
1027 return convertToString(this, getNumOperands());
1031 /// getAsCString - If this array is isCString(), then this method converts the
1032 /// array (without the trailing null byte) to an std::string and returns it.
1033 /// Otherwise, it asserts out.
1035 std::string
ConstantArray::getAsCString() const {
1036 assert(isCString() && "Not a string!");
1037 return convertToString(this, getNumOperands() - 1);
1041 //---- ConstantStruct::get() implementation...
1048 // destroyConstant - Remove the constant from the constant table...
1050 void ConstantStruct::destroyConstant() {
1051 getType()->getContext().pImpl
->StructConstants
.remove(this);
1052 destroyConstantImpl();
1055 // destroyConstant - Remove the constant from the constant table...
1057 void ConstantVector::destroyConstant() {
1058 getType()->getContext().pImpl
->VectorConstants
.remove(this);
1059 destroyConstantImpl();
1062 /// This function will return true iff every element in this vector constant
1063 /// is set to all ones.
1064 /// @returns true iff this constant's emements are all set to all ones.
1065 /// @brief Determine if the value is all ones.
1066 bool ConstantVector::isAllOnesValue() const {
1067 // Check out first element.
1068 const Constant
*Elt
= getOperand(0);
1069 const ConstantInt
*CI
= dyn_cast
<ConstantInt
>(Elt
);
1070 if (!CI
|| !CI
->isAllOnesValue()) return false;
1071 // Then make sure all remaining elements point to the same value.
1072 for (unsigned I
= 1, E
= getNumOperands(); I
< E
; ++I
) {
1073 if (getOperand(I
) != Elt
) return false;
1078 /// getSplatValue - If this is a splat constant, where all of the
1079 /// elements have the same value, return that value. Otherwise return null.
1080 Constant
*ConstantVector::getSplatValue() const {
1081 // Check out first element.
1082 Constant
*Elt
= getOperand(0);
1083 // Then make sure all remaining elements point to the same value.
1084 for (unsigned I
= 1, E
= getNumOperands(); I
< E
; ++I
)
1085 if (getOperand(I
) != Elt
) return 0;
1089 //---- ConstantPointerNull::get() implementation.
1092 ConstantPointerNull
*ConstantPointerNull::get(const PointerType
*Ty
) {
1093 return Ty
->getContext().pImpl
->NullPtrConstants
.getOrCreate(Ty
, 0);
1096 // destroyConstant - Remove the constant from the constant table...
1098 void ConstantPointerNull::destroyConstant() {
1099 getType()->getContext().pImpl
->NullPtrConstants
.remove(this);
1100 destroyConstantImpl();
1104 //---- UndefValue::get() implementation.
1107 UndefValue
*UndefValue::get(const Type
*Ty
) {
1108 return Ty
->getContext().pImpl
->UndefValueConstants
.getOrCreate(Ty
, 0);
1111 // destroyConstant - Remove the constant from the constant table.
1113 void UndefValue::destroyConstant() {
1114 getType()->getContext().pImpl
->UndefValueConstants
.remove(this);
1115 destroyConstantImpl();
1118 //---- BlockAddress::get() implementation.
1121 BlockAddress
*BlockAddress::get(BasicBlock
*BB
) {
1122 assert(BB
->getParent() != 0 && "Block must have a parent");
1123 return get(BB
->getParent(), BB
);
1126 BlockAddress
*BlockAddress::get(Function
*F
, BasicBlock
*BB
) {
1128 F
->getContext().pImpl
->BlockAddresses
[std::make_pair(F
, BB
)];
1130 BA
= new BlockAddress(F
, BB
);
1132 assert(BA
->getFunction() == F
&& "Basic block moved between functions");
1136 BlockAddress::BlockAddress(Function
*F
, BasicBlock
*BB
)
1137 : Constant(Type::getInt8PtrTy(F
->getContext()), Value::BlockAddressVal
,
1141 BB
->AdjustBlockAddressRefCount(1);
1145 // destroyConstant - Remove the constant from the constant table.
1147 void BlockAddress::destroyConstant() {
1148 getFunction()->getType()->getContext().pImpl
1149 ->BlockAddresses
.erase(std::make_pair(getFunction(), getBasicBlock()));
1150 getBasicBlock()->AdjustBlockAddressRefCount(-1);
1151 destroyConstantImpl();
1154 void BlockAddress::replaceUsesOfWithOnConstant(Value
*From
, Value
*To
, Use
*U
) {
1155 // This could be replacing either the Basic Block or the Function. In either
1156 // case, we have to remove the map entry.
1157 Function
*NewF
= getFunction();
1158 BasicBlock
*NewBB
= getBasicBlock();
1161 NewF
= cast
<Function
>(To
);
1163 NewBB
= cast
<BasicBlock
>(To
);
1165 // See if the 'new' entry already exists, if not, just update this in place
1166 // and return early.
1167 BlockAddress
*&NewBA
=
1168 getContext().pImpl
->BlockAddresses
[std::make_pair(NewF
, NewBB
)];
1170 getBasicBlock()->AdjustBlockAddressRefCount(-1);
1172 // Remove the old entry, this can't cause the map to rehash (just a
1173 // tombstone will get added).
1174 getContext().pImpl
->BlockAddresses
.erase(std::make_pair(getFunction(),
1177 setOperand(0, NewF
);
1178 setOperand(1, NewBB
);
1179 getBasicBlock()->AdjustBlockAddressRefCount(1);
1183 // Otherwise, I do need to replace this with an existing value.
1184 assert(NewBA
!= this && "I didn't contain From!");
1186 // Everyone using this now uses the replacement.
1187 uncheckedReplaceAllUsesWith(NewBA
);
1192 //---- ConstantExpr::get() implementations.
1195 /// This is a utility function to handle folding of casts and lookup of the
1196 /// cast in the ExprConstants map. It is used by the various get* methods below.
1197 static inline Constant
*getFoldedCast(
1198 Instruction::CastOps opc
, Constant
*C
, const Type
*Ty
) {
1199 assert(Ty
->isFirstClassType() && "Cannot cast to an aggregate type!");
1200 // Fold a few common cases
1201 if (Constant
*FC
= ConstantFoldCastInstruction(opc
, C
, Ty
))
1204 LLVMContextImpl
*pImpl
= Ty
->getContext().pImpl
;
1206 // Look up the constant in the table first to ensure uniqueness
1207 std::vector
<Constant
*> argVec(1, C
);
1208 ExprMapKeyType
Key(opc
, argVec
);
1210 return pImpl
->ExprConstants
.getOrCreate(Ty
, Key
);
1213 Constant
*ConstantExpr::getCast(unsigned oc
, Constant
*C
, const Type
*Ty
) {
1214 Instruction::CastOps opc
= Instruction::CastOps(oc
);
1215 assert(Instruction::isCast(opc
) && "opcode out of range");
1216 assert(C
&& Ty
&& "Null arguments to getCast");
1217 assert(CastInst::castIsValid(opc
, C
, Ty
) && "Invalid constantexpr cast!");
1221 llvm_unreachable("Invalid cast opcode");
1223 case Instruction::Trunc
: return getTrunc(C
, Ty
);
1224 case Instruction::ZExt
: return getZExt(C
, Ty
);
1225 case Instruction::SExt
: return getSExt(C
, Ty
);
1226 case Instruction::FPTrunc
: return getFPTrunc(C
, Ty
);
1227 case Instruction::FPExt
: return getFPExtend(C
, Ty
);
1228 case Instruction::UIToFP
: return getUIToFP(C
, Ty
);
1229 case Instruction::SIToFP
: return getSIToFP(C
, Ty
);
1230 case Instruction::FPToUI
: return getFPToUI(C
, Ty
);
1231 case Instruction::FPToSI
: return getFPToSI(C
, Ty
);
1232 case Instruction::PtrToInt
: return getPtrToInt(C
, Ty
);
1233 case Instruction::IntToPtr
: return getIntToPtr(C
, Ty
);
1234 case Instruction::BitCast
: return getBitCast(C
, Ty
);
1239 Constant
*ConstantExpr::getZExtOrBitCast(Constant
*C
, const Type
*Ty
) {
1240 if (C
->getType()->getScalarSizeInBits() == Ty
->getScalarSizeInBits())
1241 return getBitCast(C
, Ty
);
1242 return getZExt(C
, Ty
);
1245 Constant
*ConstantExpr::getSExtOrBitCast(Constant
*C
, const Type
*Ty
) {
1246 if (C
->getType()->getScalarSizeInBits() == Ty
->getScalarSizeInBits())
1247 return getBitCast(C
, Ty
);
1248 return getSExt(C
, Ty
);
1251 Constant
*ConstantExpr::getTruncOrBitCast(Constant
*C
, const Type
*Ty
) {
1252 if (C
->getType()->getScalarSizeInBits() == Ty
->getScalarSizeInBits())
1253 return getBitCast(C
, Ty
);
1254 return getTrunc(C
, Ty
);
1257 Constant
*ConstantExpr::getPointerCast(Constant
*S
, const Type
*Ty
) {
1258 assert(S
->getType()->isPointerTy() && "Invalid cast");
1259 assert((Ty
->isIntegerTy() || Ty
->isPointerTy()) && "Invalid cast");
1261 if (Ty
->isIntegerTy())
1262 return getPtrToInt(S
, Ty
);
1263 return getBitCast(S
, Ty
);
1266 Constant
*ConstantExpr::getIntegerCast(Constant
*C
, const Type
*Ty
,
1268 assert(C
->getType()->isIntOrIntVectorTy() &&
1269 Ty
->isIntOrIntVectorTy() && "Invalid cast");
1270 unsigned SrcBits
= C
->getType()->getScalarSizeInBits();
1271 unsigned DstBits
= Ty
->getScalarSizeInBits();
1272 Instruction::CastOps opcode
=
1273 (SrcBits
== DstBits
? Instruction::BitCast
:
1274 (SrcBits
> DstBits
? Instruction::Trunc
:
1275 (isSigned
? Instruction::SExt
: Instruction::ZExt
)));
1276 return getCast(opcode
, C
, Ty
);
1279 Constant
*ConstantExpr::getFPCast(Constant
*C
, const Type
*Ty
) {
1280 assert(C
->getType()->isFPOrFPVectorTy() && Ty
->isFPOrFPVectorTy() &&
1282 unsigned SrcBits
= C
->getType()->getScalarSizeInBits();
1283 unsigned DstBits
= Ty
->getScalarSizeInBits();
1284 if (SrcBits
== DstBits
)
1285 return C
; // Avoid a useless cast
1286 Instruction::CastOps opcode
=
1287 (SrcBits
> DstBits
? Instruction::FPTrunc
: Instruction::FPExt
);
1288 return getCast(opcode
, C
, Ty
);
1291 Constant
*ConstantExpr::getTrunc(Constant
*C
, const Type
*Ty
) {
1293 bool fromVec
= C
->getType()->getTypeID() == Type::VectorTyID
;
1294 bool toVec
= Ty
->getTypeID() == Type::VectorTyID
;
1296 assert((fromVec
== toVec
) && "Cannot convert from scalar to/from vector");
1297 assert(C
->getType()->isIntOrIntVectorTy() && "Trunc operand must be integer");
1298 assert(Ty
->isIntOrIntVectorTy() && "Trunc produces only integral");
1299 assert(C
->getType()->getScalarSizeInBits() > Ty
->getScalarSizeInBits()&&
1300 "SrcTy must be larger than DestTy for Trunc!");
1302 return getFoldedCast(Instruction::Trunc
, C
, Ty
);
1305 Constant
*ConstantExpr::getSExt(Constant
*C
, const Type
*Ty
) {
1307 bool fromVec
= C
->getType()->getTypeID() == Type::VectorTyID
;
1308 bool toVec
= Ty
->getTypeID() == Type::VectorTyID
;
1310 assert((fromVec
== toVec
) && "Cannot convert from scalar to/from vector");
1311 assert(C
->getType()->isIntOrIntVectorTy() && "SExt operand must be integral");
1312 assert(Ty
->isIntOrIntVectorTy() && "SExt produces only integer");
1313 assert(C
->getType()->getScalarSizeInBits() < Ty
->getScalarSizeInBits()&&
1314 "SrcTy must be smaller than DestTy for SExt!");
1316 return getFoldedCast(Instruction::SExt
, C
, Ty
);
1319 Constant
*ConstantExpr::getZExt(Constant
*C
, const Type
*Ty
) {
1321 bool fromVec
= C
->getType()->getTypeID() == Type::VectorTyID
;
1322 bool toVec
= Ty
->getTypeID() == Type::VectorTyID
;
1324 assert((fromVec
== toVec
) && "Cannot convert from scalar to/from vector");
1325 assert(C
->getType()->isIntOrIntVectorTy() && "ZEXt operand must be integral");
1326 assert(Ty
->isIntOrIntVectorTy() && "ZExt produces only integer");
1327 assert(C
->getType()->getScalarSizeInBits() < Ty
->getScalarSizeInBits()&&
1328 "SrcTy must be smaller than DestTy for ZExt!");
1330 return getFoldedCast(Instruction::ZExt
, C
, Ty
);
1333 Constant
*ConstantExpr::getFPTrunc(Constant
*C
, const Type
*Ty
) {
1335 bool fromVec
= C
->getType()->getTypeID() == Type::VectorTyID
;
1336 bool toVec
= Ty
->getTypeID() == Type::VectorTyID
;
1338 assert((fromVec
== toVec
) && "Cannot convert from scalar to/from vector");
1339 assert(C
->getType()->isFPOrFPVectorTy() && Ty
->isFPOrFPVectorTy() &&
1340 C
->getType()->getScalarSizeInBits() > Ty
->getScalarSizeInBits()&&
1341 "This is an illegal floating point truncation!");
1342 return getFoldedCast(Instruction::FPTrunc
, C
, Ty
);
1345 Constant
*ConstantExpr::getFPExtend(Constant
*C
, const Type
*Ty
) {
1347 bool fromVec
= C
->getType()->getTypeID() == Type::VectorTyID
;
1348 bool toVec
= Ty
->getTypeID() == Type::VectorTyID
;
1350 assert((fromVec
== toVec
) && "Cannot convert from scalar to/from vector");
1351 assert(C
->getType()->isFPOrFPVectorTy() && Ty
->isFPOrFPVectorTy() &&
1352 C
->getType()->getScalarSizeInBits() < Ty
->getScalarSizeInBits()&&
1353 "This is an illegal floating point extension!");
1354 return getFoldedCast(Instruction::FPExt
, C
, Ty
);
1357 Constant
*ConstantExpr::getUIToFP(Constant
*C
, const Type
*Ty
) {
1359 bool fromVec
= C
->getType()->getTypeID() == Type::VectorTyID
;
1360 bool toVec
= Ty
->getTypeID() == Type::VectorTyID
;
1362 assert((fromVec
== toVec
) && "Cannot convert from scalar to/from vector");
1363 assert(C
->getType()->isIntOrIntVectorTy() && Ty
->isFPOrFPVectorTy() &&
1364 "This is an illegal uint to floating point cast!");
1365 return getFoldedCast(Instruction::UIToFP
, C
, Ty
);
1368 Constant
*ConstantExpr::getSIToFP(Constant
*C
, const Type
*Ty
) {
1370 bool fromVec
= C
->getType()->getTypeID() == Type::VectorTyID
;
1371 bool toVec
= Ty
->getTypeID() == Type::VectorTyID
;
1373 assert((fromVec
== toVec
) && "Cannot convert from scalar to/from vector");
1374 assert(C
->getType()->isIntOrIntVectorTy() && Ty
->isFPOrFPVectorTy() &&
1375 "This is an illegal sint to floating point cast!");
1376 return getFoldedCast(Instruction::SIToFP
, C
, Ty
);
1379 Constant
*ConstantExpr::getFPToUI(Constant
*C
, const Type
*Ty
) {
1381 bool fromVec
= C
->getType()->getTypeID() == Type::VectorTyID
;
1382 bool toVec
= Ty
->getTypeID() == Type::VectorTyID
;
1384 assert((fromVec
== toVec
) && "Cannot convert from scalar to/from vector");
1385 assert(C
->getType()->isFPOrFPVectorTy() && Ty
->isIntOrIntVectorTy() &&
1386 "This is an illegal floating point to uint cast!");
1387 return getFoldedCast(Instruction::FPToUI
, C
, Ty
);
1390 Constant
*ConstantExpr::getFPToSI(Constant
*C
, const Type
*Ty
) {
1392 bool fromVec
= C
->getType()->getTypeID() == Type::VectorTyID
;
1393 bool toVec
= Ty
->getTypeID() == Type::VectorTyID
;
1395 assert((fromVec
== toVec
) && "Cannot convert from scalar to/from vector");
1396 assert(C
->getType()->isFPOrFPVectorTy() && Ty
->isIntOrIntVectorTy() &&
1397 "This is an illegal floating point to sint cast!");
1398 return getFoldedCast(Instruction::FPToSI
, C
, Ty
);
1401 Constant
*ConstantExpr::getPtrToInt(Constant
*C
, const Type
*DstTy
) {
1402 assert(C
->getType()->isPointerTy() && "PtrToInt source must be pointer");
1403 assert(DstTy
->isIntegerTy() && "PtrToInt destination must be integral");
1404 return getFoldedCast(Instruction::PtrToInt
, C
, DstTy
);
1407 Constant
*ConstantExpr::getIntToPtr(Constant
*C
, const Type
*DstTy
) {
1408 assert(C
->getType()->isIntegerTy() && "IntToPtr source must be integral");
1409 assert(DstTy
->isPointerTy() && "IntToPtr destination must be a pointer");
1410 return getFoldedCast(Instruction::IntToPtr
, C
, DstTy
);
1413 Constant
*ConstantExpr::getBitCast(Constant
*C
, const Type
*DstTy
) {
1414 assert(CastInst::castIsValid(Instruction::BitCast
, C
, DstTy
) &&
1415 "Invalid constantexpr bitcast!");
1417 // It is common to ask for a bitcast of a value to its own type, handle this
1419 if (C
->getType() == DstTy
) return C
;
1421 return getFoldedCast(Instruction::BitCast
, C
, DstTy
);
1424 Constant
*ConstantExpr::get(unsigned Opcode
, Constant
*C1
, Constant
*C2
,
1426 // Check the operands for consistency first.
1427 assert(Opcode
>= Instruction::BinaryOpsBegin
&&
1428 Opcode
< Instruction::BinaryOpsEnd
&&
1429 "Invalid opcode in binary constant expression");
1430 assert(C1
->getType() == C2
->getType() &&
1431 "Operand types in binary constant expression should match");
1435 case Instruction::Add
:
1436 case Instruction::Sub
:
1437 case Instruction::Mul
:
1438 assert(C1
->getType() == C2
->getType() && "Op types should be identical!");
1439 assert(C1
->getType()->isIntOrIntVectorTy() &&
1440 "Tried to create an integer operation on a non-integer type!");
1442 case Instruction::FAdd
:
1443 case Instruction::FSub
:
1444 case Instruction::FMul
:
1445 assert(C1
->getType() == C2
->getType() && "Op types should be identical!");
1446 assert(C1
->getType()->isFPOrFPVectorTy() &&
1447 "Tried to create a floating-point operation on a "
1448 "non-floating-point type!");
1450 case Instruction::UDiv
:
1451 case Instruction::SDiv
:
1452 assert(C1
->getType() == C2
->getType() && "Op types should be identical!");
1453 assert(C1
->getType()->isIntOrIntVectorTy() &&
1454 "Tried to create an arithmetic operation on a non-arithmetic type!");
1456 case Instruction::FDiv
:
1457 assert(C1
->getType() == C2
->getType() && "Op types should be identical!");
1458 assert(C1
->getType()->isFPOrFPVectorTy() &&
1459 "Tried to create an arithmetic operation on a non-arithmetic type!");
1461 case Instruction::URem
:
1462 case Instruction::SRem
:
1463 assert(C1
->getType() == C2
->getType() && "Op types should be identical!");
1464 assert(C1
->getType()->isIntOrIntVectorTy() &&
1465 "Tried to create an arithmetic operation on a non-arithmetic type!");
1467 case Instruction::FRem
:
1468 assert(C1
->getType() == C2
->getType() && "Op types should be identical!");
1469 assert(C1
->getType()->isFPOrFPVectorTy() &&
1470 "Tried to create an arithmetic operation on a non-arithmetic type!");
1472 case Instruction::And
:
1473 case Instruction::Or
:
1474 case Instruction::Xor
:
1475 assert(C1
->getType() == C2
->getType() && "Op types should be identical!");
1476 assert(C1
->getType()->isIntOrIntVectorTy() &&
1477 "Tried to create a logical operation on a non-integral type!");
1479 case Instruction::Shl
:
1480 case Instruction::LShr
:
1481 case Instruction::AShr
:
1482 assert(C1
->getType() == C2
->getType() && "Op types should be identical!");
1483 assert(C1
->getType()->isIntOrIntVectorTy() &&
1484 "Tried to create a shift operation on a non-integer type!");
1491 if (Constant
*FC
= ConstantFoldBinaryInstruction(Opcode
, C1
, C2
))
1492 return FC
; // Fold a few common cases.
1494 std::vector
<Constant
*> argVec(1, C1
);
1495 argVec
.push_back(C2
);
1496 ExprMapKeyType
Key(Opcode
, argVec
, 0, Flags
);
1498 LLVMContextImpl
*pImpl
= C1
->getContext().pImpl
;
1499 return pImpl
->ExprConstants
.getOrCreate(C1
->getType(), Key
);
1502 Constant
*ConstantExpr::getSizeOf(const Type
* Ty
) {
1503 // sizeof is implemented as: (i64) gep (Ty*)null, 1
1504 // Note that a non-inbounds gep is used, as null isn't within any object.
1505 Constant
*GEPIdx
= ConstantInt::get(Type::getInt32Ty(Ty
->getContext()), 1);
1506 Constant
*GEP
= getGetElementPtr(
1507 Constant::getNullValue(PointerType::getUnqual(Ty
)), &GEPIdx
, 1);
1508 return getPtrToInt(GEP
,
1509 Type::getInt64Ty(Ty
->getContext()));
1512 Constant
*ConstantExpr::getAlignOf(const Type
* Ty
) {
1513 // alignof is implemented as: (i64) gep ({i1,Ty}*)null, 0, 1
1514 // Note that a non-inbounds gep is used, as null isn't within any object.
1515 const Type
*AligningTy
=
1516 StructType::get(Type::getInt1Ty(Ty
->getContext()), Ty
, NULL
);
1517 Constant
*NullPtr
= Constant::getNullValue(AligningTy
->getPointerTo());
1518 Constant
*Zero
= ConstantInt::get(Type::getInt64Ty(Ty
->getContext()), 0);
1519 Constant
*One
= ConstantInt::get(Type::getInt32Ty(Ty
->getContext()), 1);
1520 Constant
*Indices
[2] = { Zero
, One
};
1521 Constant
*GEP
= getGetElementPtr(NullPtr
, Indices
, 2);
1522 return getPtrToInt(GEP
,
1523 Type::getInt64Ty(Ty
->getContext()));
1526 Constant
*ConstantExpr::getOffsetOf(const StructType
* STy
, unsigned FieldNo
) {
1527 return getOffsetOf(STy
, ConstantInt::get(Type::getInt32Ty(STy
->getContext()),
1531 Constant
*ConstantExpr::getOffsetOf(const Type
* Ty
, Constant
*FieldNo
) {
1532 // offsetof is implemented as: (i64) gep (Ty*)null, 0, FieldNo
1533 // Note that a non-inbounds gep is used, as null isn't within any object.
1534 Constant
*GEPIdx
[] = {
1535 ConstantInt::get(Type::getInt64Ty(Ty
->getContext()), 0),
1538 Constant
*GEP
= getGetElementPtr(
1539 Constant::getNullValue(PointerType::getUnqual(Ty
)), GEPIdx
, 2);
1540 return getPtrToInt(GEP
,
1541 Type::getInt64Ty(Ty
->getContext()));
1544 Constant
*ConstantExpr::getCompare(unsigned short Predicate
,
1545 Constant
*C1
, Constant
*C2
) {
1546 assert(C1
->getType() == C2
->getType() && "Op types should be identical!");
1548 switch (Predicate
) {
1549 default: llvm_unreachable("Invalid CmpInst predicate");
1550 case CmpInst::FCMP_FALSE
: case CmpInst::FCMP_OEQ
: case CmpInst::FCMP_OGT
:
1551 case CmpInst::FCMP_OGE
: case CmpInst::FCMP_OLT
: case CmpInst::FCMP_OLE
:
1552 case CmpInst::FCMP_ONE
: case CmpInst::FCMP_ORD
: case CmpInst::FCMP_UNO
:
1553 case CmpInst::FCMP_UEQ
: case CmpInst::FCMP_UGT
: case CmpInst::FCMP_UGE
:
1554 case CmpInst::FCMP_ULT
: case CmpInst::FCMP_ULE
: case CmpInst::FCMP_UNE
:
1555 case CmpInst::FCMP_TRUE
:
1556 return getFCmp(Predicate
, C1
, C2
);
1558 case CmpInst::ICMP_EQ
: case CmpInst::ICMP_NE
: case CmpInst::ICMP_UGT
:
1559 case CmpInst::ICMP_UGE
: case CmpInst::ICMP_ULT
: case CmpInst::ICMP_ULE
:
1560 case CmpInst::ICMP_SGT
: case CmpInst::ICMP_SGE
: case CmpInst::ICMP_SLT
:
1561 case CmpInst::ICMP_SLE
:
1562 return getICmp(Predicate
, C1
, C2
);
1566 Constant
*ConstantExpr::getSelect(Constant
*C
, Constant
*V1
, Constant
*V2
) {
1567 assert(!SelectInst::areInvalidOperands(C
, V1
, V2
)&&"Invalid select operands");
1569 if (Constant
*SC
= ConstantFoldSelectInstruction(C
, V1
, V2
))
1570 return SC
; // Fold common cases
1572 std::vector
<Constant
*> argVec(3, C
);
1575 ExprMapKeyType
Key(Instruction::Select
, argVec
);
1577 LLVMContextImpl
*pImpl
= C
->getContext().pImpl
;
1578 return pImpl
->ExprConstants
.getOrCreate(V1
->getType(), Key
);
1581 Constant
*ConstantExpr::getGetElementPtr(Constant
*C
, Value
* const *Idxs
,
1582 unsigned NumIdx
, bool InBounds
) {
1583 if (Constant
*FC
= ConstantFoldGetElementPtr(C
, InBounds
, Idxs
, NumIdx
))
1584 return FC
; // Fold a few common cases.
1586 // Get the result type of the getelementptr!
1588 GetElementPtrInst::getIndexedType(C
->getType(), Idxs
, Idxs
+NumIdx
);
1589 assert(Ty
&& "GEP indices invalid!");
1590 unsigned AS
= cast
<PointerType
>(C
->getType())->getAddressSpace();
1591 Type
*ReqTy
= Ty
->getPointerTo(AS
);
1593 assert(C
->getType()->isPointerTy() &&
1594 "Non-pointer type for constant GetElementPtr expression");
1595 // Look up the constant in the table first to ensure uniqueness
1596 std::vector
<Constant
*> ArgVec
;
1597 ArgVec
.reserve(NumIdx
+1);
1598 ArgVec
.push_back(C
);
1599 for (unsigned i
= 0; i
!= NumIdx
; ++i
)
1600 ArgVec
.push_back(cast
<Constant
>(Idxs
[i
]));
1601 const ExprMapKeyType
Key(Instruction::GetElementPtr
, ArgVec
, 0,
1602 InBounds
? GEPOperator::IsInBounds
: 0);
1604 LLVMContextImpl
*pImpl
= C
->getContext().pImpl
;
1605 return pImpl
->ExprConstants
.getOrCreate(ReqTy
, Key
);
1609 ConstantExpr::getICmp(unsigned short pred
, Constant
*LHS
, Constant
*RHS
) {
1610 assert(LHS
->getType() == RHS
->getType());
1611 assert(pred
>= ICmpInst::FIRST_ICMP_PREDICATE
&&
1612 pred
<= ICmpInst::LAST_ICMP_PREDICATE
&& "Invalid ICmp Predicate");
1614 if (Constant
*FC
= ConstantFoldCompareInstruction(pred
, LHS
, RHS
))
1615 return FC
; // Fold a few common cases...
1617 // Look up the constant in the table first to ensure uniqueness
1618 std::vector
<Constant
*> ArgVec
;
1619 ArgVec
.push_back(LHS
);
1620 ArgVec
.push_back(RHS
);
1621 // Get the key type with both the opcode and predicate
1622 const ExprMapKeyType
Key(Instruction::ICmp
, ArgVec
, pred
);
1624 const Type
*ResultTy
= Type::getInt1Ty(LHS
->getContext());
1625 if (const VectorType
*VT
= dyn_cast
<VectorType
>(LHS
->getType()))
1626 ResultTy
= VectorType::get(ResultTy
, VT
->getNumElements());
1628 LLVMContextImpl
*pImpl
= LHS
->getType()->getContext().pImpl
;
1629 return pImpl
->ExprConstants
.getOrCreate(ResultTy
, Key
);
1633 ConstantExpr::getFCmp(unsigned short pred
, Constant
*LHS
, Constant
*RHS
) {
1634 assert(LHS
->getType() == RHS
->getType());
1635 assert(pred
<= FCmpInst::LAST_FCMP_PREDICATE
&& "Invalid FCmp Predicate");
1637 if (Constant
*FC
= ConstantFoldCompareInstruction(pred
, LHS
, RHS
))
1638 return FC
; // Fold a few common cases...
1640 // Look up the constant in the table first to ensure uniqueness
1641 std::vector
<Constant
*> ArgVec
;
1642 ArgVec
.push_back(LHS
);
1643 ArgVec
.push_back(RHS
);
1644 // Get the key type with both the opcode and predicate
1645 const ExprMapKeyType
Key(Instruction::FCmp
, ArgVec
, pred
);
1647 const Type
*ResultTy
= Type::getInt1Ty(LHS
->getContext());
1648 if (const VectorType
*VT
= dyn_cast
<VectorType
>(LHS
->getType()))
1649 ResultTy
= VectorType::get(ResultTy
, VT
->getNumElements());
1651 LLVMContextImpl
*pImpl
= LHS
->getType()->getContext().pImpl
;
1652 return pImpl
->ExprConstants
.getOrCreate(ResultTy
, Key
);
1655 Constant
*ConstantExpr::getExtractElement(Constant
*Val
, Constant
*Idx
) {
1656 assert(Val
->getType()->isVectorTy() &&
1657 "Tried to create extractelement operation on non-vector type!");
1658 assert(Idx
->getType()->isIntegerTy(32) &&
1659 "Extractelement index must be i32 type!");
1661 if (Constant
*FC
= ConstantFoldExtractElementInstruction(Val
, Idx
))
1662 return FC
; // Fold a few common cases.
1664 // Look up the constant in the table first to ensure uniqueness
1665 std::vector
<Constant
*> ArgVec(1, Val
);
1666 ArgVec
.push_back(Idx
);
1667 const ExprMapKeyType
Key(Instruction::ExtractElement
,ArgVec
);
1669 LLVMContextImpl
*pImpl
= Val
->getContext().pImpl
;
1670 Type
*ReqTy
= cast
<VectorType
>(Val
->getType())->getElementType();
1671 return pImpl
->ExprConstants
.getOrCreate(ReqTy
, Key
);
1674 Constant
*ConstantExpr::getInsertElement(Constant
*Val
, Constant
*Elt
,
1676 assert(Val
->getType()->isVectorTy() &&
1677 "Tried to create insertelement operation on non-vector type!");
1678 assert(Elt
->getType() == cast
<VectorType
>(Val
->getType())->getElementType()
1679 && "Insertelement types must match!");
1680 assert(Idx
->getType()->isIntegerTy(32) &&
1681 "Insertelement index must be i32 type!");
1683 if (Constant
*FC
= ConstantFoldInsertElementInstruction(Val
, Elt
, Idx
))
1684 return FC
; // Fold a few common cases.
1685 // Look up the constant in the table first to ensure uniqueness
1686 std::vector
<Constant
*> ArgVec(1, Val
);
1687 ArgVec
.push_back(Elt
);
1688 ArgVec
.push_back(Idx
);
1689 const ExprMapKeyType
Key(Instruction::InsertElement
,ArgVec
);
1691 LLVMContextImpl
*pImpl
= Val
->getContext().pImpl
;
1692 return pImpl
->ExprConstants
.getOrCreate(Val
->getType(), Key
);
1695 Constant
*ConstantExpr::getShuffleVector(Constant
*V1
, Constant
*V2
,
1697 assert(ShuffleVectorInst::isValidOperands(V1
, V2
, Mask
) &&
1698 "Invalid shuffle vector constant expr operands!");
1700 if (Constant
*FC
= ConstantFoldShuffleVectorInstruction(V1
, V2
, Mask
))
1701 return FC
; // Fold a few common cases.
1703 unsigned NElts
= cast
<VectorType
>(Mask
->getType())->getNumElements();
1704 const Type
*EltTy
= cast
<VectorType
>(V1
->getType())->getElementType();
1705 const Type
*ShufTy
= VectorType::get(EltTy
, NElts
);
1707 // Look up the constant in the table first to ensure uniqueness
1708 std::vector
<Constant
*> ArgVec(1, V1
);
1709 ArgVec
.push_back(V2
);
1710 ArgVec
.push_back(Mask
);
1711 const ExprMapKeyType
Key(Instruction::ShuffleVector
,ArgVec
);
1713 LLVMContextImpl
*pImpl
= ShufTy
->getContext().pImpl
;
1714 return pImpl
->ExprConstants
.getOrCreate(ShufTy
, Key
);
1717 Constant
*ConstantExpr::getInsertValue(Constant
*Agg
, Constant
*Val
,
1718 const unsigned *Idxs
, unsigned NumIdx
) {
1719 assert(Agg
->getType()->isFirstClassType() &&
1720 "Tried to create insertelement operation on non-first-class type!");
1722 const Type
*ReqTy
= Agg
->getType();
1725 ExtractValueInst::getIndexedType(Agg
->getType(), Idxs
, Idxs
+NumIdx
);
1726 assert(ValTy
== Val
->getType() && "insertvalue indices invalid!");
1729 assert(ExtractValueInst::getIndexedType(Agg
->getType(), Idxs
,
1730 Idxs
+NumIdx
) == Val
->getType() &&
1731 "insertvalue indices invalid!");
1732 assert(Agg
->getType() == ReqTy
&&
1733 "insertvalue type invalid!");
1734 assert(Agg
->getType()->isFirstClassType() &&
1735 "Non-first-class type for constant InsertValue expression");
1736 Constant
*FC
= ConstantFoldInsertValueInstruction(Agg
, Val
, Idxs
, NumIdx
);
1737 assert(FC
&& "InsertValue constant expr couldn't be folded!");
1741 Constant
*ConstantExpr::getExtractValue(Constant
*Agg
,
1742 const unsigned *Idxs
, unsigned NumIdx
) {
1743 assert(Agg
->getType()->isFirstClassType() &&
1744 "Tried to create extractelement operation on non-first-class type!");
1747 ExtractValueInst::getIndexedType(Agg
->getType(), Idxs
, Idxs
+NumIdx
);
1748 assert(ReqTy
&& "extractvalue indices invalid!");
1750 assert(Agg
->getType()->isFirstClassType() &&
1751 "Non-first-class type for constant extractvalue expression");
1752 Constant
*FC
= ConstantFoldExtractValueInstruction(Agg
, Idxs
, NumIdx
);
1753 assert(FC
&& "ExtractValue constant expr couldn't be folded!");
1757 Constant
*ConstantExpr::getNeg(Constant
*C
, bool HasNUW
, bool HasNSW
) {
1758 assert(C
->getType()->isIntOrIntVectorTy() &&
1759 "Cannot NEG a nonintegral value!");
1760 return getSub(ConstantFP::getZeroValueForNegation(C
->getType()),
1764 Constant
*ConstantExpr::getFNeg(Constant
*C
) {
1765 assert(C
->getType()->isFPOrFPVectorTy() &&
1766 "Cannot FNEG a non-floating-point value!");
1767 return getFSub(ConstantFP::getZeroValueForNegation(C
->getType()), C
);
1770 Constant
*ConstantExpr::getNot(Constant
*C
) {
1771 assert(C
->getType()->isIntOrIntVectorTy() &&
1772 "Cannot NOT a nonintegral value!");
1773 return get(Instruction::Xor
, C
, Constant::getAllOnesValue(C
->getType()));
1776 Constant
*ConstantExpr::getAdd(Constant
*C1
, Constant
*C2
,
1777 bool HasNUW
, bool HasNSW
) {
1778 unsigned Flags
= (HasNUW
? OverflowingBinaryOperator::NoUnsignedWrap
: 0) |
1779 (HasNSW
? OverflowingBinaryOperator::NoSignedWrap
: 0);
1780 return get(Instruction::Add
, C1
, C2
, Flags
);
1783 Constant
*ConstantExpr::getFAdd(Constant
*C1
, Constant
*C2
) {
1784 return get(Instruction::FAdd
, C1
, C2
);
1787 Constant
*ConstantExpr::getSub(Constant
*C1
, Constant
*C2
,
1788 bool HasNUW
, bool HasNSW
) {
1789 unsigned Flags
= (HasNUW
? OverflowingBinaryOperator::NoUnsignedWrap
: 0) |
1790 (HasNSW
? OverflowingBinaryOperator::NoSignedWrap
: 0);
1791 return get(Instruction::Sub
, C1
, C2
, Flags
);
1794 Constant
*ConstantExpr::getFSub(Constant
*C1
, Constant
*C2
) {
1795 return get(Instruction::FSub
, C1
, C2
);
1798 Constant
*ConstantExpr::getMul(Constant
*C1
, Constant
*C2
,
1799 bool HasNUW
, bool HasNSW
) {
1800 unsigned Flags
= (HasNUW
? OverflowingBinaryOperator::NoUnsignedWrap
: 0) |
1801 (HasNSW
? OverflowingBinaryOperator::NoSignedWrap
: 0);
1802 return get(Instruction::Mul
, C1
, C2
, Flags
);
1805 Constant
*ConstantExpr::getFMul(Constant
*C1
, Constant
*C2
) {
1806 return get(Instruction::FMul
, C1
, C2
);
1809 Constant
*ConstantExpr::getUDiv(Constant
*C1
, Constant
*C2
, bool isExact
) {
1810 return get(Instruction::UDiv
, C1
, C2
,
1811 isExact
? PossiblyExactOperator::IsExact
: 0);
1814 Constant
*ConstantExpr::getSDiv(Constant
*C1
, Constant
*C2
, bool isExact
) {
1815 return get(Instruction::SDiv
, C1
, C2
,
1816 isExact
? PossiblyExactOperator::IsExact
: 0);
1819 Constant
*ConstantExpr::getFDiv(Constant
*C1
, Constant
*C2
) {
1820 return get(Instruction::FDiv
, C1
, C2
);
1823 Constant
*ConstantExpr::getURem(Constant
*C1
, Constant
*C2
) {
1824 return get(Instruction::URem
, C1
, C2
);
1827 Constant
*ConstantExpr::getSRem(Constant
*C1
, Constant
*C2
) {
1828 return get(Instruction::SRem
, C1
, C2
);
1831 Constant
*ConstantExpr::getFRem(Constant
*C1
, Constant
*C2
) {
1832 return get(Instruction::FRem
, C1
, C2
);
1835 Constant
*ConstantExpr::getAnd(Constant
*C1
, Constant
*C2
) {
1836 return get(Instruction::And
, C1
, C2
);
1839 Constant
*ConstantExpr::getOr(Constant
*C1
, Constant
*C2
) {
1840 return get(Instruction::Or
, C1
, C2
);
1843 Constant
*ConstantExpr::getXor(Constant
*C1
, Constant
*C2
) {
1844 return get(Instruction::Xor
, C1
, C2
);
1847 Constant
*ConstantExpr::getShl(Constant
*C1
, Constant
*C2
,
1848 bool HasNUW
, bool HasNSW
) {
1849 unsigned Flags
= (HasNUW
? OverflowingBinaryOperator::NoUnsignedWrap
: 0) |
1850 (HasNSW
? OverflowingBinaryOperator::NoSignedWrap
: 0);
1851 return get(Instruction::Shl
, C1
, C2
, Flags
);
1854 Constant
*ConstantExpr::getLShr(Constant
*C1
, Constant
*C2
, bool isExact
) {
1855 return get(Instruction::LShr
, C1
, C2
,
1856 isExact
? PossiblyExactOperator::IsExact
: 0);
1859 Constant
*ConstantExpr::getAShr(Constant
*C1
, Constant
*C2
, bool isExact
) {
1860 return get(Instruction::AShr
, C1
, C2
,
1861 isExact
? PossiblyExactOperator::IsExact
: 0);
1864 // destroyConstant - Remove the constant from the constant table...
1866 void ConstantExpr::destroyConstant() {
1867 getType()->getContext().pImpl
->ExprConstants
.remove(this);
1868 destroyConstantImpl();
1871 const char *ConstantExpr::getOpcodeName() const {
1872 return Instruction::getOpcodeName(getOpcode());
1877 GetElementPtrConstantExpr::
1878 GetElementPtrConstantExpr(Constant
*C
, const std::vector
<Constant
*> &IdxList
,
1880 : ConstantExpr(DestTy
, Instruction::GetElementPtr
,
1881 OperandTraits
<GetElementPtrConstantExpr
>::op_end(this)
1882 - (IdxList
.size()+1), IdxList
.size()+1) {
1884 for (unsigned i
= 0, E
= IdxList
.size(); i
!= E
; ++i
)
1885 OperandList
[i
+1] = IdxList
[i
];
1889 //===----------------------------------------------------------------------===//
1890 // replaceUsesOfWithOnConstant implementations
1892 /// replaceUsesOfWithOnConstant - Update this constant array to change uses of
1893 /// 'From' to be uses of 'To'. This must update the uniquing data structures
1896 /// Note that we intentionally replace all uses of From with To here. Consider
1897 /// a large array that uses 'From' 1000 times. By handling this case all here,
1898 /// ConstantArray::replaceUsesOfWithOnConstant is only invoked once, and that
1899 /// single invocation handles all 1000 uses. Handling them one at a time would
1900 /// work, but would be really slow because it would have to unique each updated
1903 void ConstantArray::replaceUsesOfWithOnConstant(Value
*From
, Value
*To
,
1905 assert(isa
<Constant
>(To
) && "Cannot make Constant refer to non-constant!");
1906 Constant
*ToC
= cast
<Constant
>(To
);
1908 LLVMContextImpl
*pImpl
= getType()->getContext().pImpl
;
1910 std::pair
<LLVMContextImpl::ArrayConstantsTy::MapKey
, ConstantArray
*> Lookup
;
1911 Lookup
.first
.first
= cast
<ArrayType
>(getType());
1912 Lookup
.second
= this;
1914 std::vector
<Constant
*> &Values
= Lookup
.first
.second
;
1915 Values
.reserve(getNumOperands()); // Build replacement array.
1917 // Fill values with the modified operands of the constant array. Also,
1918 // compute whether this turns into an all-zeros array.
1919 bool isAllZeros
= false;
1920 unsigned NumUpdated
= 0;
1921 if (!ToC
->isNullValue()) {
1922 for (Use
*O
= OperandList
, *E
= OperandList
+getNumOperands(); O
!= E
; ++O
) {
1923 Constant
*Val
= cast
<Constant
>(O
->get());
1928 Values
.push_back(Val
);
1932 for (Use
*O
= OperandList
, *E
= OperandList
+getNumOperands();O
!= E
; ++O
) {
1933 Constant
*Val
= cast
<Constant
>(O
->get());
1938 Values
.push_back(Val
);
1939 if (isAllZeros
) isAllZeros
= Val
->isNullValue();
1943 Constant
*Replacement
= 0;
1945 Replacement
= ConstantAggregateZero::get(getType());
1947 // Check to see if we have this array type already.
1949 LLVMContextImpl::ArrayConstantsTy::MapTy::iterator I
=
1950 pImpl
->ArrayConstants
.InsertOrGetItem(Lookup
, Exists
);
1953 Replacement
= I
->second
;
1955 // Okay, the new shape doesn't exist in the system yet. Instead of
1956 // creating a new constant array, inserting it, replaceallusesof'ing the
1957 // old with the new, then deleting the old... just update the current one
1959 pImpl
->ArrayConstants
.MoveConstantToNewSlot(this, I
);
1961 // Update to the new value. Optimize for the case when we have a single
1962 // operand that we're changing, but handle bulk updates efficiently.
1963 if (NumUpdated
== 1) {
1964 unsigned OperandToUpdate
= U
- OperandList
;
1965 assert(getOperand(OperandToUpdate
) == From
&&
1966 "ReplaceAllUsesWith broken!");
1967 setOperand(OperandToUpdate
, ToC
);
1969 for (unsigned i
= 0, e
= getNumOperands(); i
!= e
; ++i
)
1970 if (getOperand(i
) == From
)
1977 // Otherwise, I do need to replace this with an existing value.
1978 assert(Replacement
!= this && "I didn't contain From!");
1980 // Everyone using this now uses the replacement.
1981 uncheckedReplaceAllUsesWith(Replacement
);
1983 // Delete the old constant!
1987 void ConstantStruct::replaceUsesOfWithOnConstant(Value
*From
, Value
*To
,
1989 assert(isa
<Constant
>(To
) && "Cannot make Constant refer to non-constant!");
1990 Constant
*ToC
= cast
<Constant
>(To
);
1992 unsigned OperandToUpdate
= U
-OperandList
;
1993 assert(getOperand(OperandToUpdate
) == From
&& "ReplaceAllUsesWith broken!");
1995 std::pair
<LLVMContextImpl::StructConstantsTy::MapKey
, ConstantStruct
*> Lookup
;
1996 Lookup
.first
.first
= cast
<StructType
>(getType());
1997 Lookup
.second
= this;
1998 std::vector
<Constant
*> &Values
= Lookup
.first
.second
;
1999 Values
.reserve(getNumOperands()); // Build replacement struct.
2002 // Fill values with the modified operands of the constant struct. Also,
2003 // compute whether this turns into an all-zeros struct.
2004 bool isAllZeros
= false;
2005 if (!ToC
->isNullValue()) {
2006 for (Use
*O
= OperandList
, *E
= OperandList
+ getNumOperands(); O
!= E
; ++O
)
2007 Values
.push_back(cast
<Constant
>(O
->get()));
2010 for (Use
*O
= OperandList
, *E
= OperandList
+getNumOperands(); O
!= E
; ++O
) {
2011 Constant
*Val
= cast
<Constant
>(O
->get());
2012 Values
.push_back(Val
);
2013 if (isAllZeros
) isAllZeros
= Val
->isNullValue();
2016 Values
[OperandToUpdate
] = ToC
;
2018 LLVMContextImpl
*pImpl
= getContext().pImpl
;
2020 Constant
*Replacement
= 0;
2022 Replacement
= ConstantAggregateZero::get(getType());
2024 // Check to see if we have this struct type already.
2026 LLVMContextImpl::StructConstantsTy::MapTy::iterator I
=
2027 pImpl
->StructConstants
.InsertOrGetItem(Lookup
, Exists
);
2030 Replacement
= I
->second
;
2032 // Okay, the new shape doesn't exist in the system yet. Instead of
2033 // creating a new constant struct, inserting it, replaceallusesof'ing the
2034 // old with the new, then deleting the old... just update the current one
2036 pImpl
->StructConstants
.MoveConstantToNewSlot(this, I
);
2038 // Update to the new value.
2039 setOperand(OperandToUpdate
, ToC
);
2044 assert(Replacement
!= this && "I didn't contain From!");
2046 // Everyone using this now uses the replacement.
2047 uncheckedReplaceAllUsesWith(Replacement
);
2049 // Delete the old constant!
2053 void ConstantVector::replaceUsesOfWithOnConstant(Value
*From
, Value
*To
,
2055 assert(isa
<Constant
>(To
) && "Cannot make Constant refer to non-constant!");
2057 std::vector
<Constant
*> Values
;
2058 Values
.reserve(getNumOperands()); // Build replacement array...
2059 for (unsigned i
= 0, e
= getNumOperands(); i
!= e
; ++i
) {
2060 Constant
*Val
= getOperand(i
);
2061 if (Val
== From
) Val
= cast
<Constant
>(To
);
2062 Values
.push_back(Val
);
2065 Constant
*Replacement
= get(Values
);
2066 assert(Replacement
!= this && "I didn't contain From!");
2068 // Everyone using this now uses the replacement.
2069 uncheckedReplaceAllUsesWith(Replacement
);
2071 // Delete the old constant!
2075 void ConstantExpr::replaceUsesOfWithOnConstant(Value
*From
, Value
*ToV
,
2077 assert(isa
<Constant
>(ToV
) && "Cannot make Constant refer to non-constant!");
2078 Constant
*To
= cast
<Constant
>(ToV
);
2080 Constant
*Replacement
= 0;
2081 if (getOpcode() == Instruction::GetElementPtr
) {
2082 SmallVector
<Constant
*, 8> Indices
;
2083 Constant
*Pointer
= getOperand(0);
2084 Indices
.reserve(getNumOperands()-1);
2085 if (Pointer
== From
) Pointer
= To
;
2087 for (unsigned i
= 1, e
= getNumOperands(); i
!= e
; ++i
) {
2088 Constant
*Val
= getOperand(i
);
2089 if (Val
== From
) Val
= To
;
2090 Indices
.push_back(Val
);
2092 Replacement
= ConstantExpr::getGetElementPtr(Pointer
,
2093 &Indices
[0], Indices
.size(),
2094 cast
<GEPOperator
>(this)->isInBounds());
2095 } else if (getOpcode() == Instruction::ExtractValue
) {
2096 Constant
*Agg
= getOperand(0);
2097 if (Agg
== From
) Agg
= To
;
2099 ArrayRef
<unsigned> Indices
= getIndices();
2100 Replacement
= ConstantExpr::getExtractValue(Agg
,
2101 &Indices
[0], Indices
.size());
2102 } else if (getOpcode() == Instruction::InsertValue
) {
2103 Constant
*Agg
= getOperand(0);
2104 Constant
*Val
= getOperand(1);
2105 if (Agg
== From
) Agg
= To
;
2106 if (Val
== From
) Val
= To
;
2108 ArrayRef
<unsigned> Indices
= getIndices();
2109 Replacement
= ConstantExpr::getInsertValue(Agg
, Val
,
2110 &Indices
[0], Indices
.size());
2111 } else if (isCast()) {
2112 assert(getOperand(0) == From
&& "Cast only has one use!");
2113 Replacement
= ConstantExpr::getCast(getOpcode(), To
, getType());
2114 } else if (getOpcode() == Instruction::Select
) {
2115 Constant
*C1
= getOperand(0);
2116 Constant
*C2
= getOperand(1);
2117 Constant
*C3
= getOperand(2);
2118 if (C1
== From
) C1
= To
;
2119 if (C2
== From
) C2
= To
;
2120 if (C3
== From
) C3
= To
;
2121 Replacement
= ConstantExpr::getSelect(C1
, C2
, C3
);
2122 } else if (getOpcode() == Instruction::ExtractElement
) {
2123 Constant
*C1
= getOperand(0);
2124 Constant
*C2
= getOperand(1);
2125 if (C1
== From
) C1
= To
;
2126 if (C2
== From
) C2
= To
;
2127 Replacement
= ConstantExpr::getExtractElement(C1
, C2
);
2128 } else if (getOpcode() == Instruction::InsertElement
) {
2129 Constant
*C1
= getOperand(0);
2130 Constant
*C2
= getOperand(1);
2131 Constant
*C3
= getOperand(1);
2132 if (C1
== From
) C1
= To
;
2133 if (C2
== From
) C2
= To
;
2134 if (C3
== From
) C3
= To
;
2135 Replacement
= ConstantExpr::getInsertElement(C1
, C2
, C3
);
2136 } else if (getOpcode() == Instruction::ShuffleVector
) {
2137 Constant
*C1
= getOperand(0);
2138 Constant
*C2
= getOperand(1);
2139 Constant
*C3
= getOperand(2);
2140 if (C1
== From
) C1
= To
;
2141 if (C2
== From
) C2
= To
;
2142 if (C3
== From
) C3
= To
;
2143 Replacement
= ConstantExpr::getShuffleVector(C1
, C2
, C3
);
2144 } else if (isCompare()) {
2145 Constant
*C1
= getOperand(0);
2146 Constant
*C2
= getOperand(1);
2147 if (C1
== From
) C1
= To
;
2148 if (C2
== From
) C2
= To
;
2149 if (getOpcode() == Instruction::ICmp
)
2150 Replacement
= ConstantExpr::getICmp(getPredicate(), C1
, C2
);
2152 assert(getOpcode() == Instruction::FCmp
);
2153 Replacement
= ConstantExpr::getFCmp(getPredicate(), C1
, C2
);
2155 } else if (getNumOperands() == 2) {
2156 Constant
*C1
= getOperand(0);
2157 Constant
*C2
= getOperand(1);
2158 if (C1
== From
) C1
= To
;
2159 if (C2
== From
) C2
= To
;
2160 Replacement
= ConstantExpr::get(getOpcode(), C1
, C2
, SubclassOptionalData
);
2162 llvm_unreachable("Unknown ConstantExpr type!");
2166 assert(Replacement
!= this && "I didn't contain From!");
2168 // Everyone using this now uses the replacement.
2169 uncheckedReplaceAllUsesWith(Replacement
);
2171 // Delete the old constant!