1 //===-- Function.cpp - Implement the Global object classes ----------------===// 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 Function class for the IR library. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/IR/Function.h" 15 #include "LLVMContextImpl.h" 16 #include "SymbolTableListTraitsImpl.h" 17 #include "llvm/ADT/STLExtras.h" 18 #include "llvm/ADT/StringExtras.h" 19 #include "llvm/CodeGen/ValueTypes.h" 20 #include "llvm/IR/CallSite.h" 21 #include "llvm/IR/Constants.h" 22 #include "llvm/IR/DerivedTypes.h" 23 #include "llvm/IR/InstIterator.h" 24 #include "llvm/IR/IntrinsicInst.h" 25 #include "llvm/IR/LLVMContext.h" 26 #include "llvm/IR/MDBuilder.h" 27 #include "llvm/IR/Metadata.h" 28 #include "llvm/IR/Module.h" 29 using namespace llvm; 30 31 // Explicit instantiations of SymbolTableListTraits since some of the methods 32 // are not in the public header file... 33 template class llvm::SymbolTableListTraits<BasicBlock>; 34 35 //===----------------------------------------------------------------------===// 36 // Argument Implementation 37 //===----------------------------------------------------------------------===// 38 39 void Argument::anchor() { } 40 41 Argument::Argument(Type *Ty, const Twine &Name, Function *Par, unsigned ArgNo) 42 : Value(Ty, Value::ArgumentVal), Parent(Par), ArgNo(ArgNo) { 43 setName(Name); 44 } 45 46 void Argument::setParent(Function *parent) { 47 Parent = parent; 48 } 49 50 bool Argument::hasNonNullAttr() const { 51 if (!getType()->isPointerTy()) return false; 52 if (getParent()->hasParamAttribute(getArgNo(), Attribute::NonNull)) 53 return true; 54 else if (getDereferenceableBytes() > 0 && 55 getType()->getPointerAddressSpace() == 0) 56 return true; 57 return false; 58 } 59 60 bool Argument::hasByValAttr() const { 61 if (!getType()->isPointerTy()) return false; 62 return hasAttribute(Attribute::ByVal); 63 } 64 65 bool Argument::hasSwiftSelfAttr() const { 66 return getParent()->hasParamAttribute(getArgNo(), Attribute::SwiftSelf); 67 } 68 69 bool Argument::hasSwiftErrorAttr() const { 70 return getParent()->hasParamAttribute(getArgNo(), Attribute::SwiftError); 71 } 72 73 bool Argument::hasInAllocaAttr() const { 74 if (!getType()->isPointerTy()) return false; 75 return hasAttribute(Attribute::InAlloca); 76 } 77 78 bool Argument::hasByValOrInAllocaAttr() const { 79 if (!getType()->isPointerTy()) return false; 80 AttributeList Attrs = getParent()->getAttributes(); 81 return Attrs.hasParamAttribute(getArgNo(), Attribute::ByVal) || 82 Attrs.hasParamAttribute(getArgNo(), Attribute::InAlloca); 83 } 84 85 unsigned Argument::getParamAlignment() const { 86 assert(getType()->isPointerTy() && "Only pointers have alignments"); 87 return getParent()->getParamAlignment(getArgNo()+1); 88 89 } 90 91 uint64_t Argument::getDereferenceableBytes() const { 92 assert(getType()->isPointerTy() && 93 "Only pointers have dereferenceable bytes"); 94 return getParent()->getDereferenceableBytes(getArgNo()+1); 95 } 96 97 uint64_t Argument::getDereferenceableOrNullBytes() const { 98 assert(getType()->isPointerTy() && 99 "Only pointers have dereferenceable bytes"); 100 return getParent()->getDereferenceableOrNullBytes(getArgNo()+1); 101 } 102 103 bool Argument::hasNestAttr() const { 104 if (!getType()->isPointerTy()) return false; 105 return hasAttribute(Attribute::Nest); 106 } 107 108 bool Argument::hasNoAliasAttr() const { 109 if (!getType()->isPointerTy()) return false; 110 return hasAttribute(Attribute::NoAlias); 111 } 112 113 bool Argument::hasNoCaptureAttr() const { 114 if (!getType()->isPointerTy()) return false; 115 return hasAttribute(Attribute::NoCapture); 116 } 117 118 bool Argument::hasStructRetAttr() const { 119 if (!getType()->isPointerTy()) return false; 120 return hasAttribute(Attribute::StructRet); 121 } 122 123 bool Argument::hasReturnedAttr() const { 124 return hasAttribute(Attribute::Returned); 125 } 126 127 bool Argument::hasZExtAttr() const { 128 return hasAttribute(Attribute::ZExt); 129 } 130 131 bool Argument::hasSExtAttr() const { 132 return hasAttribute(Attribute::SExt); 133 } 134 135 bool Argument::onlyReadsMemory() const { 136 AttributeList Attrs = getParent()->getAttributes(); 137 return Attrs.hasParamAttribute(getArgNo(), Attribute::ReadOnly) || 138 Attrs.hasParamAttribute(getArgNo(), Attribute::ReadNone); 139 } 140 141 void Argument::addAttrs(AttrBuilder &B) { 142 AttributeList AL = getParent()->getAttributes(); 143 AL = AL.addAttributes(Parent->getContext(), getArgNo() + 1, B); 144 getParent()->setAttributes(AL); 145 } 146 147 void Argument::addAttr(Attribute::AttrKind Kind) { 148 getParent()->addAttribute(getArgNo() + 1, Kind); 149 } 150 151 void Argument::addAttr(Attribute Attr) { 152 getParent()->addAttribute(getArgNo() + 1, Attr); 153 } 154 155 void Argument::removeAttr(AttributeList AS) { 156 assert(AS.getNumSlots() <= 1 && 157 "Trying to remove more than one attribute set from an argument!"); 158 AttrBuilder B(AS, AS.getSlotIndex(0)); 159 getParent()->removeAttributes( 160 getArgNo() + 1, 161 AttributeList::get(Parent->getContext(), getArgNo() + 1, B)); 162 } 163 164 void Argument::removeAttr(Attribute::AttrKind Kind) { 165 getParent()->removeAttribute(getArgNo() + 1, Kind); 166 } 167 168 bool Argument::hasAttribute(Attribute::AttrKind Kind) const { 169 return getParent()->hasParamAttribute(getArgNo(), Kind); 170 } 171 172 //===----------------------------------------------------------------------===// 173 // Helper Methods in Function 174 //===----------------------------------------------------------------------===// 175 176 LLVMContext &Function::getContext() const { 177 return getType()->getContext(); 178 } 179 180 void Function::removeFromParent() { 181 getParent()->getFunctionList().remove(getIterator()); 182 } 183 184 void Function::eraseFromParent() { 185 getParent()->getFunctionList().erase(getIterator()); 186 } 187 188 //===----------------------------------------------------------------------===// 189 // Function Implementation 190 //===----------------------------------------------------------------------===// 191 192 Function::Function(FunctionType *Ty, LinkageTypes Linkage, const Twine &name, 193 Module *ParentModule) 194 : GlobalObject(Ty, Value::FunctionVal, 195 OperandTraits<Function>::op_begin(this), 0, Linkage, name), 196 Arguments(nullptr), NumArgs(Ty->getNumParams()) { 197 assert(FunctionType::isValidReturnType(getReturnType()) && 198 "invalid return type"); 199 setGlobalObjectSubClassData(0); 200 201 // We only need a symbol table for a function if the context keeps value names 202 if (!getContext().shouldDiscardValueNames()) 203 SymTab = make_unique<ValueSymbolTable>(); 204 205 // If the function has arguments, mark them as lazily built. 206 if (Ty->getNumParams()) 207 setValueSubclassData(1); // Set the "has lazy arguments" bit. 208 209 if (ParentModule) 210 ParentModule->getFunctionList().push_back(this); 211 212 HasLLVMReservedName = getName().startswith("llvm."); 213 // Ensure intrinsics have the right parameter attributes. 214 // Note, the IntID field will have been set in Value::setName if this function 215 // name is a valid intrinsic ID. 216 if (IntID) 217 setAttributes(Intrinsic::getAttributes(getContext(), IntID)); 218 } 219 220 Function::~Function() { 221 dropAllReferences(); // After this it is safe to delete instructions. 222 223 // Delete all of the method arguments and unlink from symbol table... 224 if (Arguments) 225 clearArguments(); 226 227 // Remove the function from the on-the-side GC table. 228 clearGC(); 229 } 230 231 void Function::BuildLazyArguments() const { 232 // Create the arguments vector, all arguments start out unnamed. 233 auto *FT = getFunctionType(); 234 if (NumArgs > 0) { 235 Arguments = std::allocator<Argument>().allocate(NumArgs); 236 for (unsigned i = 0, e = NumArgs; i != e; ++i) { 237 Type *ArgTy = FT->getParamType(i); 238 assert(!ArgTy->isVoidTy() && "Cannot have void typed arguments!"); 239 new (Arguments + i) Argument(ArgTy, "", const_cast<Function *>(this), i); 240 } 241 } 242 243 // Clear the lazy arguments bit. 244 unsigned SDC = getSubclassDataFromValue(); 245 const_cast<Function*>(this)->setValueSubclassData(SDC &= ~(1<<0)); 246 assert(!hasLazyArguments()); 247 } 248 249 static MutableArrayRef<Argument> makeArgArray(Argument *Args, size_t Count) { 250 return MutableArrayRef<Argument>(Args, Count); 251 } 252 253 void Function::clearArguments() { 254 for (Argument &A : makeArgArray(Arguments, NumArgs)) { 255 A.setName(""); 256 A.~Argument(); 257 } 258 std::allocator<Argument>().deallocate(Arguments, NumArgs); 259 Arguments = nullptr; 260 } 261 262 void Function::stealArgumentListFrom(Function &Src) { 263 assert(isDeclaration() && "Expected no references to current arguments"); 264 265 // Drop the current arguments, if any, and set the lazy argument bit. 266 if (!hasLazyArguments()) { 267 assert(llvm::all_of(makeArgArray(Arguments, NumArgs), 268 [](const Argument &A) { return A.use_empty(); }) && 269 "Expected arguments to be unused in declaration"); 270 clearArguments(); 271 setValueSubclassData(getSubclassDataFromValue() | (1 << 0)); 272 } 273 274 // Nothing to steal if Src has lazy arguments. 275 if (Src.hasLazyArguments()) 276 return; 277 278 // Steal arguments from Src, and fix the lazy argument bits. 279 assert(arg_size() == Src.arg_size()); 280 Arguments = Src.Arguments; 281 Src.Arguments = nullptr; 282 for (Argument &A : makeArgArray(Arguments, NumArgs)) { 283 // FIXME: This does the work of transferNodesFromList inefficiently. 284 SmallString<128> Name; 285 if (A.hasName()) 286 Name = A.getName(); 287 if (!Name.empty()) 288 A.setName(""); 289 A.setParent(this); 290 if (!Name.empty()) 291 A.setName(Name); 292 } 293 294 setValueSubclassData(getSubclassDataFromValue() & ~(1 << 0)); 295 assert(!hasLazyArguments()); 296 Src.setValueSubclassData(Src.getSubclassDataFromValue() | (1 << 0)); 297 } 298 299 // dropAllReferences() - This function causes all the subinstructions to "let 300 // go" of all references that they are maintaining. This allows one to 301 // 'delete' a whole class at a time, even though there may be circular 302 // references... first all references are dropped, and all use counts go to 303 // zero. Then everything is deleted for real. Note that no operations are 304 // valid on an object that has "dropped all references", except operator 305 // delete. 306 // 307 void Function::dropAllReferences() { 308 setIsMaterializable(false); 309 310 for (BasicBlock &BB : *this) 311 BB.dropAllReferences(); 312 313 // Delete all basic blocks. They are now unused, except possibly by 314 // blockaddresses, but BasicBlock's destructor takes care of those. 315 while (!BasicBlocks.empty()) 316 BasicBlocks.begin()->eraseFromParent(); 317 318 // Drop uses of any optional data (real or placeholder). 319 if (getNumOperands()) { 320 User::dropAllReferences(); 321 setNumHungOffUseOperands(0); 322 setValueSubclassData(getSubclassDataFromValue() & ~0xe); 323 } 324 325 // Metadata is stored in a side-table. 326 clearMetadata(); 327 } 328 329 void Function::addAttribute(unsigned i, Attribute::AttrKind Kind) { 330 AttributeList PAL = getAttributes(); 331 PAL = PAL.addAttribute(getContext(), i, Kind); 332 setAttributes(PAL); 333 } 334 335 void Function::addAttribute(unsigned i, Attribute Attr) { 336 AttributeList PAL = getAttributes(); 337 PAL = PAL.addAttribute(getContext(), i, Attr); 338 setAttributes(PAL); 339 } 340 341 void Function::addAttributes(unsigned i, AttributeList Attrs) { 342 AttributeList PAL = getAttributes(); 343 PAL = PAL.addAttributes(getContext(), i, Attrs); 344 setAttributes(PAL); 345 } 346 347 void Function::removeAttribute(unsigned i, Attribute::AttrKind Kind) { 348 AttributeList PAL = getAttributes(); 349 PAL = PAL.removeAttribute(getContext(), i, Kind); 350 setAttributes(PAL); 351 } 352 353 void Function::removeAttribute(unsigned i, StringRef Kind) { 354 AttributeList PAL = getAttributes(); 355 PAL = PAL.removeAttribute(getContext(), i, Kind); 356 setAttributes(PAL); 357 } 358 359 void Function::removeAttributes(unsigned i, AttributeList Attrs) { 360 AttributeList PAL = getAttributes(); 361 PAL = PAL.removeAttributes(getContext(), i, Attrs); 362 setAttributes(PAL); 363 } 364 365 void Function::addDereferenceableAttr(unsigned i, uint64_t Bytes) { 366 AttributeList PAL = getAttributes(); 367 PAL = PAL.addDereferenceableAttr(getContext(), i, Bytes); 368 setAttributes(PAL); 369 } 370 371 void Function::addDereferenceableOrNullAttr(unsigned i, uint64_t Bytes) { 372 AttributeList PAL = getAttributes(); 373 PAL = PAL.addDereferenceableOrNullAttr(getContext(), i, Bytes); 374 setAttributes(PAL); 375 } 376 377 const std::string &Function::getGC() const { 378 assert(hasGC() && "Function has no collector"); 379 return getContext().getGC(*this); 380 } 381 382 void Function::setGC(std::string Str) { 383 setValueSubclassDataBit(14, !Str.empty()); 384 getContext().setGC(*this, std::move(Str)); 385 } 386 387 void Function::clearGC() { 388 if (!hasGC()) 389 return; 390 getContext().deleteGC(*this); 391 setValueSubclassDataBit(14, false); 392 } 393 394 /// Copy all additional attributes (those not needed to create a Function) from 395 /// the Function Src to this one. 396 void Function::copyAttributesFrom(const GlobalValue *Src) { 397 GlobalObject::copyAttributesFrom(Src); 398 const Function *SrcF = dyn_cast<Function>(Src); 399 if (!SrcF) 400 return; 401 402 setCallingConv(SrcF->getCallingConv()); 403 setAttributes(SrcF->getAttributes()); 404 if (SrcF->hasGC()) 405 setGC(SrcF->getGC()); 406 else 407 clearGC(); 408 if (SrcF->hasPersonalityFn()) 409 setPersonalityFn(SrcF->getPersonalityFn()); 410 if (SrcF->hasPrefixData()) 411 setPrefixData(SrcF->getPrefixData()); 412 if (SrcF->hasPrologueData()) 413 setPrologueData(SrcF->getPrologueData()); 414 } 415 416 /// Table of string intrinsic names indexed by enum value. 417 static const char * const IntrinsicNameTable[] = { 418 "not_intrinsic", 419 #define GET_INTRINSIC_NAME_TABLE 420 #include "llvm/IR/Intrinsics.gen" 421 #undef GET_INTRINSIC_NAME_TABLE 422 }; 423 424 /// Table of per-target intrinsic name tables. 425 #define GET_INTRINSIC_TARGET_DATA 426 #include "llvm/IR/Intrinsics.gen" 427 #undef GET_INTRINSIC_TARGET_DATA 428 429 /// Find the segment of \c IntrinsicNameTable for intrinsics with the same 430 /// target as \c Name, or the generic table if \c Name is not target specific. 431 /// 432 /// Returns the relevant slice of \c IntrinsicNameTable 433 static ArrayRef<const char *> findTargetSubtable(StringRef Name) { 434 assert(Name.startswith("llvm.")); 435 436 ArrayRef<IntrinsicTargetInfo> Targets(TargetInfos); 437 // Drop "llvm." and take the first dotted component. That will be the target 438 // if this is target specific. 439 StringRef Target = Name.drop_front(5).split('.').first; 440 auto It = std::lower_bound(Targets.begin(), Targets.end(), Target, 441 [](const IntrinsicTargetInfo &TI, 442 StringRef Target) { return TI.Name < Target; }); 443 // We've either found the target or just fall back to the generic set, which 444 // is always first. 445 const auto &TI = It != Targets.end() && It->Name == Target ? *It : Targets[0]; 446 return makeArrayRef(&IntrinsicNameTable[1] + TI.Offset, TI.Count); 447 } 448 449 /// \brief This does the actual lookup of an intrinsic ID which 450 /// matches the given function name. 451 Intrinsic::ID Function::lookupIntrinsicID(StringRef Name) { 452 ArrayRef<const char *> NameTable = findTargetSubtable(Name); 453 int Idx = Intrinsic::lookupLLVMIntrinsicByName(NameTable, Name); 454 if (Idx == -1) 455 return Intrinsic::not_intrinsic; 456 457 // Intrinsic IDs correspond to the location in IntrinsicNameTable, but we have 458 // an index into a sub-table. 459 int Adjust = NameTable.data() - IntrinsicNameTable; 460 Intrinsic::ID ID = static_cast<Intrinsic::ID>(Idx + Adjust); 461 462 // If the intrinsic is not overloaded, require an exact match. If it is 463 // overloaded, require a prefix match. 464 bool IsPrefixMatch = Name.size() > strlen(NameTable[Idx]); 465 return IsPrefixMatch == isOverloaded(ID) ? ID : Intrinsic::not_intrinsic; 466 } 467 468 void Function::recalculateIntrinsicID() { 469 StringRef Name = getName(); 470 if (!Name.startswith("llvm.")) { 471 HasLLVMReservedName = false; 472 IntID = Intrinsic::not_intrinsic; 473 return; 474 } 475 HasLLVMReservedName = true; 476 IntID = lookupIntrinsicID(Name); 477 } 478 479 /// Returns a stable mangling for the type specified for use in the name 480 /// mangling scheme used by 'any' types in intrinsic signatures. The mangling 481 /// of named types is simply their name. Manglings for unnamed types consist 482 /// of a prefix ('p' for pointers, 'a' for arrays, 'f_' for functions) 483 /// combined with the mangling of their component types. A vararg function 484 /// type will have a suffix of 'vararg'. Since function types can contain 485 /// other function types, we close a function type mangling with suffix 'f' 486 /// which can't be confused with it's prefix. This ensures we don't have 487 /// collisions between two unrelated function types. Otherwise, you might 488 /// parse ffXX as f(fXX) or f(fX)X. (X is a placeholder for any other type.) 489 /// Manglings of integers, floats, and vectors ('i', 'f', and 'v' prefix in most 490 /// cases) fall back to the MVT codepath, where they could be mangled to 491 /// 'x86mmx', for example; matching on derived types is not sufficient to mangle 492 /// everything. 493 static std::string getMangledTypeStr(Type* Ty) { 494 std::string Result; 495 if (PointerType* PTyp = dyn_cast<PointerType>(Ty)) { 496 Result += "p" + llvm::utostr(PTyp->getAddressSpace()) + 497 getMangledTypeStr(PTyp->getElementType()); 498 } else if (ArrayType* ATyp = dyn_cast<ArrayType>(Ty)) { 499 Result += "a" + llvm::utostr(ATyp->getNumElements()) + 500 getMangledTypeStr(ATyp->getElementType()); 501 } else if (StructType *STyp = dyn_cast<StructType>(Ty)) { 502 if (!STyp->isLiteral()) { 503 Result += "s_"; 504 Result += STyp->getName(); 505 } else { 506 Result += "sl_"; 507 for (auto Elem : STyp->elements()) 508 Result += getMangledTypeStr(Elem); 509 } 510 // Ensure nested structs are distinguishable. 511 Result += "s"; 512 } else if (FunctionType *FT = dyn_cast<FunctionType>(Ty)) { 513 Result += "f_" + getMangledTypeStr(FT->getReturnType()); 514 for (size_t i = 0; i < FT->getNumParams(); i++) 515 Result += getMangledTypeStr(FT->getParamType(i)); 516 if (FT->isVarArg()) 517 Result += "vararg"; 518 // Ensure nested function types are distinguishable. 519 Result += "f"; 520 } else if (isa<VectorType>(Ty)) 521 Result += "v" + utostr(Ty->getVectorNumElements()) + 522 getMangledTypeStr(Ty->getVectorElementType()); 523 else if (Ty) 524 Result += EVT::getEVT(Ty).getEVTString(); 525 return Result; 526 } 527 528 StringRef Intrinsic::getName(ID id) { 529 assert(id < num_intrinsics && "Invalid intrinsic ID!"); 530 assert(!isOverloaded(id) && 531 "This version of getName does not support overloading"); 532 return IntrinsicNameTable[id]; 533 } 534 535 std::string Intrinsic::getName(ID id, ArrayRef<Type*> Tys) { 536 assert(id < num_intrinsics && "Invalid intrinsic ID!"); 537 std::string Result(IntrinsicNameTable[id]); 538 for (Type *Ty : Tys) { 539 Result += "." + getMangledTypeStr(Ty); 540 } 541 return Result; 542 } 543 544 545 /// IIT_Info - These are enumerators that describe the entries returned by the 546 /// getIntrinsicInfoTableEntries function. 547 /// 548 /// NOTE: This must be kept in synch with the copy in TblGen/IntrinsicEmitter! 549 enum IIT_Info { 550 // Common values should be encoded with 0-15. 551 IIT_Done = 0, 552 IIT_I1 = 1, 553 IIT_I8 = 2, 554 IIT_I16 = 3, 555 IIT_I32 = 4, 556 IIT_I64 = 5, 557 IIT_F16 = 6, 558 IIT_F32 = 7, 559 IIT_F64 = 8, 560 IIT_V2 = 9, 561 IIT_V4 = 10, 562 IIT_V8 = 11, 563 IIT_V16 = 12, 564 IIT_V32 = 13, 565 IIT_PTR = 14, 566 IIT_ARG = 15, 567 568 // Values from 16+ are only encodable with the inefficient encoding. 569 IIT_V64 = 16, 570 IIT_MMX = 17, 571 IIT_TOKEN = 18, 572 IIT_METADATA = 19, 573 IIT_EMPTYSTRUCT = 20, 574 IIT_STRUCT2 = 21, 575 IIT_STRUCT3 = 22, 576 IIT_STRUCT4 = 23, 577 IIT_STRUCT5 = 24, 578 IIT_EXTEND_ARG = 25, 579 IIT_TRUNC_ARG = 26, 580 IIT_ANYPTR = 27, 581 IIT_V1 = 28, 582 IIT_VARARG = 29, 583 IIT_HALF_VEC_ARG = 30, 584 IIT_SAME_VEC_WIDTH_ARG = 31, 585 IIT_PTR_TO_ARG = 32, 586 IIT_PTR_TO_ELT = 33, 587 IIT_VEC_OF_PTRS_TO_ELT = 34, 588 IIT_I128 = 35, 589 IIT_V512 = 36, 590 IIT_V1024 = 37 591 }; 592 593 594 static void DecodeIITType(unsigned &NextElt, ArrayRef<unsigned char> Infos, 595 SmallVectorImpl<Intrinsic::IITDescriptor> &OutputTable) { 596 IIT_Info Info = IIT_Info(Infos[NextElt++]); 597 unsigned StructElts = 2; 598 using namespace Intrinsic; 599 600 switch (Info) { 601 case IIT_Done: 602 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Void, 0)); 603 return; 604 case IIT_VARARG: 605 OutputTable.push_back(IITDescriptor::get(IITDescriptor::VarArg, 0)); 606 return; 607 case IIT_MMX: 608 OutputTable.push_back(IITDescriptor::get(IITDescriptor::MMX, 0)); 609 return; 610 case IIT_TOKEN: 611 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Token, 0)); 612 return; 613 case IIT_METADATA: 614 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Metadata, 0)); 615 return; 616 case IIT_F16: 617 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Half, 0)); 618 return; 619 case IIT_F32: 620 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Float, 0)); 621 return; 622 case IIT_F64: 623 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Double, 0)); 624 return; 625 case IIT_I1: 626 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Integer, 1)); 627 return; 628 case IIT_I8: 629 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Integer, 8)); 630 return; 631 case IIT_I16: 632 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Integer,16)); 633 return; 634 case IIT_I32: 635 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Integer, 32)); 636 return; 637 case IIT_I64: 638 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Integer, 64)); 639 return; 640 case IIT_I128: 641 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Integer, 128)); 642 return; 643 case IIT_V1: 644 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Vector, 1)); 645 DecodeIITType(NextElt, Infos, OutputTable); 646 return; 647 case IIT_V2: 648 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Vector, 2)); 649 DecodeIITType(NextElt, Infos, OutputTable); 650 return; 651 case IIT_V4: 652 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Vector, 4)); 653 DecodeIITType(NextElt, Infos, OutputTable); 654 return; 655 case IIT_V8: 656 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Vector, 8)); 657 DecodeIITType(NextElt, Infos, OutputTable); 658 return; 659 case IIT_V16: 660 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Vector, 16)); 661 DecodeIITType(NextElt, Infos, OutputTable); 662 return; 663 case IIT_V32: 664 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Vector, 32)); 665 DecodeIITType(NextElt, Infos, OutputTable); 666 return; 667 case IIT_V64: 668 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Vector, 64)); 669 DecodeIITType(NextElt, Infos, OutputTable); 670 return; 671 case IIT_V512: 672 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Vector, 512)); 673 DecodeIITType(NextElt, Infos, OutputTable); 674 return; 675 case IIT_V1024: 676 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Vector, 1024)); 677 DecodeIITType(NextElt, Infos, OutputTable); 678 return; 679 case IIT_PTR: 680 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Pointer, 0)); 681 DecodeIITType(NextElt, Infos, OutputTable); 682 return; 683 case IIT_ANYPTR: { // [ANYPTR addrspace, subtype] 684 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Pointer, 685 Infos[NextElt++])); 686 DecodeIITType(NextElt, Infos, OutputTable); 687 return; 688 } 689 case IIT_ARG: { 690 unsigned ArgInfo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]); 691 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Argument, ArgInfo)); 692 return; 693 } 694 case IIT_EXTEND_ARG: { 695 unsigned ArgInfo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]); 696 OutputTable.push_back(IITDescriptor::get(IITDescriptor::ExtendArgument, 697 ArgInfo)); 698 return; 699 } 700 case IIT_TRUNC_ARG: { 701 unsigned ArgInfo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]); 702 OutputTable.push_back(IITDescriptor::get(IITDescriptor::TruncArgument, 703 ArgInfo)); 704 return; 705 } 706 case IIT_HALF_VEC_ARG: { 707 unsigned ArgInfo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]); 708 OutputTable.push_back(IITDescriptor::get(IITDescriptor::HalfVecArgument, 709 ArgInfo)); 710 return; 711 } 712 case IIT_SAME_VEC_WIDTH_ARG: { 713 unsigned ArgInfo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]); 714 OutputTable.push_back(IITDescriptor::get(IITDescriptor::SameVecWidthArgument, 715 ArgInfo)); 716 return; 717 } 718 case IIT_PTR_TO_ARG: { 719 unsigned ArgInfo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]); 720 OutputTable.push_back(IITDescriptor::get(IITDescriptor::PtrToArgument, 721 ArgInfo)); 722 return; 723 } 724 case IIT_PTR_TO_ELT: { 725 unsigned ArgInfo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]); 726 OutputTable.push_back(IITDescriptor::get(IITDescriptor::PtrToElt, ArgInfo)); 727 return; 728 } 729 case IIT_VEC_OF_PTRS_TO_ELT: { 730 unsigned ArgInfo = (NextElt == Infos.size() ? 0 : Infos[NextElt++]); 731 OutputTable.push_back(IITDescriptor::get(IITDescriptor::VecOfPtrsToElt, 732 ArgInfo)); 733 return; 734 } 735 case IIT_EMPTYSTRUCT: 736 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Struct, 0)); 737 return; 738 case IIT_STRUCT5: ++StructElts; LLVM_FALLTHROUGH; 739 case IIT_STRUCT4: ++StructElts; LLVM_FALLTHROUGH; 740 case IIT_STRUCT3: ++StructElts; LLVM_FALLTHROUGH; 741 case IIT_STRUCT2: { 742 OutputTable.push_back(IITDescriptor::get(IITDescriptor::Struct,StructElts)); 743 744 for (unsigned i = 0; i != StructElts; ++i) 745 DecodeIITType(NextElt, Infos, OutputTable); 746 return; 747 } 748 } 749 llvm_unreachable("unhandled"); 750 } 751 752 753 #define GET_INTRINSIC_GENERATOR_GLOBAL 754 #include "llvm/IR/Intrinsics.gen" 755 #undef GET_INTRINSIC_GENERATOR_GLOBAL 756 757 void Intrinsic::getIntrinsicInfoTableEntries(ID id, 758 SmallVectorImpl<IITDescriptor> &T){ 759 // Check to see if the intrinsic's type was expressible by the table. 760 unsigned TableVal = IIT_Table[id-1]; 761 762 // Decode the TableVal into an array of IITValues. 763 SmallVector<unsigned char, 8> IITValues; 764 ArrayRef<unsigned char> IITEntries; 765 unsigned NextElt = 0; 766 if ((TableVal >> 31) != 0) { 767 // This is an offset into the IIT_LongEncodingTable. 768 IITEntries = IIT_LongEncodingTable; 769 770 // Strip sentinel bit. 771 NextElt = (TableVal << 1) >> 1; 772 } else { 773 // Decode the TableVal into an array of IITValues. If the entry was encoded 774 // into a single word in the table itself, decode it now. 775 do { 776 IITValues.push_back(TableVal & 0xF); 777 TableVal >>= 4; 778 } while (TableVal); 779 780 IITEntries = IITValues; 781 NextElt = 0; 782 } 783 784 // Okay, decode the table into the output vector of IITDescriptors. 785 DecodeIITType(NextElt, IITEntries, T); 786 while (NextElt != IITEntries.size() && IITEntries[NextElt] != 0) 787 DecodeIITType(NextElt, IITEntries, T); 788 } 789 790 791 static Type *DecodeFixedType(ArrayRef<Intrinsic::IITDescriptor> &Infos, 792 ArrayRef<Type*> Tys, LLVMContext &Context) { 793 using namespace Intrinsic; 794 IITDescriptor D = Infos.front(); 795 Infos = Infos.slice(1); 796 797 switch (D.Kind) { 798 case IITDescriptor::Void: return Type::getVoidTy(Context); 799 case IITDescriptor::VarArg: return Type::getVoidTy(Context); 800 case IITDescriptor::MMX: return Type::getX86_MMXTy(Context); 801 case IITDescriptor::Token: return Type::getTokenTy(Context); 802 case IITDescriptor::Metadata: return Type::getMetadataTy(Context); 803 case IITDescriptor::Half: return Type::getHalfTy(Context); 804 case IITDescriptor::Float: return Type::getFloatTy(Context); 805 case IITDescriptor::Double: return Type::getDoubleTy(Context); 806 807 case IITDescriptor::Integer: 808 return IntegerType::get(Context, D.Integer_Width); 809 case IITDescriptor::Vector: 810 return VectorType::get(DecodeFixedType(Infos, Tys, Context),D.Vector_Width); 811 case IITDescriptor::Pointer: 812 return PointerType::get(DecodeFixedType(Infos, Tys, Context), 813 D.Pointer_AddressSpace); 814 case IITDescriptor::Struct: { 815 Type *Elts[5]; 816 assert(D.Struct_NumElements <= 5 && "Can't handle this yet"); 817 for (unsigned i = 0, e = D.Struct_NumElements; i != e; ++i) 818 Elts[i] = DecodeFixedType(Infos, Tys, Context); 819 return StructType::get(Context, makeArrayRef(Elts,D.Struct_NumElements)); 820 } 821 822 case IITDescriptor::Argument: 823 return Tys[D.getArgumentNumber()]; 824 case IITDescriptor::ExtendArgument: { 825 Type *Ty = Tys[D.getArgumentNumber()]; 826 if (VectorType *VTy = dyn_cast<VectorType>(Ty)) 827 return VectorType::getExtendedElementVectorType(VTy); 828 829 return IntegerType::get(Context, 2 * cast<IntegerType>(Ty)->getBitWidth()); 830 } 831 case IITDescriptor::TruncArgument: { 832 Type *Ty = Tys[D.getArgumentNumber()]; 833 if (VectorType *VTy = dyn_cast<VectorType>(Ty)) 834 return VectorType::getTruncatedElementVectorType(VTy); 835 836 IntegerType *ITy = cast<IntegerType>(Ty); 837 assert(ITy->getBitWidth() % 2 == 0); 838 return IntegerType::get(Context, ITy->getBitWidth() / 2); 839 } 840 case IITDescriptor::HalfVecArgument: 841 return VectorType::getHalfElementsVectorType(cast<VectorType>( 842 Tys[D.getArgumentNumber()])); 843 case IITDescriptor::SameVecWidthArgument: { 844 Type *EltTy = DecodeFixedType(Infos, Tys, Context); 845 Type *Ty = Tys[D.getArgumentNumber()]; 846 if (VectorType *VTy = dyn_cast<VectorType>(Ty)) { 847 return VectorType::get(EltTy, VTy->getNumElements()); 848 } 849 llvm_unreachable("unhandled"); 850 } 851 case IITDescriptor::PtrToArgument: { 852 Type *Ty = Tys[D.getArgumentNumber()]; 853 return PointerType::getUnqual(Ty); 854 } 855 case IITDescriptor::PtrToElt: { 856 Type *Ty = Tys[D.getArgumentNumber()]; 857 VectorType *VTy = dyn_cast<VectorType>(Ty); 858 if (!VTy) 859 llvm_unreachable("Expected an argument of Vector Type"); 860 Type *EltTy = VTy->getVectorElementType(); 861 return PointerType::getUnqual(EltTy); 862 } 863 case IITDescriptor::VecOfPtrsToElt: { 864 Type *Ty = Tys[D.getArgumentNumber()]; 865 VectorType *VTy = dyn_cast<VectorType>(Ty); 866 if (!VTy) 867 llvm_unreachable("Expected an argument of Vector Type"); 868 Type *EltTy = VTy->getVectorElementType(); 869 return VectorType::get(PointerType::getUnqual(EltTy), 870 VTy->getNumElements()); 871 } 872 } 873 llvm_unreachable("unhandled"); 874 } 875 876 877 878 FunctionType *Intrinsic::getType(LLVMContext &Context, 879 ID id, ArrayRef<Type*> Tys) { 880 SmallVector<IITDescriptor, 8> Table; 881 getIntrinsicInfoTableEntries(id, Table); 882 883 ArrayRef<IITDescriptor> TableRef = Table; 884 Type *ResultTy = DecodeFixedType(TableRef, Tys, Context); 885 886 SmallVector<Type*, 8> ArgTys; 887 while (!TableRef.empty()) 888 ArgTys.push_back(DecodeFixedType(TableRef, Tys, Context)); 889 890 // DecodeFixedType returns Void for IITDescriptor::Void and IITDescriptor::VarArg 891 // If we see void type as the type of the last argument, it is vararg intrinsic 892 if (!ArgTys.empty() && ArgTys.back()->isVoidTy()) { 893 ArgTys.pop_back(); 894 return FunctionType::get(ResultTy, ArgTys, true); 895 } 896 return FunctionType::get(ResultTy, ArgTys, false); 897 } 898 899 bool Intrinsic::isOverloaded(ID id) { 900 #define GET_INTRINSIC_OVERLOAD_TABLE 901 #include "llvm/IR/Intrinsics.gen" 902 #undef GET_INTRINSIC_OVERLOAD_TABLE 903 } 904 905 bool Intrinsic::isLeaf(ID id) { 906 switch (id) { 907 default: 908 return true; 909 910 case Intrinsic::experimental_gc_statepoint: 911 case Intrinsic::experimental_patchpoint_void: 912 case Intrinsic::experimental_patchpoint_i64: 913 return false; 914 } 915 } 916 917 /// This defines the "Intrinsic::getAttributes(ID id)" method. 918 #define GET_INTRINSIC_ATTRIBUTES 919 #include "llvm/IR/Intrinsics.gen" 920 #undef GET_INTRINSIC_ATTRIBUTES 921 922 Function *Intrinsic::getDeclaration(Module *M, ID id, ArrayRef<Type*> Tys) { 923 // There can never be multiple globals with the same name of different types, 924 // because intrinsics must be a specific type. 925 return 926 cast<Function>(M->getOrInsertFunction(getName(id, Tys), 927 getType(M->getContext(), id, Tys))); 928 } 929 930 // This defines the "Intrinsic::getIntrinsicForGCCBuiltin()" method. 931 #define GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN 932 #include "llvm/IR/Intrinsics.gen" 933 #undef GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN 934 935 // This defines the "Intrinsic::getIntrinsicForMSBuiltin()" method. 936 #define GET_LLVM_INTRINSIC_FOR_MS_BUILTIN 937 #include "llvm/IR/Intrinsics.gen" 938 #undef GET_LLVM_INTRINSIC_FOR_MS_BUILTIN 939 940 bool Intrinsic::matchIntrinsicType(Type *Ty, ArrayRef<Intrinsic::IITDescriptor> &Infos, 941 SmallVectorImpl<Type*> &ArgTys) { 942 using namespace Intrinsic; 943 944 // If we ran out of descriptors, there are too many arguments. 945 if (Infos.empty()) return true; 946 IITDescriptor D = Infos.front(); 947 Infos = Infos.slice(1); 948 949 switch (D.Kind) { 950 case IITDescriptor::Void: return !Ty->isVoidTy(); 951 case IITDescriptor::VarArg: return true; 952 case IITDescriptor::MMX: return !Ty->isX86_MMXTy(); 953 case IITDescriptor::Token: return !Ty->isTokenTy(); 954 case IITDescriptor::Metadata: return !Ty->isMetadataTy(); 955 case IITDescriptor::Half: return !Ty->isHalfTy(); 956 case IITDescriptor::Float: return !Ty->isFloatTy(); 957 case IITDescriptor::Double: return !Ty->isDoubleTy(); 958 case IITDescriptor::Integer: return !Ty->isIntegerTy(D.Integer_Width); 959 case IITDescriptor::Vector: { 960 VectorType *VT = dyn_cast<VectorType>(Ty); 961 return !VT || VT->getNumElements() != D.Vector_Width || 962 matchIntrinsicType(VT->getElementType(), Infos, ArgTys); 963 } 964 case IITDescriptor::Pointer: { 965 PointerType *PT = dyn_cast<PointerType>(Ty); 966 return !PT || PT->getAddressSpace() != D.Pointer_AddressSpace || 967 matchIntrinsicType(PT->getElementType(), Infos, ArgTys); 968 } 969 970 case IITDescriptor::Struct: { 971 StructType *ST = dyn_cast<StructType>(Ty); 972 if (!ST || ST->getNumElements() != D.Struct_NumElements) 973 return true; 974 975 for (unsigned i = 0, e = D.Struct_NumElements; i != e; ++i) 976 if (matchIntrinsicType(ST->getElementType(i), Infos, ArgTys)) 977 return true; 978 return false; 979 } 980 981 case IITDescriptor::Argument: 982 // Two cases here - If this is the second occurrence of an argument, verify 983 // that the later instance matches the previous instance. 984 if (D.getArgumentNumber() < ArgTys.size()) 985 return Ty != ArgTys[D.getArgumentNumber()]; 986 987 // Otherwise, if this is the first instance of an argument, record it and 988 // verify the "Any" kind. 989 assert(D.getArgumentNumber() == ArgTys.size() && "Table consistency error"); 990 ArgTys.push_back(Ty); 991 992 switch (D.getArgumentKind()) { 993 case IITDescriptor::AK_Any: return false; // Success 994 case IITDescriptor::AK_AnyInteger: return !Ty->isIntOrIntVectorTy(); 995 case IITDescriptor::AK_AnyFloat: return !Ty->isFPOrFPVectorTy(); 996 case IITDescriptor::AK_AnyVector: return !isa<VectorType>(Ty); 997 case IITDescriptor::AK_AnyPointer: return !isa<PointerType>(Ty); 998 } 999 llvm_unreachable("all argument kinds not covered"); 1000 1001 case IITDescriptor::ExtendArgument: { 1002 // This may only be used when referring to a previous vector argument. 1003 if (D.getArgumentNumber() >= ArgTys.size()) 1004 return true; 1005 1006 Type *NewTy = ArgTys[D.getArgumentNumber()]; 1007 if (VectorType *VTy = dyn_cast<VectorType>(NewTy)) 1008 NewTy = VectorType::getExtendedElementVectorType(VTy); 1009 else if (IntegerType *ITy = dyn_cast<IntegerType>(NewTy)) 1010 NewTy = IntegerType::get(ITy->getContext(), 2 * ITy->getBitWidth()); 1011 else 1012 return true; 1013 1014 return Ty != NewTy; 1015 } 1016 case IITDescriptor::TruncArgument: { 1017 // This may only be used when referring to a previous vector argument. 1018 if (D.getArgumentNumber() >= ArgTys.size()) 1019 return true; 1020 1021 Type *NewTy = ArgTys[D.getArgumentNumber()]; 1022 if (VectorType *VTy = dyn_cast<VectorType>(NewTy)) 1023 NewTy = VectorType::getTruncatedElementVectorType(VTy); 1024 else if (IntegerType *ITy = dyn_cast<IntegerType>(NewTy)) 1025 NewTy = IntegerType::get(ITy->getContext(), ITy->getBitWidth() / 2); 1026 else 1027 return true; 1028 1029 return Ty != NewTy; 1030 } 1031 case IITDescriptor::HalfVecArgument: 1032 // This may only be used when referring to a previous vector argument. 1033 return D.getArgumentNumber() >= ArgTys.size() || 1034 !isa<VectorType>(ArgTys[D.getArgumentNumber()]) || 1035 VectorType::getHalfElementsVectorType( 1036 cast<VectorType>(ArgTys[D.getArgumentNumber()])) != Ty; 1037 case IITDescriptor::SameVecWidthArgument: { 1038 if (D.getArgumentNumber() >= ArgTys.size()) 1039 return true; 1040 VectorType * ReferenceType = 1041 dyn_cast<VectorType>(ArgTys[D.getArgumentNumber()]); 1042 VectorType *ThisArgType = dyn_cast<VectorType>(Ty); 1043 if (!ThisArgType || !ReferenceType || 1044 (ReferenceType->getVectorNumElements() != 1045 ThisArgType->getVectorNumElements())) 1046 return true; 1047 return matchIntrinsicType(ThisArgType->getVectorElementType(), 1048 Infos, ArgTys); 1049 } 1050 case IITDescriptor::PtrToArgument: { 1051 if (D.getArgumentNumber() >= ArgTys.size()) 1052 return true; 1053 Type * ReferenceType = ArgTys[D.getArgumentNumber()]; 1054 PointerType *ThisArgType = dyn_cast<PointerType>(Ty); 1055 return (!ThisArgType || ThisArgType->getElementType() != ReferenceType); 1056 } 1057 case IITDescriptor::PtrToElt: { 1058 if (D.getArgumentNumber() >= ArgTys.size()) 1059 return true; 1060 VectorType * ReferenceType = 1061 dyn_cast<VectorType> (ArgTys[D.getArgumentNumber()]); 1062 PointerType *ThisArgType = dyn_cast<PointerType>(Ty); 1063 1064 return (!ThisArgType || !ReferenceType || 1065 ThisArgType->getElementType() != ReferenceType->getElementType()); 1066 } 1067 case IITDescriptor::VecOfPtrsToElt: { 1068 if (D.getArgumentNumber() >= ArgTys.size()) 1069 return true; 1070 VectorType * ReferenceType = 1071 dyn_cast<VectorType> (ArgTys[D.getArgumentNumber()]); 1072 VectorType *ThisArgVecTy = dyn_cast<VectorType>(Ty); 1073 if (!ThisArgVecTy || !ReferenceType || 1074 (ReferenceType->getVectorNumElements() != 1075 ThisArgVecTy->getVectorNumElements())) 1076 return true; 1077 PointerType *ThisArgEltTy = 1078 dyn_cast<PointerType>(ThisArgVecTy->getVectorElementType()); 1079 if (!ThisArgEltTy) 1080 return true; 1081 return ThisArgEltTy->getElementType() != 1082 ReferenceType->getVectorElementType(); 1083 } 1084 } 1085 llvm_unreachable("unhandled"); 1086 } 1087 1088 bool 1089 Intrinsic::matchIntrinsicVarArg(bool isVarArg, 1090 ArrayRef<Intrinsic::IITDescriptor> &Infos) { 1091 // If there are no descriptors left, then it can't be a vararg. 1092 if (Infos.empty()) 1093 return isVarArg; 1094 1095 // There should be only one descriptor remaining at this point. 1096 if (Infos.size() != 1) 1097 return true; 1098 1099 // Check and verify the descriptor. 1100 IITDescriptor D = Infos.front(); 1101 Infos = Infos.slice(1); 1102 if (D.Kind == IITDescriptor::VarArg) 1103 return !isVarArg; 1104 1105 return true; 1106 } 1107 1108 Optional<Function*> Intrinsic::remangleIntrinsicFunction(Function *F) { 1109 Intrinsic::ID ID = F->getIntrinsicID(); 1110 if (!ID) 1111 return None; 1112 1113 FunctionType *FTy = F->getFunctionType(); 1114 // Accumulate an array of overloaded types for the given intrinsic 1115 SmallVector<Type *, 4> ArgTys; 1116 { 1117 SmallVector<Intrinsic::IITDescriptor, 8> Table; 1118 getIntrinsicInfoTableEntries(ID, Table); 1119 ArrayRef<Intrinsic::IITDescriptor> TableRef = Table; 1120 1121 // If we encounter any problems matching the signature with the descriptor 1122 // just give up remangling. It's up to verifier to report the discrepancy. 1123 if (Intrinsic::matchIntrinsicType(FTy->getReturnType(), TableRef, ArgTys)) 1124 return None; 1125 for (auto Ty : FTy->params()) 1126 if (Intrinsic::matchIntrinsicType(Ty, TableRef, ArgTys)) 1127 return None; 1128 if (Intrinsic::matchIntrinsicVarArg(FTy->isVarArg(), TableRef)) 1129 return None; 1130 } 1131 1132 StringRef Name = F->getName(); 1133 if (Name == Intrinsic::getName(ID, ArgTys)) 1134 return None; 1135 1136 auto NewDecl = Intrinsic::getDeclaration(F->getParent(), ID, ArgTys); 1137 NewDecl->setCallingConv(F->getCallingConv()); 1138 assert(NewDecl->getFunctionType() == FTy && "Shouldn't change the signature"); 1139 return NewDecl; 1140 } 1141 1142 /// hasAddressTaken - returns true if there are any uses of this function 1143 /// other than direct calls or invokes to it. 1144 bool Function::hasAddressTaken(const User* *PutOffender) const { 1145 for (const Use &U : uses()) { 1146 const User *FU = U.getUser(); 1147 if (isa<BlockAddress>(FU)) 1148 continue; 1149 if (!isa<CallInst>(FU) && !isa<InvokeInst>(FU)) { 1150 if (PutOffender) 1151 *PutOffender = FU; 1152 return true; 1153 } 1154 ImmutableCallSite CS(cast<Instruction>(FU)); 1155 if (!CS.isCallee(&U)) { 1156 if (PutOffender) 1157 *PutOffender = FU; 1158 return true; 1159 } 1160 } 1161 return false; 1162 } 1163 1164 bool Function::isDefTriviallyDead() const { 1165 // Check the linkage 1166 if (!hasLinkOnceLinkage() && !hasLocalLinkage() && 1167 !hasAvailableExternallyLinkage()) 1168 return false; 1169 1170 // Check if the function is used by anything other than a blockaddress. 1171 for (const User *U : users()) 1172 if (!isa<BlockAddress>(U)) 1173 return false; 1174 1175 return true; 1176 } 1177 1178 /// callsFunctionThatReturnsTwice - Return true if the function has a call to 1179 /// setjmp or other function that gcc recognizes as "returning twice". 1180 bool Function::callsFunctionThatReturnsTwice() const { 1181 for (const_inst_iterator 1182 I = inst_begin(this), E = inst_end(this); I != E; ++I) { 1183 ImmutableCallSite CS(&*I); 1184 if (CS && CS.hasFnAttr(Attribute::ReturnsTwice)) 1185 return true; 1186 } 1187 1188 return false; 1189 } 1190 1191 Constant *Function::getPersonalityFn() const { 1192 assert(hasPersonalityFn() && getNumOperands()); 1193 return cast<Constant>(Op<0>()); 1194 } 1195 1196 void Function::setPersonalityFn(Constant *Fn) { 1197 setHungoffOperand<0>(Fn); 1198 setValueSubclassDataBit(3, Fn != nullptr); 1199 } 1200 1201 Constant *Function::getPrefixData() const { 1202 assert(hasPrefixData() && getNumOperands()); 1203 return cast<Constant>(Op<1>()); 1204 } 1205 1206 void Function::setPrefixData(Constant *PrefixData) { 1207 setHungoffOperand<1>(PrefixData); 1208 setValueSubclassDataBit(1, PrefixData != nullptr); 1209 } 1210 1211 Constant *Function::getPrologueData() const { 1212 assert(hasPrologueData() && getNumOperands()); 1213 return cast<Constant>(Op<2>()); 1214 } 1215 1216 void Function::setPrologueData(Constant *PrologueData) { 1217 setHungoffOperand<2>(PrologueData); 1218 setValueSubclassDataBit(2, PrologueData != nullptr); 1219 } 1220 1221 void Function::allocHungoffUselist() { 1222 // If we've already allocated a uselist, stop here. 1223 if (getNumOperands()) 1224 return; 1225 1226 allocHungoffUses(3, /*IsPhi=*/ false); 1227 setNumHungOffUseOperands(3); 1228 1229 // Initialize the uselist with placeholder operands to allow traversal. 1230 auto *CPN = ConstantPointerNull::get(Type::getInt1PtrTy(getContext(), 0)); 1231 Op<0>().set(CPN); 1232 Op<1>().set(CPN); 1233 Op<2>().set(CPN); 1234 } 1235 1236 template <int Idx> 1237 void Function::setHungoffOperand(Constant *C) { 1238 if (C) { 1239 allocHungoffUselist(); 1240 Op<Idx>().set(C); 1241 } else if (getNumOperands()) { 1242 Op<Idx>().set( 1243 ConstantPointerNull::get(Type::getInt1PtrTy(getContext(), 0))); 1244 } 1245 } 1246 1247 void Function::setValueSubclassDataBit(unsigned Bit, bool On) { 1248 assert(Bit < 16 && "SubclassData contains only 16 bits"); 1249 if (On) 1250 setValueSubclassData(getSubclassDataFromValue() | (1 << Bit)); 1251 else 1252 setValueSubclassData(getSubclassDataFromValue() & ~(1 << Bit)); 1253 } 1254 1255 void Function::setEntryCount(uint64_t Count, 1256 const DenseSet<GlobalValue::GUID> *S) { 1257 MDBuilder MDB(getContext()); 1258 setMetadata(LLVMContext::MD_prof, MDB.createFunctionEntryCount(Count, S)); 1259 } 1260 1261 Optional<uint64_t> Function::getEntryCount() const { 1262 MDNode *MD = getMetadata(LLVMContext::MD_prof); 1263 if (MD && MD->getOperand(0)) 1264 if (MDString *MDS = dyn_cast<MDString>(MD->getOperand(0))) 1265 if (MDS->getString().equals("function_entry_count")) { 1266 ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(1)); 1267 uint64_t Count = CI->getValue().getZExtValue(); 1268 if (Count == 0) 1269 return None; 1270 return Count; 1271 } 1272 return None; 1273 } 1274 1275 DenseSet<GlobalValue::GUID> Function::getImportGUIDs() const { 1276 DenseSet<GlobalValue::GUID> R; 1277 if (MDNode *MD = getMetadata(LLVMContext::MD_prof)) 1278 if (MDString *MDS = dyn_cast<MDString>(MD->getOperand(0))) 1279 if (MDS->getString().equals("function_entry_count")) 1280 for (unsigned i = 2; i < MD->getNumOperands(); i++) 1281 R.insert(mdconst::extract<ConstantInt>(MD->getOperand(i)) 1282 ->getValue() 1283 .getZExtValue()); 1284 return R; 1285 } 1286 1287 void Function::setSectionPrefix(StringRef Prefix) { 1288 MDBuilder MDB(getContext()); 1289 setMetadata(LLVMContext::MD_section_prefix, 1290 MDB.createFunctionSectionPrefix(Prefix)); 1291 } 1292 1293 Optional<StringRef> Function::getSectionPrefix() const { 1294 if (MDNode *MD = getMetadata(LLVMContext::MD_section_prefix)) { 1295 assert(dyn_cast<MDString>(MD->getOperand(0)) 1296 ->getString() 1297 .equals("function_section_prefix") && 1298 "Metadata not match"); 1299 return dyn_cast<MDString>(MD->getOperand(1))->getString(); 1300 } 1301 return None; 1302 } 1303