1 //===-- Constants.cpp - Implement Constant nodes --------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements the Constant* classes. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/IR/Constants.h" 15 #include "ConstantFold.h" 16 #include "LLVMContextImpl.h" 17 #include "llvm/ADT/DenseMap.h" 18 #include "llvm/ADT/FoldingSet.h" 19 #include "llvm/ADT/STLExtras.h" 20 #include "llvm/ADT/SmallVector.h" 21 #include "llvm/ADT/StringExtras.h" 22 #include "llvm/ADT/StringMap.h" 23 #include "llvm/IR/DerivedTypes.h" 24 #include "llvm/IR/GetElementPtrTypeIterator.h" 25 #include "llvm/IR/GlobalValue.h" 26 #include "llvm/IR/Instructions.h" 27 #include "llvm/IR/Module.h" 28 #include "llvm/IR/Operator.h" 29 #include "llvm/Support/Compiler.h" 30 #include "llvm/Support/Debug.h" 31 #include "llvm/Support/ErrorHandling.h" 32 #include "llvm/Support/ManagedStatic.h" 33 #include "llvm/Support/MathExtras.h" 34 #include "llvm/Support/raw_ostream.h" 35 #include <algorithm> 36 #include <cstdarg> 37 using namespace llvm; 38 39 //===----------------------------------------------------------------------===// 40 // Constant Class 41 //===----------------------------------------------------------------------===// 42 43 void Constant::anchor() { } 44 45 bool Constant::isNegativeZeroValue() const { 46 // Floating point values have an explicit -0.0 value. 47 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this)) 48 return CFP->isZero() && CFP->isNegative(); 49 50 // Equivalent for a vector of -0.0's. 51 if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(this)) 52 if (ConstantFP *SplatCFP = dyn_cast_or_null<ConstantFP>(CV->getSplatValue())) 53 if (SplatCFP && SplatCFP->isZero() && SplatCFP->isNegative()) 54 return true; 55 56 // We've already handled true FP case; any other FP vectors can't represent -0.0. 57 if (getType()->isFPOrFPVectorTy()) 58 return false; 59 60 // Otherwise, just use +0.0. 61 return isNullValue(); 62 } 63 64 // Return true iff this constant is positive zero (floating point), negative 65 // zero (floating point), or a null value. 66 bool Constant::isZeroValue() const { 67 // Floating point values have an explicit -0.0 value. 68 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this)) 69 return CFP->isZero(); 70 71 // Otherwise, just use +0.0. 72 return isNullValue(); 73 } 74 75 bool Constant::isNullValue() const { 76 // 0 is null. 77 if (const ConstantInt *CI = dyn_cast<ConstantInt>(this)) 78 return CI->isZero(); 79 80 // +0.0 is null. 81 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this)) 82 return CFP->isZero() && !CFP->isNegative(); 83 84 // constant zero is zero for aggregates and cpnull is null for pointers. 85 return isa<ConstantAggregateZero>(this) || isa<ConstantPointerNull>(this); 86 } 87 88 bool Constant::isAllOnesValue() const { 89 // Check for -1 integers 90 if (const ConstantInt *CI = dyn_cast<ConstantInt>(this)) 91 return CI->isMinusOne(); 92 93 // Check for FP which are bitcasted from -1 integers 94 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this)) 95 return CFP->getValueAPF().bitcastToAPInt().isAllOnesValue(); 96 97 // Check for constant vectors which are splats of -1 values. 98 if (const ConstantVector *CV = dyn_cast<ConstantVector>(this)) 99 if (Constant *Splat = CV->getSplatValue()) 100 return Splat->isAllOnesValue(); 101 102 // Check for constant vectors which are splats of -1 values. 103 if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(this)) 104 if (Constant *Splat = CV->getSplatValue()) 105 return Splat->isAllOnesValue(); 106 107 return false; 108 } 109 110 bool Constant::isOneValue() const { 111 // Check for 1 integers 112 if (const ConstantInt *CI = dyn_cast<ConstantInt>(this)) 113 return CI->isOne(); 114 115 // Check for FP which are bitcasted from 1 integers 116 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this)) 117 return CFP->getValueAPF().bitcastToAPInt() == 1; 118 119 // Check for constant vectors which are splats of 1 values. 120 if (const ConstantVector *CV = dyn_cast<ConstantVector>(this)) 121 if (Constant *Splat = CV->getSplatValue()) 122 return Splat->isOneValue(); 123 124 // Check for constant vectors which are splats of 1 values. 125 if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(this)) 126 if (Constant *Splat = CV->getSplatValue()) 127 return Splat->isOneValue(); 128 129 return false; 130 } 131 132 bool Constant::isMinSignedValue() const { 133 // Check for INT_MIN integers 134 if (const ConstantInt *CI = dyn_cast<ConstantInt>(this)) 135 return CI->isMinValue(/*isSigned=*/true); 136 137 // Check for FP which are bitcasted from INT_MIN integers 138 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this)) 139 return CFP->getValueAPF().bitcastToAPInt().isMinSignedValue(); 140 141 // Check for constant vectors which are splats of INT_MIN values. 142 if (const ConstantVector *CV = dyn_cast<ConstantVector>(this)) 143 if (Constant *Splat = CV->getSplatValue()) 144 return Splat->isMinSignedValue(); 145 146 // Check for constant vectors which are splats of INT_MIN values. 147 if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(this)) 148 if (Constant *Splat = CV->getSplatValue()) 149 return Splat->isMinSignedValue(); 150 151 return false; 152 } 153 154 bool Constant::isNotMinSignedValue() const { 155 // Check for INT_MIN integers 156 if (const ConstantInt *CI = dyn_cast<ConstantInt>(this)) 157 return !CI->isMinValue(/*isSigned=*/true); 158 159 // Check for FP which are bitcasted from INT_MIN integers 160 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this)) 161 return !CFP->getValueAPF().bitcastToAPInt().isMinSignedValue(); 162 163 // Check for constant vectors which are splats of INT_MIN values. 164 if (const ConstantVector *CV = dyn_cast<ConstantVector>(this)) 165 if (Constant *Splat = CV->getSplatValue()) 166 return Splat->isNotMinSignedValue(); 167 168 // Check for constant vectors which are splats of INT_MIN values. 169 if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(this)) 170 if (Constant *Splat = CV->getSplatValue()) 171 return Splat->isNotMinSignedValue(); 172 173 // It *may* contain INT_MIN, we can't tell. 174 return false; 175 } 176 177 // Constructor to create a '0' constant of arbitrary type... 178 Constant *Constant::getNullValue(Type *Ty) { 179 switch (Ty->getTypeID()) { 180 case Type::IntegerTyID: 181 return ConstantInt::get(Ty, 0); 182 case Type::HalfTyID: 183 return ConstantFP::get(Ty->getContext(), 184 APFloat::getZero(APFloat::IEEEhalf)); 185 case Type::FloatTyID: 186 return ConstantFP::get(Ty->getContext(), 187 APFloat::getZero(APFloat::IEEEsingle)); 188 case Type::DoubleTyID: 189 return ConstantFP::get(Ty->getContext(), 190 APFloat::getZero(APFloat::IEEEdouble)); 191 case Type::X86_FP80TyID: 192 return ConstantFP::get(Ty->getContext(), 193 APFloat::getZero(APFloat::x87DoubleExtended)); 194 case Type::FP128TyID: 195 return ConstantFP::get(Ty->getContext(), 196 APFloat::getZero(APFloat::IEEEquad)); 197 case Type::PPC_FP128TyID: 198 return ConstantFP::get(Ty->getContext(), 199 APFloat(APFloat::PPCDoubleDouble, 200 APInt::getNullValue(128))); 201 case Type::PointerTyID: 202 return ConstantPointerNull::get(cast<PointerType>(Ty)); 203 case Type::StructTyID: 204 case Type::ArrayTyID: 205 case Type::VectorTyID: 206 return ConstantAggregateZero::get(Ty); 207 default: 208 // Function, Label, or Opaque type? 209 llvm_unreachable("Cannot create a null constant of that type!"); 210 } 211 } 212 213 Constant *Constant::getIntegerValue(Type *Ty, const APInt &V) { 214 Type *ScalarTy = Ty->getScalarType(); 215 216 // Create the base integer constant. 217 Constant *C = ConstantInt::get(Ty->getContext(), V); 218 219 // Convert an integer to a pointer, if necessary. 220 if (PointerType *PTy = dyn_cast<PointerType>(ScalarTy)) 221 C = ConstantExpr::getIntToPtr(C, PTy); 222 223 // Broadcast a scalar to a vector, if necessary. 224 if (VectorType *VTy = dyn_cast<VectorType>(Ty)) 225 C = ConstantVector::getSplat(VTy->getNumElements(), C); 226 227 return C; 228 } 229 230 Constant *Constant::getAllOnesValue(Type *Ty) { 231 if (IntegerType *ITy = dyn_cast<IntegerType>(Ty)) 232 return ConstantInt::get(Ty->getContext(), 233 APInt::getAllOnesValue(ITy->getBitWidth())); 234 235 if (Ty->isFloatingPointTy()) { 236 APFloat FL = APFloat::getAllOnesValue(Ty->getPrimitiveSizeInBits(), 237 !Ty->isPPC_FP128Ty()); 238 return ConstantFP::get(Ty->getContext(), FL); 239 } 240 241 VectorType *VTy = cast<VectorType>(Ty); 242 return ConstantVector::getSplat(VTy->getNumElements(), 243 getAllOnesValue(VTy->getElementType())); 244 } 245 246 /// getAggregateElement - For aggregates (struct/array/vector) return the 247 /// constant that corresponds to the specified element if possible, or null if 248 /// not. This can return null if the element index is a ConstantExpr, or if 249 /// 'this' is a constant expr. 250 Constant *Constant::getAggregateElement(unsigned Elt) const { 251 if (const ConstantStruct *CS = dyn_cast<ConstantStruct>(this)) 252 return Elt < CS->getNumOperands() ? CS->getOperand(Elt) : nullptr; 253 254 if (const ConstantArray *CA = dyn_cast<ConstantArray>(this)) 255 return Elt < CA->getNumOperands() ? CA->getOperand(Elt) : nullptr; 256 257 if (const ConstantVector *CV = dyn_cast<ConstantVector>(this)) 258 return Elt < CV->getNumOperands() ? CV->getOperand(Elt) : nullptr; 259 260 if (const ConstantAggregateZero *CAZ = dyn_cast<ConstantAggregateZero>(this)) 261 return Elt < CAZ->getNumElements() ? CAZ->getElementValue(Elt) : nullptr; 262 263 if (const UndefValue *UV = dyn_cast<UndefValue>(this)) 264 return Elt < UV->getNumElements() ? UV->getElementValue(Elt) : nullptr; 265 266 if (const ConstantDataSequential *CDS =dyn_cast<ConstantDataSequential>(this)) 267 return Elt < CDS->getNumElements() ? CDS->getElementAsConstant(Elt) 268 : nullptr; 269 return nullptr; 270 } 271 272 Constant *Constant::getAggregateElement(Constant *Elt) const { 273 assert(isa<IntegerType>(Elt->getType()) && "Index must be an integer"); 274 if (ConstantInt *CI = dyn_cast<ConstantInt>(Elt)) 275 return getAggregateElement(CI->getZExtValue()); 276 return nullptr; 277 } 278 279 280 void Constant::destroyConstantImpl() { 281 // When a Constant is destroyed, there may be lingering 282 // references to the constant by other constants in the constant pool. These 283 // constants are implicitly dependent on the module that is being deleted, 284 // but they don't know that. Because we only find out when the CPV is 285 // deleted, we must now notify all of our users (that should only be 286 // Constants) that they are, in fact, invalid now and should be deleted. 287 // 288 while (!use_empty()) { 289 Value *V = user_back(); 290 #ifndef NDEBUG // Only in -g mode... 291 if (!isa<Constant>(V)) { 292 dbgs() << "While deleting: " << *this 293 << "\n\nUse still stuck around after Def is destroyed: " 294 << *V << "\n\n"; 295 } 296 #endif 297 assert(isa<Constant>(V) && "References remain to Constant being destroyed"); 298 cast<Constant>(V)->destroyConstant(); 299 300 // The constant should remove itself from our use list... 301 assert((use_empty() || user_back() != V) && "Constant not removed!"); 302 } 303 304 // Value has no outstanding references it is safe to delete it now... 305 delete this; 306 } 307 308 static bool canTrapImpl(const Constant *C, 309 SmallPtrSetImpl<const ConstantExpr *> &NonTrappingOps) { 310 assert(C->getType()->isFirstClassType() && "Cannot evaluate aggregate vals!"); 311 // The only thing that could possibly trap are constant exprs. 312 const ConstantExpr *CE = dyn_cast<ConstantExpr>(C); 313 if (!CE) 314 return false; 315 316 // ConstantExpr traps if any operands can trap. 317 for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i) { 318 if (ConstantExpr *Op = dyn_cast<ConstantExpr>(CE->getOperand(i))) { 319 if (NonTrappingOps.insert(Op).second && canTrapImpl(Op, NonTrappingOps)) 320 return true; 321 } 322 } 323 324 // Otherwise, only specific operations can trap. 325 switch (CE->getOpcode()) { 326 default: 327 return false; 328 case Instruction::UDiv: 329 case Instruction::SDiv: 330 case Instruction::FDiv: 331 case Instruction::URem: 332 case Instruction::SRem: 333 case Instruction::FRem: 334 // Div and rem can trap if the RHS is not known to be non-zero. 335 if (!isa<ConstantInt>(CE->getOperand(1)) ||CE->getOperand(1)->isNullValue()) 336 return true; 337 return false; 338 } 339 } 340 341 /// canTrap - Return true if evaluation of this constant could trap. This is 342 /// true for things like constant expressions that could divide by zero. 343 bool Constant::canTrap() const { 344 SmallPtrSet<const ConstantExpr *, 4> NonTrappingOps; 345 return canTrapImpl(this, NonTrappingOps); 346 } 347 348 /// Check if C contains a GlobalValue for which Predicate is true. 349 static bool 350 ConstHasGlobalValuePredicate(const Constant *C, 351 bool (*Predicate)(const GlobalValue *)) { 352 SmallPtrSet<const Constant *, 8> Visited; 353 SmallVector<const Constant *, 8> WorkList; 354 WorkList.push_back(C); 355 Visited.insert(C); 356 357 while (!WorkList.empty()) { 358 const Constant *WorkItem = WorkList.pop_back_val(); 359 if (const auto *GV = dyn_cast<GlobalValue>(WorkItem)) 360 if (Predicate(GV)) 361 return true; 362 for (const Value *Op : WorkItem->operands()) { 363 const Constant *ConstOp = dyn_cast<Constant>(Op); 364 if (!ConstOp) 365 continue; 366 if (Visited.insert(ConstOp).second) 367 WorkList.push_back(ConstOp); 368 } 369 } 370 return false; 371 } 372 373 /// Return true if the value can vary between threads. 374 bool Constant::isThreadDependent() const { 375 auto DLLImportPredicate = [](const GlobalValue *GV) { 376 return GV->isThreadLocal(); 377 }; 378 return ConstHasGlobalValuePredicate(this, DLLImportPredicate); 379 } 380 381 bool Constant::isDLLImportDependent() const { 382 auto DLLImportPredicate = [](const GlobalValue *GV) { 383 return GV->hasDLLImportStorageClass(); 384 }; 385 return ConstHasGlobalValuePredicate(this, DLLImportPredicate); 386 } 387 388 /// Return true if the constant has users other than constant exprs and other 389 /// dangling things. 390 bool Constant::isConstantUsed() const { 391 for (const User *U : users()) { 392 const Constant *UC = dyn_cast<Constant>(U); 393 if (!UC || isa<GlobalValue>(UC)) 394 return true; 395 396 if (UC->isConstantUsed()) 397 return true; 398 } 399 return false; 400 } 401 402 403 404 /// getRelocationInfo - This method classifies the entry according to 405 /// whether or not it may generate a relocation entry. This must be 406 /// conservative, so if it might codegen to a relocatable entry, it should say 407 /// so. The return values are: 408 /// 409 /// NoRelocation: This constant pool entry is guaranteed to never have a 410 /// relocation applied to it (because it holds a simple constant like 411 /// '4'). 412 /// LocalRelocation: This entry has relocations, but the entries are 413 /// guaranteed to be resolvable by the static linker, so the dynamic 414 /// linker will never see them. 415 /// GlobalRelocations: This entry may have arbitrary relocations. 416 /// 417 /// FIXME: This really should not be in IR. 418 Constant::PossibleRelocationsTy Constant::getRelocationInfo() const { 419 if (const GlobalValue *GV = dyn_cast<GlobalValue>(this)) { 420 if (GV->hasLocalLinkage() || GV->hasHiddenVisibility()) 421 return LocalRelocation; // Local to this file/library. 422 return GlobalRelocations; // Global reference. 423 } 424 425 if (const BlockAddress *BA = dyn_cast<BlockAddress>(this)) 426 return BA->getFunction()->getRelocationInfo(); 427 428 // While raw uses of blockaddress need to be relocated, differences between 429 // two of them don't when they are for labels in the same function. This is a 430 // common idiom when creating a table for the indirect goto extension, so we 431 // handle it efficiently here. 432 if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(this)) 433 if (CE->getOpcode() == Instruction::Sub) { 434 ConstantExpr *LHS = dyn_cast<ConstantExpr>(CE->getOperand(0)); 435 ConstantExpr *RHS = dyn_cast<ConstantExpr>(CE->getOperand(1)); 436 if (LHS && RHS && 437 LHS->getOpcode() == Instruction::PtrToInt && 438 RHS->getOpcode() == Instruction::PtrToInt && 439 isa<BlockAddress>(LHS->getOperand(0)) && 440 isa<BlockAddress>(RHS->getOperand(0)) && 441 cast<BlockAddress>(LHS->getOperand(0))->getFunction() == 442 cast<BlockAddress>(RHS->getOperand(0))->getFunction()) 443 return NoRelocation; 444 } 445 446 PossibleRelocationsTy Result = NoRelocation; 447 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) 448 Result = std::max(Result, 449 cast<Constant>(getOperand(i))->getRelocationInfo()); 450 451 return Result; 452 } 453 454 /// removeDeadUsersOfConstant - If the specified constantexpr is dead, remove 455 /// it. This involves recursively eliminating any dead users of the 456 /// constantexpr. 457 static bool removeDeadUsersOfConstant(const Constant *C) { 458 if (isa<GlobalValue>(C)) return false; // Cannot remove this 459 460 while (!C->use_empty()) { 461 const Constant *User = dyn_cast<Constant>(C->user_back()); 462 if (!User) return false; // Non-constant usage; 463 if (!removeDeadUsersOfConstant(User)) 464 return false; // Constant wasn't dead 465 } 466 467 const_cast<Constant*>(C)->destroyConstant(); 468 return true; 469 } 470 471 472 /// removeDeadConstantUsers - If there are any dead constant users dangling 473 /// off of this constant, remove them. This method is useful for clients 474 /// that want to check to see if a global is unused, but don't want to deal 475 /// with potentially dead constants hanging off of the globals. 476 void Constant::removeDeadConstantUsers() const { 477 Value::const_user_iterator I = user_begin(), E = user_end(); 478 Value::const_user_iterator LastNonDeadUser = E; 479 while (I != E) { 480 const Constant *User = dyn_cast<Constant>(*I); 481 if (!User) { 482 LastNonDeadUser = I; 483 ++I; 484 continue; 485 } 486 487 if (!removeDeadUsersOfConstant(User)) { 488 // If the constant wasn't dead, remember that this was the last live use 489 // and move on to the next constant. 490 LastNonDeadUser = I; 491 ++I; 492 continue; 493 } 494 495 // If the constant was dead, then the iterator is invalidated. 496 if (LastNonDeadUser == E) { 497 I = user_begin(); 498 if (I == E) break; 499 } else { 500 I = LastNonDeadUser; 501 ++I; 502 } 503 } 504 } 505 506 507 508 //===----------------------------------------------------------------------===// 509 // ConstantInt 510 //===----------------------------------------------------------------------===// 511 512 void ConstantInt::anchor() { } 513 514 ConstantInt::ConstantInt(IntegerType *Ty, const APInt& V) 515 : Constant(Ty, ConstantIntVal, nullptr, 0), Val(V) { 516 assert(V.getBitWidth() == Ty->getBitWidth() && "Invalid constant for type"); 517 } 518 519 ConstantInt *ConstantInt::getTrue(LLVMContext &Context) { 520 LLVMContextImpl *pImpl = Context.pImpl; 521 if (!pImpl->TheTrueVal) 522 pImpl->TheTrueVal = ConstantInt::get(Type::getInt1Ty(Context), 1); 523 return pImpl->TheTrueVal; 524 } 525 526 ConstantInt *ConstantInt::getFalse(LLVMContext &Context) { 527 LLVMContextImpl *pImpl = Context.pImpl; 528 if (!pImpl->TheFalseVal) 529 pImpl->TheFalseVal = ConstantInt::get(Type::getInt1Ty(Context), 0); 530 return pImpl->TheFalseVal; 531 } 532 533 Constant *ConstantInt::getTrue(Type *Ty) { 534 VectorType *VTy = dyn_cast<VectorType>(Ty); 535 if (!VTy) { 536 assert(Ty->isIntegerTy(1) && "True must be i1 or vector of i1."); 537 return ConstantInt::getTrue(Ty->getContext()); 538 } 539 assert(VTy->getElementType()->isIntegerTy(1) && 540 "True must be vector of i1 or i1."); 541 return ConstantVector::getSplat(VTy->getNumElements(), 542 ConstantInt::getTrue(Ty->getContext())); 543 } 544 545 Constant *ConstantInt::getFalse(Type *Ty) { 546 VectorType *VTy = dyn_cast<VectorType>(Ty); 547 if (!VTy) { 548 assert(Ty->isIntegerTy(1) && "False must be i1 or vector of i1."); 549 return ConstantInt::getFalse(Ty->getContext()); 550 } 551 assert(VTy->getElementType()->isIntegerTy(1) && 552 "False must be vector of i1 or i1."); 553 return ConstantVector::getSplat(VTy->getNumElements(), 554 ConstantInt::getFalse(Ty->getContext())); 555 } 556 557 // Get a ConstantInt from an APInt. 558 ConstantInt *ConstantInt::get(LLVMContext &Context, const APInt &V) { 559 // get an existing value or the insertion position 560 LLVMContextImpl *pImpl = Context.pImpl; 561 ConstantInt *&Slot = pImpl->IntConstants[V]; 562 if (!Slot) { 563 // Get the corresponding integer type for the bit width of the value. 564 IntegerType *ITy = IntegerType::get(Context, V.getBitWidth()); 565 Slot = new ConstantInt(ITy, V); 566 } 567 assert(Slot->getType() == IntegerType::get(Context, V.getBitWidth())); 568 return Slot; 569 } 570 571 Constant *ConstantInt::get(Type *Ty, uint64_t V, bool isSigned) { 572 Constant *C = get(cast<IntegerType>(Ty->getScalarType()), V, isSigned); 573 574 // For vectors, broadcast the value. 575 if (VectorType *VTy = dyn_cast<VectorType>(Ty)) 576 return ConstantVector::getSplat(VTy->getNumElements(), C); 577 578 return C; 579 } 580 581 ConstantInt *ConstantInt::get(IntegerType *Ty, uint64_t V, 582 bool isSigned) { 583 return get(Ty->getContext(), APInt(Ty->getBitWidth(), V, isSigned)); 584 } 585 586 ConstantInt *ConstantInt::getSigned(IntegerType *Ty, int64_t V) { 587 return get(Ty, V, true); 588 } 589 590 Constant *ConstantInt::getSigned(Type *Ty, int64_t V) { 591 return get(Ty, V, true); 592 } 593 594 Constant *ConstantInt::get(Type *Ty, const APInt& V) { 595 ConstantInt *C = get(Ty->getContext(), V); 596 assert(C->getType() == Ty->getScalarType() && 597 "ConstantInt type doesn't match the type implied by its value!"); 598 599 // For vectors, broadcast the value. 600 if (VectorType *VTy = dyn_cast<VectorType>(Ty)) 601 return ConstantVector::getSplat(VTy->getNumElements(), C); 602 603 return C; 604 } 605 606 ConstantInt *ConstantInt::get(IntegerType* Ty, StringRef Str, 607 uint8_t radix) { 608 return get(Ty->getContext(), APInt(Ty->getBitWidth(), Str, radix)); 609 } 610 611 //===----------------------------------------------------------------------===// 612 // ConstantFP 613 //===----------------------------------------------------------------------===// 614 615 static const fltSemantics *TypeToFloatSemantics(Type *Ty) { 616 if (Ty->isHalfTy()) 617 return &APFloat::IEEEhalf; 618 if (Ty->isFloatTy()) 619 return &APFloat::IEEEsingle; 620 if (Ty->isDoubleTy()) 621 return &APFloat::IEEEdouble; 622 if (Ty->isX86_FP80Ty()) 623 return &APFloat::x87DoubleExtended; 624 else if (Ty->isFP128Ty()) 625 return &APFloat::IEEEquad; 626 627 assert(Ty->isPPC_FP128Ty() && "Unknown FP format"); 628 return &APFloat::PPCDoubleDouble; 629 } 630 631 void ConstantFP::anchor() { } 632 633 /// get() - This returns a constant fp for the specified value in the 634 /// specified type. This should only be used for simple constant values like 635 /// 2.0/1.0 etc, that are known-valid both as double and as the target format. 636 Constant *ConstantFP::get(Type *Ty, double V) { 637 LLVMContext &Context = Ty->getContext(); 638 639 APFloat FV(V); 640 bool ignored; 641 FV.convert(*TypeToFloatSemantics(Ty->getScalarType()), 642 APFloat::rmNearestTiesToEven, &ignored); 643 Constant *C = get(Context, FV); 644 645 // For vectors, broadcast the value. 646 if (VectorType *VTy = dyn_cast<VectorType>(Ty)) 647 return ConstantVector::getSplat(VTy->getNumElements(), C); 648 649 return C; 650 } 651 652 653 Constant *ConstantFP::get(Type *Ty, StringRef Str) { 654 LLVMContext &Context = Ty->getContext(); 655 656 APFloat FV(*TypeToFloatSemantics(Ty->getScalarType()), Str); 657 Constant *C = get(Context, FV); 658 659 // For vectors, broadcast the value. 660 if (VectorType *VTy = dyn_cast<VectorType>(Ty)) 661 return ConstantVector::getSplat(VTy->getNumElements(), C); 662 663 return C; 664 } 665 666 Constant *ConstantFP::getNegativeZero(Type *Ty) { 667 const fltSemantics &Semantics = *TypeToFloatSemantics(Ty->getScalarType()); 668 APFloat NegZero = APFloat::getZero(Semantics, /*Negative=*/true); 669 Constant *C = get(Ty->getContext(), NegZero); 670 671 if (VectorType *VTy = dyn_cast<VectorType>(Ty)) 672 return ConstantVector::getSplat(VTy->getNumElements(), C); 673 674 return C; 675 } 676 677 678 Constant *ConstantFP::getZeroValueForNegation(Type *Ty) { 679 if (Ty->isFPOrFPVectorTy()) 680 return getNegativeZero(Ty); 681 682 return Constant::getNullValue(Ty); 683 } 684 685 686 // ConstantFP accessors. 687 ConstantFP* ConstantFP::get(LLVMContext &Context, const APFloat& V) { 688 LLVMContextImpl* pImpl = Context.pImpl; 689 690 ConstantFP *&Slot = pImpl->FPConstants[V]; 691 692 if (!Slot) { 693 Type *Ty; 694 if (&V.getSemantics() == &APFloat::IEEEhalf) 695 Ty = Type::getHalfTy(Context); 696 else if (&V.getSemantics() == &APFloat::IEEEsingle) 697 Ty = Type::getFloatTy(Context); 698 else if (&V.getSemantics() == &APFloat::IEEEdouble) 699 Ty = Type::getDoubleTy(Context); 700 else if (&V.getSemantics() == &APFloat::x87DoubleExtended) 701 Ty = Type::getX86_FP80Ty(Context); 702 else if (&V.getSemantics() == &APFloat::IEEEquad) 703 Ty = Type::getFP128Ty(Context); 704 else { 705 assert(&V.getSemantics() == &APFloat::PPCDoubleDouble && 706 "Unknown FP format"); 707 Ty = Type::getPPC_FP128Ty(Context); 708 } 709 Slot = new ConstantFP(Ty, V); 710 } 711 712 return Slot; 713 } 714 715 Constant *ConstantFP::getInfinity(Type *Ty, bool Negative) { 716 const fltSemantics &Semantics = *TypeToFloatSemantics(Ty->getScalarType()); 717 Constant *C = get(Ty->getContext(), APFloat::getInf(Semantics, Negative)); 718 719 if (VectorType *VTy = dyn_cast<VectorType>(Ty)) 720 return ConstantVector::getSplat(VTy->getNumElements(), C); 721 722 return C; 723 } 724 725 ConstantFP::ConstantFP(Type *Ty, const APFloat& V) 726 : Constant(Ty, ConstantFPVal, nullptr, 0), Val(V) { 727 assert(&V.getSemantics() == TypeToFloatSemantics(Ty) && 728 "FP type Mismatch"); 729 } 730 731 bool ConstantFP::isExactlyValue(const APFloat &V) const { 732 return Val.bitwiseIsEqual(V); 733 } 734 735 //===----------------------------------------------------------------------===// 736 // ConstantAggregateZero Implementation 737 //===----------------------------------------------------------------------===// 738 739 /// getSequentialElement - If this CAZ has array or vector type, return a zero 740 /// with the right element type. 741 Constant *ConstantAggregateZero::getSequentialElement() const { 742 return Constant::getNullValue(getType()->getSequentialElementType()); 743 } 744 745 /// getStructElement - If this CAZ has struct type, return a zero with the 746 /// right element type for the specified element. 747 Constant *ConstantAggregateZero::getStructElement(unsigned Elt) const { 748 return Constant::getNullValue(getType()->getStructElementType(Elt)); 749 } 750 751 /// getElementValue - Return a zero of the right value for the specified GEP 752 /// index if we can, otherwise return null (e.g. if C is a ConstantExpr). 753 Constant *ConstantAggregateZero::getElementValue(Constant *C) const { 754 if (isa<SequentialType>(getType())) 755 return getSequentialElement(); 756 return getStructElement(cast<ConstantInt>(C)->getZExtValue()); 757 } 758 759 /// getElementValue - Return a zero of the right value for the specified GEP 760 /// index. 761 Constant *ConstantAggregateZero::getElementValue(unsigned Idx) const { 762 if (isa<SequentialType>(getType())) 763 return getSequentialElement(); 764 return getStructElement(Idx); 765 } 766 767 unsigned ConstantAggregateZero::getNumElements() const { 768 const Type *Ty = getType(); 769 if (const auto *AT = dyn_cast<ArrayType>(Ty)) 770 return AT->getNumElements(); 771 if (const auto *VT = dyn_cast<VectorType>(Ty)) 772 return VT->getNumElements(); 773 return Ty->getStructNumElements(); 774 } 775 776 //===----------------------------------------------------------------------===// 777 // UndefValue Implementation 778 //===----------------------------------------------------------------------===// 779 780 /// getSequentialElement - If this undef has array or vector type, return an 781 /// undef with the right element type. 782 UndefValue *UndefValue::getSequentialElement() const { 783 return UndefValue::get(getType()->getSequentialElementType()); 784 } 785 786 /// getStructElement - If this undef has struct type, return a zero with the 787 /// right element type for the specified element. 788 UndefValue *UndefValue::getStructElement(unsigned Elt) const { 789 return UndefValue::get(getType()->getStructElementType(Elt)); 790 } 791 792 /// getElementValue - Return an undef of the right value for the specified GEP 793 /// index if we can, otherwise return null (e.g. if C is a ConstantExpr). 794 UndefValue *UndefValue::getElementValue(Constant *C) const { 795 if (isa<SequentialType>(getType())) 796 return getSequentialElement(); 797 return getStructElement(cast<ConstantInt>(C)->getZExtValue()); 798 } 799 800 /// getElementValue - Return an undef of the right value for the specified GEP 801 /// index. 802 UndefValue *UndefValue::getElementValue(unsigned Idx) const { 803 if (isa<SequentialType>(getType())) 804 return getSequentialElement(); 805 return getStructElement(Idx); 806 } 807 808 unsigned UndefValue::getNumElements() const { 809 const Type *Ty = getType(); 810 if (const auto *AT = dyn_cast<ArrayType>(Ty)) 811 return AT->getNumElements(); 812 if (const auto *VT = dyn_cast<VectorType>(Ty)) 813 return VT->getNumElements(); 814 return Ty->getStructNumElements(); 815 } 816 817 //===----------------------------------------------------------------------===// 818 // ConstantXXX Classes 819 //===----------------------------------------------------------------------===// 820 821 template <typename ItTy, typename EltTy> 822 static bool rangeOnlyContains(ItTy Start, ItTy End, EltTy Elt) { 823 for (; Start != End; ++Start) 824 if (*Start != Elt) 825 return false; 826 return true; 827 } 828 829 ConstantArray::ConstantArray(ArrayType *T, ArrayRef<Constant *> V) 830 : Constant(T, ConstantArrayVal, 831 OperandTraits<ConstantArray>::op_end(this) - V.size(), 832 V.size()) { 833 assert(V.size() == T->getNumElements() && 834 "Invalid initializer vector for constant array"); 835 for (unsigned i = 0, e = V.size(); i != e; ++i) 836 assert(V[i]->getType() == T->getElementType() && 837 "Initializer for array element doesn't match array element type!"); 838 std::copy(V.begin(), V.end(), op_begin()); 839 } 840 841 Constant *ConstantArray::get(ArrayType *Ty, ArrayRef<Constant*> V) { 842 if (Constant *C = getImpl(Ty, V)) 843 return C; 844 return Ty->getContext().pImpl->ArrayConstants.getOrCreate(Ty, V); 845 } 846 Constant *ConstantArray::getImpl(ArrayType *Ty, ArrayRef<Constant*> V) { 847 // Empty arrays are canonicalized to ConstantAggregateZero. 848 if (V.empty()) 849 return ConstantAggregateZero::get(Ty); 850 851 for (unsigned i = 0, e = V.size(); i != e; ++i) { 852 assert(V[i]->getType() == Ty->getElementType() && 853 "Wrong type in array element initializer"); 854 } 855 856 // If this is an all-zero array, return a ConstantAggregateZero object. If 857 // all undef, return an UndefValue, if "all simple", then return a 858 // ConstantDataArray. 859 Constant *C = V[0]; 860 if (isa<UndefValue>(C) && rangeOnlyContains(V.begin(), V.end(), C)) 861 return UndefValue::get(Ty); 862 863 if (C->isNullValue() && rangeOnlyContains(V.begin(), V.end(), C)) 864 return ConstantAggregateZero::get(Ty); 865 866 // Check to see if all of the elements are ConstantFP or ConstantInt and if 867 // the element type is compatible with ConstantDataVector. If so, use it. 868 if (ConstantDataSequential::isElementTypeCompatible(C->getType())) { 869 // We speculatively build the elements here even if it turns out that there 870 // is a constantexpr or something else weird in the array, since it is so 871 // uncommon for that to happen. 872 if (ConstantInt *CI = dyn_cast<ConstantInt>(C)) { 873 if (CI->getType()->isIntegerTy(8)) { 874 SmallVector<uint8_t, 16> Elts; 875 for (unsigned i = 0, e = V.size(); i != e; ++i) 876 if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i])) 877 Elts.push_back(CI->getZExtValue()); 878 else 879 break; 880 if (Elts.size() == V.size()) 881 return ConstantDataArray::get(C->getContext(), Elts); 882 } else if (CI->getType()->isIntegerTy(16)) { 883 SmallVector<uint16_t, 16> Elts; 884 for (unsigned i = 0, e = V.size(); i != e; ++i) 885 if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i])) 886 Elts.push_back(CI->getZExtValue()); 887 else 888 break; 889 if (Elts.size() == V.size()) 890 return ConstantDataArray::get(C->getContext(), Elts); 891 } else if (CI->getType()->isIntegerTy(32)) { 892 SmallVector<uint32_t, 16> Elts; 893 for (unsigned i = 0, e = V.size(); i != e; ++i) 894 if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i])) 895 Elts.push_back(CI->getZExtValue()); 896 else 897 break; 898 if (Elts.size() == V.size()) 899 return ConstantDataArray::get(C->getContext(), Elts); 900 } else if (CI->getType()->isIntegerTy(64)) { 901 SmallVector<uint64_t, 16> Elts; 902 for (unsigned i = 0, e = V.size(); i != e; ++i) 903 if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i])) 904 Elts.push_back(CI->getZExtValue()); 905 else 906 break; 907 if (Elts.size() == V.size()) 908 return ConstantDataArray::get(C->getContext(), Elts); 909 } 910 } 911 912 if (ConstantFP *CFP = dyn_cast<ConstantFP>(C)) { 913 if (CFP->getType()->isFloatTy()) { 914 SmallVector<uint32_t, 16> Elts; 915 for (unsigned i = 0, e = V.size(); i != e; ++i) 916 if (ConstantFP *CFP = dyn_cast<ConstantFP>(V[i])) 917 Elts.push_back( 918 CFP->getValueAPF().bitcastToAPInt().getLimitedValue()); 919 else 920 break; 921 if (Elts.size() == V.size()) 922 return ConstantDataArray::getFP(C->getContext(), Elts); 923 } else if (CFP->getType()->isDoubleTy()) { 924 SmallVector<uint64_t, 16> Elts; 925 for (unsigned i = 0, e = V.size(); i != e; ++i) 926 if (ConstantFP *CFP = dyn_cast<ConstantFP>(V[i])) 927 Elts.push_back( 928 CFP->getValueAPF().bitcastToAPInt().getLimitedValue()); 929 else 930 break; 931 if (Elts.size() == V.size()) 932 return ConstantDataArray::getFP(C->getContext(), Elts); 933 } 934 } 935 } 936 937 // Otherwise, we really do want to create a ConstantArray. 938 return nullptr; 939 } 940 941 /// getTypeForElements - Return an anonymous struct type to use for a constant 942 /// with the specified set of elements. The list must not be empty. 943 StructType *ConstantStruct::getTypeForElements(LLVMContext &Context, 944 ArrayRef<Constant*> V, 945 bool Packed) { 946 unsigned VecSize = V.size(); 947 SmallVector<Type*, 16> EltTypes(VecSize); 948 for (unsigned i = 0; i != VecSize; ++i) 949 EltTypes[i] = V[i]->getType(); 950 951 return StructType::get(Context, EltTypes, Packed); 952 } 953 954 955 StructType *ConstantStruct::getTypeForElements(ArrayRef<Constant*> V, 956 bool Packed) { 957 assert(!V.empty() && 958 "ConstantStruct::getTypeForElements cannot be called on empty list"); 959 return getTypeForElements(V[0]->getContext(), V, Packed); 960 } 961 962 963 ConstantStruct::ConstantStruct(StructType *T, ArrayRef<Constant *> V) 964 : Constant(T, ConstantStructVal, 965 OperandTraits<ConstantStruct>::op_end(this) - V.size(), 966 V.size()) { 967 assert(V.size() == T->getNumElements() && 968 "Invalid initializer vector for constant structure"); 969 for (unsigned i = 0, e = V.size(); i != e; ++i) 970 assert((T->isOpaque() || V[i]->getType() == T->getElementType(i)) && 971 "Initializer for struct element doesn't match struct element type!"); 972 std::copy(V.begin(), V.end(), op_begin()); 973 } 974 975 // ConstantStruct accessors. 976 Constant *ConstantStruct::get(StructType *ST, ArrayRef<Constant*> V) { 977 assert((ST->isOpaque() || ST->getNumElements() == V.size()) && 978 "Incorrect # elements specified to ConstantStruct::get"); 979 980 // Create a ConstantAggregateZero value if all elements are zeros. 981 bool isZero = true; 982 bool isUndef = false; 983 984 if (!V.empty()) { 985 isUndef = isa<UndefValue>(V[0]); 986 isZero = V[0]->isNullValue(); 987 if (isUndef || isZero) { 988 for (unsigned i = 0, e = V.size(); i != e; ++i) { 989 if (!V[i]->isNullValue()) 990 isZero = false; 991 if (!isa<UndefValue>(V[i])) 992 isUndef = false; 993 } 994 } 995 } 996 if (isZero) 997 return ConstantAggregateZero::get(ST); 998 if (isUndef) 999 return UndefValue::get(ST); 1000 1001 return ST->getContext().pImpl->StructConstants.getOrCreate(ST, V); 1002 } 1003 1004 Constant *ConstantStruct::get(StructType *T, ...) { 1005 va_list ap; 1006 SmallVector<Constant*, 8> Values; 1007 va_start(ap, T); 1008 while (Constant *Val = va_arg(ap, llvm::Constant*)) 1009 Values.push_back(Val); 1010 va_end(ap); 1011 return get(T, Values); 1012 } 1013 1014 ConstantVector::ConstantVector(VectorType *T, ArrayRef<Constant *> V) 1015 : Constant(T, ConstantVectorVal, 1016 OperandTraits<ConstantVector>::op_end(this) - V.size(), 1017 V.size()) { 1018 for (size_t i = 0, e = V.size(); i != e; i++) 1019 assert(V[i]->getType() == T->getElementType() && 1020 "Initializer for vector element doesn't match vector element type!"); 1021 std::copy(V.begin(), V.end(), op_begin()); 1022 } 1023 1024 // ConstantVector accessors. 1025 Constant *ConstantVector::get(ArrayRef<Constant*> V) { 1026 if (Constant *C = getImpl(V)) 1027 return C; 1028 VectorType *Ty = VectorType::get(V.front()->getType(), V.size()); 1029 return Ty->getContext().pImpl->VectorConstants.getOrCreate(Ty, V); 1030 } 1031 Constant *ConstantVector::getImpl(ArrayRef<Constant*> V) { 1032 assert(!V.empty() && "Vectors can't be empty"); 1033 VectorType *T = VectorType::get(V.front()->getType(), V.size()); 1034 1035 // If this is an all-undef or all-zero vector, return a 1036 // ConstantAggregateZero or UndefValue. 1037 Constant *C = V[0]; 1038 bool isZero = C->isNullValue(); 1039 bool isUndef = isa<UndefValue>(C); 1040 1041 if (isZero || isUndef) { 1042 for (unsigned i = 1, e = V.size(); i != e; ++i) 1043 if (V[i] != C) { 1044 isZero = isUndef = false; 1045 break; 1046 } 1047 } 1048 1049 if (isZero) 1050 return ConstantAggregateZero::get(T); 1051 if (isUndef) 1052 return UndefValue::get(T); 1053 1054 // Check to see if all of the elements are ConstantFP or ConstantInt and if 1055 // the element type is compatible with ConstantDataVector. If so, use it. 1056 if (ConstantDataSequential::isElementTypeCompatible(C->getType())) { 1057 // We speculatively build the elements here even if it turns out that there 1058 // is a constantexpr or something else weird in the array, since it is so 1059 // uncommon for that to happen. 1060 if (ConstantInt *CI = dyn_cast<ConstantInt>(C)) { 1061 if (CI->getType()->isIntegerTy(8)) { 1062 SmallVector<uint8_t, 16> Elts; 1063 for (unsigned i = 0, e = V.size(); i != e; ++i) 1064 if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i])) 1065 Elts.push_back(CI->getZExtValue()); 1066 else 1067 break; 1068 if (Elts.size() == V.size()) 1069 return ConstantDataVector::get(C->getContext(), Elts); 1070 } else if (CI->getType()->isIntegerTy(16)) { 1071 SmallVector<uint16_t, 16> Elts; 1072 for (unsigned i = 0, e = V.size(); i != e; ++i) 1073 if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i])) 1074 Elts.push_back(CI->getZExtValue()); 1075 else 1076 break; 1077 if (Elts.size() == V.size()) 1078 return ConstantDataVector::get(C->getContext(), Elts); 1079 } else if (CI->getType()->isIntegerTy(32)) { 1080 SmallVector<uint32_t, 16> Elts; 1081 for (unsigned i = 0, e = V.size(); i != e; ++i) 1082 if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i])) 1083 Elts.push_back(CI->getZExtValue()); 1084 else 1085 break; 1086 if (Elts.size() == V.size()) 1087 return ConstantDataVector::get(C->getContext(), Elts); 1088 } else if (CI->getType()->isIntegerTy(64)) { 1089 SmallVector<uint64_t, 16> Elts; 1090 for (unsigned i = 0, e = V.size(); i != e; ++i) 1091 if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i])) 1092 Elts.push_back(CI->getZExtValue()); 1093 else 1094 break; 1095 if (Elts.size() == V.size()) 1096 return ConstantDataVector::get(C->getContext(), Elts); 1097 } 1098 } 1099 1100 if (ConstantFP *CFP = dyn_cast<ConstantFP>(C)) { 1101 if (CFP->getType()->isFloatTy()) { 1102 SmallVector<uint32_t, 16> Elts; 1103 for (unsigned i = 0, e = V.size(); i != e; ++i) 1104 if (ConstantFP *CFP = dyn_cast<ConstantFP>(V[i])) 1105 Elts.push_back( 1106 CFP->getValueAPF().bitcastToAPInt().getLimitedValue()); 1107 else 1108 break; 1109 if (Elts.size() == V.size()) 1110 return ConstantDataVector::getFP(C->getContext(), Elts); 1111 } else if (CFP->getType()->isDoubleTy()) { 1112 SmallVector<uint64_t, 16> Elts; 1113 for (unsigned i = 0, e = V.size(); i != e; ++i) 1114 if (ConstantFP *CFP = dyn_cast<ConstantFP>(V[i])) 1115 Elts.push_back( 1116 CFP->getValueAPF().bitcastToAPInt().getLimitedValue()); 1117 else 1118 break; 1119 if (Elts.size() == V.size()) 1120 return ConstantDataVector::getFP(C->getContext(), Elts); 1121 } 1122 } 1123 } 1124 1125 // Otherwise, the element type isn't compatible with ConstantDataVector, or 1126 // the operand list constants a ConstantExpr or something else strange. 1127 return nullptr; 1128 } 1129 1130 Constant *ConstantVector::getSplat(unsigned NumElts, Constant *V) { 1131 // If this splat is compatible with ConstantDataVector, use it instead of 1132 // ConstantVector. 1133 if ((isa<ConstantFP>(V) || isa<ConstantInt>(V)) && 1134 ConstantDataSequential::isElementTypeCompatible(V->getType())) 1135 return ConstantDataVector::getSplat(NumElts, V); 1136 1137 SmallVector<Constant*, 32> Elts(NumElts, V); 1138 return get(Elts); 1139 } 1140 1141 1142 // Utility function for determining if a ConstantExpr is a CastOp or not. This 1143 // can't be inline because we don't want to #include Instruction.h into 1144 // Constant.h 1145 bool ConstantExpr::isCast() const { 1146 return Instruction::isCast(getOpcode()); 1147 } 1148 1149 bool ConstantExpr::isCompare() const { 1150 return getOpcode() == Instruction::ICmp || getOpcode() == Instruction::FCmp; 1151 } 1152 1153 bool ConstantExpr::isGEPWithNoNotionalOverIndexing() const { 1154 if (getOpcode() != Instruction::GetElementPtr) return false; 1155 1156 gep_type_iterator GEPI = gep_type_begin(this), E = gep_type_end(this); 1157 User::const_op_iterator OI = std::next(this->op_begin()); 1158 1159 // Skip the first index, as it has no static limit. 1160 ++GEPI; 1161 ++OI; 1162 1163 // The remaining indices must be compile-time known integers within the 1164 // bounds of the corresponding notional static array types. 1165 for (; GEPI != E; ++GEPI, ++OI) { 1166 ConstantInt *CI = dyn_cast<ConstantInt>(*OI); 1167 if (!CI) return false; 1168 if (ArrayType *ATy = dyn_cast<ArrayType>(*GEPI)) 1169 if (CI->getValue().getActiveBits() > 64 || 1170 CI->getZExtValue() >= ATy->getNumElements()) 1171 return false; 1172 } 1173 1174 // All the indices checked out. 1175 return true; 1176 } 1177 1178 bool ConstantExpr::hasIndices() const { 1179 return getOpcode() == Instruction::ExtractValue || 1180 getOpcode() == Instruction::InsertValue; 1181 } 1182 1183 ArrayRef<unsigned> ConstantExpr::getIndices() const { 1184 if (const ExtractValueConstantExpr *EVCE = 1185 dyn_cast<ExtractValueConstantExpr>(this)) 1186 return EVCE->Indices; 1187 1188 return cast<InsertValueConstantExpr>(this)->Indices; 1189 } 1190 1191 unsigned ConstantExpr::getPredicate() const { 1192 assert(isCompare()); 1193 return ((const CompareConstantExpr*)this)->predicate; 1194 } 1195 1196 /// getWithOperandReplaced - Return a constant expression identical to this 1197 /// one, but with the specified operand set to the specified value. 1198 Constant * 1199 ConstantExpr::getWithOperandReplaced(unsigned OpNo, Constant *Op) const { 1200 assert(Op->getType() == getOperand(OpNo)->getType() && 1201 "Replacing operand with value of different type!"); 1202 if (getOperand(OpNo) == Op) 1203 return const_cast<ConstantExpr*>(this); 1204 1205 SmallVector<Constant*, 8> NewOps; 1206 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) 1207 NewOps.push_back(i == OpNo ? Op : getOperand(i)); 1208 1209 return getWithOperands(NewOps); 1210 } 1211 1212 /// getWithOperands - This returns the current constant expression with the 1213 /// operands replaced with the specified values. The specified array must 1214 /// have the same number of operands as our current one. 1215 Constant *ConstantExpr::getWithOperands(ArrayRef<Constant *> Ops, Type *Ty, 1216 bool OnlyIfReduced) const { 1217 assert(Ops.size() == getNumOperands() && "Operand count mismatch!"); 1218 bool AnyChange = Ty != getType(); 1219 for (unsigned i = 0; i != Ops.size(); ++i) 1220 AnyChange |= Ops[i] != getOperand(i); 1221 1222 if (!AnyChange) // No operands changed, return self. 1223 return const_cast<ConstantExpr*>(this); 1224 1225 Type *OnlyIfReducedTy = OnlyIfReduced ? Ty : nullptr; 1226 switch (getOpcode()) { 1227 case Instruction::Trunc: 1228 case Instruction::ZExt: 1229 case Instruction::SExt: 1230 case Instruction::FPTrunc: 1231 case Instruction::FPExt: 1232 case Instruction::UIToFP: 1233 case Instruction::SIToFP: 1234 case Instruction::FPToUI: 1235 case Instruction::FPToSI: 1236 case Instruction::PtrToInt: 1237 case Instruction::IntToPtr: 1238 case Instruction::BitCast: 1239 case Instruction::AddrSpaceCast: 1240 return ConstantExpr::getCast(getOpcode(), Ops[0], Ty, OnlyIfReduced); 1241 case Instruction::Select: 1242 return ConstantExpr::getSelect(Ops[0], Ops[1], Ops[2], OnlyIfReducedTy); 1243 case Instruction::InsertElement: 1244 return ConstantExpr::getInsertElement(Ops[0], Ops[1], Ops[2], 1245 OnlyIfReducedTy); 1246 case Instruction::ExtractElement: 1247 return ConstantExpr::getExtractElement(Ops[0], Ops[1], OnlyIfReducedTy); 1248 case Instruction::InsertValue: 1249 return ConstantExpr::getInsertValue(Ops[0], Ops[1], getIndices(), 1250 OnlyIfReducedTy); 1251 case Instruction::ExtractValue: 1252 return ConstantExpr::getExtractValue(Ops[0], getIndices(), OnlyIfReducedTy); 1253 case Instruction::ShuffleVector: 1254 return ConstantExpr::getShuffleVector(Ops[0], Ops[1], Ops[2], 1255 OnlyIfReducedTy); 1256 case Instruction::GetElementPtr: 1257 return ConstantExpr::getGetElementPtr(Ops[0], Ops.slice(1), 1258 cast<GEPOperator>(this)->isInBounds(), 1259 OnlyIfReducedTy); 1260 case Instruction::ICmp: 1261 case Instruction::FCmp: 1262 return ConstantExpr::getCompare(getPredicate(), Ops[0], Ops[1], 1263 OnlyIfReducedTy); 1264 default: 1265 assert(getNumOperands() == 2 && "Must be binary operator?"); 1266 return ConstantExpr::get(getOpcode(), Ops[0], Ops[1], SubclassOptionalData, 1267 OnlyIfReducedTy); 1268 } 1269 } 1270 1271 1272 //===----------------------------------------------------------------------===// 1273 // isValueValidForType implementations 1274 1275 bool ConstantInt::isValueValidForType(Type *Ty, uint64_t Val) { 1276 unsigned NumBits = Ty->getIntegerBitWidth(); // assert okay 1277 if (Ty->isIntegerTy(1)) 1278 return Val == 0 || Val == 1; 1279 if (NumBits >= 64) 1280 return true; // always true, has to fit in largest type 1281 uint64_t Max = (1ll << NumBits) - 1; 1282 return Val <= Max; 1283 } 1284 1285 bool ConstantInt::isValueValidForType(Type *Ty, int64_t Val) { 1286 unsigned NumBits = Ty->getIntegerBitWidth(); 1287 if (Ty->isIntegerTy(1)) 1288 return Val == 0 || Val == 1 || Val == -1; 1289 if (NumBits >= 64) 1290 return true; // always true, has to fit in largest type 1291 int64_t Min = -(1ll << (NumBits-1)); 1292 int64_t Max = (1ll << (NumBits-1)) - 1; 1293 return (Val >= Min && Val <= Max); 1294 } 1295 1296 bool ConstantFP::isValueValidForType(Type *Ty, const APFloat& Val) { 1297 // convert modifies in place, so make a copy. 1298 APFloat Val2 = APFloat(Val); 1299 bool losesInfo; 1300 switch (Ty->getTypeID()) { 1301 default: 1302 return false; // These can't be represented as floating point! 1303 1304 // FIXME rounding mode needs to be more flexible 1305 case Type::HalfTyID: { 1306 if (&Val2.getSemantics() == &APFloat::IEEEhalf) 1307 return true; 1308 Val2.convert(APFloat::IEEEhalf, APFloat::rmNearestTiesToEven, &losesInfo); 1309 return !losesInfo; 1310 } 1311 case Type::FloatTyID: { 1312 if (&Val2.getSemantics() == &APFloat::IEEEsingle) 1313 return true; 1314 Val2.convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven, &losesInfo); 1315 return !losesInfo; 1316 } 1317 case Type::DoubleTyID: { 1318 if (&Val2.getSemantics() == &APFloat::IEEEhalf || 1319 &Val2.getSemantics() == &APFloat::IEEEsingle || 1320 &Val2.getSemantics() == &APFloat::IEEEdouble) 1321 return true; 1322 Val2.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven, &losesInfo); 1323 return !losesInfo; 1324 } 1325 case Type::X86_FP80TyID: 1326 return &Val2.getSemantics() == &APFloat::IEEEhalf || 1327 &Val2.getSemantics() == &APFloat::IEEEsingle || 1328 &Val2.getSemantics() == &APFloat::IEEEdouble || 1329 &Val2.getSemantics() == &APFloat::x87DoubleExtended; 1330 case Type::FP128TyID: 1331 return &Val2.getSemantics() == &APFloat::IEEEhalf || 1332 &Val2.getSemantics() == &APFloat::IEEEsingle || 1333 &Val2.getSemantics() == &APFloat::IEEEdouble || 1334 &Val2.getSemantics() == &APFloat::IEEEquad; 1335 case Type::PPC_FP128TyID: 1336 return &Val2.getSemantics() == &APFloat::IEEEhalf || 1337 &Val2.getSemantics() == &APFloat::IEEEsingle || 1338 &Val2.getSemantics() == &APFloat::IEEEdouble || 1339 &Val2.getSemantics() == &APFloat::PPCDoubleDouble; 1340 } 1341 } 1342 1343 1344 //===----------------------------------------------------------------------===// 1345 // Factory Function Implementation 1346 1347 ConstantAggregateZero *ConstantAggregateZero::get(Type *Ty) { 1348 assert((Ty->isStructTy() || Ty->isArrayTy() || Ty->isVectorTy()) && 1349 "Cannot create an aggregate zero of non-aggregate type!"); 1350 1351 ConstantAggregateZero *&Entry = Ty->getContext().pImpl->CAZConstants[Ty]; 1352 if (!Entry) 1353 Entry = new ConstantAggregateZero(Ty); 1354 1355 return Entry; 1356 } 1357 1358 /// destroyConstant - Remove the constant from the constant table. 1359 /// 1360 void ConstantAggregateZero::destroyConstant() { 1361 getContext().pImpl->CAZConstants.erase(getType()); 1362 destroyConstantImpl(); 1363 } 1364 1365 /// destroyConstant - Remove the constant from the constant table... 1366 /// 1367 void ConstantArray::destroyConstant() { 1368 getType()->getContext().pImpl->ArrayConstants.remove(this); 1369 destroyConstantImpl(); 1370 } 1371 1372 1373 //---- ConstantStruct::get() implementation... 1374 // 1375 1376 // destroyConstant - Remove the constant from the constant table... 1377 // 1378 void ConstantStruct::destroyConstant() { 1379 getType()->getContext().pImpl->StructConstants.remove(this); 1380 destroyConstantImpl(); 1381 } 1382 1383 // destroyConstant - Remove the constant from the constant table... 1384 // 1385 void ConstantVector::destroyConstant() { 1386 getType()->getContext().pImpl->VectorConstants.remove(this); 1387 destroyConstantImpl(); 1388 } 1389 1390 /// getSplatValue - If this is a splat vector constant, meaning that all of 1391 /// the elements have the same value, return that value. Otherwise return 0. 1392 Constant *Constant::getSplatValue() const { 1393 assert(this->getType()->isVectorTy() && "Only valid for vectors!"); 1394 if (isa<ConstantAggregateZero>(this)) 1395 return getNullValue(this->getType()->getVectorElementType()); 1396 if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(this)) 1397 return CV->getSplatValue(); 1398 if (const ConstantVector *CV = dyn_cast<ConstantVector>(this)) 1399 return CV->getSplatValue(); 1400 return nullptr; 1401 } 1402 1403 /// getSplatValue - If this is a splat constant, where all of the 1404 /// elements have the same value, return that value. Otherwise return null. 1405 Constant *ConstantVector::getSplatValue() const { 1406 // Check out first element. 1407 Constant *Elt = getOperand(0); 1408 // Then make sure all remaining elements point to the same value. 1409 for (unsigned I = 1, E = getNumOperands(); I < E; ++I) 1410 if (getOperand(I) != Elt) 1411 return nullptr; 1412 return Elt; 1413 } 1414 1415 /// If C is a constant integer then return its value, otherwise C must be a 1416 /// vector of constant integers, all equal, and the common value is returned. 1417 const APInt &Constant::getUniqueInteger() const { 1418 if (const ConstantInt *CI = dyn_cast<ConstantInt>(this)) 1419 return CI->getValue(); 1420 assert(this->getSplatValue() && "Doesn't contain a unique integer!"); 1421 const Constant *C = this->getAggregateElement(0U); 1422 assert(C && isa<ConstantInt>(C) && "Not a vector of numbers!"); 1423 return cast<ConstantInt>(C)->getValue(); 1424 } 1425 1426 1427 //---- ConstantPointerNull::get() implementation. 1428 // 1429 1430 ConstantPointerNull *ConstantPointerNull::get(PointerType *Ty) { 1431 ConstantPointerNull *&Entry = Ty->getContext().pImpl->CPNConstants[Ty]; 1432 if (!Entry) 1433 Entry = new ConstantPointerNull(Ty); 1434 1435 return Entry; 1436 } 1437 1438 // destroyConstant - Remove the constant from the constant table... 1439 // 1440 void ConstantPointerNull::destroyConstant() { 1441 getContext().pImpl->CPNConstants.erase(getType()); 1442 // Free the constant and any dangling references to it. 1443 destroyConstantImpl(); 1444 } 1445 1446 1447 //---- UndefValue::get() implementation. 1448 // 1449 1450 UndefValue *UndefValue::get(Type *Ty) { 1451 UndefValue *&Entry = Ty->getContext().pImpl->UVConstants[Ty]; 1452 if (!Entry) 1453 Entry = new UndefValue(Ty); 1454 1455 return Entry; 1456 } 1457 1458 // destroyConstant - Remove the constant from the constant table. 1459 // 1460 void UndefValue::destroyConstant() { 1461 // Free the constant and any dangling references to it. 1462 getContext().pImpl->UVConstants.erase(getType()); 1463 destroyConstantImpl(); 1464 } 1465 1466 //---- BlockAddress::get() implementation. 1467 // 1468 1469 BlockAddress *BlockAddress::get(BasicBlock *BB) { 1470 assert(BB->getParent() && "Block must have a parent"); 1471 return get(BB->getParent(), BB); 1472 } 1473 1474 BlockAddress *BlockAddress::get(Function *F, BasicBlock *BB) { 1475 BlockAddress *&BA = 1476 F->getContext().pImpl->BlockAddresses[std::make_pair(F, BB)]; 1477 if (!BA) 1478 BA = new BlockAddress(F, BB); 1479 1480 assert(BA->getFunction() == F && "Basic block moved between functions"); 1481 return BA; 1482 } 1483 1484 BlockAddress::BlockAddress(Function *F, BasicBlock *BB) 1485 : Constant(Type::getInt8PtrTy(F->getContext()), Value::BlockAddressVal, 1486 &Op<0>(), 2) { 1487 setOperand(0, F); 1488 setOperand(1, BB); 1489 BB->AdjustBlockAddressRefCount(1); 1490 } 1491 1492 BlockAddress *BlockAddress::lookup(const BasicBlock *BB) { 1493 if (!BB->hasAddressTaken()) 1494 return nullptr; 1495 1496 const Function *F = BB->getParent(); 1497 assert(F && "Block must have a parent"); 1498 BlockAddress *BA = 1499 F->getContext().pImpl->BlockAddresses.lookup(std::make_pair(F, BB)); 1500 assert(BA && "Refcount and block address map disagree!"); 1501 return BA; 1502 } 1503 1504 // destroyConstant - Remove the constant from the constant table. 1505 // 1506 void BlockAddress::destroyConstant() { 1507 getFunction()->getType()->getContext().pImpl 1508 ->BlockAddresses.erase(std::make_pair(getFunction(), getBasicBlock())); 1509 getBasicBlock()->AdjustBlockAddressRefCount(-1); 1510 destroyConstantImpl(); 1511 } 1512 1513 void BlockAddress::replaceUsesOfWithOnConstant(Value *From, Value *To, Use *U) { 1514 // This could be replacing either the Basic Block or the Function. In either 1515 // case, we have to remove the map entry. 1516 Function *NewF = getFunction(); 1517 BasicBlock *NewBB = getBasicBlock(); 1518 1519 if (U == &Op<0>()) 1520 NewF = cast<Function>(To->stripPointerCasts()); 1521 else 1522 NewBB = cast<BasicBlock>(To); 1523 1524 // See if the 'new' entry already exists, if not, just update this in place 1525 // and return early. 1526 BlockAddress *&NewBA = 1527 getContext().pImpl->BlockAddresses[std::make_pair(NewF, NewBB)]; 1528 if (NewBA) { 1529 replaceUsesOfWithOnConstantImpl(NewBA); 1530 return; 1531 } 1532 1533 getBasicBlock()->AdjustBlockAddressRefCount(-1); 1534 1535 // Remove the old entry, this can't cause the map to rehash (just a 1536 // tombstone will get added). 1537 getContext().pImpl->BlockAddresses.erase(std::make_pair(getFunction(), 1538 getBasicBlock())); 1539 NewBA = this; 1540 setOperand(0, NewF); 1541 setOperand(1, NewBB); 1542 getBasicBlock()->AdjustBlockAddressRefCount(1); 1543 } 1544 1545 //---- ConstantExpr::get() implementations. 1546 // 1547 1548 /// This is a utility function to handle folding of casts and lookup of the 1549 /// cast in the ExprConstants map. It is used by the various get* methods below. 1550 static Constant *getFoldedCast(Instruction::CastOps opc, Constant *C, Type *Ty, 1551 bool OnlyIfReduced = false) { 1552 assert(Ty->isFirstClassType() && "Cannot cast to an aggregate type!"); 1553 // Fold a few common cases 1554 if (Constant *FC = ConstantFoldCastInstruction(opc, C, Ty)) 1555 return FC; 1556 1557 if (OnlyIfReduced) 1558 return nullptr; 1559 1560 LLVMContextImpl *pImpl = Ty->getContext().pImpl; 1561 1562 // Look up the constant in the table first to ensure uniqueness. 1563 ConstantExprKeyType Key(opc, C); 1564 1565 return pImpl->ExprConstants.getOrCreate(Ty, Key); 1566 } 1567 1568 Constant *ConstantExpr::getCast(unsigned oc, Constant *C, Type *Ty, 1569 bool OnlyIfReduced) { 1570 Instruction::CastOps opc = Instruction::CastOps(oc); 1571 assert(Instruction::isCast(opc) && "opcode out of range"); 1572 assert(C && Ty && "Null arguments to getCast"); 1573 assert(CastInst::castIsValid(opc, C, Ty) && "Invalid constantexpr cast!"); 1574 1575 switch (opc) { 1576 default: 1577 llvm_unreachable("Invalid cast opcode"); 1578 case Instruction::Trunc: 1579 return getTrunc(C, Ty, OnlyIfReduced); 1580 case Instruction::ZExt: 1581 return getZExt(C, Ty, OnlyIfReduced); 1582 case Instruction::SExt: 1583 return getSExt(C, Ty, OnlyIfReduced); 1584 case Instruction::FPTrunc: 1585 return getFPTrunc(C, Ty, OnlyIfReduced); 1586 case Instruction::FPExt: 1587 return getFPExtend(C, Ty, OnlyIfReduced); 1588 case Instruction::UIToFP: 1589 return getUIToFP(C, Ty, OnlyIfReduced); 1590 case Instruction::SIToFP: 1591 return getSIToFP(C, Ty, OnlyIfReduced); 1592 case Instruction::FPToUI: 1593 return getFPToUI(C, Ty, OnlyIfReduced); 1594 case Instruction::FPToSI: 1595 return getFPToSI(C, Ty, OnlyIfReduced); 1596 case Instruction::PtrToInt: 1597 return getPtrToInt(C, Ty, OnlyIfReduced); 1598 case Instruction::IntToPtr: 1599 return getIntToPtr(C, Ty, OnlyIfReduced); 1600 case Instruction::BitCast: 1601 return getBitCast(C, Ty, OnlyIfReduced); 1602 case Instruction::AddrSpaceCast: 1603 return getAddrSpaceCast(C, Ty, OnlyIfReduced); 1604 } 1605 } 1606 1607 Constant *ConstantExpr::getZExtOrBitCast(Constant *C, Type *Ty) { 1608 if (C->getType()->getScalarSizeInBits() == Ty->getScalarSizeInBits()) 1609 return getBitCast(C, Ty); 1610 return getZExt(C, Ty); 1611 } 1612 1613 Constant *ConstantExpr::getSExtOrBitCast(Constant *C, Type *Ty) { 1614 if (C->getType()->getScalarSizeInBits() == Ty->getScalarSizeInBits()) 1615 return getBitCast(C, Ty); 1616 return getSExt(C, Ty); 1617 } 1618 1619 Constant *ConstantExpr::getTruncOrBitCast(Constant *C, Type *Ty) { 1620 if (C->getType()->getScalarSizeInBits() == Ty->getScalarSizeInBits()) 1621 return getBitCast(C, Ty); 1622 return getTrunc(C, Ty); 1623 } 1624 1625 Constant *ConstantExpr::getPointerCast(Constant *S, Type *Ty) { 1626 assert(S->getType()->isPtrOrPtrVectorTy() && "Invalid cast"); 1627 assert((Ty->isIntOrIntVectorTy() || Ty->isPtrOrPtrVectorTy()) && 1628 "Invalid cast"); 1629 1630 if (Ty->isIntOrIntVectorTy()) 1631 return getPtrToInt(S, Ty); 1632 1633 unsigned SrcAS = S->getType()->getPointerAddressSpace(); 1634 if (Ty->isPtrOrPtrVectorTy() && SrcAS != Ty->getPointerAddressSpace()) 1635 return getAddrSpaceCast(S, Ty); 1636 1637 return getBitCast(S, Ty); 1638 } 1639 1640 Constant *ConstantExpr::getPointerBitCastOrAddrSpaceCast(Constant *S, 1641 Type *Ty) { 1642 assert(S->getType()->isPtrOrPtrVectorTy() && "Invalid cast"); 1643 assert(Ty->isPtrOrPtrVectorTy() && "Invalid cast"); 1644 1645 if (S->getType()->getPointerAddressSpace() != Ty->getPointerAddressSpace()) 1646 return getAddrSpaceCast(S, Ty); 1647 1648 return getBitCast(S, Ty); 1649 } 1650 1651 Constant *ConstantExpr::getIntegerCast(Constant *C, Type *Ty, 1652 bool isSigned) { 1653 assert(C->getType()->isIntOrIntVectorTy() && 1654 Ty->isIntOrIntVectorTy() && "Invalid cast"); 1655 unsigned SrcBits = C->getType()->getScalarSizeInBits(); 1656 unsigned DstBits = Ty->getScalarSizeInBits(); 1657 Instruction::CastOps opcode = 1658 (SrcBits == DstBits ? Instruction::BitCast : 1659 (SrcBits > DstBits ? Instruction::Trunc : 1660 (isSigned ? Instruction::SExt : Instruction::ZExt))); 1661 return getCast(opcode, C, Ty); 1662 } 1663 1664 Constant *ConstantExpr::getFPCast(Constant *C, Type *Ty) { 1665 assert(C->getType()->isFPOrFPVectorTy() && Ty->isFPOrFPVectorTy() && 1666 "Invalid cast"); 1667 unsigned SrcBits = C->getType()->getScalarSizeInBits(); 1668 unsigned DstBits = Ty->getScalarSizeInBits(); 1669 if (SrcBits == DstBits) 1670 return C; // Avoid a useless cast 1671 Instruction::CastOps opcode = 1672 (SrcBits > DstBits ? Instruction::FPTrunc : Instruction::FPExt); 1673 return getCast(opcode, C, Ty); 1674 } 1675 1676 Constant *ConstantExpr::getTrunc(Constant *C, Type *Ty, bool OnlyIfReduced) { 1677 #ifndef NDEBUG 1678 bool fromVec = C->getType()->getTypeID() == Type::VectorTyID; 1679 bool toVec = Ty->getTypeID() == Type::VectorTyID; 1680 #endif 1681 assert((fromVec == toVec) && "Cannot convert from scalar to/from vector"); 1682 assert(C->getType()->isIntOrIntVectorTy() && "Trunc operand must be integer"); 1683 assert(Ty->isIntOrIntVectorTy() && "Trunc produces only integral"); 1684 assert(C->getType()->getScalarSizeInBits() > Ty->getScalarSizeInBits()&& 1685 "SrcTy must be larger than DestTy for Trunc!"); 1686 1687 return getFoldedCast(Instruction::Trunc, C, Ty, OnlyIfReduced); 1688 } 1689 1690 Constant *ConstantExpr::getSExt(Constant *C, Type *Ty, bool OnlyIfReduced) { 1691 #ifndef NDEBUG 1692 bool fromVec = C->getType()->getTypeID() == Type::VectorTyID; 1693 bool toVec = Ty->getTypeID() == Type::VectorTyID; 1694 #endif 1695 assert((fromVec == toVec) && "Cannot convert from scalar to/from vector"); 1696 assert(C->getType()->isIntOrIntVectorTy() && "SExt operand must be integral"); 1697 assert(Ty->isIntOrIntVectorTy() && "SExt produces only integer"); 1698 assert(C->getType()->getScalarSizeInBits() < Ty->getScalarSizeInBits()&& 1699 "SrcTy must be smaller than DestTy for SExt!"); 1700 1701 return getFoldedCast(Instruction::SExt, C, Ty, OnlyIfReduced); 1702 } 1703 1704 Constant *ConstantExpr::getZExt(Constant *C, Type *Ty, bool OnlyIfReduced) { 1705 #ifndef NDEBUG 1706 bool fromVec = C->getType()->getTypeID() == Type::VectorTyID; 1707 bool toVec = Ty->getTypeID() == Type::VectorTyID; 1708 #endif 1709 assert((fromVec == toVec) && "Cannot convert from scalar to/from vector"); 1710 assert(C->getType()->isIntOrIntVectorTy() && "ZEXt operand must be integral"); 1711 assert(Ty->isIntOrIntVectorTy() && "ZExt produces only integer"); 1712 assert(C->getType()->getScalarSizeInBits() < Ty->getScalarSizeInBits()&& 1713 "SrcTy must be smaller than DestTy for ZExt!"); 1714 1715 return getFoldedCast(Instruction::ZExt, C, Ty, OnlyIfReduced); 1716 } 1717 1718 Constant *ConstantExpr::getFPTrunc(Constant *C, Type *Ty, bool OnlyIfReduced) { 1719 #ifndef NDEBUG 1720 bool fromVec = C->getType()->getTypeID() == Type::VectorTyID; 1721 bool toVec = Ty->getTypeID() == Type::VectorTyID; 1722 #endif 1723 assert((fromVec == toVec) && "Cannot convert from scalar to/from vector"); 1724 assert(C->getType()->isFPOrFPVectorTy() && Ty->isFPOrFPVectorTy() && 1725 C->getType()->getScalarSizeInBits() > Ty->getScalarSizeInBits()&& 1726 "This is an illegal floating point truncation!"); 1727 return getFoldedCast(Instruction::FPTrunc, C, Ty, OnlyIfReduced); 1728 } 1729 1730 Constant *ConstantExpr::getFPExtend(Constant *C, Type *Ty, bool OnlyIfReduced) { 1731 #ifndef NDEBUG 1732 bool fromVec = C->getType()->getTypeID() == Type::VectorTyID; 1733 bool toVec = Ty->getTypeID() == Type::VectorTyID; 1734 #endif 1735 assert((fromVec == toVec) && "Cannot convert from scalar to/from vector"); 1736 assert(C->getType()->isFPOrFPVectorTy() && Ty->isFPOrFPVectorTy() && 1737 C->getType()->getScalarSizeInBits() < Ty->getScalarSizeInBits()&& 1738 "This is an illegal floating point extension!"); 1739 return getFoldedCast(Instruction::FPExt, C, Ty, OnlyIfReduced); 1740 } 1741 1742 Constant *ConstantExpr::getUIToFP(Constant *C, Type *Ty, bool OnlyIfReduced) { 1743 #ifndef NDEBUG 1744 bool fromVec = C->getType()->getTypeID() == Type::VectorTyID; 1745 bool toVec = Ty->getTypeID() == Type::VectorTyID; 1746 #endif 1747 assert((fromVec == toVec) && "Cannot convert from scalar to/from vector"); 1748 assert(C->getType()->isIntOrIntVectorTy() && Ty->isFPOrFPVectorTy() && 1749 "This is an illegal uint to floating point cast!"); 1750 return getFoldedCast(Instruction::UIToFP, C, Ty, OnlyIfReduced); 1751 } 1752 1753 Constant *ConstantExpr::getSIToFP(Constant *C, Type *Ty, bool OnlyIfReduced) { 1754 #ifndef NDEBUG 1755 bool fromVec = C->getType()->getTypeID() == Type::VectorTyID; 1756 bool toVec = Ty->getTypeID() == Type::VectorTyID; 1757 #endif 1758 assert((fromVec == toVec) && "Cannot convert from scalar to/from vector"); 1759 assert(C->getType()->isIntOrIntVectorTy() && Ty->isFPOrFPVectorTy() && 1760 "This is an illegal sint to floating point cast!"); 1761 return getFoldedCast(Instruction::SIToFP, C, Ty, OnlyIfReduced); 1762 } 1763 1764 Constant *ConstantExpr::getFPToUI(Constant *C, Type *Ty, bool OnlyIfReduced) { 1765 #ifndef NDEBUG 1766 bool fromVec = C->getType()->getTypeID() == Type::VectorTyID; 1767 bool toVec = Ty->getTypeID() == Type::VectorTyID; 1768 #endif 1769 assert((fromVec == toVec) && "Cannot convert from scalar to/from vector"); 1770 assert(C->getType()->isFPOrFPVectorTy() && Ty->isIntOrIntVectorTy() && 1771 "This is an illegal floating point to uint cast!"); 1772 return getFoldedCast(Instruction::FPToUI, C, Ty, OnlyIfReduced); 1773 } 1774 1775 Constant *ConstantExpr::getFPToSI(Constant *C, Type *Ty, bool OnlyIfReduced) { 1776 #ifndef NDEBUG 1777 bool fromVec = C->getType()->getTypeID() == Type::VectorTyID; 1778 bool toVec = Ty->getTypeID() == Type::VectorTyID; 1779 #endif 1780 assert((fromVec == toVec) && "Cannot convert from scalar to/from vector"); 1781 assert(C->getType()->isFPOrFPVectorTy() && Ty->isIntOrIntVectorTy() && 1782 "This is an illegal floating point to sint cast!"); 1783 return getFoldedCast(Instruction::FPToSI, C, Ty, OnlyIfReduced); 1784 } 1785 1786 Constant *ConstantExpr::getPtrToInt(Constant *C, Type *DstTy, 1787 bool OnlyIfReduced) { 1788 assert(C->getType()->getScalarType()->isPointerTy() && 1789 "PtrToInt source must be pointer or pointer vector"); 1790 assert(DstTy->getScalarType()->isIntegerTy() && 1791 "PtrToInt destination must be integer or integer vector"); 1792 assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy)); 1793 if (isa<VectorType>(C->getType())) 1794 assert(C->getType()->getVectorNumElements()==DstTy->getVectorNumElements()&& 1795 "Invalid cast between a different number of vector elements"); 1796 return getFoldedCast(Instruction::PtrToInt, C, DstTy, OnlyIfReduced); 1797 } 1798 1799 Constant *ConstantExpr::getIntToPtr(Constant *C, Type *DstTy, 1800 bool OnlyIfReduced) { 1801 assert(C->getType()->getScalarType()->isIntegerTy() && 1802 "IntToPtr source must be integer or integer vector"); 1803 assert(DstTy->getScalarType()->isPointerTy() && 1804 "IntToPtr destination must be a pointer or pointer vector"); 1805 assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy)); 1806 if (isa<VectorType>(C->getType())) 1807 assert(C->getType()->getVectorNumElements()==DstTy->getVectorNumElements()&& 1808 "Invalid cast between a different number of vector elements"); 1809 return getFoldedCast(Instruction::IntToPtr, C, DstTy, OnlyIfReduced); 1810 } 1811 1812 Constant *ConstantExpr::getBitCast(Constant *C, Type *DstTy, 1813 bool OnlyIfReduced) { 1814 assert(CastInst::castIsValid(Instruction::BitCast, C, DstTy) && 1815 "Invalid constantexpr bitcast!"); 1816 1817 // It is common to ask for a bitcast of a value to its own type, handle this 1818 // speedily. 1819 if (C->getType() == DstTy) return C; 1820 1821 return getFoldedCast(Instruction::BitCast, C, DstTy, OnlyIfReduced); 1822 } 1823 1824 Constant *ConstantExpr::getAddrSpaceCast(Constant *C, Type *DstTy, 1825 bool OnlyIfReduced) { 1826 assert(CastInst::castIsValid(Instruction::AddrSpaceCast, C, DstTy) && 1827 "Invalid constantexpr addrspacecast!"); 1828 1829 // Canonicalize addrspacecasts between different pointer types by first 1830 // bitcasting the pointer type and then converting the address space. 1831 PointerType *SrcScalarTy = cast<PointerType>(C->getType()->getScalarType()); 1832 PointerType *DstScalarTy = cast<PointerType>(DstTy->getScalarType()); 1833 Type *DstElemTy = DstScalarTy->getElementType(); 1834 if (SrcScalarTy->getElementType() != DstElemTy) { 1835 Type *MidTy = PointerType::get(DstElemTy, SrcScalarTy->getAddressSpace()); 1836 if (VectorType *VT = dyn_cast<VectorType>(DstTy)) { 1837 // Handle vectors of pointers. 1838 MidTy = VectorType::get(MidTy, VT->getNumElements()); 1839 } 1840 C = getBitCast(C, MidTy); 1841 } 1842 return getFoldedCast(Instruction::AddrSpaceCast, C, DstTy, OnlyIfReduced); 1843 } 1844 1845 Constant *ConstantExpr::get(unsigned Opcode, Constant *C1, Constant *C2, 1846 unsigned Flags, Type *OnlyIfReducedTy) { 1847 // Check the operands for consistency first. 1848 assert(Opcode >= Instruction::BinaryOpsBegin && 1849 Opcode < Instruction::BinaryOpsEnd && 1850 "Invalid opcode in binary constant expression"); 1851 assert(C1->getType() == C2->getType() && 1852 "Operand types in binary constant expression should match"); 1853 1854 #ifndef NDEBUG 1855 switch (Opcode) { 1856 case Instruction::Add: 1857 case Instruction::Sub: 1858 case Instruction::Mul: 1859 assert(C1->getType() == C2->getType() && "Op types should be identical!"); 1860 assert(C1->getType()->isIntOrIntVectorTy() && 1861 "Tried to create an integer operation on a non-integer type!"); 1862 break; 1863 case Instruction::FAdd: 1864 case Instruction::FSub: 1865 case Instruction::FMul: 1866 assert(C1->getType() == C2->getType() && "Op types should be identical!"); 1867 assert(C1->getType()->isFPOrFPVectorTy() && 1868 "Tried to create a floating-point operation on a " 1869 "non-floating-point type!"); 1870 break; 1871 case Instruction::UDiv: 1872 case Instruction::SDiv: 1873 assert(C1->getType() == C2->getType() && "Op types should be identical!"); 1874 assert(C1->getType()->isIntOrIntVectorTy() && 1875 "Tried to create an arithmetic operation on a non-arithmetic type!"); 1876 break; 1877 case Instruction::FDiv: 1878 assert(C1->getType() == C2->getType() && "Op types should be identical!"); 1879 assert(C1->getType()->isFPOrFPVectorTy() && 1880 "Tried to create an arithmetic operation on a non-arithmetic type!"); 1881 break; 1882 case Instruction::URem: 1883 case Instruction::SRem: 1884 assert(C1->getType() == C2->getType() && "Op types should be identical!"); 1885 assert(C1->getType()->isIntOrIntVectorTy() && 1886 "Tried to create an arithmetic operation on a non-arithmetic type!"); 1887 break; 1888 case Instruction::FRem: 1889 assert(C1->getType() == C2->getType() && "Op types should be identical!"); 1890 assert(C1->getType()->isFPOrFPVectorTy() && 1891 "Tried to create an arithmetic operation on a non-arithmetic type!"); 1892 break; 1893 case Instruction::And: 1894 case Instruction::Or: 1895 case Instruction::Xor: 1896 assert(C1->getType() == C2->getType() && "Op types should be identical!"); 1897 assert(C1->getType()->isIntOrIntVectorTy() && 1898 "Tried to create a logical operation on a non-integral type!"); 1899 break; 1900 case Instruction::Shl: 1901 case Instruction::LShr: 1902 case Instruction::AShr: 1903 assert(C1->getType() == C2->getType() && "Op types should be identical!"); 1904 assert(C1->getType()->isIntOrIntVectorTy() && 1905 "Tried to create a shift operation on a non-integer type!"); 1906 break; 1907 default: 1908 break; 1909 } 1910 #endif 1911 1912 if (Constant *FC = ConstantFoldBinaryInstruction(Opcode, C1, C2)) 1913 return FC; // Fold a few common cases. 1914 1915 if (OnlyIfReducedTy == C1->getType()) 1916 return nullptr; 1917 1918 Constant *ArgVec[] = { C1, C2 }; 1919 ConstantExprKeyType Key(Opcode, ArgVec, 0, Flags); 1920 1921 LLVMContextImpl *pImpl = C1->getContext().pImpl; 1922 return pImpl->ExprConstants.getOrCreate(C1->getType(), Key); 1923 } 1924 1925 Constant *ConstantExpr::getSizeOf(Type* Ty) { 1926 // sizeof is implemented as: (i64) gep (Ty*)null, 1 1927 // Note that a non-inbounds gep is used, as null isn't within any object. 1928 Constant *GEPIdx = ConstantInt::get(Type::getInt32Ty(Ty->getContext()), 1); 1929 Constant *GEP = getGetElementPtr( 1930 Constant::getNullValue(PointerType::getUnqual(Ty)), GEPIdx); 1931 return getPtrToInt(GEP, 1932 Type::getInt64Ty(Ty->getContext())); 1933 } 1934 1935 Constant *ConstantExpr::getAlignOf(Type* Ty) { 1936 // alignof is implemented as: (i64) gep ({i1,Ty}*)null, 0, 1 1937 // Note that a non-inbounds gep is used, as null isn't within any object. 1938 Type *AligningTy = 1939 StructType::get(Type::getInt1Ty(Ty->getContext()), Ty, nullptr); 1940 Constant *NullPtr = Constant::getNullValue(AligningTy->getPointerTo(0)); 1941 Constant *Zero = ConstantInt::get(Type::getInt64Ty(Ty->getContext()), 0); 1942 Constant *One = ConstantInt::get(Type::getInt32Ty(Ty->getContext()), 1); 1943 Constant *Indices[2] = { Zero, One }; 1944 Constant *GEP = getGetElementPtr(NullPtr, Indices); 1945 return getPtrToInt(GEP, 1946 Type::getInt64Ty(Ty->getContext())); 1947 } 1948 1949 Constant *ConstantExpr::getOffsetOf(StructType* STy, unsigned FieldNo) { 1950 return getOffsetOf(STy, ConstantInt::get(Type::getInt32Ty(STy->getContext()), 1951 FieldNo)); 1952 } 1953 1954 Constant *ConstantExpr::getOffsetOf(Type* Ty, Constant *FieldNo) { 1955 // offsetof is implemented as: (i64) gep (Ty*)null, 0, FieldNo 1956 // Note that a non-inbounds gep is used, as null isn't within any object. 1957 Constant *GEPIdx[] = { 1958 ConstantInt::get(Type::getInt64Ty(Ty->getContext()), 0), 1959 FieldNo 1960 }; 1961 Constant *GEP = getGetElementPtr( 1962 Constant::getNullValue(PointerType::getUnqual(Ty)), GEPIdx); 1963 return getPtrToInt(GEP, 1964 Type::getInt64Ty(Ty->getContext())); 1965 } 1966 1967 Constant *ConstantExpr::getCompare(unsigned short Predicate, Constant *C1, 1968 Constant *C2, bool OnlyIfReduced) { 1969 assert(C1->getType() == C2->getType() && "Op types should be identical!"); 1970 1971 switch (Predicate) { 1972 default: llvm_unreachable("Invalid CmpInst predicate"); 1973 case CmpInst::FCMP_FALSE: case CmpInst::FCMP_OEQ: case CmpInst::FCMP_OGT: 1974 case CmpInst::FCMP_OGE: case CmpInst::FCMP_OLT: case CmpInst::FCMP_OLE: 1975 case CmpInst::FCMP_ONE: case CmpInst::FCMP_ORD: case CmpInst::FCMP_UNO: 1976 case CmpInst::FCMP_UEQ: case CmpInst::FCMP_UGT: case CmpInst::FCMP_UGE: 1977 case CmpInst::FCMP_ULT: case CmpInst::FCMP_ULE: case CmpInst::FCMP_UNE: 1978 case CmpInst::FCMP_TRUE: 1979 return getFCmp(Predicate, C1, C2, OnlyIfReduced); 1980 1981 case CmpInst::ICMP_EQ: case CmpInst::ICMP_NE: case CmpInst::ICMP_UGT: 1982 case CmpInst::ICMP_UGE: case CmpInst::ICMP_ULT: case CmpInst::ICMP_ULE: 1983 case CmpInst::ICMP_SGT: case CmpInst::ICMP_SGE: case CmpInst::ICMP_SLT: 1984 case CmpInst::ICMP_SLE: 1985 return getICmp(Predicate, C1, C2, OnlyIfReduced); 1986 } 1987 } 1988 1989 Constant *ConstantExpr::getSelect(Constant *C, Constant *V1, Constant *V2, 1990 Type *OnlyIfReducedTy) { 1991 assert(!SelectInst::areInvalidOperands(C, V1, V2)&&"Invalid select operands"); 1992 1993 if (Constant *SC = ConstantFoldSelectInstruction(C, V1, V2)) 1994 return SC; // Fold common cases 1995 1996 if (OnlyIfReducedTy == V1->getType()) 1997 return nullptr; 1998 1999 Constant *ArgVec[] = { C, V1, V2 }; 2000 ConstantExprKeyType Key(Instruction::Select, ArgVec); 2001 2002 LLVMContextImpl *pImpl = C->getContext().pImpl; 2003 return pImpl->ExprConstants.getOrCreate(V1->getType(), Key); 2004 } 2005 2006 Constant *ConstantExpr::getGetElementPtr(Constant *C, ArrayRef<Value *> Idxs, 2007 bool InBounds, Type *OnlyIfReducedTy) { 2008 assert(C->getType()->isPtrOrPtrVectorTy() && 2009 "Non-pointer type for constant GetElementPtr expression"); 2010 2011 if (Constant *FC = ConstantFoldGetElementPtr(C, InBounds, Idxs)) 2012 return FC; // Fold a few common cases. 2013 2014 // Get the result type of the getelementptr! 2015 Type *Ty = GetElementPtrInst::getIndexedType(C->getType(), Idxs); 2016 assert(Ty && "GEP indices invalid!"); 2017 unsigned AS = C->getType()->getPointerAddressSpace(); 2018 Type *ReqTy = Ty->getPointerTo(AS); 2019 if (VectorType *VecTy = dyn_cast<VectorType>(C->getType())) 2020 ReqTy = VectorType::get(ReqTy, VecTy->getNumElements()); 2021 2022 if (OnlyIfReducedTy == ReqTy) 2023 return nullptr; 2024 2025 // Look up the constant in the table first to ensure uniqueness 2026 std::vector<Constant*> ArgVec; 2027 ArgVec.reserve(1 + Idxs.size()); 2028 ArgVec.push_back(C); 2029 for (unsigned i = 0, e = Idxs.size(); i != e; ++i) { 2030 assert(Idxs[i]->getType()->isVectorTy() == ReqTy->isVectorTy() && 2031 "getelementptr index type missmatch"); 2032 assert((!Idxs[i]->getType()->isVectorTy() || 2033 ReqTy->getVectorNumElements() == 2034 Idxs[i]->getType()->getVectorNumElements()) && 2035 "getelementptr index type missmatch"); 2036 ArgVec.push_back(cast<Constant>(Idxs[i])); 2037 } 2038 const ConstantExprKeyType Key(Instruction::GetElementPtr, ArgVec, 0, 2039 InBounds ? GEPOperator::IsInBounds : 0); 2040 2041 LLVMContextImpl *pImpl = C->getContext().pImpl; 2042 return pImpl->ExprConstants.getOrCreate(ReqTy, Key); 2043 } 2044 2045 Constant *ConstantExpr::getICmp(unsigned short pred, Constant *LHS, 2046 Constant *RHS, bool OnlyIfReduced) { 2047 assert(LHS->getType() == RHS->getType()); 2048 assert(pred >= ICmpInst::FIRST_ICMP_PREDICATE && 2049 pred <= ICmpInst::LAST_ICMP_PREDICATE && "Invalid ICmp Predicate"); 2050 2051 if (Constant *FC = ConstantFoldCompareInstruction(pred, LHS, RHS)) 2052 return FC; // Fold a few common cases... 2053 2054 if (OnlyIfReduced) 2055 return nullptr; 2056 2057 // Look up the constant in the table first to ensure uniqueness 2058 Constant *ArgVec[] = { LHS, RHS }; 2059 // Get the key type with both the opcode and predicate 2060 const ConstantExprKeyType Key(Instruction::ICmp, ArgVec, pred); 2061 2062 Type *ResultTy = Type::getInt1Ty(LHS->getContext()); 2063 if (VectorType *VT = dyn_cast<VectorType>(LHS->getType())) 2064 ResultTy = VectorType::get(ResultTy, VT->getNumElements()); 2065 2066 LLVMContextImpl *pImpl = LHS->getType()->getContext().pImpl; 2067 return pImpl->ExprConstants.getOrCreate(ResultTy, Key); 2068 } 2069 2070 Constant *ConstantExpr::getFCmp(unsigned short pred, Constant *LHS, 2071 Constant *RHS, bool OnlyIfReduced) { 2072 assert(LHS->getType() == RHS->getType()); 2073 assert(pred <= FCmpInst::LAST_FCMP_PREDICATE && "Invalid FCmp Predicate"); 2074 2075 if (Constant *FC = ConstantFoldCompareInstruction(pred, LHS, RHS)) 2076 return FC; // Fold a few common cases... 2077 2078 if (OnlyIfReduced) 2079 return nullptr; 2080 2081 // Look up the constant in the table first to ensure uniqueness 2082 Constant *ArgVec[] = { LHS, RHS }; 2083 // Get the key type with both the opcode and predicate 2084 const ConstantExprKeyType Key(Instruction::FCmp, ArgVec, pred); 2085 2086 Type *ResultTy = Type::getInt1Ty(LHS->getContext()); 2087 if (VectorType *VT = dyn_cast<VectorType>(LHS->getType())) 2088 ResultTy = VectorType::get(ResultTy, VT->getNumElements()); 2089 2090 LLVMContextImpl *pImpl = LHS->getType()->getContext().pImpl; 2091 return pImpl->ExprConstants.getOrCreate(ResultTy, Key); 2092 } 2093 2094 Constant *ConstantExpr::getExtractElement(Constant *Val, Constant *Idx, 2095 Type *OnlyIfReducedTy) { 2096 assert(Val->getType()->isVectorTy() && 2097 "Tried to create extractelement operation on non-vector type!"); 2098 assert(Idx->getType()->isIntegerTy() && 2099 "Extractelement index must be an integer type!"); 2100 2101 if (Constant *FC = ConstantFoldExtractElementInstruction(Val, Idx)) 2102 return FC; // Fold a few common cases. 2103 2104 Type *ReqTy = Val->getType()->getVectorElementType(); 2105 if (OnlyIfReducedTy == ReqTy) 2106 return nullptr; 2107 2108 // Look up the constant in the table first to ensure uniqueness 2109 Constant *ArgVec[] = { Val, Idx }; 2110 const ConstantExprKeyType Key(Instruction::ExtractElement, ArgVec); 2111 2112 LLVMContextImpl *pImpl = Val->getContext().pImpl; 2113 return pImpl->ExprConstants.getOrCreate(ReqTy, Key); 2114 } 2115 2116 Constant *ConstantExpr::getInsertElement(Constant *Val, Constant *Elt, 2117 Constant *Idx, Type *OnlyIfReducedTy) { 2118 assert(Val->getType()->isVectorTy() && 2119 "Tried to create insertelement operation on non-vector type!"); 2120 assert(Elt->getType() == Val->getType()->getVectorElementType() && 2121 "Insertelement types must match!"); 2122 assert(Idx->getType()->isIntegerTy() && 2123 "Insertelement index must be i32 type!"); 2124 2125 if (Constant *FC = ConstantFoldInsertElementInstruction(Val, Elt, Idx)) 2126 return FC; // Fold a few common cases. 2127 2128 if (OnlyIfReducedTy == Val->getType()) 2129 return nullptr; 2130 2131 // Look up the constant in the table first to ensure uniqueness 2132 Constant *ArgVec[] = { Val, Elt, Idx }; 2133 const ConstantExprKeyType Key(Instruction::InsertElement, ArgVec); 2134 2135 LLVMContextImpl *pImpl = Val->getContext().pImpl; 2136 return pImpl->ExprConstants.getOrCreate(Val->getType(), Key); 2137 } 2138 2139 Constant *ConstantExpr::getShuffleVector(Constant *V1, Constant *V2, 2140 Constant *Mask, Type *OnlyIfReducedTy) { 2141 assert(ShuffleVectorInst::isValidOperands(V1, V2, Mask) && 2142 "Invalid shuffle vector constant expr operands!"); 2143 2144 if (Constant *FC = ConstantFoldShuffleVectorInstruction(V1, V2, Mask)) 2145 return FC; // Fold a few common cases. 2146 2147 unsigned NElts = Mask->getType()->getVectorNumElements(); 2148 Type *EltTy = V1->getType()->getVectorElementType(); 2149 Type *ShufTy = VectorType::get(EltTy, NElts); 2150 2151 if (OnlyIfReducedTy == ShufTy) 2152 return nullptr; 2153 2154 // Look up the constant in the table first to ensure uniqueness 2155 Constant *ArgVec[] = { V1, V2, Mask }; 2156 const ConstantExprKeyType Key(Instruction::ShuffleVector, ArgVec); 2157 2158 LLVMContextImpl *pImpl = ShufTy->getContext().pImpl; 2159 return pImpl->ExprConstants.getOrCreate(ShufTy, Key); 2160 } 2161 2162 Constant *ConstantExpr::getInsertValue(Constant *Agg, Constant *Val, 2163 ArrayRef<unsigned> Idxs, 2164 Type *OnlyIfReducedTy) { 2165 assert(Agg->getType()->isFirstClassType() && 2166 "Non-first-class type for constant insertvalue expression"); 2167 2168 assert(ExtractValueInst::getIndexedType(Agg->getType(), 2169 Idxs) == Val->getType() && 2170 "insertvalue indices invalid!"); 2171 Type *ReqTy = Val->getType(); 2172 2173 if (Constant *FC = ConstantFoldInsertValueInstruction(Agg, Val, Idxs)) 2174 return FC; 2175 2176 if (OnlyIfReducedTy == ReqTy) 2177 return nullptr; 2178 2179 Constant *ArgVec[] = { Agg, Val }; 2180 const ConstantExprKeyType Key(Instruction::InsertValue, ArgVec, 0, 0, Idxs); 2181 2182 LLVMContextImpl *pImpl = Agg->getContext().pImpl; 2183 return pImpl->ExprConstants.getOrCreate(ReqTy, Key); 2184 } 2185 2186 Constant *ConstantExpr::getExtractValue(Constant *Agg, ArrayRef<unsigned> Idxs, 2187 Type *OnlyIfReducedTy) { 2188 assert(Agg->getType()->isFirstClassType() && 2189 "Tried to create extractelement operation on non-first-class type!"); 2190 2191 Type *ReqTy = ExtractValueInst::getIndexedType(Agg->getType(), Idxs); 2192 (void)ReqTy; 2193 assert(ReqTy && "extractvalue indices invalid!"); 2194 2195 assert(Agg->getType()->isFirstClassType() && 2196 "Non-first-class type for constant extractvalue expression"); 2197 if (Constant *FC = ConstantFoldExtractValueInstruction(Agg, Idxs)) 2198 return FC; 2199 2200 if (OnlyIfReducedTy == ReqTy) 2201 return nullptr; 2202 2203 Constant *ArgVec[] = { Agg }; 2204 const ConstantExprKeyType Key(Instruction::ExtractValue, ArgVec, 0, 0, Idxs); 2205 2206 LLVMContextImpl *pImpl = Agg->getContext().pImpl; 2207 return pImpl->ExprConstants.getOrCreate(ReqTy, Key); 2208 } 2209 2210 Constant *ConstantExpr::getNeg(Constant *C, bool HasNUW, bool HasNSW) { 2211 assert(C->getType()->isIntOrIntVectorTy() && 2212 "Cannot NEG a nonintegral value!"); 2213 return getSub(ConstantFP::getZeroValueForNegation(C->getType()), 2214 C, HasNUW, HasNSW); 2215 } 2216 2217 Constant *ConstantExpr::getFNeg(Constant *C) { 2218 assert(C->getType()->isFPOrFPVectorTy() && 2219 "Cannot FNEG a non-floating-point value!"); 2220 return getFSub(ConstantFP::getZeroValueForNegation(C->getType()), C); 2221 } 2222 2223 Constant *ConstantExpr::getNot(Constant *C) { 2224 assert(C->getType()->isIntOrIntVectorTy() && 2225 "Cannot NOT a nonintegral value!"); 2226 return get(Instruction::Xor, C, Constant::getAllOnesValue(C->getType())); 2227 } 2228 2229 Constant *ConstantExpr::getAdd(Constant *C1, Constant *C2, 2230 bool HasNUW, bool HasNSW) { 2231 unsigned Flags = (HasNUW ? OverflowingBinaryOperator::NoUnsignedWrap : 0) | 2232 (HasNSW ? OverflowingBinaryOperator::NoSignedWrap : 0); 2233 return get(Instruction::Add, C1, C2, Flags); 2234 } 2235 2236 Constant *ConstantExpr::getFAdd(Constant *C1, Constant *C2) { 2237 return get(Instruction::FAdd, C1, C2); 2238 } 2239 2240 Constant *ConstantExpr::getSub(Constant *C1, Constant *C2, 2241 bool HasNUW, bool HasNSW) { 2242 unsigned Flags = (HasNUW ? OverflowingBinaryOperator::NoUnsignedWrap : 0) | 2243 (HasNSW ? OverflowingBinaryOperator::NoSignedWrap : 0); 2244 return get(Instruction::Sub, C1, C2, Flags); 2245 } 2246 2247 Constant *ConstantExpr::getFSub(Constant *C1, Constant *C2) { 2248 return get(Instruction::FSub, C1, C2); 2249 } 2250 2251 Constant *ConstantExpr::getMul(Constant *C1, Constant *C2, 2252 bool HasNUW, bool HasNSW) { 2253 unsigned Flags = (HasNUW ? OverflowingBinaryOperator::NoUnsignedWrap : 0) | 2254 (HasNSW ? OverflowingBinaryOperator::NoSignedWrap : 0); 2255 return get(Instruction::Mul, C1, C2, Flags); 2256 } 2257 2258 Constant *ConstantExpr::getFMul(Constant *C1, Constant *C2) { 2259 return get(Instruction::FMul, C1, C2); 2260 } 2261 2262 Constant *ConstantExpr::getUDiv(Constant *C1, Constant *C2, bool isExact) { 2263 return get(Instruction::UDiv, C1, C2, 2264 isExact ? PossiblyExactOperator::IsExact : 0); 2265 } 2266 2267 Constant *ConstantExpr::getSDiv(Constant *C1, Constant *C2, bool isExact) { 2268 return get(Instruction::SDiv, C1, C2, 2269 isExact ? PossiblyExactOperator::IsExact : 0); 2270 } 2271 2272 Constant *ConstantExpr::getFDiv(Constant *C1, Constant *C2) { 2273 return get(Instruction::FDiv, C1, C2); 2274 } 2275 2276 Constant *ConstantExpr::getURem(Constant *C1, Constant *C2) { 2277 return get(Instruction::URem, C1, C2); 2278 } 2279 2280 Constant *ConstantExpr::getSRem(Constant *C1, Constant *C2) { 2281 return get(Instruction::SRem, C1, C2); 2282 } 2283 2284 Constant *ConstantExpr::getFRem(Constant *C1, Constant *C2) { 2285 return get(Instruction::FRem, C1, C2); 2286 } 2287 2288 Constant *ConstantExpr::getAnd(Constant *C1, Constant *C2) { 2289 return get(Instruction::And, C1, C2); 2290 } 2291 2292 Constant *ConstantExpr::getOr(Constant *C1, Constant *C2) { 2293 return get(Instruction::Or, C1, C2); 2294 } 2295 2296 Constant *ConstantExpr::getXor(Constant *C1, Constant *C2) { 2297 return get(Instruction::Xor, C1, C2); 2298 } 2299 2300 Constant *ConstantExpr::getShl(Constant *C1, Constant *C2, 2301 bool HasNUW, bool HasNSW) { 2302 unsigned Flags = (HasNUW ? OverflowingBinaryOperator::NoUnsignedWrap : 0) | 2303 (HasNSW ? OverflowingBinaryOperator::NoSignedWrap : 0); 2304 return get(Instruction::Shl, C1, C2, Flags); 2305 } 2306 2307 Constant *ConstantExpr::getLShr(Constant *C1, Constant *C2, bool isExact) { 2308 return get(Instruction::LShr, C1, C2, 2309 isExact ? PossiblyExactOperator::IsExact : 0); 2310 } 2311 2312 Constant *ConstantExpr::getAShr(Constant *C1, Constant *C2, bool isExact) { 2313 return get(Instruction::AShr, C1, C2, 2314 isExact ? PossiblyExactOperator::IsExact : 0); 2315 } 2316 2317 /// getBinOpIdentity - Return the identity for the given binary operation, 2318 /// i.e. a constant C such that X op C = X and C op X = X for every X. It 2319 /// returns null if the operator doesn't have an identity. 2320 Constant *ConstantExpr::getBinOpIdentity(unsigned Opcode, Type *Ty) { 2321 switch (Opcode) { 2322 default: 2323 // Doesn't have an identity. 2324 return nullptr; 2325 2326 case Instruction::Add: 2327 case Instruction::Or: 2328 case Instruction::Xor: 2329 return Constant::getNullValue(Ty); 2330 2331 case Instruction::Mul: 2332 return ConstantInt::get(Ty, 1); 2333 2334 case Instruction::And: 2335 return Constant::getAllOnesValue(Ty); 2336 } 2337 } 2338 2339 /// getBinOpAbsorber - Return the absorbing element for the given binary 2340 /// operation, i.e. a constant C such that X op C = C and C op X = C for 2341 /// every X. For example, this returns zero for integer multiplication. 2342 /// It returns null if the operator doesn't have an absorbing element. 2343 Constant *ConstantExpr::getBinOpAbsorber(unsigned Opcode, Type *Ty) { 2344 switch (Opcode) { 2345 default: 2346 // Doesn't have an absorber. 2347 return nullptr; 2348 2349 case Instruction::Or: 2350 return Constant::getAllOnesValue(Ty); 2351 2352 case Instruction::And: 2353 case Instruction::Mul: 2354 return Constant::getNullValue(Ty); 2355 } 2356 } 2357 2358 // destroyConstant - Remove the constant from the constant table... 2359 // 2360 void ConstantExpr::destroyConstant() { 2361 getType()->getContext().pImpl->ExprConstants.remove(this); 2362 destroyConstantImpl(); 2363 } 2364 2365 const char *ConstantExpr::getOpcodeName() const { 2366 return Instruction::getOpcodeName(getOpcode()); 2367 } 2368 2369 2370 2371 GetElementPtrConstantExpr:: 2372 GetElementPtrConstantExpr(Constant *C, ArrayRef<Constant*> IdxList, 2373 Type *DestTy) 2374 : ConstantExpr(DestTy, Instruction::GetElementPtr, 2375 OperandTraits<GetElementPtrConstantExpr>::op_end(this) 2376 - (IdxList.size()+1), IdxList.size()+1) { 2377 OperandList[0] = C; 2378 for (unsigned i = 0, E = IdxList.size(); i != E; ++i) 2379 OperandList[i+1] = IdxList[i]; 2380 } 2381 2382 //===----------------------------------------------------------------------===// 2383 // ConstantData* implementations 2384 2385 void ConstantDataArray::anchor() {} 2386 void ConstantDataVector::anchor() {} 2387 2388 /// getElementType - Return the element type of the array/vector. 2389 Type *ConstantDataSequential::getElementType() const { 2390 return getType()->getElementType(); 2391 } 2392 2393 StringRef ConstantDataSequential::getRawDataValues() const { 2394 return StringRef(DataElements, getNumElements()*getElementByteSize()); 2395 } 2396 2397 /// isElementTypeCompatible - Return true if a ConstantDataSequential can be 2398 /// formed with a vector or array of the specified element type. 2399 /// ConstantDataArray only works with normal float and int types that are 2400 /// stored densely in memory, not with things like i42 or x86_f80. 2401 bool ConstantDataSequential::isElementTypeCompatible(const Type *Ty) { 2402 if (Ty->isFloatTy() || Ty->isDoubleTy()) return true; 2403 if (const IntegerType *IT = dyn_cast<IntegerType>(Ty)) { 2404 switch (IT->getBitWidth()) { 2405 case 8: 2406 case 16: 2407 case 32: 2408 case 64: 2409 return true; 2410 default: break; 2411 } 2412 } 2413 return false; 2414 } 2415 2416 /// getNumElements - Return the number of elements in the array or vector. 2417 unsigned ConstantDataSequential::getNumElements() const { 2418 if (ArrayType *AT = dyn_cast<ArrayType>(getType())) 2419 return AT->getNumElements(); 2420 return getType()->getVectorNumElements(); 2421 } 2422 2423 2424 /// getElementByteSize - Return the size in bytes of the elements in the data. 2425 uint64_t ConstantDataSequential::getElementByteSize() const { 2426 return getElementType()->getPrimitiveSizeInBits()/8; 2427 } 2428 2429 /// getElementPointer - Return the start of the specified element. 2430 const char *ConstantDataSequential::getElementPointer(unsigned Elt) const { 2431 assert(Elt < getNumElements() && "Invalid Elt"); 2432 return DataElements+Elt*getElementByteSize(); 2433 } 2434 2435 2436 /// isAllZeros - return true if the array is empty or all zeros. 2437 static bool isAllZeros(StringRef Arr) { 2438 for (StringRef::iterator I = Arr.begin(), E = Arr.end(); I != E; ++I) 2439 if (*I != 0) 2440 return false; 2441 return true; 2442 } 2443 2444 /// getImpl - This is the underlying implementation of all of the 2445 /// ConstantDataSequential::get methods. They all thunk down to here, providing 2446 /// the correct element type. We take the bytes in as a StringRef because 2447 /// we *want* an underlying "char*" to avoid TBAA type punning violations. 2448 Constant *ConstantDataSequential::getImpl(StringRef Elements, Type *Ty) { 2449 assert(isElementTypeCompatible(Ty->getSequentialElementType())); 2450 // If the elements are all zero or there are no elements, return a CAZ, which 2451 // is more dense and canonical. 2452 if (isAllZeros(Elements)) 2453 return ConstantAggregateZero::get(Ty); 2454 2455 // Do a lookup to see if we have already formed one of these. 2456 auto &Slot = 2457 *Ty->getContext() 2458 .pImpl->CDSConstants.insert(std::make_pair(Elements, nullptr)) 2459 .first; 2460 2461 // The bucket can point to a linked list of different CDS's that have the same 2462 // body but different types. For example, 0,0,0,1 could be a 4 element array 2463 // of i8, or a 1-element array of i32. They'll both end up in the same 2464 /// StringMap bucket, linked up by their Next pointers. Walk the list. 2465 ConstantDataSequential **Entry = &Slot.second; 2466 for (ConstantDataSequential *Node = *Entry; Node; 2467 Entry = &Node->Next, Node = *Entry) 2468 if (Node->getType() == Ty) 2469 return Node; 2470 2471 // Okay, we didn't get a hit. Create a node of the right class, link it in, 2472 // and return it. 2473 if (isa<ArrayType>(Ty)) 2474 return *Entry = new ConstantDataArray(Ty, Slot.first().data()); 2475 2476 assert(isa<VectorType>(Ty)); 2477 return *Entry = new ConstantDataVector(Ty, Slot.first().data()); 2478 } 2479 2480 void ConstantDataSequential::destroyConstant() { 2481 // Remove the constant from the StringMap. 2482 StringMap<ConstantDataSequential*> &CDSConstants = 2483 getType()->getContext().pImpl->CDSConstants; 2484 2485 StringMap<ConstantDataSequential*>::iterator Slot = 2486 CDSConstants.find(getRawDataValues()); 2487 2488 assert(Slot != CDSConstants.end() && "CDS not found in uniquing table"); 2489 2490 ConstantDataSequential **Entry = &Slot->getValue(); 2491 2492 // Remove the entry from the hash table. 2493 if (!(*Entry)->Next) { 2494 // If there is only one value in the bucket (common case) it must be this 2495 // entry, and removing the entry should remove the bucket completely. 2496 assert((*Entry) == this && "Hash mismatch in ConstantDataSequential"); 2497 getContext().pImpl->CDSConstants.erase(Slot); 2498 } else { 2499 // Otherwise, there are multiple entries linked off the bucket, unlink the 2500 // node we care about but keep the bucket around. 2501 for (ConstantDataSequential *Node = *Entry; ; 2502 Entry = &Node->Next, Node = *Entry) { 2503 assert(Node && "Didn't find entry in its uniquing hash table!"); 2504 // If we found our entry, unlink it from the list and we're done. 2505 if (Node == this) { 2506 *Entry = Node->Next; 2507 break; 2508 } 2509 } 2510 } 2511 2512 // If we were part of a list, make sure that we don't delete the list that is 2513 // still owned by the uniquing map. 2514 Next = nullptr; 2515 2516 // Finally, actually delete it. 2517 destroyConstantImpl(); 2518 } 2519 2520 /// get() constructors - Return a constant with array type with an element 2521 /// count and element type matching the ArrayRef passed in. Note that this 2522 /// can return a ConstantAggregateZero object. 2523 Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<uint8_t> Elts) { 2524 Type *Ty = ArrayType::get(Type::getInt8Ty(Context), Elts.size()); 2525 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2526 return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*1), Ty); 2527 } 2528 Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<uint16_t> Elts){ 2529 Type *Ty = ArrayType::get(Type::getInt16Ty(Context), Elts.size()); 2530 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2531 return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*2), Ty); 2532 } 2533 Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<uint32_t> Elts){ 2534 Type *Ty = ArrayType::get(Type::getInt32Ty(Context), Elts.size()); 2535 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2536 return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*4), Ty); 2537 } 2538 Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<uint64_t> Elts){ 2539 Type *Ty = ArrayType::get(Type::getInt64Ty(Context), Elts.size()); 2540 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2541 return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*8), Ty); 2542 } 2543 Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<float> Elts) { 2544 Type *Ty = ArrayType::get(Type::getFloatTy(Context), Elts.size()); 2545 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2546 return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*4), Ty); 2547 } 2548 Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<double> Elts) { 2549 Type *Ty = ArrayType::get(Type::getDoubleTy(Context), Elts.size()); 2550 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2551 return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 8), Ty); 2552 } 2553 2554 /// getFP() constructors - Return a constant with array type with an element 2555 /// count and element type of float with precision matching the number of 2556 /// bits in the ArrayRef passed in. (i.e. half for 16bits, float for 32bits, 2557 /// double for 64bits) Note that this can return a ConstantAggregateZero 2558 /// object. 2559 Constant *ConstantDataArray::getFP(LLVMContext &Context, 2560 ArrayRef<uint16_t> Elts) { 2561 Type *Ty = VectorType::get(Type::getHalfTy(Context), Elts.size()); 2562 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2563 return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 2), Ty); 2564 } 2565 Constant *ConstantDataArray::getFP(LLVMContext &Context, 2566 ArrayRef<uint32_t> Elts) { 2567 Type *Ty = ArrayType::get(Type::getFloatTy(Context), Elts.size()); 2568 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2569 return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 4), Ty); 2570 } 2571 Constant *ConstantDataArray::getFP(LLVMContext &Context, 2572 ArrayRef<uint64_t> Elts) { 2573 Type *Ty = ArrayType::get(Type::getDoubleTy(Context), Elts.size()); 2574 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2575 return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 8), Ty); 2576 } 2577 2578 /// getString - This method constructs a CDS and initializes it with a text 2579 /// string. The default behavior (AddNull==true) causes a null terminator to 2580 /// be placed at the end of the array (increasing the length of the string by 2581 /// one more than the StringRef would normally indicate. Pass AddNull=false 2582 /// to disable this behavior. 2583 Constant *ConstantDataArray::getString(LLVMContext &Context, 2584 StringRef Str, bool AddNull) { 2585 if (!AddNull) { 2586 const uint8_t *Data = reinterpret_cast<const uint8_t *>(Str.data()); 2587 return get(Context, makeArrayRef(const_cast<uint8_t *>(Data), 2588 Str.size())); 2589 } 2590 2591 SmallVector<uint8_t, 64> ElementVals; 2592 ElementVals.append(Str.begin(), Str.end()); 2593 ElementVals.push_back(0); 2594 return get(Context, ElementVals); 2595 } 2596 2597 /// get() constructors - Return a constant with vector type with an element 2598 /// count and element type matching the ArrayRef passed in. Note that this 2599 /// can return a ConstantAggregateZero object. 2600 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint8_t> Elts){ 2601 Type *Ty = VectorType::get(Type::getInt8Ty(Context), Elts.size()); 2602 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2603 return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*1), Ty); 2604 } 2605 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint16_t> Elts){ 2606 Type *Ty = VectorType::get(Type::getInt16Ty(Context), Elts.size()); 2607 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2608 return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*2), Ty); 2609 } 2610 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint32_t> Elts){ 2611 Type *Ty = VectorType::get(Type::getInt32Ty(Context), Elts.size()); 2612 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2613 return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*4), Ty); 2614 } 2615 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint64_t> Elts){ 2616 Type *Ty = VectorType::get(Type::getInt64Ty(Context), Elts.size()); 2617 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2618 return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*8), Ty); 2619 } 2620 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<float> Elts) { 2621 Type *Ty = VectorType::get(Type::getFloatTy(Context), Elts.size()); 2622 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2623 return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*4), Ty); 2624 } 2625 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<double> Elts) { 2626 Type *Ty = VectorType::get(Type::getDoubleTy(Context), Elts.size()); 2627 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2628 return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 8), Ty); 2629 } 2630 2631 /// getFP() constructors - Return a constant with vector type with an element 2632 /// count and element type of float with the precision matching the number of 2633 /// bits in the ArrayRef passed in. (i.e. half for 16bits, float for 32bits, 2634 /// double for 64bits) Note that this can return a ConstantAggregateZero 2635 /// object. 2636 Constant *ConstantDataVector::getFP(LLVMContext &Context, 2637 ArrayRef<uint16_t> Elts) { 2638 Type *Ty = VectorType::get(Type::getHalfTy(Context), Elts.size()); 2639 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2640 return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 2), Ty); 2641 } 2642 Constant *ConstantDataVector::getFP(LLVMContext &Context, 2643 ArrayRef<uint32_t> Elts) { 2644 Type *Ty = VectorType::get(Type::getFloatTy(Context), Elts.size()); 2645 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2646 return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 4), Ty); 2647 } 2648 Constant *ConstantDataVector::getFP(LLVMContext &Context, 2649 ArrayRef<uint64_t> Elts) { 2650 Type *Ty = VectorType::get(Type::getDoubleTy(Context), Elts.size()); 2651 const char *Data = reinterpret_cast<const char *>(Elts.data()); 2652 return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 8), Ty); 2653 } 2654 2655 Constant *ConstantDataVector::getSplat(unsigned NumElts, Constant *V) { 2656 assert(isElementTypeCompatible(V->getType()) && 2657 "Element type not compatible with ConstantData"); 2658 if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) { 2659 if (CI->getType()->isIntegerTy(8)) { 2660 SmallVector<uint8_t, 16> Elts(NumElts, CI->getZExtValue()); 2661 return get(V->getContext(), Elts); 2662 } 2663 if (CI->getType()->isIntegerTy(16)) { 2664 SmallVector<uint16_t, 16> Elts(NumElts, CI->getZExtValue()); 2665 return get(V->getContext(), Elts); 2666 } 2667 if (CI->getType()->isIntegerTy(32)) { 2668 SmallVector<uint32_t, 16> Elts(NumElts, CI->getZExtValue()); 2669 return get(V->getContext(), Elts); 2670 } 2671 assert(CI->getType()->isIntegerTy(64) && "Unsupported ConstantData type"); 2672 SmallVector<uint64_t, 16> Elts(NumElts, CI->getZExtValue()); 2673 return get(V->getContext(), Elts); 2674 } 2675 2676 if (ConstantFP *CFP = dyn_cast<ConstantFP>(V)) { 2677 if (CFP->getType()->isFloatTy()) { 2678 SmallVector<uint32_t, 16> Elts( 2679 NumElts, CFP->getValueAPF().bitcastToAPInt().getLimitedValue()); 2680 return getFP(V->getContext(), Elts); 2681 } 2682 if (CFP->getType()->isDoubleTy()) { 2683 SmallVector<uint64_t, 16> Elts( 2684 NumElts, CFP->getValueAPF().bitcastToAPInt().getLimitedValue()); 2685 return getFP(V->getContext(), Elts); 2686 } 2687 } 2688 return ConstantVector::getSplat(NumElts, V); 2689 } 2690 2691 2692 /// getElementAsInteger - If this is a sequential container of integers (of 2693 /// any size), return the specified element in the low bits of a uint64_t. 2694 uint64_t ConstantDataSequential::getElementAsInteger(unsigned Elt) const { 2695 assert(isa<IntegerType>(getElementType()) && 2696 "Accessor can only be used when element is an integer"); 2697 const char *EltPtr = getElementPointer(Elt); 2698 2699 // The data is stored in host byte order, make sure to cast back to the right 2700 // type to load with the right endianness. 2701 switch (getElementType()->getIntegerBitWidth()) { 2702 default: llvm_unreachable("Invalid bitwidth for CDS"); 2703 case 8: 2704 return *const_cast<uint8_t *>(reinterpret_cast<const uint8_t *>(EltPtr)); 2705 case 16: 2706 return *const_cast<uint16_t *>(reinterpret_cast<const uint16_t *>(EltPtr)); 2707 case 32: 2708 return *const_cast<uint32_t *>(reinterpret_cast<const uint32_t *>(EltPtr)); 2709 case 64: 2710 return *const_cast<uint64_t *>(reinterpret_cast<const uint64_t *>(EltPtr)); 2711 } 2712 } 2713 2714 /// getElementAsAPFloat - If this is a sequential container of floating point 2715 /// type, return the specified element as an APFloat. 2716 APFloat ConstantDataSequential::getElementAsAPFloat(unsigned Elt) const { 2717 const char *EltPtr = getElementPointer(Elt); 2718 2719 switch (getElementType()->getTypeID()) { 2720 default: 2721 llvm_unreachable("Accessor can only be used when element is float/double!"); 2722 case Type::FloatTyID: { 2723 auto EltVal = *reinterpret_cast<const uint32_t *>(EltPtr); 2724 return APFloat(APFloat::IEEEsingle, APInt(32, EltVal)); 2725 } 2726 case Type::DoubleTyID: { 2727 auto EltVal = *reinterpret_cast<const uint64_t *>(EltPtr); 2728 return APFloat(APFloat::IEEEdouble, APInt(64, EltVal)); 2729 } 2730 } 2731 } 2732 2733 /// getElementAsFloat - If this is an sequential container of floats, return 2734 /// the specified element as a float. 2735 float ConstantDataSequential::getElementAsFloat(unsigned Elt) const { 2736 assert(getElementType()->isFloatTy() && 2737 "Accessor can only be used when element is a 'float'"); 2738 const float *EltPtr = reinterpret_cast<const float *>(getElementPointer(Elt)); 2739 return *const_cast<float *>(EltPtr); 2740 } 2741 2742 /// getElementAsDouble - If this is an sequential container of doubles, return 2743 /// the specified element as a float. 2744 double ConstantDataSequential::getElementAsDouble(unsigned Elt) const { 2745 assert(getElementType()->isDoubleTy() && 2746 "Accessor can only be used when element is a 'float'"); 2747 const double *EltPtr = 2748 reinterpret_cast<const double *>(getElementPointer(Elt)); 2749 return *const_cast<double *>(EltPtr); 2750 } 2751 2752 /// getElementAsConstant - Return a Constant for a specified index's element. 2753 /// Note that this has to compute a new constant to return, so it isn't as 2754 /// efficient as getElementAsInteger/Float/Double. 2755 Constant *ConstantDataSequential::getElementAsConstant(unsigned Elt) const { 2756 if (getElementType()->isFloatTy() || getElementType()->isDoubleTy()) 2757 return ConstantFP::get(getContext(), getElementAsAPFloat(Elt)); 2758 2759 return ConstantInt::get(getElementType(), getElementAsInteger(Elt)); 2760 } 2761 2762 /// isString - This method returns true if this is an array of i8. 2763 bool ConstantDataSequential::isString() const { 2764 return isa<ArrayType>(getType()) && getElementType()->isIntegerTy(8); 2765 } 2766 2767 /// isCString - This method returns true if the array "isString", ends with a 2768 /// nul byte, and does not contains any other nul bytes. 2769 bool ConstantDataSequential::isCString() const { 2770 if (!isString()) 2771 return false; 2772 2773 StringRef Str = getAsString(); 2774 2775 // The last value must be nul. 2776 if (Str.back() != 0) return false; 2777 2778 // Other elements must be non-nul. 2779 return Str.drop_back().find(0) == StringRef::npos; 2780 } 2781 2782 /// getSplatValue - If this is a splat constant, meaning that all of the 2783 /// elements have the same value, return that value. Otherwise return nullptr. 2784 Constant *ConstantDataVector::getSplatValue() const { 2785 const char *Base = getRawDataValues().data(); 2786 2787 // Compare elements 1+ to the 0'th element. 2788 unsigned EltSize = getElementByteSize(); 2789 for (unsigned i = 1, e = getNumElements(); i != e; ++i) 2790 if (memcmp(Base, Base+i*EltSize, EltSize)) 2791 return nullptr; 2792 2793 // If they're all the same, return the 0th one as a representative. 2794 return getElementAsConstant(0); 2795 } 2796 2797 //===----------------------------------------------------------------------===// 2798 // replaceUsesOfWithOnConstant implementations 2799 2800 /// replaceUsesOfWithOnConstant - Update this constant array to change uses of 2801 /// 'From' to be uses of 'To'. This must update the uniquing data structures 2802 /// etc. 2803 /// 2804 /// Note that we intentionally replace all uses of From with To here. Consider 2805 /// a large array that uses 'From' 1000 times. By handling this case all here, 2806 /// ConstantArray::replaceUsesOfWithOnConstant is only invoked once, and that 2807 /// single invocation handles all 1000 uses. Handling them one at a time would 2808 /// work, but would be really slow because it would have to unique each updated 2809 /// array instance. 2810 /// 2811 void Constant::replaceUsesOfWithOnConstantImpl(Constant *Replacement) { 2812 // I do need to replace this with an existing value. 2813 assert(Replacement != this && "I didn't contain From!"); 2814 2815 // Everyone using this now uses the replacement. 2816 replaceAllUsesWith(Replacement); 2817 2818 // Delete the old constant! 2819 destroyConstant(); 2820 } 2821 2822 void ConstantArray::replaceUsesOfWithOnConstant(Value *From, Value *To, 2823 Use *U) { 2824 assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!"); 2825 Constant *ToC = cast<Constant>(To); 2826 2827 SmallVector<Constant*, 8> Values; 2828 Values.reserve(getNumOperands()); // Build replacement array. 2829 2830 // Fill values with the modified operands of the constant array. Also, 2831 // compute whether this turns into an all-zeros array. 2832 unsigned NumUpdated = 0; 2833 2834 // Keep track of whether all the values in the array are "ToC". 2835 bool AllSame = true; 2836 for (Use *O = OperandList, *E = OperandList+getNumOperands(); O != E; ++O) { 2837 Constant *Val = cast<Constant>(O->get()); 2838 if (Val == From) { 2839 Val = ToC; 2840 ++NumUpdated; 2841 } 2842 Values.push_back(Val); 2843 AllSame &= Val == ToC; 2844 } 2845 2846 if (AllSame && ToC->isNullValue()) { 2847 replaceUsesOfWithOnConstantImpl(ConstantAggregateZero::get(getType())); 2848 return; 2849 } 2850 if (AllSame && isa<UndefValue>(ToC)) { 2851 replaceUsesOfWithOnConstantImpl(UndefValue::get(getType())); 2852 return; 2853 } 2854 2855 // Check for any other type of constant-folding. 2856 if (Constant *C = getImpl(getType(), Values)) { 2857 replaceUsesOfWithOnConstantImpl(C); 2858 return; 2859 } 2860 2861 // Update to the new value. 2862 if (Constant *C = getContext().pImpl->ArrayConstants.replaceOperandsInPlace( 2863 Values, this, From, ToC, NumUpdated, U - OperandList)) 2864 replaceUsesOfWithOnConstantImpl(C); 2865 } 2866 2867 void ConstantStruct::replaceUsesOfWithOnConstant(Value *From, Value *To, 2868 Use *U) { 2869 assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!"); 2870 Constant *ToC = cast<Constant>(To); 2871 2872 unsigned OperandToUpdate = U-OperandList; 2873 assert(getOperand(OperandToUpdate) == From && "ReplaceAllUsesWith broken!"); 2874 2875 SmallVector<Constant*, 8> Values; 2876 Values.reserve(getNumOperands()); // Build replacement struct. 2877 2878 // Fill values with the modified operands of the constant struct. Also, 2879 // compute whether this turns into an all-zeros struct. 2880 bool isAllZeros = false; 2881 bool isAllUndef = false; 2882 if (ToC->isNullValue()) { 2883 isAllZeros = true; 2884 for (Use *O = OperandList, *E = OperandList+getNumOperands(); O != E; ++O) { 2885 Constant *Val = cast<Constant>(O->get()); 2886 Values.push_back(Val); 2887 if (isAllZeros) isAllZeros = Val->isNullValue(); 2888 } 2889 } else if (isa<UndefValue>(ToC)) { 2890 isAllUndef = true; 2891 for (Use *O = OperandList, *E = OperandList+getNumOperands(); O != E; ++O) { 2892 Constant *Val = cast<Constant>(O->get()); 2893 Values.push_back(Val); 2894 if (isAllUndef) isAllUndef = isa<UndefValue>(Val); 2895 } 2896 } else { 2897 for (Use *O = OperandList, *E = OperandList + getNumOperands(); O != E; ++O) 2898 Values.push_back(cast<Constant>(O->get())); 2899 } 2900 Values[OperandToUpdate] = ToC; 2901 2902 if (isAllZeros) { 2903 replaceUsesOfWithOnConstantImpl(ConstantAggregateZero::get(getType())); 2904 return; 2905 } 2906 if (isAllUndef) { 2907 replaceUsesOfWithOnConstantImpl(UndefValue::get(getType())); 2908 return; 2909 } 2910 2911 // Update to the new value. 2912 if (Constant *C = getContext().pImpl->StructConstants.replaceOperandsInPlace( 2913 Values, this, From, ToC)) 2914 replaceUsesOfWithOnConstantImpl(C); 2915 } 2916 2917 void ConstantVector::replaceUsesOfWithOnConstant(Value *From, Value *To, 2918 Use *U) { 2919 assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!"); 2920 Constant *ToC = cast<Constant>(To); 2921 2922 SmallVector<Constant*, 8> Values; 2923 Values.reserve(getNumOperands()); // Build replacement array... 2924 unsigned NumUpdated = 0; 2925 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) { 2926 Constant *Val = getOperand(i); 2927 if (Val == From) { 2928 ++NumUpdated; 2929 Val = ToC; 2930 } 2931 Values.push_back(Val); 2932 } 2933 2934 if (Constant *C = getImpl(Values)) { 2935 replaceUsesOfWithOnConstantImpl(C); 2936 return; 2937 } 2938 2939 // Update to the new value. 2940 if (Constant *C = getContext().pImpl->VectorConstants.replaceOperandsInPlace( 2941 Values, this, From, ToC, NumUpdated, U - OperandList)) 2942 replaceUsesOfWithOnConstantImpl(C); 2943 } 2944 2945 void ConstantExpr::replaceUsesOfWithOnConstant(Value *From, Value *ToV, 2946 Use *U) { 2947 assert(isa<Constant>(ToV) && "Cannot make Constant refer to non-constant!"); 2948 Constant *To = cast<Constant>(ToV); 2949 2950 SmallVector<Constant*, 8> NewOps; 2951 unsigned NumUpdated = 0; 2952 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) { 2953 Constant *Op = getOperand(i); 2954 if (Op == From) { 2955 ++NumUpdated; 2956 Op = To; 2957 } 2958 NewOps.push_back(Op); 2959 } 2960 assert(NumUpdated && "I didn't contain From!"); 2961 2962 if (Constant *C = getWithOperands(NewOps, getType(), true)) { 2963 replaceUsesOfWithOnConstantImpl(C); 2964 return; 2965 } 2966 2967 // Update to the new value. 2968 if (Constant *C = getContext().pImpl->ExprConstants.replaceOperandsInPlace( 2969 NewOps, this, From, To, NumUpdated, U - OperandList)) 2970 replaceUsesOfWithOnConstantImpl(C); 2971 } 2972 2973 Instruction *ConstantExpr::getAsInstruction() { 2974 SmallVector<Value*,4> ValueOperands; 2975 for (op_iterator I = op_begin(), E = op_end(); I != E; ++I) 2976 ValueOperands.push_back(cast<Value>(I)); 2977 2978 ArrayRef<Value*> Ops(ValueOperands); 2979 2980 switch (getOpcode()) { 2981 case Instruction::Trunc: 2982 case Instruction::ZExt: 2983 case Instruction::SExt: 2984 case Instruction::FPTrunc: 2985 case Instruction::FPExt: 2986 case Instruction::UIToFP: 2987 case Instruction::SIToFP: 2988 case Instruction::FPToUI: 2989 case Instruction::FPToSI: 2990 case Instruction::PtrToInt: 2991 case Instruction::IntToPtr: 2992 case Instruction::BitCast: 2993 case Instruction::AddrSpaceCast: 2994 return CastInst::Create((Instruction::CastOps)getOpcode(), 2995 Ops[0], getType()); 2996 case Instruction::Select: 2997 return SelectInst::Create(Ops[0], Ops[1], Ops[2]); 2998 case Instruction::InsertElement: 2999 return InsertElementInst::Create(Ops[0], Ops[1], Ops[2]); 3000 case Instruction::ExtractElement: 3001 return ExtractElementInst::Create(Ops[0], Ops[1]); 3002 case Instruction::InsertValue: 3003 return InsertValueInst::Create(Ops[0], Ops[1], getIndices()); 3004 case Instruction::ExtractValue: 3005 return ExtractValueInst::Create(Ops[0], getIndices()); 3006 case Instruction::ShuffleVector: 3007 return new ShuffleVectorInst(Ops[0], Ops[1], Ops[2]); 3008 3009 case Instruction::GetElementPtr: 3010 if (cast<GEPOperator>(this)->isInBounds()) 3011 return GetElementPtrInst::CreateInBounds(Ops[0], Ops.slice(1)); 3012 else 3013 return GetElementPtrInst::Create(Ops[0], Ops.slice(1)); 3014 3015 case Instruction::ICmp: 3016 case Instruction::FCmp: 3017 return CmpInst::Create((Instruction::OtherOps)getOpcode(), 3018 getPredicate(), Ops[0], Ops[1]); 3019 3020 default: 3021 assert(getNumOperands() == 2 && "Must be binary operator?"); 3022 BinaryOperator *BO = 3023 BinaryOperator::Create((Instruction::BinaryOps)getOpcode(), 3024 Ops[0], Ops[1]); 3025 if (isa<OverflowingBinaryOperator>(BO)) { 3026 BO->setHasNoUnsignedWrap(SubclassOptionalData & 3027 OverflowingBinaryOperator::NoUnsignedWrap); 3028 BO->setHasNoSignedWrap(SubclassOptionalData & 3029 OverflowingBinaryOperator::NoSignedWrap); 3030 } 3031 if (isa<PossiblyExactOperator>(BO)) 3032 BO->setIsExact(SubclassOptionalData & PossiblyExactOperator::IsExact); 3033 return BO; 3034 } 3035 } 3036