94#include "llvm/IR/IntrinsicsAArch64.h" 
   95#include "llvm/IR/IntrinsicsAMDGPU.h" 
   96#include "llvm/IR/IntrinsicsARM.h" 
   97#include "llvm/IR/IntrinsicsNVPTX.h" 
   98#include "llvm/IR/IntrinsicsWebAssembly.h" 
  136    cl::desc(
"Ensure that llvm.experimental.noalias.scope.decl for identical " 
  137             "scopes are not dominating"));
 
  162    *
OS << 
"; ModuleID = '" << M->getModuleIdentifier() << 
"'\n";
 
  175      V.printAsOperand(*
OS, 
true, 
MST);
 
  180  void Write(
const DbgRecord *DR) {
 
  214  template <
class T> 
void Write(
const MDTupleTypedArrayWrapper<T> &MD) {
 
  218  void Write(
const NamedMDNode *NMD) {
 
  231  void Write(
const Comdat *
C) {
 
  237  void Write(
const APInt *AI) {
 
  243  void Write(
const unsigned i) { *
OS << i << 
'\n'; }
 
  249    *
OS << 
A->getAsString() << 
'\n';
 
  253  void Write(
const AttributeSet *AS) {
 
  260  void Write(
const AttributeList *AL) {
 
  266  void Write(Printable 
P) { *
OS << 
P << 
'\n'; }
 
  268  template <
typename T> 
void Write(ArrayRef<T> Vs) {
 
  269    for (
const T &V : Vs)
 
  273  template <
typename T1, 
typename... Ts>
 
  274  void WriteTs(
const T1 &V1, 
const Ts &... Vs) {
 
  279  template <
typename... Ts> 
void WriteTs() {}
 
  288      *
OS << Message << 
'\n';
 
 
  296  template <
typename T1, 
typename... Ts>
 
  306      *
OS << Message << 
'\n';
 
 
  312  template <
typename T1, 
typename... Ts>
 
 
  334  SmallPtrSet<Instruction *, 16> InstsInThisBlock;
 
  337  SmallPtrSet<const Metadata *, 32> MDNodes;
 
  340  DenseMap<const DISubprogram *, const Function *> DISubprogramAttachments;
 
  343  SmallPtrSet<const Metadata *, 2> CUVisited;
 
  346  Type *LandingPadResultTy;
 
  353  bool HasDebugInfo = 
false;
 
  357  DenseMap<Function *, std::pair<unsigned, unsigned>> FrameEscapeInfo;
 
  361  MapVector<Instruction *, Instruction *> SiblingFuncletInfo;
 
  365  DenseMap<BasicBlock *, ColorVector> BlockEHFuncletColors;
 
  368  SmallPtrSet<const Constant *, 32> ConstantExprVisited;
 
  374  SmallPtrSet<const void *, 32> AttributeListsVisited;
 
  380  SmallPtrSet<const Value *, 32> GlobalValueVisited;
 
  385  TBAAVerifier TBAAVerifyHelper;
 
  390  void checkAtomicMemAccessSize(
Type *Ty, 
const Instruction *
I);
 
  393  explicit Verifier(raw_ostream *OS, 
bool ShouldTreatBrokenDebugInfoAsError,
 
  395      : VerifierSupport(OS, 
M), LandingPadResultTy(nullptr),
 
  396        SawFrameEscape(
false), TBAAVerifyHelper(this) {
 
  397    TreatBrokenDebugInfoAsError = ShouldTreatBrokenDebugInfoAsError;
 
  400  bool hasBrokenDebugInfo()
 const { 
return BrokenDebugInfo; }
 
  402  bool verify(
const Function &
F) {
 
  403    llvm::TimeTraceScope timeScope(
"Verifier");
 
  405           "An instance of this class only works with a specific module!");
 
  414      DT.recalculate(
const_cast<Function &
>(
F));
 
  416    for (
const BasicBlock &BB : 
F) {
 
  417      if (!BB.empty() && BB.back().isTerminator())
 
  421        *OS << 
"Basic Block in function '" << 
F.getName()
 
  422            << 
"' does not have terminator!\n";
 
  423        BB.printAsOperand(*OS, 
true, MST);
 
  429    auto FailureCB = [
this](
const Twine &Message) {
 
  430      this->CheckFailed(Message);
 
  432    ConvergenceVerifyHelper.initialize(OS, FailureCB, 
F);
 
  437    verifySiblingFuncletUnwinds();
 
  439    if (ConvergenceVerifyHelper.sawTokens())
 
  440      ConvergenceVerifyHelper.verify(DT);
 
  442    InstsInThisBlock.clear();
 
  444    LandingPadResultTy = 
nullptr;
 
  445    SawFrameEscape = 
false;
 
  446    SiblingFuncletInfo.clear();
 
  447    verifyNoAliasScopeDecl();
 
  448    NoAliasScopeDecls.clear();
 
  458    for (
const Function &
F : M)
 
  459      if (
F.getIntrinsicID() == Intrinsic::experimental_deoptimize)
 
  460        DeoptimizeDeclarations.push_back(&
F);
 
  464    verifyFrameRecoverIndices();
 
  465    for (
const GlobalVariable &GV : 
M.globals())
 
  466      visitGlobalVariable(GV);
 
  468    for (
const GlobalAlias &GA : 
M.aliases())
 
  469      visitGlobalAlias(GA);
 
  471    for (
const GlobalIFunc &GI : 
M.ifuncs())
 
  472      visitGlobalIFunc(GI);
 
  474    for (
const NamedMDNode &NMD : 
M.named_metadata())
 
  475      visitNamedMDNode(NMD);
 
  477    for (
const StringMapEntry<Comdat> &SMEC : 
M.getComdatSymbolTable())
 
  478      visitComdat(SMEC.getValue());
 
  482    visitModuleCommandLines();
 
  483    visitModuleErrnoTBAA();
 
  485    verifyCompileUnits();
 
  487    verifyDeoptimizeCallingConvs();
 
  488    DISubprogramAttachments.clear();
 
  494  enum class AreDebugLocsAllowed { 
No, 
Yes };
 
  498  enum class RangeLikeMetadataKind {
 
  505  void visitGlobalValue(
const GlobalValue &GV);
 
  506  void visitGlobalVariable(
const GlobalVariable &GV);
 
  507  void visitGlobalAlias(
const GlobalAlias &GA);
 
  508  void visitGlobalIFunc(
const GlobalIFunc &GI);
 
  509  void visitAliaseeSubExpr(
const GlobalAlias &
A, 
const Constant &
C);
 
  510  void visitAliaseeSubExpr(SmallPtrSetImpl<const GlobalAlias *> &Visited,
 
  511                           const GlobalAlias &
A, 
const Constant &
C);
 
  512  void visitNamedMDNode(
const NamedMDNode &NMD);
 
  513  void visitMDNode(
const MDNode &MD, AreDebugLocsAllowed AllowLocs);
 
  514  void visitMetadataAsValue(
const MetadataAsValue &MD, Function *
F);
 
  515  void visitValueAsMetadata(
const ValueAsMetadata &MD, Function *
F);
 
  516  void visitDIArgList(
const DIArgList &AL, Function *
F);
 
  517  void visitComdat(
const Comdat &
C);
 
  518  void visitModuleIdents();
 
  519  void visitModuleCommandLines();
 
  520  void visitModuleErrnoTBAA();
 
  521  void visitModuleFlags();
 
  522  void visitModuleFlag(
const MDNode *
Op,
 
  523                       DenseMap<const MDString *, const MDNode *> &SeenIDs,
 
  524                       SmallVectorImpl<const MDNode *> &Requirements);
 
  525  void visitModuleFlagCGProfileEntry(
const MDOperand &MDO);
 
  526  void visitFunction(
const Function &
F);
 
  527  void visitBasicBlock(BasicBlock &BB);
 
  528  void verifyRangeLikeMetadata(
const Value &V, 
const MDNode *
Range, 
Type *Ty,
 
  529                               RangeLikeMetadataKind Kind);
 
  530  void visitRangeMetadata(Instruction &
I, MDNode *
Range, 
Type *Ty);
 
  531  void visitNoaliasAddrspaceMetadata(Instruction &
I, MDNode *
Range, 
Type *Ty);
 
  532  void visitDereferenceableMetadata(Instruction &
I, MDNode *MD);
 
  533  void visitNofreeMetadata(Instruction &
I, MDNode *MD);
 
  534  void visitProfMetadata(Instruction &
I, MDNode *MD);
 
  535  void visitCallStackMetadata(MDNode *MD);
 
  536  void visitMemProfMetadata(Instruction &
I, MDNode *MD);
 
  537  void visitCallsiteMetadata(Instruction &
I, MDNode *MD);
 
  538  void visitCalleeTypeMetadata(Instruction &
I, MDNode *MD);
 
  539  void visitDIAssignIDMetadata(Instruction &
I, MDNode *MD);
 
  540  void visitMMRAMetadata(Instruction &
I, MDNode *MD);
 
  541  void visitAnnotationMetadata(MDNode *Annotation);
 
  542  void visitAliasScopeMetadata(
const MDNode *MD);
 
  543  void visitAliasScopeListMetadata(
const MDNode *MD);
 
  544  void visitAccessGroupMetadata(
const MDNode *MD);
 
  545  void visitCapturesMetadata(Instruction &
I, 
const MDNode *Captures);
 
  546  void visitAllocTokenMetadata(Instruction &
I, MDNode *MD);
 
  548  template <
class Ty> 
bool isValidMetadataArray(
const MDTuple &
N);
 
  549#define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) void visit##CLASS(const CLASS &N); 
  550#include "llvm/IR/Metadata.def" 
  551  void visitDIScope(
const DIScope &
N);
 
  575  void checkPtrToAddr(
Type *SrcTy, 
Type *DestTy, 
const Value &V);
 
  580  void visitPHINode(
PHINode &PN);
 
  589  void visitVAArgInst(
VAArgInst &VAA) { visitInstruction(VAA); }
 
  590  void visitCallInst(CallInst &CI);
 
  591  void visitInvokeInst(InvokeInst &
II);
 
  592  void visitGetElementPtrInst(GetElementPtrInst &
GEP);
 
  593  void visitLoadInst(LoadInst &LI);
 
  594  void visitStoreInst(StoreInst &SI);
 
  595  void verifyDominatesUse(Instruction &
I, 
unsigned i);
 
  596  void visitInstruction(Instruction &
I);
 
  597  void visitTerminator(Instruction &
I);
 
  598  void visitBranchInst(BranchInst &BI);
 
  599  void visitReturnInst(ReturnInst &RI);
 
  600  void visitSwitchInst(SwitchInst &SI);
 
  601  void visitIndirectBrInst(IndirectBrInst &BI);
 
  602  void visitCallBrInst(CallBrInst &CBI);
 
  603  void visitSelectInst(SelectInst &SI);
 
  604  void visitUserOp1(Instruction &
I);
 
  605  void visitUserOp2(Instruction &
I) { visitUserOp1(
I); }
 
  607  void visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI);
 
  608  void visitVPIntrinsic(VPIntrinsic &VPI);
 
  609  void visitDbgLabelIntrinsic(StringRef Kind, DbgLabelInst &DLI);
 
  610  void visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI);
 
  611  void visitAtomicRMWInst(AtomicRMWInst &RMWI);
 
  612  void visitFenceInst(FenceInst &FI);
 
  613  void visitAllocaInst(AllocaInst &AI);
 
  614  void visitExtractValueInst(ExtractValueInst &EVI);
 
  615  void visitInsertValueInst(InsertValueInst &IVI);
 
  616  void visitEHPadPredecessors(Instruction &
I);
 
  617  void visitLandingPadInst(LandingPadInst &LPI);
 
  618  void visitResumeInst(ResumeInst &RI);
 
  619  void visitCatchPadInst(CatchPadInst &CPI);
 
  620  void visitCatchReturnInst(CatchReturnInst &CatchReturn);
 
  621  void visitCleanupPadInst(CleanupPadInst &CPI);
 
  622  void visitFuncletPadInst(FuncletPadInst &FPI);
 
  623  void visitCatchSwitchInst(CatchSwitchInst &CatchSwitch);
 
  624  void visitCleanupReturnInst(CleanupReturnInst &CRI);
 
  626  void verifySwiftErrorCall(CallBase &
Call, 
const Value *SwiftErrorVal);
 
  627  void verifySwiftErrorValue(
const Value *SwiftErrorVal);
 
  628  void verifyTailCCMustTailAttrs(
const AttrBuilder &Attrs, StringRef 
Context);
 
  629  void verifyMustTailCall(CallInst &CI);
 
  630  bool verifyAttributeCount(AttributeList Attrs, 
unsigned Params);
 
  631  void verifyAttributeTypes(AttributeSet Attrs, 
const Value *V);
 
  632  void verifyParameterAttrs(AttributeSet Attrs, 
Type *Ty, 
const Value *V);
 
  633  void checkUnsignedBaseTenFuncAttr(AttributeList Attrs, StringRef Attr,
 
  635  void verifyFunctionAttrs(FunctionType *FT, AttributeList Attrs,
 
  636                           const Value *V, 
bool IsIntrinsic, 
bool IsInlineAsm);
 
  637  void verifyFunctionMetadata(
ArrayRef<std::pair<unsigned, MDNode *>> MDs);
 
  638  void verifyUnknownProfileMetadata(MDNode *MD);
 
  639  void visitConstantExprsRecursively(
const Constant *EntryC);
 
  640  void visitConstantExpr(
const ConstantExpr *CE);
 
  641  void visitConstantPtrAuth(
const ConstantPtrAuth *CPA);
 
  642  void verifyInlineAsmCall(
const CallBase &
Call);
 
  643  void verifyStatepoint(
const CallBase &
Call);
 
  644  void verifyFrameRecoverIndices();
 
  645  void verifySiblingFuncletUnwinds();
 
  647  void verifyFragmentExpression(
const DbgVariableRecord &
I);
 
  648  template <
typename ValueOrMetadata>
 
  649  void verifyFragmentExpression(
const DIVariable &V,
 
  651                                ValueOrMetadata *
Desc);
 
  652  void verifyFnArgs(
const DbgVariableRecord &DVR);
 
  653  void verifyNotEntryValue(
const DbgVariableRecord &
I);
 
  656  void verifyCompileUnits();
 
  660  void verifyDeoptimizeCallingConvs();
 
  662  void verifyAttachedCallBundle(
const CallBase &
Call,
 
  663                                const OperandBundleUse &BU);
 
  666  void verifyNoAliasScopeDecl();
 
  672#define Check(C, ...)                                                          \ 
  675      CheckFailed(__VA_ARGS__);                                                \ 
 
  682#define CheckDI(C, ...)                                                        \ 
  685      DebugInfoCheckFailed(__VA_ARGS__);                                       \ 
 
  693  CheckDI(
I.DebugMarker->MarkedInstr == &
I,
 
  694          "Instruction has invalid DebugMarker", &
I);
 
  696          "PHI Node must not have any attached DbgRecords", &
I);
 
  699            "DbgRecord had invalid DebugMarker", &
I, &DR);
 
  702      visitMDNode(*
Loc, AreDebugLocsAllowed::Yes);
 
  707      verifyFragmentExpression(*DVR);
 
  708      verifyNotEntryValue(*DVR);
 
  715void Verifier::visit(Instruction &
I) {
 
  717  for (
unsigned i = 0, e = 
I.getNumOperands(); i != e; ++i)
 
  718    Check(
I.getOperand(i) != 
nullptr, 
"Operand is null", &
I);
 
  730  while (!WorkList.
empty()) {
 
  732    if (!Visited.
insert(Cur).second)
 
 
  739void Verifier::visitGlobalValue(
const GlobalValue &GV) {
 
  741        "Global is external, but doesn't have external or weak linkage!", &GV);
 
  744    if (
const MDNode *Associated =
 
  745            GO->getMetadata(LLVMContext::MD_associated)) {
 
  746      Check(Associated->getNumOperands() == 1,
 
  747            "associated metadata must have one operand", &GV, Associated);
 
  748      const Metadata *
Op = Associated->getOperand(0).get();
 
  749      Check(
Op, 
"associated metadata must have a global value", GO, Associated);
 
  752      Check(VM, 
"associated metadata must be ValueAsMetadata", GO, Associated);
 
  755              "associated value must be pointer typed", GV, Associated);
 
  757        const Value *Stripped = VM->getValue()->stripPointerCastsAndAliases();
 
  759              "associated metadata must point to a GlobalObject", GO, Stripped);
 
  760        Check(Stripped != GO,
 
  761              "global values should not associate to themselves", GO,
 
  767    if (
const MDNode *AbsoluteSymbol =
 
  768            GO->getMetadata(LLVMContext::MD_absolute_symbol)) {
 
  769      verifyRangeLikeMetadata(*GO, AbsoluteSymbol,
 
  770                              DL.getIntPtrType(GO->getType()),
 
  771                              RangeLikeMetadataKind::AbsoluteSymbol);
 
  776        "Only global variables can have appending linkage!", &GV);
 
  781          "Only global arrays can have appending linkage!", GVar);
 
  785    Check(!GV.
hasComdat(), 
"Declaration may not be in a Comdat!", &GV);
 
  789          "dllexport GlobalValue must have default or protected visibility",
 
  794          "dllimport GlobalValue must have default visibility", &GV);
 
  795    Check(!GV.
isDSOLocal(), 
"GlobalValue with DLLImport Storage is dso_local!",
 
  801          "Global is marked as dllimport, but not external", &GV);
 
  806          "GlobalValue with local linkage or non-default " 
  807          "visibility must be dso_local!",
 
  812      if (!
I->getParent() || !
I->getParent()->getParent())
 
  813        CheckFailed(
"Global is referenced by parentless instruction!", &GV, &M,
 
  815      else if (
I->getParent()->getParent()->getParent() != &M)
 
  816        CheckFailed(
"Global is referenced in a different module!", &GV, &M, 
I,
 
  817                    I->getParent()->getParent(),
 
  818                    I->getParent()->getParent()->getParent());
 
  821      if (
F->getParent() != &M)
 
  822        CheckFailed(
"Global is used by function in a different module", &GV, &M,
 
  830void Verifier::visitGlobalVariable(
const GlobalVariable &GV) {
 
  834    Check(
A->value() <= Value::MaximumAlignment,
 
  835          "huge alignment values are unsupported", &GV);
 
  840          "Global variable initializer type does not match global " 
  844          "Global variable initializer must be sized", &GV);
 
  850            "'common' global must have a zero initializer!", &GV);
 
  853      Check(!GV.
hasComdat(), 
"'common' global may not be in a Comdat!", &GV);
 
  858                       GV.
getName() == 
"llvm.global_dtors")) {
 
  860          "invalid linkage for intrinsic global variable", &GV);
 
  862          "invalid uses of intrinsic global variable", &GV);
 
  869          PointerType::get(
Context, 
DL.getProgramAddressSpace());
 
  873            "wrong type for intrinsic global variable", &GV);
 
  875            "the third field of the element type is mandatory, " 
  876            "specify ptr null to migrate from the obsoleted 2-field form");
 
  884                       GV.
getName() == 
"llvm.compiler.used")) {
 
  886          "invalid linkage for intrinsic global variable", &GV);
 
  888          "invalid uses of intrinsic global variable", &GV);
 
  892      Check(PTy, 
"wrong type for intrinsic global variable", &GV);
 
  896        Check(InitArray, 
"wrong initializer for intrinsic global variable",
 
  902                Twine(
"invalid ") + GV.
getName() + 
" member", V);
 
  904                Twine(
"members of ") + GV.
getName() + 
" must be named", V);
 
  913  for (
auto *MD : MDs) {
 
  915      visitDIGlobalVariableExpression(*GVE);
 
  917      CheckDI(
false, 
"!dbg attachment of global variable must be a " 
  918                     "DIGlobalVariableExpression");
 
  928        "Global @" + GV.
getName() + 
" has illegal target extension type",
 
  932    visitGlobalValue(GV);
 
  939  visitGlobalValue(GV);
 
  942void Verifier::visitAliaseeSubExpr(
const GlobalAlias &GA, 
const Constant &
C) {
 
  943  SmallPtrSet<const GlobalAlias*, 4> Visited;
 
  945  visitAliaseeSubExpr(Visited, GA, 
C);
 
  948void Verifier::visitAliaseeSubExpr(SmallPtrSetImpl<const GlobalAlias*> &Visited,
 
  949                                   const GlobalAlias &GA, 
const Constant &
C) {
 
  953          "available_externally alias must point to available_externally " 
  964      Check(Visited.
insert(GA2).second, 
"Aliases cannot form a cycle", &GA);
 
  966      Check(!GA2->isInterposable(),
 
  967            "Alias cannot point to an interposable alias", &GA);
 
  976    visitConstantExprsRecursively(CE);
 
  978  for (
const Use &U : 
C.operands()) {
 
  981      visitAliaseeSubExpr(Visited, GA, *GA2->getAliasee());
 
  983      visitAliaseeSubExpr(Visited, GA, *C2);
 
  987void Verifier::visitGlobalAlias(
const GlobalAlias &GA) {
 
  989        "Alias should have private, internal, linkonce, weak, linkonce_odr, " 
  990        "weak_odr, external, or available_externally linkage!",
 
  993  Check(Aliasee, 
"Aliasee cannot be NULL!", &GA);
 
  995        "Alias and aliasee types should match!", &GA);
 
  998        "Aliasee should be either GlobalValue or ConstantExpr", &GA);
 
 1000  visitAliaseeSubExpr(GA, *Aliasee);
 
 1002  visitGlobalValue(GA);
 
 1005void Verifier::visitGlobalIFunc(
const GlobalIFunc &GI) {
 
 1006  visitGlobalValue(GI);
 
 1010  for (
const auto &
I : MDs) {
 
 1011    CheckDI(
I.first != LLVMContext::MD_dbg,
 
 1012            "an ifunc may not have a !dbg attachment", &GI);
 
 1013    Check(
I.first != LLVMContext::MD_prof,
 
 1014          "an ifunc may not have a !prof attachment", &GI);
 
 1015    visitMDNode(*
I.second, AreDebugLocsAllowed::No);
 
 1019        "IFunc should have private, internal, linkonce, weak, linkonce_odr, " 
 1020        "weak_odr, or external linkage!",
 
 1025  Check(Resolver, 
"IFunc must have a Function resolver", &GI);
 
 1027        "IFunc resolver must be a definition", &GI);
 
 1034        "IFunc resolver must return a pointer", &GI);
 
 1037        "IFunc resolver has incorrect type", &GI);
 
 1040void Verifier::visitNamedMDNode(
const NamedMDNode &NMD) {
 
 1045            "unrecognized named metadata node in the llvm.dbg namespace", &NMD);
 
 1046  for (
const MDNode *MD : NMD.
operands()) {
 
 1047    if (NMD.
getName() == 
"llvm.dbg.cu")
 
 1053    visitMDNode(*MD, AreDebugLocsAllowed::Yes);
 
 1057void Verifier::visitMDNode(
const MDNode &MD, AreDebugLocsAllowed AllowLocs) {
 
 1060  if (!MDNodes.
insert(&MD).second)
 
 1064        "MDNode context does not match Module context!", &MD);
 
 1069  case Metadata::MDTupleKind:
 
 1071#define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS)                                  \ 
 1072  case Metadata::CLASS##Kind:                                                  \ 
 1073    visit##CLASS(cast<CLASS>(MD));                                             \ 
 1075#include "llvm/IR/Metadata.def" 
 1084            "DILocation not allowed within this metadata node", &MD, 
Op);
 
 1086      visitMDNode(*
N, AllowLocs);
 
 1090      visitValueAsMetadata(*V, 
nullptr);
 
 1102          "Expected second operand to be an integer constant of type i32 or " 
 1112void Verifier::visitValueAsMetadata(
const ValueAsMetadata &MD, Function *
F) {
 
 1115        "Unexpected metadata round-trip through values", &MD, MD.
getValue());
 
 1121  Check(
F, 
"function-local metadata used outside a function", L);
 
 1127    Check(
I->getParent(), 
"function-local metadata not in basic block", L, 
I);
 
 1133  assert(ActualF && 
"Unimplemented function local metadata case!");
 
 1135  Check(ActualF == 
F, 
"function-local metadata used in wrong function", L);
 
 1138void Verifier::visitDIArgList(
const DIArgList &AL, Function *
F) {
 
 1139  for (
const ValueAsMetadata *VAM : 
AL.getArgs())
 
 1140    visitValueAsMetadata(*VAM, 
F);
 
 1143void Verifier::visitMetadataAsValue(
const MetadataAsValue &MDV, Function *
F) {
 
 1146    visitMDNode(*
N, AreDebugLocsAllowed::No);
 
 1152  if (!MDNodes.
insert(MD).second)
 
 1156    visitValueAsMetadata(*V, 
F);
 
 1159    visitDIArgList(*AL, 
F);
 
 1166void Verifier::visitDILocation(
const DILocation &
N) {
 
 1168          "location requires a valid scope", &
N, 
N.getRawScope());
 
 1169  if (
auto *IA = 
N.getRawInlinedAt())
 
 1172    CheckDI(
SP->isDefinition(), 
"scope points into the type hierarchy", &
N);
 
 1175void Verifier::visitGenericDINode(
const GenericDINode &
N) {
 
 1179void Verifier::visitDIScope(
const DIScope &
N) {
 
 1180  if (
auto *
F = 
N.getRawFile())
 
 1184void Verifier::visitDISubrangeType(
const DISubrangeType &
N) {
 
 1185  CheckDI(
N.getTag() == dwarf::DW_TAG_subrange_type, 
"invalid tag", &
N);
 
 1188  auto *LBound = 
N.getRawLowerBound();
 
 1191          "LowerBound must be signed constant or DIVariable or DIExpression",
 
 1193  auto *UBound = 
N.getRawUpperBound();
 
 1196          "UpperBound must be signed constant or DIVariable or DIExpression",
 
 1198  auto *Stride = 
N.getRawStride();
 
 1201          "Stride must be signed constant or DIVariable or DIExpression", &
N);
 
 1202  auto *Bias = 
N.getRawBias();
 
 1205          "Bias must be signed constant or DIVariable or DIExpression", &
N);
 
 1207  auto *
Size = 
N.getRawSizeInBits();
 
 1209          "SizeInBits must be a constant");
 
 1212void Verifier::visitDISubrange(
const DISubrange &
N) {
 
 1213  CheckDI(
N.getTag() == dwarf::DW_TAG_subrange_type, 
"invalid tag", &
N);
 
 1214  CheckDI(!
N.getRawCountNode() || !
N.getRawUpperBound(),
 
 1215          "Subrange can have any one of count or upperBound", &
N);
 
 1216  auto *CBound = 
N.getRawCountNode();
 
 1219          "Count must be signed constant or DIVariable or DIExpression", &
N);
 
 1220  auto Count = 
N.getCount();
 
 1223          "invalid subrange count", &
N);
 
 1224  auto *LBound = 
N.getRawLowerBound();
 
 1227          "LowerBound must be signed constant or DIVariable or DIExpression",
 
 1229  auto *UBound = 
N.getRawUpperBound();
 
 1232          "UpperBound must be signed constant or DIVariable or DIExpression",
 
 1234  auto *Stride = 
N.getRawStride();
 
 1237          "Stride must be signed constant or DIVariable or DIExpression", &
N);
 
 1240void Verifier::visitDIGenericSubrange(
const DIGenericSubrange &
N) {
 
 1241  CheckDI(
N.getTag() == dwarf::DW_TAG_generic_subrange, 
"invalid tag", &
N);
 
 1242  CheckDI(!
N.getRawCountNode() || !
N.getRawUpperBound(),
 
 1243          "GenericSubrange can have any one of count or upperBound", &
N);
 
 1244  auto *CBound = 
N.getRawCountNode();
 
 1246          "Count must be signed constant or DIVariable or DIExpression", &
N);
 
 1247  auto *LBound = 
N.getRawLowerBound();
 
 1248  CheckDI(LBound, 
"GenericSubrange must contain lowerBound", &
N);
 
 1250          "LowerBound must be signed constant or DIVariable or DIExpression",
 
 1252  auto *UBound = 
N.getRawUpperBound();
 
 1254          "UpperBound must be signed constant or DIVariable or DIExpression",
 
 1256  auto *Stride = 
N.getRawStride();
 
 1257  CheckDI(Stride, 
"GenericSubrange must contain stride", &
N);
 
 1259          "Stride must be signed constant or DIVariable or DIExpression", &
N);
 
 1262void Verifier::visitDIEnumerator(
const DIEnumerator &
N) {
 
 1263  CheckDI(
N.getTag() == dwarf::DW_TAG_enumerator, 
"invalid tag", &
N);
 
 1266void Verifier::visitDIBasicType(
const DIBasicType &
N) {
 
 1267  CheckDI(
N.getTag() == dwarf::DW_TAG_base_type ||
 
 1268              N.getTag() == dwarf::DW_TAG_unspecified_type ||
 
 1269              N.getTag() == dwarf::DW_TAG_string_type,
 
 1272  auto *
Size = 
N.getRawSizeInBits();
 
 1274          "SizeInBits must be a constant");
 
 1277void Verifier::visitDIFixedPointType(
const DIFixedPointType &
N) {
 
 1278  visitDIBasicType(
N);
 
 1280  CheckDI(
N.getTag() == dwarf::DW_TAG_base_type, 
"invalid tag", &
N);
 
 1281  CheckDI(
N.getEncoding() == dwarf::DW_ATE_signed_fixed ||
 
 1282              N.getEncoding() == dwarf::DW_ATE_unsigned_fixed,
 
 1283          "invalid encoding", &
N);
 
 1287          "invalid kind", &
N);
 
 1289              N.getFactorRaw() == 0,
 
 1290          "factor should be 0 for rationals", &
N);
 
 1292              (
N.getNumeratorRaw() == 0 && 
N.getDenominatorRaw() == 0),
 
 1293          "numerator and denominator should be 0 for non-rationals", &
N);
 
 1296void Verifier::visitDIStringType(
const DIStringType &
N) {
 
 1297  CheckDI(
N.getTag() == dwarf::DW_TAG_string_type, 
"invalid tag", &
N);
 
 1298  CheckDI(!(
N.isBigEndian() && 
N.isLittleEndian()), 
"has conflicting flags",
 
 1302void Verifier::visitDIDerivedType(
const DIDerivedType &
N) {
 
 1306  CheckDI(
N.getTag() == dwarf::DW_TAG_typedef ||
 
 1307              N.getTag() == dwarf::DW_TAG_pointer_type ||
 
 1308              N.getTag() == dwarf::DW_TAG_ptr_to_member_type ||
 
 1309              N.getTag() == dwarf::DW_TAG_reference_type ||
 
 1310              N.getTag() == dwarf::DW_TAG_rvalue_reference_type ||
 
 1311              N.getTag() == dwarf::DW_TAG_const_type ||
 
 1312              N.getTag() == dwarf::DW_TAG_immutable_type ||
 
 1313              N.getTag() == dwarf::DW_TAG_volatile_type ||
 
 1314              N.getTag() == dwarf::DW_TAG_restrict_type ||
 
 1315              N.getTag() == dwarf::DW_TAG_atomic_type ||
 
 1316              N.getTag() == dwarf::DW_TAG_LLVM_ptrauth_type ||
 
 1317              N.getTag() == dwarf::DW_TAG_member ||
 
 1318              (
N.getTag() == dwarf::DW_TAG_variable && 
N.isStaticMember()) ||
 
 1319              N.getTag() == dwarf::DW_TAG_inheritance ||
 
 1320              N.getTag() == dwarf::DW_TAG_friend ||
 
 1321              N.getTag() == dwarf::DW_TAG_set_type ||
 
 1322              N.getTag() == dwarf::DW_TAG_template_alias,
 
 1324  if (
N.getTag() == dwarf::DW_TAG_ptr_to_member_type) {
 
 1325    CheckDI(
isType(
N.getRawExtraData()), 
"invalid pointer to member type", &
N,
 
 1326            N.getRawExtraData());
 
 1329  if (
N.getTag() == dwarf::DW_TAG_set_type) {
 
 1330    if (
auto *
T = 
N.getRawBaseType()) {
 
 1335          (Enum && 
Enum->getTag() == dwarf::DW_TAG_enumeration_type) ||
 
 1336              (Subrange && 
Subrange->getTag() == dwarf::DW_TAG_subrange_type) ||
 
 1337              (
Basic && (
Basic->getEncoding() == dwarf::DW_ATE_unsigned ||
 
 1338                         Basic->getEncoding() == dwarf::DW_ATE_signed ||
 
 1339                         Basic->getEncoding() == dwarf::DW_ATE_unsigned_char ||
 
 1340                         Basic->getEncoding() == dwarf::DW_ATE_signed_char ||
 
 1341                         Basic->getEncoding() == dwarf::DW_ATE_boolean)),
 
 1342          "invalid set base type", &
N, 
T);
 
 1348          N.getRawBaseType());
 
 1350  if (
N.getDWARFAddressSpace()) {
 
 1351    CheckDI(
N.getTag() == dwarf::DW_TAG_pointer_type ||
 
 1352                N.getTag() == dwarf::DW_TAG_reference_type ||
 
 1353                N.getTag() == dwarf::DW_TAG_rvalue_reference_type,
 
 1354            "DWARF address space only applies to pointer or reference types",
 
 1358  auto *
Size = 
N.getRawSizeInBits();
 
 1361          "SizeInBits must be a constant or DIVariable or DIExpression");
 
 1366  return ((Flags & DINode::FlagLValueReference) &&
 
 1367          (Flags & DINode::FlagRValueReference)) ||
 
 1368         ((Flags & DINode::FlagTypePassByValue) &&
 
 1369          (Flags & DINode::FlagTypePassByReference));
 
 
 1372void Verifier::visitTemplateParams(
const MDNode &
N, 
const Metadata &RawParams) {
 
 1374  CheckDI(Params, 
"invalid template params", &
N, &RawParams);
 
 1381void Verifier::visitDICompositeType(
const DICompositeType &
N) {
 
 1385  CheckDI(
N.getTag() == dwarf::DW_TAG_array_type ||
 
 1386              N.getTag() == dwarf::DW_TAG_structure_type ||
 
 1387              N.getTag() == dwarf::DW_TAG_union_type ||
 
 1388              N.getTag() == dwarf::DW_TAG_enumeration_type ||
 
 1389              N.getTag() == dwarf::DW_TAG_class_type ||
 
 1390              N.getTag() == dwarf::DW_TAG_variant_part ||
 
 1391              N.getTag() == dwarf::DW_TAG_variant ||
 
 1392              N.getTag() == dwarf::DW_TAG_namelist,
 
 1397          N.getRawBaseType());
 
 1400          "invalid composite elements", &
N, 
N.getRawElements());
 
 1402          N.getRawVTableHolder());
 
 1404          "invalid reference flags", &
N);
 
 1405  unsigned DIBlockByRefStruct = 1 << 4;
 
 1406  CheckDI((
N.getFlags() & DIBlockByRefStruct) == 0,
 
 1407          "DIBlockByRefStruct on DICompositeType is no longer supported", &
N);
 
 1409          "DISubprogram contains null entry in `elements` field", &
N);
 
 1412    const DINodeArray 
Elements = 
N.getElements();
 
 1414                Elements[0]->getTag() == dwarf::DW_TAG_subrange_type,
 
 1415            "invalid vector, expected one element of type subrange", &
N);
 
 1418  if (
auto *Params = 
N.getRawTemplateParams())
 
 1419    visitTemplateParams(
N, *Params);
 
 1421  if (
auto *
D = 
N.getRawDiscriminator()) {
 
 1423            "discriminator can only appear on variant part");
 
 1426  if (
N.getRawDataLocation()) {
 
 1427    CheckDI(
N.getTag() == dwarf::DW_TAG_array_type,
 
 1428            "dataLocation can only appear in array type");
 
 1431  if (
N.getRawAssociated()) {
 
 1432    CheckDI(
N.getTag() == dwarf::DW_TAG_array_type,
 
 1433            "associated can only appear in array type");
 
 1436  if (
N.getRawAllocated()) {
 
 1437    CheckDI(
N.getTag() == dwarf::DW_TAG_array_type,
 
 1438            "allocated can only appear in array type");
 
 1441  if (
N.getRawRank()) {
 
 1442    CheckDI(
N.getTag() == dwarf::DW_TAG_array_type,
 
 1443            "rank can only appear in array type");
 
 1446  if (
N.getTag() == dwarf::DW_TAG_array_type) {
 
 1447    CheckDI(
N.getRawBaseType(), 
"array types must have a base type", &
N);
 
 1450  auto *
Size = 
N.getRawSizeInBits();
 
 1453          "SizeInBits must be a constant or DIVariable or DIExpression");
 
 1456void Verifier::visitDISubroutineType(
const DISubroutineType &
N) {
 
 1457  CheckDI(
N.getTag() == dwarf::DW_TAG_subroutine_type, 
"invalid tag", &
N);
 
 1458  if (
auto *Types = 
N.getRawTypeArray()) {
 
 1460    for (
Metadata *Ty : 
N.getTypeArray()->operands()) {
 
 1461      CheckDI(
isType(Ty), 
"invalid subroutine type ref", &
N, Types, Ty);
 
 1465          "invalid reference flags", &
N);
 
 1468void Verifier::visitDIFile(
const DIFile &
N) {
 
 1469  CheckDI(
N.getTag() == dwarf::DW_TAG_file_type, 
"invalid tag", &
N);
 
 1470  std::optional<DIFile::ChecksumInfo<StringRef>> Checksum = 
N.getChecksum();
 
 1472    CheckDI(Checksum->Kind <= DIFile::ChecksumKind::CSK_Last,
 
 1473            "invalid checksum kind", &
N);
 
 1475    switch (Checksum->Kind) {
 
 1486    CheckDI(Checksum->Value.size() == 
Size, 
"invalid checksum length", &
N);
 
 1488            "invalid checksum", &
N);
 
 1492void Verifier::visitDICompileUnit(
const DICompileUnit &
N) {
 
 1493  CheckDI(
N.isDistinct(), 
"compile units must be distinct", &
N);
 
 1494  CheckDI(
N.getTag() == dwarf::DW_TAG_compile_unit, 
"invalid tag", &
N);
 
 1500  CheckDI(!
N.getFile()->getFilename().empty(), 
"invalid filename", &
N,
 
 1504          "invalid emission kind", &
N);
 
 1506  if (
auto *Array = 
N.getRawEnumTypes()) {
 
 1508    for (
Metadata *
Op : 
N.getEnumTypes()->operands()) {
 
 1510      CheckDI(Enum && 
Enum->getTag() == dwarf::DW_TAG_enumeration_type,
 
 1511              "invalid enum type", &
N, 
N.getEnumTypes(), 
Op);
 
 1514  if (
auto *Array = 
N.getRawRetainedTypes()) {
 
 1516    for (
Metadata *
Op : 
N.getRetainedTypes()->operands()) {
 
 1520          "invalid retained type", &
N, 
Op);
 
 1523  if (
auto *Array = 
N.getRawGlobalVariables()) {
 
 1525    for (
Metadata *
Op : 
N.getGlobalVariables()->operands()) {
 
 1527              "invalid global variable ref", &
N, 
Op);
 
 1530  if (
auto *Array = 
N.getRawImportedEntities()) {
 
 1532    for (
Metadata *
Op : 
N.getImportedEntities()->operands()) {
 
 1537  if (
auto *Array = 
N.getRawMacros()) {
 
 1546void Verifier::visitDISubprogram(
const DISubprogram &
N) {
 
 1547  CheckDI(
N.getTag() == dwarf::DW_TAG_subprogram, 
"invalid tag", &
N);
 
 1549  if (
auto *
F = 
N.getRawFile())
 
 1552    CheckDI(
N.getLine() == 0, 
"line specified with no file", &
N, 
N.getLine());
 
 1553  if (
auto *
T = 
N.getRawType())
 
 1555  CheckDI(
isType(
N.getRawContainingType()), 
"invalid containing type", &
N,
 
 1556          N.getRawContainingType());
 
 1557  if (
auto *Params = 
N.getRawTemplateParams())
 
 1558    visitTemplateParams(
N, *Params);
 
 1559  if (
auto *S = 
N.getRawDeclaration())
 
 1561            "invalid subprogram declaration", &
N, S);
 
 1562  if (
auto *RawNode = 
N.getRawRetainedNodes()) {
 
 1564    CheckDI(Node, 
"invalid retained nodes list", &
N, RawNode);
 
 1568              "invalid retained nodes, expected DILocalVariable, DILabel or " 
 1574          "invalid reference flags", &
N);
 
 1576  auto *
Unit = 
N.getRawUnit();
 
 1577  if (
N.isDefinition()) {
 
 1579    CheckDI(
N.isDistinct(), 
"subprogram definitions must be distinct", &
N);
 
 1580    CheckDI(Unit, 
"subprogram definitions must have a compile unit", &
N);
 
 1585    if (CT && CT->getRawIdentifier() &&
 
 1586        M.getContext().isODRUniquingDebugTypes())
 
 1588              "definition subprograms cannot be nested within DICompositeType " 
 1589              "when enabling ODR",
 
 1593    CheckDI(!Unit, 
"subprogram declarations must not have a compile unit", &
N);
 
 1595            "subprogram declaration must not have a declaration field");
 
 1598  if (
auto *RawThrownTypes = 
N.getRawThrownTypes()) {
 
 1600    CheckDI(ThrownTypes, 
"invalid thrown types list", &
N, RawThrownTypes);
 
 1606  if (
N.areAllCallsDescribed())
 
 1608            "DIFlagAllCallsDescribed must be attached to a definition");
 
 1611void Verifier::visitDILexicalBlockBase(
const DILexicalBlockBase &
N) {
 
 1612  CheckDI(
N.getTag() == dwarf::DW_TAG_lexical_block, 
"invalid tag", &
N);
 
 1614          "invalid local scope", &
N, 
N.getRawScope());
 
 1616    CheckDI(
SP->isDefinition(), 
"scope points into the type hierarchy", &
N);
 
 1619void Verifier::visitDILexicalBlock(
const DILexicalBlock &
N) {
 
 1620  visitDILexicalBlockBase(
N);
 
 1623          "cannot have column info without line info", &
N);
 
 1626void Verifier::visitDILexicalBlockFile(
const DILexicalBlockFile &
N) {
 
 1627  visitDILexicalBlockBase(
N);
 
 1630void Verifier::visitDICommonBlock(
const DICommonBlock &
N) {
 
 1631  CheckDI(
N.getTag() == dwarf::DW_TAG_common_block, 
"invalid tag", &
N);
 
 1632  if (
auto *S = 
N.getRawScope())
 
 1634  if (
auto *S = 
N.getRawDecl())
 
 1638void Verifier::visitDINamespace(
const DINamespace &
N) {
 
 1639  CheckDI(
N.getTag() == dwarf::DW_TAG_namespace, 
"invalid tag", &
N);
 
 1640  if (
auto *S = 
N.getRawScope())
 
 1644void Verifier::visitDIMacro(
const DIMacro &
N) {
 
 1647          "invalid macinfo type", &
N);
 
 1648  CheckDI(!
N.getName().empty(), 
"anonymous macro", &
N);
 
 1649  if (!
N.getValue().empty()) {
 
 1650    assert(
N.getValue().data()[0] != 
' ' && 
"Macro value has a space prefix");
 
 1654void Verifier::visitDIMacroFile(
const DIMacroFile &
N) {
 
 1656          "invalid macinfo type", &
N);
 
 1657  if (
auto *
F = 
N.getRawFile())
 
 1660  if (
auto *Array = 
N.getRawElements()) {
 
 1662    for (
Metadata *
Op : 
N.getElements()->operands()) {
 
 1668void Verifier::visitDIModule(
const DIModule &
N) {
 
 1669  CheckDI(
N.getTag() == dwarf::DW_TAG_module, 
"invalid tag", &
N);
 
 1670  CheckDI(!
N.getName().empty(), 
"anonymous module", &
N);
 
 1673void Verifier::visitDITemplateParameter(
const DITemplateParameter &
N) {
 
 1677void Verifier::visitDITemplateTypeParameter(
const DITemplateTypeParameter &
N) {
 
 1678  visitDITemplateParameter(
N);
 
 1680  CheckDI(
N.getTag() == dwarf::DW_TAG_template_type_parameter, 
"invalid tag",
 
 1684void Verifier::visitDITemplateValueParameter(
 
 1685    const DITemplateValueParameter &
N) {
 
 1686  visitDITemplateParameter(
N);
 
 1688  CheckDI(
N.getTag() == dwarf::DW_TAG_template_value_parameter ||
 
 1689              N.getTag() == dwarf::DW_TAG_GNU_template_template_param ||
 
 1690              N.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack,
 
 1694void Verifier::visitDIVariable(
const DIVariable &
N) {
 
 1695  if (
auto *S = 
N.getRawScope())
 
 1697  if (
auto *
F = 
N.getRawFile())
 
 1701void Verifier::visitDIGlobalVariable(
const DIGlobalVariable &
N) {
 
 1705  CheckDI(
N.getTag() == dwarf::DW_TAG_variable, 
"invalid tag", &
N);
 
 1708  if (
N.isDefinition())
 
 1709    CheckDI(
N.getType(), 
"missing global variable type", &
N);
 
 1710  if (
auto *Member = 
N.getRawStaticDataMemberDeclaration()) {
 
 1712            "invalid static data member declaration", &
N, Member);
 
 1716void Verifier::visitDILocalVariable(
const DILocalVariable &
N) {
 
 1721  CheckDI(
N.getTag() == dwarf::DW_TAG_variable, 
"invalid tag", &
N);
 
 1723          "local variable requires a valid scope", &
N, 
N.getRawScope());
 
 1724  if (
auto Ty = 
N.getType())
 
 1728void Verifier::visitDIAssignID(
const DIAssignID &
N) {
 
 1729  CheckDI(!
N.getNumOperands(), 
"DIAssignID has no arguments", &
N);
 
 1730  CheckDI(
N.isDistinct(), 
"DIAssignID must be distinct", &
N);
 
 1733void Verifier::visitDILabel(
const DILabel &
N) {
 
 1734  if (
auto *S = 
N.getRawScope())
 
 1736  if (
auto *
F = 
N.getRawFile())
 
 1739  CheckDI(
N.getTag() == dwarf::DW_TAG_label, 
"invalid tag", &
N);
 
 1741          "label requires a valid scope", &
N, 
N.getRawScope());
 
 1744void Verifier::visitDIExpression(
const DIExpression &
N) {
 
 1745  CheckDI(
N.isValid(), 
"invalid expression", &
N);
 
 1748void Verifier::visitDIGlobalVariableExpression(
 
 1749    const DIGlobalVariableExpression &GVE) {
 
 1752    visitDIGlobalVariable(*Var);
 
 1754    visitDIExpression(*Expr);
 
 1755    if (
auto Fragment = Expr->getFragmentInfo())
 
 1756      verifyFragmentExpression(*GVE.
getVariable(), *Fragment, &GVE);
 
 1760void Verifier::visitDIObjCProperty(
const DIObjCProperty &
N) {
 
 1761  CheckDI(
N.getTag() == dwarf::DW_TAG_APPLE_property, 
"invalid tag", &
N);
 
 1762  if (
auto *
T = 
N.getRawType())
 
 1764  if (
auto *
F = 
N.getRawFile())
 
 1768void Verifier::visitDIImportedEntity(
const DIImportedEntity &
N) {
 
 1769  CheckDI(
N.getTag() == dwarf::DW_TAG_imported_module ||
 
 1770              N.getTag() == dwarf::DW_TAG_imported_declaration,
 
 1772  if (
auto *S = 
N.getRawScope())
 
 1778void Verifier::visitComdat(
const Comdat &
C) {
 
 1781  if (
TT.isOSBinFormatCOFF())
 
 1782    if (
const GlobalValue *GV = 
M.getNamedValue(
C.getName()))
 
 1787void Verifier::visitModuleIdents() {
 
 1788  const NamedMDNode *Idents = 
M.getNamedMetadata(
"llvm.ident");
 
 1794  for (
const MDNode *
N : Idents->
operands()) {
 
 1795    Check(
N->getNumOperands() == 1,
 
 1796          "incorrect number of operands in llvm.ident metadata", 
N);
 
 1798          (
"invalid value for llvm.ident metadata entry operand" 
 1799           "(the operand should be a string)"),
 
 1804void Verifier::visitModuleCommandLines() {
 
 1805  const NamedMDNode *CommandLines = 
M.getNamedMetadata(
"llvm.commandline");
 
 1812  for (
const MDNode *
N : CommandLines->
operands()) {
 
 1813    Check(
N->getNumOperands() == 1,
 
 1814          "incorrect number of operands in llvm.commandline metadata", 
N);
 
 1816          (
"invalid value for llvm.commandline metadata entry operand" 
 1817           "(the operand should be a string)"),
 
 1822void Verifier::visitModuleErrnoTBAA() {
 
 1823  const NamedMDNode *ErrnoTBAA = 
M.getNamedMetadata(
"llvm.errno.tbaa");
 
 1828        "llvm.errno.tbaa must have at least one operand", ErrnoTBAA);
 
 1830  for (
const MDNode *
N : ErrnoTBAA->
operands())
 
 1834void Verifier::visitModuleFlags() {
 
 1835  const NamedMDNode *
Flags = 
M.getModuleFlagsMetadata();
 
 1839  DenseMap<const MDString*, const MDNode*> SeenIDs;
 
 1841  uint64_t PAuthABIPlatform = -1;
 
 1842  uint64_t PAuthABIVersion = -1;
 
 1843  for (
const MDNode *MDN : 
Flags->operands()) {
 
 1844    visitModuleFlag(MDN, SeenIDs, Requirements);
 
 1845    if (MDN->getNumOperands() != 3)
 
 1848      if (FlagName->getString() == 
"aarch64-elf-pauthabi-platform") {
 
 1849        if (
const auto *PAP =
 
 1851          PAuthABIPlatform = PAP->getZExtValue();
 
 1852      } 
else if (FlagName->getString() == 
"aarch64-elf-pauthabi-version") {
 
 1853        if (
const auto *PAV =
 
 1855          PAuthABIVersion = PAV->getZExtValue();
 
 1860  if ((PAuthABIPlatform == uint64_t(-1)) != (PAuthABIVersion == uint64_t(-1)))
 
 1861    CheckFailed(
"either both or no 'aarch64-elf-pauthabi-platform' and " 
 1862                "'aarch64-elf-pauthabi-version' module flags must be present");
 
 1865  for (
const MDNode *Requirement : Requirements) {
 
 1867    const Metadata *ReqValue = Requirement->getOperand(1);
 
 1869    const MDNode *
Op = SeenIDs.
lookup(Flag);
 
 1871      CheckFailed(
"invalid requirement on flag, flag is not present in module",
 
 1876    if (
Op->getOperand(2) != ReqValue) {
 
 1877      CheckFailed((
"invalid requirement on flag, " 
 1878                   "flag does not have the required value"),
 
 1886Verifier::visitModuleFlag(
const MDNode *
Op,
 
 1887                          DenseMap<const MDString *, const MDNode *> &SeenIDs,
 
 1888                          SmallVectorImpl<const MDNode *> &Requirements) {
 
 1892        "incorrect number of operands in module flag", 
Op);
 
 1893  Module::ModFlagBehavior MFB;
 
 1894  if (!Module::isValidModFlagBehavior(
Op->getOperand(0), MFB)) {
 
 1896          "invalid behavior operand in module flag (expected constant integer)",
 
 1899          "invalid behavior operand in module flag (unexpected constant)",
 
 1903  Check(
ID, 
"invalid ID operand in module flag (expected metadata string)",
 
 1909  case Module::Warning:
 
 1910  case Module::Override:
 
 1916    Check(V && 
V->getValue().isNonNegative(),
 
 1917          "invalid value for 'min' module flag (expected constant non-negative " 
 1925          "invalid value for 'max' module flag (expected constant integer)",
 
 1930  case Module::Require: {
 
 1935          "invalid value for 'require' module flag (expected metadata pair)",
 
 1938          (
"invalid value for 'require' module flag " 
 1939           "(first value operand should be a string)"),
 
 1940          Value->getOperand(0));
 
 1948  case Module::Append:
 
 1949  case Module::AppendUnique: {
 
 1952          "invalid value for 'append'-type module flag " 
 1953          "(expected a metadata node)",
 
 1960  if (MFB != Module::Require) {
 
 1963          "module flag identifiers must be unique (or of 'require' type)", 
ID);
 
 1966  if (
ID->getString() == 
"wchar_size") {
 
 1969    Check(
Value, 
"wchar_size metadata requires constant integer argument");
 
 1972  if (
ID->getString() == 
"Linker Options") {
 
 1976    Check(
M.getNamedMetadata(
"llvm.linker.options"),
 
 1977          "'Linker Options' named metadata no longer supported");
 
 1980  if (
ID->getString() == 
"SemanticInterposition") {
 
 1981    ConstantInt *
Value =
 
 1984          "SemanticInterposition metadata requires constant integer argument");
 
 1987  if (
ID->getString() == 
"CG Profile") {
 
 1988    for (
const MDOperand &MDO : 
cast<MDNode>(
Op->getOperand(2))->operands())
 
 1989      visitModuleFlagCGProfileEntry(MDO);
 
 1993void Verifier::visitModuleFlagCGProfileEntry(
const MDOperand &MDO) {
 
 1994  auto CheckFunction = [&](
const MDOperand &FuncMDO) {
 
 1999          "expected a Function or null", FuncMDO);
 
 2002  Check(Node && 
Node->getNumOperands() == 3, 
"expected a MDNode triple", MDO);
 
 2003  CheckFunction(
Node->getOperand(0));
 
 2004  CheckFunction(
Node->getOperand(1));
 
 2007        "expected an integer constant", 
Node->getOperand(2));
 
 2010void Verifier::verifyAttributeTypes(AttributeSet Attrs, 
const Value *V) {
 
 2013    if (
A.isStringAttribute()) {
 
 2014#define GET_ATTR_NAMES 
 2015#define ATTRIBUTE_ENUM(ENUM_NAME, DISPLAY_NAME) 
 2016#define ATTRIBUTE_STRBOOL(ENUM_NAME, DISPLAY_NAME)                             \ 
 2017  if (A.getKindAsString() == #DISPLAY_NAME) {                                  \ 
 2018    auto V = A.getValueAsString();                                             \ 
 2019    if (!(V.empty() || V == "true" || V == "false"))                           \ 
 2020      CheckFailed("invalid value for '" #DISPLAY_NAME "' attribute: " + V +    \ 
 2024#include "llvm/IR/Attributes.inc" 
 2028    if (
A.isIntAttribute() != Attribute::isIntAttrKind(
A.getKindAsEnum())) {
 
 2029      CheckFailed(
"Attribute '" + 
A.getAsString() + 
"' should have an Argument",
 
 2038void Verifier::verifyParameterAttrs(AttributeSet Attrs, 
Type *Ty,
 
 2040  if (!
Attrs.hasAttributes())
 
 2043  verifyAttributeTypes(Attrs, V);
 
 2046    Check(Attr.isStringAttribute() ||
 
 2047              Attribute::canUseAsParamAttr(Attr.getKindAsEnum()),
 
 2048          "Attribute '" + Attr.getAsString() + 
"' does not apply to parameters",
 
 2051  if (
Attrs.hasAttribute(Attribute::ImmArg)) {
 
 2052    unsigned AttrCount =
 
 2053        Attrs.getNumAttributes() - 
Attrs.hasAttribute(Attribute::Range);
 
 2054    Check(AttrCount == 1,
 
 2055          "Attribute 'immarg' is incompatible with other attributes except the " 
 2056          "'range' attribute",
 
 2062  unsigned AttrCount = 0;
 
 2063  AttrCount += 
Attrs.hasAttribute(Attribute::ByVal);
 
 2064  AttrCount += 
Attrs.hasAttribute(Attribute::InAlloca);
 
 2065  AttrCount += 
Attrs.hasAttribute(Attribute::Preallocated);
 
 2066  AttrCount += 
Attrs.hasAttribute(Attribute::StructRet) ||
 
 2067               Attrs.hasAttribute(Attribute::InReg);
 
 2068  AttrCount += 
Attrs.hasAttribute(Attribute::Nest);
 
 2069  AttrCount += 
Attrs.hasAttribute(Attribute::ByRef);
 
 2070  Check(AttrCount <= 1,
 
 2071        "Attributes 'byval', 'inalloca', 'preallocated', 'inreg', 'nest', " 
 2072        "'byref', and 'sret' are incompatible!",
 
 2075  Check(!(
Attrs.hasAttribute(Attribute::InAlloca) &&
 
 2076          Attrs.hasAttribute(Attribute::ReadOnly)),
 
 2078        "'inalloca and readonly' are incompatible!",
 
 2081  Check(!(
Attrs.hasAttribute(Attribute::StructRet) &&
 
 2082          Attrs.hasAttribute(Attribute::Returned)),
 
 2084        "'sret and returned' are incompatible!",
 
 2087  Check(!(
Attrs.hasAttribute(Attribute::ZExt) &&
 
 2088          Attrs.hasAttribute(Attribute::SExt)),
 
 2090        "'zeroext and signext' are incompatible!",
 
 2093  Check(!(
Attrs.hasAttribute(Attribute::ReadNone) &&
 
 2094          Attrs.hasAttribute(Attribute::ReadOnly)),
 
 2096        "'readnone and readonly' are incompatible!",
 
 2099  Check(!(
Attrs.hasAttribute(Attribute::ReadNone) &&
 
 2100          Attrs.hasAttribute(Attribute::WriteOnly)),
 
 2102        "'readnone and writeonly' are incompatible!",
 
 2105  Check(!(
Attrs.hasAttribute(Attribute::ReadOnly) &&
 
 2106          Attrs.hasAttribute(Attribute::WriteOnly)),
 
 2108        "'readonly and writeonly' are incompatible!",
 
 2111  Check(!(
Attrs.hasAttribute(Attribute::NoInline) &&
 
 2112          Attrs.hasAttribute(Attribute::AlwaysInline)),
 
 2114        "'noinline and alwaysinline' are incompatible!",
 
 2117  Check(!(
Attrs.hasAttribute(Attribute::Writable) &&
 
 2118          Attrs.hasAttribute(Attribute::ReadNone)),
 
 2119        "Attributes writable and readnone are incompatible!", V);
 
 2121  Check(!(
Attrs.hasAttribute(Attribute::Writable) &&
 
 2122          Attrs.hasAttribute(Attribute::ReadOnly)),
 
 2123        "Attributes writable and readonly are incompatible!", V);
 
 2125  AttributeMask IncompatibleAttrs = AttributeFuncs::typeIncompatible(Ty, Attrs);
 
 2127    if (!Attr.isStringAttribute() &&
 
 2128        IncompatibleAttrs.
contains(Attr.getKindAsEnum())) {
 
 2129      CheckFailed(
"Attribute '" + Attr.getAsString() +
 
 2130                  "' applied to incompatible type!", V);
 
 2136    if (
Attrs.hasAttribute(Attribute::Alignment)) {
 
 2137      Align AttrAlign = 
Attrs.getAlignment().valueOrOne();
 
 2138      Check(AttrAlign.
value() <= Value::MaximumAlignment,
 
 2139            "huge alignment values are unsupported", V);
 
 2141    if (
Attrs.hasAttribute(Attribute::ByVal)) {
 
 2143      SmallPtrSet<Type *, 4> Visited;
 
 2145            "Attribute 'byval' does not support unsized types!", V);
 
 2149            "'byval' argument has illegal target extension type", V);
 
 2150      Check(
DL.getTypeAllocSize(ByValTy).getKnownMinValue() < (1ULL << 32),
 
 2151            "huge 'byval' arguments are unsupported", V);
 
 2153    if (
Attrs.hasAttribute(Attribute::ByRef)) {
 
 2154      SmallPtrSet<Type *, 4> Visited;
 
 2155      Check(
Attrs.getByRefType()->isSized(&Visited),
 
 2156            "Attribute 'byref' does not support unsized types!", V);
 
 2157      Check(
DL.getTypeAllocSize(
Attrs.getByRefType()).getKnownMinValue() <
 
 2159            "huge 'byref' arguments are unsupported", V);
 
 2161    if (
Attrs.hasAttribute(Attribute::InAlloca)) {
 
 2162      SmallPtrSet<Type *, 4> Visited;
 
 2163      Check(
Attrs.getInAllocaType()->isSized(&Visited),
 
 2164            "Attribute 'inalloca' does not support unsized types!", V);
 
 2165      Check(
DL.getTypeAllocSize(
Attrs.getInAllocaType()).getKnownMinValue() <
 
 2167            "huge 'inalloca' arguments are unsupported", V);
 
 2169    if (
Attrs.hasAttribute(Attribute::Preallocated)) {
 
 2170      SmallPtrSet<Type *, 4> Visited;
 
 2171      Check(
Attrs.getPreallocatedType()->isSized(&Visited),
 
 2172            "Attribute 'preallocated' does not support unsized types!", V);
 
 2174          DL.getTypeAllocSize(
Attrs.getPreallocatedType()).getKnownMinValue() <
 
 2176          "huge 'preallocated' arguments are unsupported", V);
 
 2180  if (
Attrs.hasAttribute(Attribute::Initializes)) {
 
 2181    auto Inits = 
Attrs.getAttribute(Attribute::Initializes).getInitializes();
 
 2182    Check(!Inits.empty(), 
"Attribute 'initializes' does not support empty list",
 
 2185          "Attribute 'initializes' does not support unordered ranges", V);
 
 2188  if (
Attrs.hasAttribute(Attribute::NoFPClass)) {
 
 2189    uint64_t Val = 
Attrs.getAttribute(Attribute::NoFPClass).getValueAsInt();
 
 2190    Check(Val != 0, 
"Attribute 'nofpclass' must have at least one test bit set",
 
 2193          "Invalid value for 'nofpclass' test mask", V);
 
 2195  if (
Attrs.hasAttribute(Attribute::Range)) {
 
 2196    const ConstantRange &CR =
 
 2197        Attrs.getAttribute(Attribute::Range).getValueAsConstantRange();
 
 2199          "Range bit width must match type bit width!", V);
 
 2203void Verifier::checkUnsignedBaseTenFuncAttr(AttributeList Attrs, StringRef Attr,
 
 2205  if (
Attrs.hasFnAttr(Attr)) {
 
 2206    StringRef S = 
Attrs.getFnAttr(Attr).getValueAsString();
 
 2209      CheckFailed(
"\"" + Attr + 
"\" takes an unsigned integer: " + S, V);
 
 2215void Verifier::verifyFunctionAttrs(FunctionType *FT, AttributeList Attrs,
 
 2216                                   const Value *V, 
bool IsIntrinsic,
 
 2218  if (
Attrs.isEmpty())
 
 2221  if (AttributeListsVisited.
insert(
Attrs.getRawPointer()).second) {
 
 2223          "Attribute list does not match Module context!", &Attrs, V);
 
 2224    for (
const auto &AttrSet : Attrs) {
 
 2225      Check(!AttrSet.hasAttributes() || AttrSet.hasParentContext(
Context),
 
 2226            "Attribute set does not match Module context!", &AttrSet, V);
 
 2227      for (
const auto &
A : AttrSet) {
 
 2229              "Attribute does not match Module context!", &
A, V);
 
 2234  bool SawNest = 
false;
 
 2235  bool SawReturned = 
false;
 
 2236  bool SawSRet = 
false;
 
 2237  bool SawSwiftSelf = 
false;
 
 2238  bool SawSwiftAsync = 
false;
 
 2239  bool SawSwiftError = 
false;
 
 2242  AttributeSet RetAttrs = 
Attrs.getRetAttrs();
 
 2245              Attribute::canUseAsRetAttr(
RetAttr.getKindAsEnum()),
 
 2246          "Attribute '" + 
RetAttr.getAsString() +
 
 2247              "' does not apply to function return values",
 
 2250  unsigned MaxParameterWidth = 0;
 
 2251  auto GetMaxParameterWidth = [&MaxParameterWidth](
Type *Ty) {
 
 2254        unsigned Size = VT->getPrimitiveSizeInBits().getFixedValue();
 
 2255        if (
Size > MaxParameterWidth)
 
 2256          MaxParameterWidth = 
Size;
 
 2260  GetMaxParameterWidth(FT->getReturnType());
 
 2261  verifyParameterAttrs(RetAttrs, FT->getReturnType(), V);
 
 2264  for (
unsigned i = 0, e = FT->getNumParams(); i != e; ++i) {
 
 2265    Type *Ty = FT->getParamType(i);
 
 2266    AttributeSet ArgAttrs = 
Attrs.getParamAttrs(i);
 
 2270            "immarg attribute only applies to intrinsics", V);
 
 2273              "Attribute 'elementtype' can only be applied to intrinsics" 
 2278    verifyParameterAttrs(ArgAttrs, Ty, V);
 
 2279    GetMaxParameterWidth(Ty);
 
 2282      Check(!SawNest, 
"More than one parameter has attribute nest!", V);
 
 2287      Check(!SawReturned, 
"More than one parameter has attribute returned!", V);
 
 2289            "Incompatible argument and return types for 'returned' attribute",
 
 2295      Check(!SawSRet, 
"Cannot have multiple 'sret' parameters!", V);
 
 2296      Check(i == 0 || i == 1,
 
 2297            "Attribute 'sret' is not on first or second parameter!", V);
 
 2302      Check(!SawSwiftSelf, 
"Cannot have multiple 'swiftself' parameters!", V);
 
 2303      SawSwiftSelf = 
true;
 
 2307      Check(!SawSwiftAsync, 
"Cannot have multiple 'swiftasync' parameters!", V);
 
 2308      SawSwiftAsync = 
true;
 
 2312      Check(!SawSwiftError, 
"Cannot have multiple 'swifterror' parameters!", V);
 
 2313      SawSwiftError = 
true;
 
 2317      Check(i == FT->getNumParams() - 1,
 
 2318            "inalloca isn't on the last parameter!", V);
 
 2322  if (!
Attrs.hasFnAttrs())
 
 2325  verifyAttributeTypes(
Attrs.getFnAttrs(), V);
 
 2328              Attribute::canUseAsFnAttr(
FnAttr.getKindAsEnum()),
 
 2329          "Attribute '" + 
FnAttr.getAsString() +
 
 2330              "' does not apply to functions!",
 
 2333  Check(!(
Attrs.hasFnAttr(Attribute::NoInline) &&
 
 2334          Attrs.hasFnAttr(Attribute::AlwaysInline)),
 
 2335        "Attributes 'noinline and alwaysinline' are incompatible!", V);
 
 2337  if (
Attrs.hasFnAttr(Attribute::OptimizeNone)) {
 
 2339          "Attribute 'optnone' requires 'noinline'!", V);
 
 2341    Check(!
Attrs.hasFnAttr(Attribute::OptimizeForSize),
 
 2342          "Attributes 'optsize and optnone' are incompatible!", V);
 
 2345          "Attributes 'minsize and optnone' are incompatible!", V);
 
 2347    Check(!
Attrs.hasFnAttr(Attribute::OptimizeForDebugging),
 
 2348          "Attributes 'optdebug and optnone' are incompatible!", V);
 
 2351  Check(!(
Attrs.hasFnAttr(Attribute::SanitizeRealtime) &&
 
 2352          Attrs.hasFnAttr(Attribute::SanitizeRealtimeBlocking)),
 
 2354        "'sanitize_realtime and sanitize_realtime_blocking' are incompatible!",
 
 2357  if (
Attrs.hasFnAttr(Attribute::OptimizeForDebugging)) {
 
 2358    Check(!
Attrs.hasFnAttr(Attribute::OptimizeForSize),
 
 2359          "Attributes 'optsize and optdebug' are incompatible!", V);
 
 2362          "Attributes 'minsize and optdebug' are incompatible!", V);
 
 2365  Check(!
Attrs.hasAttrSomewhere(Attribute::Writable) ||
 
 2366        isModSet(
Attrs.getMemoryEffects().getModRef(IRMemLocation::ArgMem)),
 
 2367        "Attribute writable and memory without argmem: write are incompatible!",
 
 2370  if (
Attrs.hasFnAttr(
"aarch64_pstate_sm_enabled")) {
 
 2371    Check(!
Attrs.hasFnAttr(
"aarch64_pstate_sm_compatible"),
 
 2372           "Attributes 'aarch64_pstate_sm_enabled and " 
 2373           "aarch64_pstate_sm_compatible' are incompatible!",
 
 2377  Check((
Attrs.hasFnAttr(
"aarch64_new_za") + 
Attrs.hasFnAttr(
"aarch64_in_za") +
 
 2378         Attrs.hasFnAttr(
"aarch64_inout_za") +
 
 2379         Attrs.hasFnAttr(
"aarch64_out_za") +
 
 2380         Attrs.hasFnAttr(
"aarch64_preserves_za") +
 
 2381         Attrs.hasFnAttr(
"aarch64_za_state_agnostic")) <= 1,
 
 2382        "Attributes 'aarch64_new_za', 'aarch64_in_za', 'aarch64_out_za', " 
 2383        "'aarch64_inout_za', 'aarch64_preserves_za' and " 
 2384        "'aarch64_za_state_agnostic' are mutually exclusive",
 
 2388         Attrs.hasFnAttr(
"aarch64_in_zt0") +
 
 2389         Attrs.hasFnAttr(
"aarch64_inout_zt0") +
 
 2390         Attrs.hasFnAttr(
"aarch64_out_zt0") +
 
 2391         Attrs.hasFnAttr(
"aarch64_preserves_zt0") +
 
 2392         Attrs.hasFnAttr(
"aarch64_za_state_agnostic")) <= 1,
 
 2393        "Attributes 'aarch64_new_zt0', 'aarch64_in_zt0', 'aarch64_out_zt0', " 
 2394        "'aarch64_inout_zt0', 'aarch64_preserves_zt0' and " 
 2395        "'aarch64_za_state_agnostic' are mutually exclusive",
 
 2398  if (
Attrs.hasFnAttr(Attribute::JumpTable)) {
 
 2401          "Attribute 'jumptable' requires 'unnamed_addr'", V);
 
 2404  if (
auto Args = 
Attrs.getFnAttrs().getAllocSizeArgs()) {
 
 2405    auto CheckParam = [&](StringRef 
Name, 
unsigned ParamNo) {
 
 2406      if (ParamNo >= FT->getNumParams()) {
 
 2407        CheckFailed(
"'allocsize' " + Name + 
" argument is out of bounds", V);
 
 2411      if (!FT->getParamType(ParamNo)->isIntegerTy()) {
 
 2412        CheckFailed(
"'allocsize' " + Name +
 
 2413                        " argument must refer to an integer parameter",
 
 2421    if (!CheckParam(
"element size", 
Args->first))
 
 2424    if (
Args->second && !CheckParam(
"number of elements", *
Args->second))
 
 2428  if (
Attrs.hasFnAttr(Attribute::AllocKind)) {
 
 2431        K & (AllocFnKind::Alloc | AllocFnKind::Realloc | AllocFnKind::Free);
 
 2433            {AllocFnKind::Alloc, AllocFnKind::Realloc, AllocFnKind::Free},
 
 2436          "'allockind()' requires exactly one of alloc, realloc, and free");
 
 2437    if ((
Type == AllocFnKind::Free) &&
 
 2438        ((K & (AllocFnKind::Uninitialized | AllocFnKind::Zeroed |
 
 2439               AllocFnKind::Aligned)) != AllocFnKind::Unknown))
 
 2440      CheckFailed(
"'allockind(\"free\")' doesn't allow uninitialized, zeroed, " 
 2441                  "or aligned modifiers.");
 
 2442    AllocFnKind ZeroedUninit = AllocFnKind::Uninitialized | AllocFnKind::Zeroed;
 
 2443    if ((K & ZeroedUninit) == ZeroedUninit)
 
 2444      CheckFailed(
"'allockind()' can't be both zeroed and uninitialized");
 
 2448    StringRef S = 
A.getValueAsString();
 
 2449    Check(!S.
empty(), 
"'alloc-variant-zeroed' must not be empty");
 
 2457              "'alloc-variant-zeroed' must name a function belonging to the " 
 2458              "same 'alloc-family'");
 
 2461                (
Variant->getFnAttribute(Attribute::AllocKind).getAllocKind() &
 
 2462                 AllocFnKind::Zeroed) != AllocFnKind::Unknown,
 
 2463            "'alloc-variant-zeroed' must name a function with " 
 2464            "'allockind(\"zeroed\")'");
 
 2467            "'alloc-variant-zeroed' must name a function with the same " 
 2472  if (
Attrs.hasFnAttr(Attribute::VScaleRange)) {
 
 2473    unsigned VScaleMin = 
Attrs.getFnAttrs().getVScaleRangeMin();
 
 2475      CheckFailed(
"'vscale_range' minimum must be greater than 0", V);
 
 2477      CheckFailed(
"'vscale_range' minimum must be power-of-two value", V);
 
 2478    std::optional<unsigned> VScaleMax = 
Attrs.getFnAttrs().getVScaleRangeMax();
 
 2479    if (VScaleMax && VScaleMin > VScaleMax)
 
 2480      CheckFailed(
"'vscale_range' minimum cannot be greater than maximum", V);
 
 2482      CheckFailed(
"'vscale_range' maximum must be power-of-two value", V);
 
 2485  if (
Attribute FPAttr = 
Attrs.getFnAttr(
"frame-pointer"); FPAttr.isValid()) {
 
 2486    StringRef 
FP = FPAttr.getValueAsString();
 
 2487    if (
FP != 
"all" && 
FP != 
"non-leaf" && 
FP != 
"none" && 
FP != 
"reserved")
 
 2488      CheckFailed(
"invalid value for 'frame-pointer' attribute: " + 
FP, V);
 
 2491  checkUnsignedBaseTenFuncAttr(Attrs, 
"patchable-function-prefix", V);
 
 2492  checkUnsignedBaseTenFuncAttr(Attrs, 
"patchable-function-entry", V);
 
 2493  if (
Attrs.hasFnAttr(
"patchable-function-entry-section"))
 
 2494    Check(!
Attrs.getFnAttr(
"patchable-function-entry-section")
 
 2497          "\"patchable-function-entry-section\" must not be empty");
 
 2498  checkUnsignedBaseTenFuncAttr(Attrs, 
"warn-stack-size", V);
 
 2500  if (
auto A = 
Attrs.getFnAttr(
"sign-return-address"); 
A.isValid()) {
 
 2501    StringRef S = 
A.getValueAsString();
 
 2502    if (S != 
"none" && S != 
"all" && S != 
"non-leaf")
 
 2503      CheckFailed(
"invalid value for 'sign-return-address' attribute: " + S, V);
 
 2506  if (
auto A = 
Attrs.getFnAttr(
"sign-return-address-key"); 
A.isValid()) {
 
 2507    StringRef S = 
A.getValueAsString();
 
 2508    if (S != 
"a_key" && S != 
"b_key")
 
 2509      CheckFailed(
"invalid value for 'sign-return-address-key' attribute: " + S,
 
 2511    if (
auto AA = 
Attrs.getFnAttr(
"sign-return-address"); !AA.isValid()) {
 
 2513          "'sign-return-address-key' present without `sign-return-address`");
 
 2517  if (
auto A = 
Attrs.getFnAttr(
"branch-target-enforcement"); 
A.isValid()) {
 
 2518    StringRef S = 
A.getValueAsString();
 
 2519    if (S != 
"" && S != 
"true" && S != 
"false")
 
 2521          "invalid value for 'branch-target-enforcement' attribute: " + S, V);
 
 2524  if (
auto A = 
Attrs.getFnAttr(
"branch-protection-pauth-lr"); 
A.isValid()) {
 
 2525    StringRef S = 
A.getValueAsString();
 
 2526    if (S != 
"" && S != 
"true" && S != 
"false")
 
 2528          "invalid value for 'branch-protection-pauth-lr' attribute: " + S, V);
 
 2531  if (
auto A = 
Attrs.getFnAttr(
"guarded-control-stack"); 
A.isValid()) {
 
 2532    StringRef S = 
A.getValueAsString();
 
 2533    if (S != 
"" && S != 
"true" && S != 
"false")
 
 2534      CheckFailed(
"invalid value for 'guarded-control-stack' attribute: " + S,
 
 2538  if (
auto A = 
Attrs.getFnAttr(
"vector-function-abi-variant"); 
A.isValid()) {
 
 2539    StringRef S = 
A.getValueAsString();
 
 2542      CheckFailed(
"invalid name for a VFABI variant: " + S, V);
 
 2545  if (
auto A = 
Attrs.getFnAttr(
"denormal-fp-math"); 
A.isValid()) {
 
 2546    StringRef S = 
A.getValueAsString();
 
 2548      CheckFailed(
"invalid value for 'denormal-fp-math' attribute: " + S, V);
 
 2551  if (
auto A = 
Attrs.getFnAttr(
"denormal-fp-math-f32"); 
A.isValid()) {
 
 2552    StringRef S = 
A.getValueAsString();
 
 2554      CheckFailed(
"invalid value for 'denormal-fp-math-f32' attribute: " + S,
 
 2558void Verifier::verifyUnknownProfileMetadata(MDNode *MD) {
 
 2560        "'unknown' !prof should have a single additional operand", MD);
 
 2563        "'unknown' !prof should have an additional operand of type " 
 2566        "the 'unknown' !prof operand should not be an empty string");
 
 2569void Verifier::verifyFunctionMetadata(
 
 2570    ArrayRef<std::pair<unsigned, MDNode *>> MDs) {
 
 2571  for (
const auto &Pair : MDs) {
 
 2572    if (Pair.first == LLVMContext::MD_prof) {
 
 2573      MDNode *MD = Pair.second;
 
 2575            "!prof annotations should have no less than 2 operands", MD);
 
 2580        verifyUnknownProfileMetadata(MD);
 
 2585      Check(MD->
getOperand(0) != 
nullptr, 
"first operand should not be null",
 
 2588            "expected string with name of the !prof annotation", MD);
 
 2593            "first operand should be 'function_entry_count'" 
 2594            " or 'synthetic_function_entry_count'",
 
 2598      Check(MD->
getOperand(1) != 
nullptr, 
"second operand should not be null",
 
 2601            "expected integer argument to function_entry_count", MD);
 
 2602    } 
else if (Pair.first == LLVMContext::MD_kcfi_type) {
 
 2603      MDNode *MD = Pair.second;
 
 2605            "!kcfi_type must have exactly one operand", MD);
 
 2606      Check(MD->
getOperand(0) != 
nullptr, 
"!kcfi_type operand must not be null",
 
 2609            "expected a constant operand for !kcfi_type", MD);
 
 2612            "expected a constant integer operand for !kcfi_type", MD);
 
 2614            "expected a 32-bit integer constant operand for !kcfi_type", MD);
 
 2619void Verifier::visitConstantExprsRecursively(
const Constant *EntryC) {
 
 2620  if (!ConstantExprVisited.
insert(EntryC).second)
 
 2624  Stack.push_back(EntryC);
 
 2626  while (!
Stack.empty()) {
 
 2631      visitConstantExpr(CE);
 
 2634      visitConstantPtrAuth(CPA);
 
 2639      Check(GV->
getParent() == &M, 
"Referencing global in another module!",
 
 2645    for (
const Use &U : 
C->operands()) {
 
 2649      if (!ConstantExprVisited.
insert(OpC).second)
 
 2651      Stack.push_back(OpC);
 
 2656void Verifier::visitConstantExpr(
const ConstantExpr *CE) {
 
 2657  if (
CE->getOpcode() == Instruction::BitCast)
 
 2660          "Invalid bitcast", CE);
 
 2661  else if (
CE->getOpcode() == Instruction::PtrToAddr)
 
 2662    checkPtrToAddr(
CE->getOperand(0)->getType(), 
CE->getType(), *CE);
 
 2665void Verifier::visitConstantPtrAuth(
const ConstantPtrAuth *CPA) {
 
 2667        "signed ptrauth constant base pointer must have pointer type");
 
 2670        "signed ptrauth constant must have same type as its base pointer");
 
 2673        "signed ptrauth constant key must be i32 constant integer");
 
 2676        "signed ptrauth constant address discriminator must be a pointer");
 
 2679        "signed ptrauth constant discriminator must be i64 constant integer");
 
 2682bool Verifier::verifyAttributeCount(AttributeList Attrs, 
unsigned Params) {
 
 2685  return Attrs.getNumAttrSets() <= Params + 2;
 
 2688void Verifier::verifyInlineAsmCall(
const CallBase &
Call) {
 
 2691  unsigned LabelNo = 0;
 
 2692  for (
const InlineAsm::ConstraintInfo &CI : 
IA->ParseConstraints()) {
 
 2702    if (CI.isIndirect) {
 
 2705            "Operand for indirect constraint must have pointer type", &
Call);
 
 2708            "Operand for indirect constraint must have elementtype attribute",
 
 2712            "Elementtype attribute can only be applied for indirect " 
 2721    Check(LabelNo == CallBr->getNumIndirectDests(),
 
 2722          "Number of label constraints does not match number of callbr dests",
 
 2725    Check(LabelNo == 0, 
"Label constraints can only be used with callbr",
 
 2731void Verifier::verifyStatepoint(
const CallBase &
Call) {
 
 2736        "gc.statepoint must read and write all memory to preserve " 
 2737        "reordering restrictions required by safepoint semantics",
 
 2740  const int64_t NumPatchBytes =
 
 2743  Check(NumPatchBytes >= 0,
 
 2744        "gc.statepoint number of patchable bytes must be " 
 2749  Check(TargetElemType,
 
 2750        "gc.statepoint callee argument must have elementtype attribute", 
Call);
 
 2752  Check(TargetFuncType,
 
 2753        "gc.statepoint callee elementtype must be function type", 
Call);
 
 2756  Check(NumCallArgs >= 0,
 
 2757        "gc.statepoint number of arguments to underlying call " 
 2760  const int NumParams = (int)TargetFuncType->getNumParams();
 
 2761  if (TargetFuncType->isVarArg()) {
 
 2762    Check(NumCallArgs >= NumParams,
 
 2763          "gc.statepoint mismatch in number of vararg call args", 
Call);
 
 2766    Check(TargetFuncType->getReturnType()->isVoidTy(),
 
 2767          "gc.statepoint doesn't support wrapping non-void " 
 2768          "vararg functions yet",
 
 2771    Check(NumCallArgs == NumParams,
 
 2772          "gc.statepoint mismatch in number of call args", 
Call);
 
 2774  const uint64_t 
Flags 
 2776  Check((Flags & ~(uint64_t)StatepointFlags::MaskAll) == 0,
 
 2777        "unknown flag used in gc.statepoint flags argument", 
Call);
 
 2782  for (
int i = 0; i < NumParams; i++) {
 
 2783    Type *ParamType = TargetFuncType->getParamType(i);
 
 2785    Check(ArgType == ParamType,
 
 2786          "gc.statepoint call argument does not match wrapped " 
 2790    if (TargetFuncType->isVarArg()) {
 
 2791      AttributeSet ArgAttrs = 
Attrs.getParamAttrs(5 + i);
 
 2793            "Attribute 'sret' cannot be used for vararg call arguments!", 
Call);
 
 2797  const int EndCallArgsInx = 4 + NumCallArgs;
 
 2801        "gc.statepoint number of transition arguments " 
 2802        "must be constant integer",
 
 2804  const int NumTransitionArgs =
 
 2806  Check(NumTransitionArgs == 0,
 
 2807        "gc.statepoint w/inline transition bundle is deprecated", 
Call);
 
 2808  const int EndTransitionArgsInx = EndCallArgsInx + 1 + NumTransitionArgs;
 
 2812        "gc.statepoint number of deoptimization arguments " 
 2813        "must be constant integer",
 
 2816  Check(NumDeoptArgs == 0,
 
 2817        "gc.statepoint w/inline deopt operands is deprecated", 
Call);
 
 2819  const int ExpectedNumArgs = 7 + NumCallArgs;
 
 2821        "gc.statepoint too many arguments", 
Call);
 
 2828    Check(UserCall, 
"illegal use of statepoint token", 
Call, U);
 
 2832          "gc.result or gc.relocate are the only value uses " 
 2833          "of a gc.statepoint",
 
 2837            "gc.result connected to wrong gc.statepoint", 
Call, UserCall);
 
 2840            "gc.relocate connected to wrong gc.statepoint", 
Call, UserCall);
 
 2854void Verifier::verifyFrameRecoverIndices() {
 
 2855  for (
auto &Counts : FrameEscapeInfo) {
 
 2857    unsigned EscapedObjectCount = Counts.second.first;
 
 2858    unsigned MaxRecoveredIndex = Counts.second.second;
 
 2859    Check(MaxRecoveredIndex <= EscapedObjectCount,
 
 2860          "all indices passed to llvm.localrecover must be less than the " 
 2861          "number of arguments passed to llvm.localescape in the parent " 
 2870    UnwindDest = 
II->getUnwindDest();
 
 2872    UnwindDest = CSI->getUnwindDest();
 
 
 2878void Verifier::verifySiblingFuncletUnwinds() {
 
 2879  llvm::TimeTraceScope timeScope(
"Verifier verify sibling funclet unwinds");
 
 2880  SmallPtrSet<Instruction *, 8> Visited;
 
 2881  SmallPtrSet<Instruction *, 8> 
Active;
 
 2882  for (
const auto &Pair : SiblingFuncletInfo) {
 
 2884    if (Visited.
count(PredPad))
 
 2890      if (
Active.count(SuccPad)) {
 
 2893        SmallVector<Instruction *, 8> CycleNodes;
 
 2896          Instruction *CycleTerminator = SiblingFuncletInfo[CyclePad];
 
 2897          if (CycleTerminator != CyclePad)
 
 2900        } 
while (CyclePad != SuccPad);
 
 2901        Check(
false, 
"EH pads can't handle each other's exceptions",
 
 2905      if (!Visited.
insert(SuccPad).second)
 
 2909      auto TermI = SiblingFuncletInfo.find(PredPad);
 
 2910      if (TermI == SiblingFuncletInfo.end())
 
 2923void Verifier::visitFunction(
const Function &
F) {
 
 2924  visitGlobalValue(
F);
 
 2927  FunctionType *FT = 
F.getFunctionType();
 
 2928  unsigned NumArgs = 
F.arg_size();
 
 2931        "Function context does not match Module context!", &
F);
 
 2933  Check(!
F.hasCommonLinkage(), 
"Functions may not have common linkage", &
F);
 
 2934  Check(FT->getNumParams() == NumArgs,
 
 2935        "# formal arguments must match # of arguments for function type!", &
F,
 
 2937  Check(
F.getReturnType()->isFirstClassType() ||
 
 2938            F.getReturnType()->isVoidTy() || 
F.getReturnType()->isStructTy(),
 
 2939        "Functions cannot return aggregate values!", &
F);
 
 2941  Check(!
F.hasStructRetAttr() || 
F.getReturnType()->isVoidTy(),
 
 2942        "Invalid struct return type!", &
F);
 
 2944  if (MaybeAlign 
A = 
F.getAlign()) {
 
 2945    Check(
A->value() <= Value::MaximumAlignment,
 
 2946          "huge alignment values are unsupported", &
F);
 
 2949  AttributeList 
Attrs = 
F.getAttributes();
 
 2951  Check(verifyAttributeCount(Attrs, FT->getNumParams()),
 
 2952        "Attribute after last parameter!", &
F);
 
 2954  bool IsIntrinsic = 
F.isIntrinsic();
 
 2957  verifyFunctionAttrs(FT, Attrs, &
F, IsIntrinsic,  
false);
 
 2963        "Attribute 'builtin' can only be applied to a callsite.", &
F);
 
 2965  Check(!
Attrs.hasAttrSomewhere(Attribute::ElementType),
 
 2966        "Attribute 'elementtype' can only be applied to a callsite.", &
F);
 
 2969        "Attribute 'aarch64_zt0_undef' can only be applied to a callsite.");
 
 2971  if (
Attrs.hasFnAttr(Attribute::Naked))
 
 2972    for (
const Argument &Arg : 
F.args())
 
 2973      Check(Arg.use_empty(), 
"cannot use argument of naked function", &Arg);
 
 2978  switch (
F.getCallingConv()) {
 
 2980  case CallingConv::C:
 
 2982  case CallingConv::X86_INTR: {
 
 2983    Check(
F.arg_empty() || 
Attrs.hasParamAttr(0, Attribute::ByVal),
 
 2984          "Calling convention parameter requires byval", &
F);
 
 2987  case CallingConv::AMDGPU_KERNEL:
 
 2988  case CallingConv::SPIR_KERNEL:
 
 2989  case CallingConv::AMDGPU_CS_Chain:
 
 2990  case CallingConv::AMDGPU_CS_ChainPreserve:
 
 2991    Check(
F.getReturnType()->isVoidTy(),
 
 2992          "Calling convention requires void return type", &
F);
 
 2994  case CallingConv::AMDGPU_VS:
 
 2995  case CallingConv::AMDGPU_HS:
 
 2996  case CallingConv::AMDGPU_GS:
 
 2997  case CallingConv::AMDGPU_PS:
 
 2998  case CallingConv::AMDGPU_CS:
 
 2999    Check(!
F.hasStructRetAttr(), 
"Calling convention does not allow sret", &
F);
 
 3000    if (
F.getCallingConv() != CallingConv::SPIR_KERNEL) {
 
 3001      const unsigned StackAS = 
DL.getAllocaAddrSpace();
 
 3003      for (
const Argument &Arg : 
F.args()) {
 
 3004        Check(!
Attrs.hasParamAttr(i, Attribute::ByVal),
 
 3005              "Calling convention disallows byval", &
F);
 
 3006        Check(!
Attrs.hasParamAttr(i, Attribute::Preallocated),
 
 3007              "Calling convention disallows preallocated", &
F);
 
 3008        Check(!
Attrs.hasParamAttr(i, Attribute::InAlloca),
 
 3009              "Calling convention disallows inalloca", &
F);
 
 3011        if (
Attrs.hasParamAttr(i, Attribute::ByRef)) {
 
 3014          Check(Arg.getType()->getPointerAddressSpace() != StackAS,
 
 3015                "Calling convention disallows stack byref", &
F);
 
 3023  case CallingConv::Fast:
 
 3024  case CallingConv::Cold:
 
 3025  case CallingConv::Intel_OCL_BI:
 
 3026  case CallingConv::PTX_Kernel:
 
 3027  case CallingConv::PTX_Device:
 
 3029          "Calling convention does not support varargs or " 
 3030          "perfect forwarding!",
 
 3033  case CallingConv::AMDGPU_Gfx_WholeWave:
 
 3034    Check(!
F.arg_empty() && 
F.arg_begin()->getType()->isIntegerTy(1),
 
 3035          "Calling convention requires first argument to be i1", &
F);
 
 3036    Check(!
F.arg_begin()->hasInRegAttr(),
 
 3037          "Calling convention requires first argument to not be inreg", &
F);
 
 3039          "Calling convention does not support varargs or " 
 3040          "perfect forwarding!",
 
 3047  for (
const Argument &Arg : 
F.args()) {
 
 3048    Check(Arg.getType() == FT->getParamType(i),
 
 3049          "Argument value does not match function argument type!", &Arg,
 
 3050          FT->getParamType(i));
 
 3051    Check(Arg.getType()->isFirstClassType(),
 
 3052          "Function arguments must have first-class types!", &Arg);
 
 3054      Check(!Arg.getType()->isMetadataTy(),
 
 3055            "Function takes metadata but isn't an intrinsic", &Arg, &
F);
 
 3056      Check(!Arg.getType()->isTokenLikeTy(),
 
 3057            "Function takes token but isn't an intrinsic", &Arg, &
F);
 
 3058      Check(!Arg.getType()->isX86_AMXTy(),
 
 3059            "Function takes x86_amx but isn't an intrinsic", &Arg, &
F);
 
 3063    if (
Attrs.hasParamAttr(i, Attribute::SwiftError)) {
 
 3064      verifySwiftErrorValue(&Arg);
 
 3070    Check(!
F.getReturnType()->isTokenLikeTy(),
 
 3071          "Function returns a token but isn't an intrinsic", &
F);
 
 3072    Check(!
F.getReturnType()->isX86_AMXTy(),
 
 3073          "Function returns a x86_amx but isn't an intrinsic", &
F);
 
 3078  F.getAllMetadata(MDs);
 
 3079  assert(
F.hasMetadata() != MDs.
empty() && 
"Bit out-of-sync");
 
 3080  verifyFunctionMetadata(MDs);
 
 3083  if (
F.hasPersonalityFn()) {
 
 3086      Check(Per->getParent() == 
F.getParent(),
 
 3087            "Referencing personality function in another module!", &
F,
 
 3088            F.getParent(), Per, Per->getParent());
 
 3092  BlockEHFuncletColors.
clear();
 
 3094  if (
F.isMaterializable()) {
 
 3096    Check(MDs.
empty(), 
"unmaterialized function cannot have metadata", &
F,
 
 3098  } 
else if (
F.isDeclaration()) {
 
 3099    for (
const auto &
I : MDs) {
 
 3101      CheckDI(
I.first != LLVMContext::MD_dbg ||
 
 3103              "function declaration may only have a unique !dbg attachment",
 
 3105      Check(
I.first != LLVMContext::MD_prof,
 
 3106            "function declaration may not have a !prof attachment", &
F);
 
 3109      visitMDNode(*
I.second, AreDebugLocsAllowed::Yes);
 
 3111    Check(!
F.hasPersonalityFn(),
 
 3112          "Function declaration shouldn't have a personality routine", &
F);
 
 3116    Check(!IsIntrinsic, 
"llvm intrinsics cannot be defined!", &
F);
 
 3121          "Entry block to function must not have predecessors!", Entry);
 
 3124    if (
Entry->hasAddressTaken()) {
 
 3126            "blockaddress may not be used with the entry block!", Entry);
 
 3129    unsigned NumDebugAttachments = 0, NumProfAttachments = 0,
 
 3130             NumKCFIAttachments = 0;
 
 3132    for (
const auto &
I : MDs) {
 
 3134      auto AllowLocs = AreDebugLocsAllowed::No;
 
 3138      case LLVMContext::MD_dbg: {
 
 3139        ++NumDebugAttachments;
 
 3140        CheckDI(NumDebugAttachments == 1,
 
 3141                "function must have a single !dbg attachment", &
F, 
I.second);
 
 3143                "function !dbg attachment must be a subprogram", &
F, 
I.second);
 
 3145                "function definition may only have a distinct !dbg attachment",
 
 3149        const Function *&AttachedTo = DISubprogramAttachments[
SP];
 
 3150        CheckDI(!AttachedTo || AttachedTo == &
F,
 
 3151                "DISubprogram attached to more than one function", SP, &
F);
 
 3153        AllowLocs = AreDebugLocsAllowed::Yes;
 
 3156      case LLVMContext::MD_prof:
 
 3157        ++NumProfAttachments;
 
 3158        Check(NumProfAttachments == 1,
 
 3159              "function must have a single !prof attachment", &
F, 
I.second);
 
 3161      case LLVMContext::MD_kcfi_type:
 
 3162        ++NumKCFIAttachments;
 
 3163        Check(NumKCFIAttachments == 1,
 
 3164              "function must have a single !kcfi_type attachment", &
F,
 
 3170      visitMDNode(*
I.second, AllowLocs);
 
 3178  if (
F.isIntrinsic() && 
F.getParent()->isMaterialized()) {
 
 3180    if (
F.hasAddressTaken(&U, 
false, 
true, 
false,
 
 3182      Check(
false, 
"Invalid user of intrinsic instruction!", U);
 
 3186  switch (
F.getIntrinsicID()) {
 
 3187  case Intrinsic::experimental_gc_get_pointer_base: {
 
 3188    FunctionType *FT = 
F.getFunctionType();
 
 3189    Check(FT->getNumParams() == 1, 
"wrong number of parameters", 
F);
 
 3191          "gc.get.pointer.base must return a pointer", 
F);
 
 3192    Check(FT->getParamType(0) == 
F.getReturnType(),
 
 3193          "gc.get.pointer.base operand and result must be of the same type", 
F);
 
 3196  case Intrinsic::experimental_gc_get_pointer_offset: {
 
 3197    FunctionType *FT = 
F.getFunctionType();
 
 3198    Check(FT->getNumParams() == 1, 
"wrong number of parameters", 
F);
 
 3200          "gc.get.pointer.offset operand must be a pointer", 
F);
 
 3201    Check(
F.getReturnType()->isIntegerTy(),
 
 3202          "gc.get.pointer.offset must return integer", 
F);
 
 3207  auto *
N = 
F.getSubprogram();
 
 3208  HasDebugInfo = (
N != 
nullptr);
 
 3216  SmallPtrSet<const MDNode *, 32> Seen;
 
 3228            "DILocation's scope must be a DILocalScope", 
N, &
F, &
I, 
DL, Parent);
 
 3230    DILocalScope *
Scope = 
DL->getInlinedAtScope();
 
 3231    Check(Scope, 
"Failed to find DILocalScope", 
DL);
 
 3233    if (!Seen.
insert(Scope).second)
 
 3236    DISubprogram *
SP = 
Scope->getSubprogram();
 
 3240    if ((Scope != SP) && !Seen.
insert(SP).second)
 
 3244            "!dbg attachment points at wrong subprogram for function", 
N, &
F,
 
 3248    for (
auto &
I : BB) {
 
 3249      VisitDebugLoc(
I, 
I.getDebugLoc().getAsMDNode());
 
 3251      if (
auto MD = 
I.getMetadata(LLVMContext::MD_loop))
 
 3254      if (BrokenDebugInfo)
 
 3261void Verifier::visitBasicBlock(BasicBlock &BB) {
 
 3262  InstsInThisBlock.
clear();
 
 3263  ConvergenceVerifyHelper.
visit(BB);
 
 3274    for (
const PHINode &PN : BB.
phis()) {
 
 3275      Check(PN.getNumIncomingValues() == Preds.size(),
 
 3276            "PHINode should have one entry for each predecessor of its " 
 3277            "parent basic block!",
 
 3282      Values.
reserve(PN.getNumIncomingValues());
 
 3283      for (
unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i)
 
 3285            std::make_pair(PN.getIncomingBlock(i), PN.getIncomingValue(i)));
 
 3288      for (
unsigned i = 0, e = Values.
size(); i != e; ++i) {
 
 3293        Check(i == 0 || Values[i].first != Values[i - 1].first ||
 
 3294                  Values[i].second == Values[i - 1].second,
 
 3295              "PHI node has multiple entries for the same basic block with " 
 3296              "different incoming values!",
 
 3297              &PN, Values[i].first, Values[i].second, Values[i - 1].second);
 
 3301        Check(Values[i].first == Preds[i],
 
 3302              "PHI node entries do not match predecessors!", &PN,
 
 3303              Values[i].first, Preds[i]);
 
 3311    Check(
I.getParent() == &BB, 
"Instruction has bogus parent pointer!");
 
 3315  CheckDI(!BB.getTrailingDbgRecords(), 
"Basic Block has trailing DbgRecords!",
 
 3319void Verifier::visitTerminator(Instruction &
I) {
 
 3321  Check(&
I == 
I.getParent()->getTerminator(),
 
 3322        "Terminator found in the middle of a basic block!", 
I.getParent());
 
 3323  visitInstruction(
I);
 
 3326void Verifier::visitBranchInst(BranchInst &BI) {
 
 3329          "Branch condition is not 'i1' type!", &BI, BI.
getCondition());
 
 3331  visitTerminator(BI);
 
 3334void Verifier::visitReturnInst(ReturnInst &RI) {
 
 3337  if (
F->getReturnType()->isVoidTy())
 
 3339          "Found return instr that returns non-void in Function of void " 
 3341          &RI, 
F->getReturnType());
 
 3344          "Function return type does not match operand " 
 3345          "type of return inst!",
 
 3346          &RI, 
F->getReturnType());
 
 3350  visitTerminator(RI);
 
 3353void Verifier::visitSwitchInst(SwitchInst &SI) {
 
 3354  Check(
SI.getType()->isVoidTy(), 
"Switch must have void result type!", &SI);
 
 3357  Type *SwitchTy = 
SI.getCondition()->getType();
 
 3358  SmallPtrSet<ConstantInt*, 32> 
Constants;
 
 3359  for (
auto &Case : 
SI.cases()) {
 
 3361          "Case value is not a constant integer.", &SI);
 
 3362    Check(Case.getCaseValue()->getType() == SwitchTy,
 
 3363          "Switch constants must all be same type as switch value!", &SI);
 
 3365          "Duplicate integer as switch case", &SI, Case.getCaseValue());
 
 3368  visitTerminator(SI);
 
 3371void Verifier::visitIndirectBrInst(IndirectBrInst &BI) {
 
 3373        "Indirectbr operand must have pointer type!", &BI);
 
 3376          "Indirectbr destinations must all have pointer type!", &BI);
 
 3378  visitTerminator(BI);
 
 3381void Verifier::visitCallBrInst(CallBrInst &CBI) {
 
 3382  Check(CBI.
isInlineAsm(), 
"Callbr is currently only used for asm-goto!", &CBI);
 
 3384  Check(!
IA->canThrow(), 
"Unwinding from Callbr is not allowed");
 
 3386  verifyInlineAsmCall(CBI);
 
 3387  visitTerminator(CBI);
 
 3390void Verifier::visitSelectInst(SelectInst &SI) {
 
 3393        "Invalid operands for select instruction!", &SI);
 
 3395  Check(
SI.getTrueValue()->getType() == 
SI.getType(),
 
 3396        "Select values must have same type as select instruction!", &SI);
 
 3397  visitInstruction(SI);
 
 3403void Verifier::visitUserOp1(Instruction &
I) {
 
 3404  Check(
false, 
"User-defined operators should not live outside of a pass!", &
I);
 
 3407void Verifier::visitTruncInst(TruncInst &
I) {
 
 3409  Type *SrcTy = 
I.getOperand(0)->getType();
 
 3410  Type *DestTy = 
I.getType();
 
 3419        "trunc source and destination must both be a vector or neither", &
I);
 
 3420  Check(SrcBitSize > DestBitSize, 
"DestTy too big for Trunc", &
I);
 
 3422  visitInstruction(
I);
 
 3425void Verifier::visitZExtInst(ZExtInst &
I) {
 
 3427  Type *SrcTy = 
I.getOperand(0)->getType();
 
 3428  Type *DestTy = 
I.getType();
 
 3434        "zext source and destination must both be a vector or neither", &
I);
 
 3438  Check(SrcBitSize < DestBitSize, 
"Type too small for ZExt", &
I);
 
 3440  visitInstruction(
I);
 
 3443void Verifier::visitSExtInst(SExtInst &
I) {
 
 3445  Type *SrcTy = 
I.getOperand(0)->getType();
 
 3446  Type *DestTy = 
I.getType();
 
 3455        "sext source and destination must both be a vector or neither", &
I);
 
 3456  Check(SrcBitSize < DestBitSize, 
"Type too small for SExt", &
I);
 
 3458  visitInstruction(
I);
 
 3461void Verifier::visitFPTruncInst(FPTruncInst &
I) {
 
 3463  Type *SrcTy = 
I.getOperand(0)->getType();
 
 3464  Type *DestTy = 
I.getType();
 
 3472        "fptrunc source and destination must both be a vector or neither", &
I);
 
 3473  Check(SrcBitSize > DestBitSize, 
"DestTy too big for FPTrunc", &
I);
 
 3475  visitInstruction(
I);
 
 3478void Verifier::visitFPExtInst(FPExtInst &
I) {
 
 3480  Type *SrcTy = 
I.getOperand(0)->getType();
 
 3481  Type *DestTy = 
I.getType();
 
 3490        "fpext source and destination must both be a vector or neither", &
I);
 
 3491  Check(SrcBitSize < DestBitSize, 
"DestTy too small for FPExt", &
I);
 
 3493  visitInstruction(
I);
 
 3496void Verifier::visitUIToFPInst(UIToFPInst &
I) {
 
 3498  Type *SrcTy = 
I.getOperand(0)->getType();
 
 3499  Type *DestTy = 
I.getType();
 
 3504  Check(SrcVec == DstVec,
 
 3505        "UIToFP source and dest must both be vector or scalar", &
I);
 
 3507        "UIToFP source must be integer or integer vector", &
I);
 
 3511  if (SrcVec && DstVec)
 
 3514          "UIToFP source and dest vector length mismatch", &
I);
 
 3516  visitInstruction(
I);
 
 3519void Verifier::visitSIToFPInst(SIToFPInst &
I) {
 
 3521  Type *SrcTy = 
I.getOperand(0)->getType();
 
 3522  Type *DestTy = 
I.getType();
 
 3527  Check(SrcVec == DstVec,
 
 3528        "SIToFP source and dest must both be vector or scalar", &
I);
 
 3530        "SIToFP source must be integer or integer vector", &
I);
 
 3534  if (SrcVec && DstVec)
 
 3537          "SIToFP source and dest vector length mismatch", &
I);
 
 3539  visitInstruction(
I);
 
 3542void Verifier::visitFPToUIInst(FPToUIInst &
I) {
 
 3544  Type *SrcTy = 
I.getOperand(0)->getType();
 
 3545  Type *DestTy = 
I.getType();
 
 3550  Check(SrcVec == DstVec,
 
 3551        "FPToUI source and dest must both be vector or scalar", &
I);
 
 3554        "FPToUI result must be integer or integer vector", &
I);
 
 3556  if (SrcVec && DstVec)
 
 3559          "FPToUI source and dest vector length mismatch", &
I);
 
 3561  visitInstruction(
I);
 
 3564void Verifier::visitFPToSIInst(FPToSIInst &
I) {
 
 3566  Type *SrcTy = 
I.getOperand(0)->getType();
 
 3567  Type *DestTy = 
I.getType();
 
 3572  Check(SrcVec == DstVec,
 
 3573        "FPToSI source and dest must both be vector or scalar", &
I);
 
 3576        "FPToSI result must be integer or integer vector", &
I);
 
 3578  if (SrcVec && DstVec)
 
 3581          "FPToSI source and dest vector length mismatch", &
I);
 
 3583  visitInstruction(
I);
 
 3586void Verifier::checkPtrToAddr(
Type *SrcTy, 
Type *DestTy, 
const Value &V) {
 
 3595    Check(VSrc->getElementCount() == VDest->getElementCount(),
 
 3596          "PtrToAddr vector length mismatch", V);
 
 3599  Type *AddrTy = 
DL.getAddressType(SrcTy);
 
 3600  Check(AddrTy == DestTy, 
"PtrToAddr result must be address width", V);
 
 3603void Verifier::visitPtrToAddrInst(PtrToAddrInst &
I) {
 
 3604  checkPtrToAddr(
I.getOperand(0)->getType(), 
I.getType(), 
I);
 
 3605  visitInstruction(
I);
 
 3608void Verifier::visitPtrToIntInst(PtrToIntInst &
I) {
 
 3610  Type *SrcTy = 
I.getOperand(0)->getType();
 
 3611  Type *DestTy = 
I.getType();
 
 3622    Check(VSrc->getElementCount() == VDest->getElementCount(),
 
 3623          "PtrToInt Vector length mismatch", &
I);
 
 3626  visitInstruction(
I);
 
 3629void Verifier::visitIntToPtrInst(IntToPtrInst &
I) {
 
 3631  Type *SrcTy = 
I.getOperand(0)->getType();
 
 3632  Type *DestTy = 
I.getType();
 
 3642    Check(VSrc->getElementCount() == VDest->getElementCount(),
 
 3643          "IntToPtr Vector length mismatch", &
I);
 
 3645  visitInstruction(
I);
 
 3648void Verifier::visitBitCastInst(BitCastInst &
I) {
 
 3651      "Invalid bitcast", &
I);
 
 3652  visitInstruction(
I);
 
 3655void Verifier::visitAddrSpaceCastInst(AddrSpaceCastInst &
I) {
 
 3656  Type *SrcTy = 
I.getOperand(0)->getType();
 
 3657  Type *DestTy = 
I.getType();
 
 3664        "AddrSpaceCast must be between different address spaces", &
I);
 
 3666    Check(SrcVTy->getElementCount() ==
 
 3668          "AddrSpaceCast vector pointer number of elements mismatch", &
I);
 
 3669  visitInstruction(
I);
 
 3674void Verifier::visitPHINode(PHINode &PN) {
 
 3681        "PHI nodes not grouped at top of basic block!", &PN, PN.
getParent());
 
 3690          "PHI node operands are not the same type as the result!", &PN);
 
 3695  visitInstruction(PN);
 
 3698void Verifier::visitCallBase(CallBase &
Call) {
 
 3700        "Called function must be a pointer!", 
Call);
 
 3704  if (FTy->isVarArg())
 
 3706          "Called function requires more parameters than were provided!", 
Call);
 
 3709          "Incorrect number of arguments passed to called function!", 
Call);
 
 3712  for (
unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
 
 3714          "Call parameter type does not match function signature!",
 
 3720        "Attribute after last parameter!", 
Call);
 
 3727          "Intrinsic called with incompatible signature", 
Call);
 
 3731        "calling convention does not permit calls", 
Call);
 
 3737  auto VerifyTypeAlign = [&](
Type *Ty, 
const Twine &Message) {
 
 3740    Align ABIAlign = 
DL.getABITypeAlign(Ty);
 
 3741    Check(ABIAlign.
value() <= Value::MaximumAlignment,
 
 3742          "Incorrect alignment of " + Message + 
" to called function!", 
Call);
 
 3746    VerifyTypeAlign(FTy->getReturnType(), 
"return type");
 
 3747    for (
unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) {
 
 3748      Type *Ty = FTy->getParamType(i);
 
 3749      VerifyTypeAlign(Ty, 
"argument passed");
 
 3753  if (
Attrs.hasFnAttr(Attribute::Speculatable)) {
 
 3757          "speculatable attribute may not apply to call sites", 
Call);
 
 3760  if (
Attrs.hasFnAttr(Attribute::Preallocated)) {
 
 3762          "preallocated as a call site attribute can only be on " 
 3763          "llvm.call.preallocated.arg");
 
 3775      Check(AI->isUsedWithInAlloca(),
 
 3776            "inalloca argument for call has mismatched alloca", AI, 
Call);
 
 3782  for (
unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) {
 
 3786        Check(AI->isSwiftError(),
 
 3787              "swifterror argument for call has mismatched alloca", AI, 
Call);
 
 3791      Check(ArgI, 
"swifterror argument should come from an alloca or parameter",
 
 3792            SwiftErrorArg, 
Call);
 
 3793      Check(ArgI->hasSwiftErrorAttr(),
 
 3794            "swifterror argument for call has mismatched parameter", ArgI,
 
 3798    if (
Attrs.hasParamAttr(i, Attribute::ImmArg)) {
 
 3801      Check(Callee && 
Callee->hasParamAttribute(i, Attribute::ImmArg),
 
 3809            "immarg operand has non-immediate parameter", ArgVal, 
Call);
 
 3815          const ConstantRange &CR =
 
 3818                "immarg value " + Twine(CI->getValue().getSExtValue()) +
 
 3831      Check(hasOB != isMustTail,
 
 3832            "preallocated operand either requires a preallocated bundle or " 
 3833            "the call to be musttail (but not both)",
 
 3838  if (FTy->isVarArg()) {
 
 3840    bool SawNest = 
false;
 
 3841    bool SawReturned = 
false;
 
 3843    for (
unsigned Idx = 0; Idx < FTy->getNumParams(); ++Idx) {
 
 3844      if (
Attrs.hasParamAttr(Idx, Attribute::Nest))
 
 3846      if (
Attrs.hasParamAttr(Idx, Attribute::Returned))
 
 3851    for (
unsigned Idx = FTy->getNumParams(); Idx < 
Call.
arg_size(); ++Idx) {
 
 3853      AttributeSet ArgAttrs = 
Attrs.getParamAttrs(Idx);
 
 3854      verifyParameterAttrs(ArgAttrs, Ty, &
Call);
 
 3857        Check(!SawNest, 
"More than one parameter has attribute nest!", 
Call);
 
 3862        Check(!SawReturned, 
"More than one parameter has attribute returned!",
 
 3865              "Incompatible argument and return types for 'returned' " 
 3875              "Attribute 'sret' cannot be used for vararg call arguments!",
 
 3880              "inalloca isn't on the last argument!", 
Call);
 
 3886    for (
Type *ParamTy : FTy->params()) {
 
 3887      Check(!ParamTy->isMetadataTy(),
 
 3888            "Function has metadata parameter but isn't an intrinsic", 
Call);
 
 3889      Check(!ParamTy->isTokenLikeTy(),
 
 3890            "Function has token parameter but isn't an intrinsic", 
Call);
 
 3896    Check(!FTy->getReturnType()->isTokenLikeTy(),
 
 3897          "Return type cannot be token for indirect call!");
 
 3898    Check(!FTy->getReturnType()->isX86_AMXTy(),
 
 3899          "Return type cannot be x86_amx for indirect call!");
 
 3903    visitIntrinsicCall(
ID, 
Call);
 
 3908  bool FoundDeoptBundle = 
false, FoundFuncletBundle = 
false,
 
 3909       FoundGCTransitionBundle = 
false, FoundCFGuardTargetBundle = 
false,
 
 3910       FoundPreallocatedBundle = 
false, FoundGCLiveBundle = 
false,
 
 3911       FoundPtrauthBundle = 
false, FoundKCFIBundle = 
false,
 
 3912       FoundAttachedCallBundle = 
false;
 
 3917      Check(!FoundDeoptBundle, 
"Multiple deopt operand bundles", 
Call);
 
 3918      FoundDeoptBundle = 
true;
 
 3920      Check(!FoundGCTransitionBundle, 
"Multiple gc-transition operand bundles",
 
 3922      FoundGCTransitionBundle = 
true;
 
 3924      Check(!FoundFuncletBundle, 
"Multiple funclet operand bundles", 
Call);
 
 3925      FoundFuncletBundle = 
true;
 
 3927            "Expected exactly one funclet bundle operand", 
Call);
 
 3929            "Funclet bundle operands should correspond to a FuncletPadInst",
 
 3932      Check(!FoundCFGuardTargetBundle, 
"Multiple CFGuardTarget operand bundles",
 
 3934      FoundCFGuardTargetBundle = 
true;
 
 3936            "Expected exactly one cfguardtarget bundle operand", 
Call);
 
 3938      Check(!FoundPtrauthBundle, 
"Multiple ptrauth operand bundles", 
Call);
 
 3939      FoundPtrauthBundle = 
true;
 
 3941            "Expected exactly two ptrauth bundle operands", 
Call);
 
 3943                BU.
Inputs[0]->getType()->isIntegerTy(32),
 
 3944            "Ptrauth bundle key operand must be an i32 constant", 
Call);
 
 3946            "Ptrauth bundle discriminator operand must be an i64", 
Call);
 
 3948      Check(!FoundKCFIBundle, 
"Multiple kcfi operand bundles", 
Call);
 
 3949      FoundKCFIBundle = 
true;
 
 3950      Check(BU.
Inputs.size() == 1, 
"Expected exactly one kcfi bundle operand",
 
 3953                BU.
Inputs[0]->getType()->isIntegerTy(32),
 
 3954            "Kcfi bundle operand must be an i32 constant", 
Call);
 
 3956      Check(!FoundPreallocatedBundle, 
"Multiple preallocated operand bundles",
 
 3958      FoundPreallocatedBundle = 
true;
 
 3960            "Expected exactly one preallocated bundle operand", 
Call);
 
 3963                Input->getIntrinsicID() == Intrinsic::call_preallocated_setup,
 
 3964            "\"preallocated\" argument must be a token from " 
 3965            "llvm.call.preallocated.setup",
 
 3968      Check(!FoundGCLiveBundle, 
"Multiple gc-live operand bundles", 
Call);
 
 3969      FoundGCLiveBundle = 
true;
 
 3971      Check(!FoundAttachedCallBundle,
 
 3972            "Multiple \"clang.arc.attachedcall\" operand bundles", 
Call);
 
 3973      FoundAttachedCallBundle = 
true;
 
 3974      verifyAttachedCallBundle(
Call, BU);
 
 3980        "Direct call cannot have a ptrauth bundle", 
Call);
 
 3992            "inlinable function call in a function with " 
 3993            "debug info must have a !dbg location",
 
 3997    verifyInlineAsmCall(
Call);
 
 4001  visitInstruction(
Call);
 
 4004void Verifier::verifyTailCCMustTailAttrs(
const AttrBuilder &Attrs,
 
 4007        Twine(
"inalloca attribute not allowed in ") + 
Context);
 
 4009        Twine(
"inreg attribute not allowed in ") + 
Context);
 
 4010  Check(!
Attrs.contains(Attribute::SwiftError),
 
 4011        Twine(
"swifterror attribute not allowed in ") + 
Context);
 
 4012  Check(!
Attrs.contains(Attribute::Preallocated),
 
 4013        Twine(
"preallocated attribute not allowed in ") + 
Context);
 
 4015        Twine(
"byref attribute not allowed in ") + 
Context);
 
 4027  return PL->getAddressSpace() == PR->getAddressSpace();
 
 
 4032      Attribute::StructRet,  Attribute::ByVal,          Attribute::InAlloca,
 
 4033      Attribute::InReg,      Attribute::StackAlignment, Attribute::SwiftSelf,
 
 4034      Attribute::SwiftAsync, Attribute::SwiftError,     Attribute::Preallocated,
 
 4036  AttrBuilder Copy(
C);
 
 4037  for (
auto AK : ABIAttrs) {
 
 4038    Attribute Attr = Attrs.getParamAttrs(
I).getAttribute(AK);
 
 4040      Copy.addAttribute(Attr);
 
 4044  if (Attrs.hasParamAttr(
I, Attribute::Alignment) &&
 
 4045      (Attrs.hasParamAttr(
I, Attribute::ByVal) ||
 
 4046       Attrs.hasParamAttr(
I, Attribute::ByRef)))
 
 4047    Copy.addAlignmentAttr(Attrs.getParamAlignment(
I));
 
 
 4051void Verifier::verifyMustTailCall(CallInst &CI) {
 
 4055  FunctionType *CallerTy = 
F->getFunctionType();
 
 4057  Check(CallerTy->isVarArg() == CalleeTy->isVarArg(),
 
 4058        "cannot guarantee tail call due to mismatched varargs", &CI);
 
 4060        "cannot guarantee tail call due to mismatched return types", &CI);
 
 4064        "cannot guarantee tail call due to mismatched calling conv", &CI);
 
 4070  Value *RetVal = &CI;
 
 4076          "bitcast following musttail call must use the call", BI);
 
 4083  Check(Ret, 
"musttail call must precede a ret with an optional bitcast", &CI);
 
 4084  Check(!
Ret->getReturnValue() || 
Ret->getReturnValue() == RetVal ||
 
 4086        "musttail call result must be returned", Ret);
 
 4088  AttributeList CallerAttrs = 
F->getAttributes();
 
 4093        CI.
getCallingConv() == CallingConv::Tail ? 
"tailcc" : 
"swifttailcc";
 
 4097    for (
unsigned I = 0, 
E = CallerTy->getNumParams(); 
I != 
E; ++
I) {
 
 4099      SmallString<32> 
Context{CCName, StringRef(
" musttail caller")};
 
 4100      verifyTailCCMustTailAttrs(ABIAttrs, 
Context);
 
 4102    for (
unsigned I = 0, 
E = CalleeTy->getNumParams(); 
I != 
E; ++
I) {
 
 4104      SmallString<32> 
Context{CCName, StringRef(
" musttail callee")};
 
 4105      verifyTailCCMustTailAttrs(ABIAttrs, 
Context);
 
 4108    Check(!CallerTy->isVarArg(), Twine(
"cannot guarantee ") + CCName +
 
 4109                                     " tail call for varargs function");
 
 4117    Check(CallerTy->getNumParams() == CalleeTy->getNumParams(),
 
 4118          "cannot guarantee tail call due to mismatched parameter counts", &CI);
 
 4119    for (
unsigned I = 0, 
E = CallerTy->getNumParams(); 
I != 
E; ++
I) {
 
 4122          "cannot guarantee tail call due to mismatched parameter types", &CI);
 
 4128  for (
unsigned I = 0, 
E = CallerTy->getNumParams(); 
I != 
E; ++
I) {
 
 4131    Check(CallerABIAttrs == CalleeABIAttrs,
 
 4132          "cannot guarantee tail call due to mismatched ABI impacting " 
 4133          "function attributes",
 
 4138void Verifier::visitCallInst(CallInst &CI) {
 
 4142    verifyMustTailCall(CI);
 
 4145void Verifier::visitInvokeInst(InvokeInst &
II) {
 
 4151      II.getUnwindDest()->isEHPad(),
 
 4152      "The unwind destination does not have an exception handling instruction!",
 
 4155  visitTerminator(
II);
 
 4160void Verifier::visitUnaryOperator(UnaryOperator &U) {
 
 4161  Check(
U.getType() == 
U.getOperand(0)->getType(),
 
 4162        "Unary operators must have same type for" 
 4163        "operands and result!",
 
 4166  switch (
U.getOpcode()) {
 
 4169  case Instruction::FNeg:
 
 4170    Check(
U.getType()->isFPOrFPVectorTy(),
 
 4171          "FNeg operator only works with float types!", &U);
 
 4177  visitInstruction(U);
 
 4183void Verifier::visitBinaryOperator(BinaryOperator &
B) {
 
 4184  Check(
B.getOperand(0)->getType() == 
B.getOperand(1)->getType(),
 
 4185        "Both operands to a binary operator are not of the same type!", &
B);
 
 4187  switch (
B.getOpcode()) {
 
 4190  case Instruction::Add:
 
 4191  case Instruction::Sub:
 
 4192  case Instruction::Mul:
 
 4193  case Instruction::SDiv:
 
 4194  case Instruction::UDiv:
 
 4195  case Instruction::SRem:
 
 4196  case Instruction::URem:
 
 4197    Check(
B.getType()->isIntOrIntVectorTy(),
 
 4198          "Integer arithmetic operators only work with integral types!", &
B);
 
 4199    Check(
B.getType() == 
B.getOperand(0)->getType(),
 
 4200          "Integer arithmetic operators must have same type " 
 4201          "for operands and result!",
 
 4206  case Instruction::FAdd:
 
 4207  case Instruction::FSub:
 
 4208  case Instruction::FMul:
 
 4209  case Instruction::FDiv:
 
 4210  case Instruction::FRem:
 
 4211    Check(
B.getType()->isFPOrFPVectorTy(),
 
 4212          "Floating-point arithmetic operators only work with " 
 4213          "floating-point types!",
 
 4215    Check(
B.getType() == 
B.getOperand(0)->getType(),
 
 4216          "Floating-point arithmetic operators must have same type " 
 4217          "for operands and result!",
 
 4221  case Instruction::And:
 
 4222  case Instruction::Or:
 
 4223  case Instruction::Xor:
 
 4224    Check(
B.getType()->isIntOrIntVectorTy(),
 
 4225          "Logical operators only work with integral types!", &
B);
 
 4226    Check(
B.getType() == 
B.getOperand(0)->getType(),
 
 4227          "Logical operators must have same type for operands and result!", &
B);
 
 4229  case Instruction::Shl:
 
 4230  case Instruction::LShr:
 
 4231  case Instruction::AShr:
 
 4232    Check(
B.getType()->isIntOrIntVectorTy(),
 
 4233          "Shifts only work with integral types!", &
B);
 
 4234    Check(
B.getType() == 
B.getOperand(0)->getType(),
 
 4235          "Shift return type must be same as operands!", &
B);
 
 4241  visitInstruction(
B);
 
 4244void Verifier::visitICmpInst(ICmpInst &IC) {
 
 4248  Check(Op0Ty == Op1Ty,
 
 4249        "Both operands to ICmp instruction are not of the same type!", &IC);
 
 4252        "Invalid operand types for ICmp instruction", &IC);
 
 4256  visitInstruction(IC);
 
 4259void Verifier::visitFCmpInst(FCmpInst &FC) {
 
 4261  Type *Op0Ty = 
FC.getOperand(0)->getType();
 
 4262  Type *Op1Ty = 
FC.getOperand(1)->getType();
 
 4263  Check(Op0Ty == Op1Ty,
 
 4264        "Both operands to FCmp instruction are not of the same type!", &FC);
 
 4269  Check(
FC.isFPPredicate(), 
"Invalid predicate in FCmp instruction!", &FC);
 
 4271  visitInstruction(FC);
 
 4274void Verifier::visitExtractElementInst(ExtractElementInst &EI) {
 
 4276        "Invalid extractelement operands!", &EI);
 
 4277  visitInstruction(EI);
 
 4280void Verifier::visitInsertElementInst(InsertElementInst &IE) {
 
 4283        "Invalid insertelement operands!", &IE);
 
 4284  visitInstruction(IE);
 
 4287void Verifier::visitShuffleVectorInst(ShuffleVectorInst &SV) {
 
 4290        "Invalid shufflevector operands!", &SV);
 
 4291  visitInstruction(SV);
 
 4294void Verifier::visitGetElementPtrInst(GetElementPtrInst &
GEP) {
 
 4295  Type *TargetTy = 
GEP.getPointerOperandType()->getScalarType();
 
 4298        "GEP base pointer is not a vector or a vector of pointers", &
GEP);
 
 4299  Check(
GEP.getSourceElementType()->isSized(), 
"GEP into unsized type!", &
GEP);
 
 4303          "getelementptr cannot target structure that contains scalable vector" 
 4308  SmallVector<Value *, 16> Idxs(
GEP.indices());
 
 4310      all_of(Idxs, [](
Value *V) { 
return V->getType()->isIntOrIntVectorTy(); }),
 
 4311      "GEP indexes must be integers", &
GEP);
 
 4314  Check(ElTy, 
"Invalid indices for GEP pointer type!", &
GEP);
 
 4318  Check(PtrTy && 
GEP.getResultElementType() == ElTy,
 
 4319        "GEP is not of right type for indices!", &
GEP, ElTy);
 
 4323    ElementCount GEPWidth = GEPVTy->getElementCount();
 
 4324    if (
GEP.getPointerOperandType()->isVectorTy())
 
 4328          "Vector GEP result width doesn't match operand's", &
GEP);
 
 4329    for (
Value *Idx : Idxs) {
 
 4330      Type *IndexTy = Idx->getType();
 
 4332        ElementCount IndexWidth = IndexVTy->getElementCount();
 
 4333        Check(IndexWidth == GEPWidth, 
"Invalid GEP index vector width", &
GEP);
 
 4336            "All GEP indices should be of integer type");
 
 4340  Check(
GEP.getAddressSpace() == PtrTy->getAddressSpace(),
 
 4341        "GEP address space doesn't match type", &
GEP);
 
 4343  visitInstruction(
GEP);
 
 4347  return A.getUpper() == 
B.getLower() || 
A.getLower() == 
B.getUpper();
 
 
 4352void Verifier::verifyRangeLikeMetadata(
const Value &
I, 
const MDNode *
Range,
 
 4353                                       Type *Ty, RangeLikeMetadataKind Kind) {
 
 4354  unsigned NumOperands = 
Range->getNumOperands();
 
 4355  Check(NumOperands % 2 == 0, 
"Unfinished range!", 
Range);
 
 4356  unsigned NumRanges = NumOperands / 2;
 
 4357  Check(NumRanges >= 1, 
"It should have at least one range!", 
Range);
 
 4359  ConstantRange LastRange(1, 
true); 
 
 4360  for (
unsigned i = 0; i < NumRanges; ++i) {
 
 4363    Check(
Low, 
"The lower limit must be an integer!", 
Low);
 
 4368    Check(
High->getType() == 
Low->getType(), 
"Range pair types must match!",
 
 4371    if (Kind == RangeLikeMetadataKind::NoaliasAddrspace) {
 
 4373            "noalias.addrspace type must be i32!", &
I);
 
 4376            "Range types must match instruction type!", &
I);
 
 4379    APInt HighV = 
High->getValue();
 
 4380    APInt LowV = 
Low->getValue();
 
 4385          "The upper and lower limits cannot be the same value", &
I);
 
 4387    ConstantRange CurRange(LowV, HighV);
 
 4388    Check(!CurRange.isEmptySet() &&
 
 4389              (Kind == RangeLikeMetadataKind::AbsoluteSymbol ||
 
 4390               !CurRange.isFullSet()),
 
 4391          "Range must not be empty!", 
Range);
 
 4393      Check(CurRange.intersectWith(LastRange).isEmptySet(),
 
 4394            "Intervals are overlapping", 
Range);
 
 4395      Check(LowV.
sgt(LastRange.getLower()), 
"Intervals are not in order",
 
 4400    LastRange = ConstantRange(LowV, HighV);
 
 4402  if (NumRanges > 2) {
 
 4407    ConstantRange FirstRange(FirstLow, FirstHigh);
 
 4408    Check(FirstRange.intersectWith(LastRange).isEmptySet(),
 
 4409          "Intervals are overlapping", 
Range);
 
 4415void Verifier::visitRangeMetadata(Instruction &
I, MDNode *
Range, 
Type *Ty) {
 
 4417         "precondition violation");
 
 4418  verifyRangeLikeMetadata(
I, 
Range, Ty, RangeLikeMetadataKind::Range);
 
 4421void Verifier::visitNoaliasAddrspaceMetadata(Instruction &
I, MDNode *
Range,
 
 4424         "precondition violation");
 
 4425  verifyRangeLikeMetadata(
I, 
Range, Ty,
 
 4426                          RangeLikeMetadataKind::NoaliasAddrspace);
 
 4429void Verifier::checkAtomicMemAccessSize(
Type *Ty, 
const Instruction *
I) {
 
 4430  unsigned Size = 
DL.getTypeSizeInBits(Ty).getFixedValue();
 
 4431  Check(
Size >= 8, 
"atomic memory access' size must be byte-sized", Ty, 
I);
 
 4433        "atomic memory access' operand must have a power-of-two size", Ty, 
I);
 
 4436void Verifier::visitLoadInst(LoadInst &LI) {
 
 4438  Check(PTy, 
"Load operand must be a pointer.", &LI);
 
 4441    Check(
A->value() <= Value::MaximumAlignment,
 
 4442          "huge alignment values are unsupported", &LI);
 
 4444  Check(ElTy->
isSized(), 
"loading unsized types is not allowed", &LI);
 
 4447              LI.
getOrdering() != AtomicOrdering::AcquireRelease,
 
 4448          "Load cannot have Release ordering", &LI);
 
 4451          "atomic load operand must have integer, pointer, floating point, " 
 4455    checkAtomicMemAccessSize(ElTy, &LI);
 
 4458          "Non-atomic load cannot have SynchronizationScope specified", &LI);
 
 4461  visitInstruction(LI);
 
 4464void Verifier::visitStoreInst(StoreInst &SI) {
 
 4466  Check(PTy, 
"Store operand must be a pointer.", &SI);
 
 4467  Type *ElTy = 
SI.getOperand(0)->getType();
 
 4468  if (MaybeAlign 
A = 
SI.getAlign()) {
 
 4469    Check(
A->value() <= Value::MaximumAlignment,
 
 4470          "huge alignment values are unsupported", &SI);
 
 4472  Check(ElTy->
isSized(), 
"storing unsized types is not allowed", &SI);
 
 4473  if (
SI.isAtomic()) {
 
 4474    Check(
SI.getOrdering() != AtomicOrdering::Acquire &&
 
 4475              SI.getOrdering() != AtomicOrdering::AcquireRelease,
 
 4476          "Store cannot have Acquire ordering", &SI);
 
 4479          "atomic store operand must have integer, pointer, floating point, " 
 4482    checkAtomicMemAccessSize(ElTy, &SI);
 
 4485          "Non-atomic store cannot have SynchronizationScope specified", &SI);
 
 4487  visitInstruction(SI);
 
 4491void Verifier::verifySwiftErrorCall(CallBase &
Call,
 
 4492                                    const Value *SwiftErrorVal) {
 
 4494    if (
I.value() == SwiftErrorVal) {
 
 4496            "swifterror value when used in a callsite should be marked " 
 4497            "with swifterror attribute",
 
 4498            SwiftErrorVal, 
Call);
 
 4503void Verifier::verifySwiftErrorValue(
const Value *SwiftErrorVal) {
 
 4506  for (
const User *U : SwiftErrorVal->
users()) {
 
 4509          "swifterror value can only be loaded and stored from, or " 
 4510          "as a swifterror argument!",
 
 4514      Check(StoreI->getOperand(1) == SwiftErrorVal,
 
 4515            "swifterror value should be the second operand when used " 
 4519      verifySwiftErrorCall(*
const_cast<CallBase *
>(
Call), SwiftErrorVal);
 
 4523void Verifier::visitAllocaInst(AllocaInst &AI) {
 
 4525  SmallPtrSet<Type*, 4> Visited;
 
 4526  Check(Ty->
isSized(&Visited), 
"Cannot allocate unsized type", &AI);
 
 4530        "Alloca has illegal target extension type", &AI);
 
 4532        "Alloca array size must have integer type", &AI);
 
 4534    Check(
A->value() <= Value::MaximumAlignment,
 
 4535          "huge alignment values are unsupported", &AI);
 
 4541          "swifterror alloca must not be array allocation", &AI);
 
 4542    verifySwiftErrorValue(&AI);
 
 4545  if (
TT.isAMDGPU()) {
 
 4547          "alloca on amdgpu must be in addrspace(5)", &AI);
 
 4550  visitInstruction(AI);
 
 4553void Verifier::visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI) {
 
 4556        "cmpxchg operand must have integer or pointer type", ElTy, &CXI);
 
 4557  checkAtomicMemAccessSize(ElTy, &CXI);
 
 4558  visitInstruction(CXI);
 
 4561void Verifier::visitAtomicRMWInst(AtomicRMWInst &RMWI) {
 
 4563        "atomicrmw instructions cannot be unordered.", &RMWI);
 
 4570              " operand must have integer or floating point type!",
 
 4575              " operand must have floating-point or fixed vector of floating-point " 
 4581              " operand must have integer type!",
 
 4584  checkAtomicMemAccessSize(ElTy, &RMWI);
 
 4586        "Invalid binary operation!", &RMWI);
 
 4587  visitInstruction(RMWI);
 
 4590void Verifier::visitFenceInst(FenceInst &FI) {
 
 4592  Check(Ordering == AtomicOrdering::Acquire ||
 
 4593            Ordering == AtomicOrdering::Release ||
 
 4594            Ordering == AtomicOrdering::AcquireRelease ||
 
 4595            Ordering == AtomicOrdering::SequentiallyConsistent,
 
 4596        "fence instructions may only have acquire, release, acq_rel, or " 
 4597        "seq_cst ordering.",
 
 4599  visitInstruction(FI);
 
 4602void Verifier::visitExtractValueInst(ExtractValueInst &EVI) {
 
 4605        "Invalid ExtractValueInst operands!", &EVI);
 
 4607  visitInstruction(EVI);
 
 4610void Verifier::visitInsertValueInst(InsertValueInst &IVI) {
 
 4614        "Invalid InsertValueInst operands!", &IVI);
 
 4616  visitInstruction(IVI);
 
 4621    return FPI->getParentPad();
 
 
 4626void Verifier::visitEHPadPredecessors(Instruction &
I) {
 
 4632  Check(BB != &
F->getEntryBlock(), 
"EH pad cannot be in entry block.", &
I);
 
 4640      Check(
II && 
II->getUnwindDest() == BB && 
II->getNormalDest() != BB,
 
 4641            "Block containing LandingPadInst must be jumped to " 
 4642            "only by the unwind edge of an invoke.",
 
 4650            "Block containg CatchPadInst must be jumped to " 
 4651            "only by its catchswitch.",
 
 4653    Check(BB != CPI->getCatchSwitch()->getUnwindDest(),
 
 4654          "Catchswitch cannot unwind to one of its catchpads",
 
 4655          CPI->getCatchSwitch(), CPI);
 
 4667      Check(
II->getUnwindDest() == BB && 
II->getNormalDest() != BB,
 
 4668            "EH pad must be jumped to via an unwind edge", ToPad, 
II);
 
 4671      if (CalledFn && CalledFn->isIntrinsic() && 
II->doesNotThrow() &&
 
 4675        FromPad = Bundle->Inputs[0];
 
 4679      FromPad = CRI->getOperand(0);
 
 4680      Check(FromPad != ToPadParent, 
"A cleanupret must exit its cleanup", CRI);
 
 4684      Check(
false, 
"EH pad must be jumped to via an unwind edge", ToPad, TI);
 
 4688    SmallPtrSet<Value *, 8> Seen;
 
 4690      Check(FromPad != ToPad,
 
 4691            "EH pad cannot handle exceptions raised within it", FromPad, TI);
 
 4692      if (FromPad == ToPadParent) {
 
 4697            "A single unwind edge may only enter one EH pad", TI);
 
 4698      Check(Seen.
insert(FromPad).second, 
"EH pad jumps through a cycle of pads",
 
 4704            "Parent pad must be catchpad/cleanuppad/catchswitch", TI);
 
 4709void Verifier::visitLandingPadInst(LandingPadInst &LPI) {
 
 4713        "LandingPadInst needs at least one clause or to be a cleanup.", &LPI);
 
 4715  visitEHPadPredecessors(LPI);
 
 4717  if (!LandingPadResultTy)
 
 4718    LandingPadResultTy = LPI.
getType();
 
 4721          "The landingpad instruction should have a consistent result type " 
 4722          "inside a function.",
 
 4726  Check(
F->hasPersonalityFn(),
 
 4727        "LandingPadInst needs to be in a function with a personality.", &LPI);
 
 4732        "LandingPadInst not the first non-PHI instruction in the block.", &LPI);
 
 4738            "Catch operand does not have pointer type!", &LPI);
 
 4740      Check(LPI.
isFilter(i), 
"Clause is neither catch nor filter!", &LPI);
 
 4742            "Filter operand is not an array of constants!", &LPI);
 
 4746  visitInstruction(LPI);
 
 4749void Verifier::visitResumeInst(ResumeInst &RI) {
 
 4751        "ResumeInst needs to be in a function with a personality.", &RI);
 
 4753  if (!LandingPadResultTy)
 
 4757          "The resume instruction should have a consistent result type " 
 4758          "inside a function.",
 
 4761  visitTerminator(RI);
 
 4764void Verifier::visitCatchPadInst(CatchPadInst &CPI) {
 
 4768  Check(
F->hasPersonalityFn(),
 
 4769        "CatchPadInst needs to be in a function with a personality.", &CPI);
 
 4772        "CatchPadInst needs to be directly nested in a CatchSwitchInst.",
 
 4778        "CatchPadInst not the first non-PHI instruction in the block.", &CPI);
 
 4780  visitEHPadPredecessors(CPI);
 
 4781  visitFuncletPadInst(CPI);
 
 4784void Verifier::visitCatchReturnInst(CatchReturnInst &CatchReturn) {
 
 4786        "CatchReturnInst needs to be provided a CatchPad", &CatchReturn,
 
 4789  visitTerminator(CatchReturn);
 
 4792void Verifier::visitCleanupPadInst(CleanupPadInst &CPI) {
 
 4796  Check(
F->hasPersonalityFn(),
 
 4797        "CleanupPadInst needs to be in a function with a personality.", &CPI);
 
 4802        "CleanupPadInst not the first non-PHI instruction in the block.", &CPI);
 
 4806        "CleanupPadInst has an invalid parent.", &CPI);
 
 4808  visitEHPadPredecessors(CPI);
 
 4809  visitFuncletPadInst(CPI);
 
 4812void Verifier::visitFuncletPadInst(FuncletPadInst &FPI) {
 
 4813  User *FirstUser = 
nullptr;
 
 4814  Value *FirstUnwindPad = 
nullptr;
 
 4816  SmallPtrSet<FuncletPadInst *, 8> Seen;
 
 4818  while (!Worklist.empty()) {
 
 4819    FuncletPadInst *CurrentPad = Worklist.pop_back_val();
 
 4821          "FuncletPadInst must not be nested within itself", CurrentPad);
 
 4822    Value *UnresolvedAncestorPad = 
nullptr;
 
 4823    for (User *U : CurrentPad->
users()) {
 
 4826        UnwindDest = CRI->getUnwindDest();
 
 4832        if (CSI->unwindsToCaller())
 
 4834        UnwindDest = CSI->getUnwindDest();
 
 4836        UnwindDest = 
II->getUnwindDest();
 
 4846        Worklist.push_back(CPI);
 
 4861        if (UnwindParent == CurrentPad)
 
 4867        Value *ExitedPad = CurrentPad;
 
 4870          if (ExitedPad == &FPI) {
 
 4875            UnresolvedAncestorPad = &FPI;
 
 4879          if (ExitedParent == UnwindParent) {
 
 4883            UnresolvedAncestorPad = ExitedParent;
 
 4886          ExitedPad = ExitedParent;
 
 4892        UnresolvedAncestorPad = &FPI;
 
 4899          Check(UnwindPad == FirstUnwindPad,
 
 4900                "Unwind edges out of a funclet " 
 4901                "pad must have the same unwind " 
 4903                &FPI, U, FirstUser);
 
 4906          FirstUnwindPad = UnwindPad;
 
 4915      if (CurrentPad != &FPI)
 
 4918    if (UnresolvedAncestorPad) {
 
 4919      if (CurrentPad == UnresolvedAncestorPad) {
 
 4923        assert(CurrentPad == &FPI);
 
 4931      Value *ResolvedPad = CurrentPad;
 
 4932      while (!Worklist.empty()) {
 
 4933        Value *UnclePad = Worklist.back();
 
 4937        while (ResolvedPad != AncestorPad) {
 
 4939          if (ResolvedParent == UnresolvedAncestorPad) {
 
 4942          ResolvedPad = ResolvedParent;
 
 4946        if (ResolvedPad != AncestorPad)
 
 4949        Worklist.pop_back();
 
 4954  if (FirstUnwindPad) {
 
 4956      BasicBlock *SwitchUnwindDest = CatchSwitch->getUnwindDest();
 
 4957      Value *SwitchUnwindPad;
 
 4958      if (SwitchUnwindDest)
 
 4962      Check(SwitchUnwindPad == FirstUnwindPad,
 
 4963            "Unwind edges out of a catch must have the same unwind dest as " 
 4964            "the parent catchswitch",
 
 4965            &FPI, FirstUser, CatchSwitch);
 
 4969  visitInstruction(FPI);
 
 4972void Verifier::visitCatchSwitchInst(CatchSwitchInst &CatchSwitch) {
 
 4976  Check(
F->hasPersonalityFn(),
 
 4977        "CatchSwitchInst needs to be in a function with a personality.",
 
 4983        "CatchSwitchInst not the first non-PHI instruction in the block.",
 
 4988        "CatchSwitchInst has an invalid parent.", ParentPad);
 
 4993          "CatchSwitchInst must unwind to an EH block which is not a " 
 4999      SiblingFuncletInfo[&CatchSwitch] = &CatchSwitch;
 
 5003        "CatchSwitchInst cannot have empty handler list", &CatchSwitch);
 
 5005  for (BasicBlock *Handler : CatchSwitch.
handlers()) {
 
 5007          "CatchSwitchInst handlers must be catchpads", &CatchSwitch, Handler);
 
 5010  visitEHPadPredecessors(CatchSwitch);
 
 5011  visitTerminator(CatchSwitch);
 
 5014void Verifier::visitCleanupReturnInst(CleanupReturnInst &CRI) {
 
 5016        "CleanupReturnInst needs to be provided a CleanupPad", &CRI,
 
 5022          "CleanupReturnInst must unwind to an EH block which is not a " 
 5027  visitTerminator(CRI);
 
 5030void Verifier::verifyDominatesUse(Instruction &
I, 
unsigned i) {
 
 5036    if (
II->getNormalDest() == 
II->getUnwindDest())
 
 5050  const Use &
U = 
I.getOperandUse(i);
 
 5051  Check(DT.dominates(
Op, U), 
"Instruction does not dominate all uses!", 
Op, &
I);
 
 5054void Verifier::visitDereferenceableMetadata(Instruction& 
I, MDNode* MD) {
 
 5055  Check(
I.getType()->isPointerTy(),
 
 5056        "dereferenceable, dereferenceable_or_null " 
 5057        "apply only to pointer types",
 
 5060        "dereferenceable, dereferenceable_or_null apply only to load" 
 5061        " and inttoptr instructions, use attributes for calls or invokes",
 
 5064        "dereferenceable, dereferenceable_or_null " 
 5065        "take one operand!",
 
 5070        "dereferenceable_or_null metadata value must be an i64!",
 
 5074void Verifier::visitNofreeMetadata(Instruction &
I, MDNode *MD) {
 
 5075  Check(
I.getType()->isPointerTy(), 
"nofree applies only to pointer types", &
I);
 
 5081void Verifier::visitProfMetadata(Instruction &
I, MDNode *MD) {
 
 5082  auto GetBranchingTerminatorNumOperands = [&]() {
 
 5083    unsigned ExpectedNumOperands = 0;
 
 5087      ExpectedNumOperands = 
SI->getNumSuccessors();
 
 5089      ExpectedNumOperands = 1;
 
 5091      ExpectedNumOperands = IBI->getNumDestinations();
 
 5093      ExpectedNumOperands = 2;
 
 5096    return ExpectedNumOperands;
 
 5099        "!prof annotations should have at least 1 operand", MD);
 
 5101  Check(MD->
getOperand(0) != 
nullptr, 
"first operand should not be null", MD);
 
 5103        "expected string with name of the !prof annotation", MD);
 
 5109          "'unknown' !prof should only appear on instructions on which " 
 5110          "'branch_weights' would",
 
 5112    verifyUnknownProfileMetadata(MD);
 
 5117        "!prof annotations should have no less than 2 operands", MD);
 
 5123      Check(NumBranchWeights == 1 || NumBranchWeights == 2,
 
 5124            "Wrong number of InvokeInst branch_weights operands", MD);
 
 5126      const unsigned ExpectedNumOperands = GetBranchingTerminatorNumOperands();
 
 5127      if (ExpectedNumOperands == 0)
 
 5128        CheckFailed(
"!prof branch_weights are not allowed for this instruction",
 
 5131      Check(NumBranchWeights == ExpectedNumOperands, 
"Wrong number of operands",
 
 5137      Check(MDO, 
"second operand should not be null", MD);
 
 5139            "!prof brunch_weights operand is not a const int");
 
 5144    Check(KindInt, 
"VP !prof missing kind argument", MD);
 
 5147    Check(Kind >= InstrProfValueKind::IPVK_First &&
 
 5148              Kind <= InstrProfValueKind::IPVK_Last,
 
 5149          "Invalid VP !prof kind", MD);
 
 5151          "VP !prof should have an even number " 
 5152          "of arguments after 'VP'",
 
 5154    if (Kind == InstrProfValueKind::IPVK_IndirectCallTarget ||
 
 5155        Kind == InstrProfValueKind::IPVK_MemOPSize)
 
 5157            "VP !prof indirect call or memop size expected to be applied to " 
 5158            "CallBase instructions only",
 
 5161    CheckFailed(
"expected either branch_weights or VP profile name", MD);
 
 5165void Verifier::visitDIAssignIDMetadata(Instruction &
I, MDNode *MD) {
 
 5166  assert(
I.hasMetadata(LLVMContext::MD_DIAssignID));
 
 5171  bool ExpectedInstTy =
 
 5173  CheckDI(ExpectedInstTy, 
"!DIAssignID attached to unexpected instruction kind",
 
 5178    for (
auto *User : AsValue->users()) {
 
 5180              "!DIAssignID should only be used by llvm.dbg.assign intrinsics",
 
 5184        CheckDI(DAI->getFunction() == 
I.getFunction(),
 
 5185                "dbg.assign not in same function as inst", DAI, &
I);
 
 5188  for (DbgVariableRecord *DVR :
 
 5191            "!DIAssignID should only be used by Assign DVRs.", MD, DVR);
 
 5192    CheckDI(DVR->getFunction() == 
I.getFunction(),
 
 5193            "DVRAssign not in same function as inst", DVR, &
I);
 
 5197void Verifier::visitMMRAMetadata(Instruction &
I, MDNode *MD) {
 
 5199        "!mmra metadata attached to unexpected instruction kind", 
I, MD);
 
 5210  for (
const MDOperand &MDOp : MD->
operands())
 
 5212          "!mmra metadata tuple operand is not an MMRA tag", 
I, MDOp.get());
 
 5215void Verifier::visitCallStackMetadata(MDNode *MD) {
 
 5219        "call stack metadata should have at least 1 operand", MD);
 
 5223          "call stack metadata operand should be constant integer", 
Op);
 
 5226void Verifier::visitMemProfMetadata(Instruction &
I, MDNode *MD) {
 
 5229        "!memprof annotations should have at least 1 metadata operand " 
 5234  for (
auto &MIBOp : MD->
operands()) {
 
 5240          "Each !memprof MemInfoBlock should have at least 2 operands", MIB);
 
 5244          "!memprof MemInfoBlock first operand should not be null", MIB);
 
 5246          "!memprof MemInfoBlock first operand should be an MDNode", MIB);
 
 5248    visitCallStackMetadata(StackMD);
 
 5255              "!memprof MemInfoBlock second operand should be an MDString",
 
 5264      Check(OpNode, 
"Not all !memprof MemInfoBlock operands 2 to N are MDNode",
 
 5267            "Not all !memprof MemInfoBlock operands 2 to N are MDNode with 2 " 
 5272                         [](
const MDOperand &
Op) {
 
 5273                           return mdconst::hasa<ConstantInt>(Op);
 
 5275            "Not all !memprof MemInfoBlock operands 2 to N are MDNode with " 
 5276            "ConstantInt operands",
 
 5282void Verifier::visitCallsiteMetadata(Instruction &
I, MDNode *MD) {
 
 5286  visitCallStackMetadata(MD);
 
 5295void Verifier::visitCalleeTypeMetadata(Instruction &
I, MDNode *MD) {
 
 5300          "The callee_type metadata must be a list of type metadata nodes", 
Op);
 
 5302    Check(TypeMD->getNumOperands() == 2,
 
 5303          "Well-formed generalized type metadata must contain exactly two " 
 5308          "The first operand of type metadata for functions must be zero", 
Op);
 
 5309    Check(TypeMD->hasGeneralizedMDString(),
 
 5310          "Only generalized type metadata can be part of the callee_type " 
 5316void Verifier::visitAnnotationMetadata(MDNode *Annotation) {
 
 5319        "annotation must have at least one operand");
 
 5321    bool TupleOfStrings =
 
 5327          "operands must be a string or a tuple of strings");
 
 5331void Verifier::visitAliasScopeMetadata(
const MDNode *MD) {
 
 5336        "first scope operand must be self-referential or string", MD);
 
 5339          "third scope operand must be string (if used)", MD);
 
 5342  Check(
Domain != 
nullptr, 
"second scope operand must be MDNode", MD);
 
 5344  unsigned NumDomainOps = 
Domain->getNumOperands();
 
 5345  Check(NumDomainOps >= 1 && NumDomainOps <= 2,
 
 5346        "domain must have one or two operands", 
Domain);
 
 5349        "first domain operand must be self-referential or string", 
Domain);
 
 5350  if (NumDomainOps == 2)
 
 5352          "second domain operand must be string (if used)", 
Domain);
 
 5355void Verifier::visitAliasScopeListMetadata(
const MDNode *MD) {
 
 5358    Check(OpMD != 
nullptr, 
"scope list must consist of MDNodes", MD);
 
 5359    visitAliasScopeMetadata(OpMD);
 
 5363void Verifier::visitAccessGroupMetadata(
const MDNode *MD) {
 
 5364  auto IsValidAccessScope = [](
const MDNode *MD) {
 
 5369  if (IsValidAccessScope(MD))
 
 5375    Check(OpMD != 
nullptr, 
"Access scope list must consist of MDNodes", MD);
 
 5376    Check(IsValidAccessScope(OpMD),
 
 5377          "Access scope list contains invalid access scope", MD);
 
 5381void Verifier::visitCapturesMetadata(Instruction &
I, 
const MDNode *Captures) {
 
 5382  static const char *ValidArgs[] = {
"address_is_null", 
"address",
 
 5383                                    "read_provenance", 
"provenance"};
 
 5386  Check(SI, 
"!captures metadata can only be applied to store instructions", &
I);
 
 5387  Check(
SI->getValueOperand()->getType()->isPointerTy(),
 
 5388        "!captures metadata can only be applied to store with value operand of " 
 5396    Check(Str, 
"!captures metadata must be a list of strings", &
I);
 
 5398          "invalid entry in !captures metadata", &
I, Str);
 
 5402void Verifier::visitAllocTokenMetadata(Instruction &
I, MDNode *MD) {
 
 5407        "expected integer constant", MD);
 
 5412void Verifier::visitInstruction(Instruction &
I) {
 
 5414  Check(BB, 
"Instruction not embedded in basic block!", &
I);
 
 5417    for (User *U : 
I.users()) {
 
 5418      Check(U != (User *)&
I || !DT.isReachableFromEntry(BB),
 
 5419            "Only PHI nodes may reference their own value!", &
I);
 
 5424  Check(!
I.getType()->isVoidTy() || !
I.hasName(),
 
 5425        "Instruction has a name, but provides a void value!", &
I);
 
 5429  Check(
I.getType()->isVoidTy() || 
I.getType()->isFirstClassType(),
 
 5430        "Instruction returns a non-scalar type!", &
I);
 
 5435        "Invalid use of metadata!", &
I);
 
 5440  for (Use &U : 
I.uses()) {
 
 5443            "Instruction referencing" 
 5444            " instruction not embedded in a basic block!",
 
 5447      CheckFailed(
"Use of instruction is not an instruction!", U);
 
 5456  for (
unsigned i = 0, e = 
I.getNumOperands(); i != e; ++i) {
 
 5457    Check(
I.getOperand(i) != 
nullptr, 
"Instruction has null operand!", &
I);
 
 5461    if (!
I.getOperand(i)->getType()->isFirstClassType()) {
 
 5462      Check(
false, 
"Instruction operands must be first-class values!", &
I);
 
 5468      auto IsAttachedCallOperand = [](
Function *
F, 
const CallBase *CBI,
 
 5470        return CBI && CBI->isOperandBundleOfType(
 
 5478      Check((!
F->isIntrinsic() ||
 
 5479             (CBI && &CBI->getCalledOperandUse() == &
I.getOperandUse(i)) ||
 
 5480             IsAttachedCallOperand(
F, CBI, i)),
 
 5481            "Cannot take the address of an intrinsic!", &
I);
 
 5483                F->getIntrinsicID() == Intrinsic::donothing ||
 
 5484                F->getIntrinsicID() == Intrinsic::seh_try_begin ||
 
 5485                F->getIntrinsicID() == Intrinsic::seh_try_end ||
 
 5486                F->getIntrinsicID() == Intrinsic::seh_scope_begin ||
 
 5487                F->getIntrinsicID() == Intrinsic::seh_scope_end ||
 
 5488                F->getIntrinsicID() == Intrinsic::coro_resume ||
 
 5489                F->getIntrinsicID() == Intrinsic::coro_destroy ||
 
 5490                F->getIntrinsicID() == Intrinsic::coro_await_suspend_void ||
 
 5491                F->getIntrinsicID() == Intrinsic::coro_await_suspend_bool ||
 
 5492                F->getIntrinsicID() == Intrinsic::coro_await_suspend_handle ||
 
 5493                F->getIntrinsicID() ==
 
 5494                    Intrinsic::experimental_patchpoint_void ||
 
 5495                F->getIntrinsicID() == Intrinsic::experimental_patchpoint ||
 
 5496                F->getIntrinsicID() == Intrinsic::fake_use ||
 
 5497                F->getIntrinsicID() == Intrinsic::experimental_gc_statepoint ||
 
 5498                F->getIntrinsicID() == Intrinsic::wasm_throw ||
 
 5499                F->getIntrinsicID() == Intrinsic::wasm_rethrow ||
 
 5500                IsAttachedCallOperand(
F, CBI, i),
 
 5501            "Cannot invoke an intrinsic other than donothing, patchpoint, " 
 5502            "statepoint, coro_resume, coro_destroy, clang.arc.attachedcall or " 
 5505      Check(
F->getParent() == &M, 
"Referencing function in another module!", &
I,
 
 5506            &M, 
F, 
F->getParent());
 
 5509            "Referring to a basic block in another function!", &
I);
 
 5512            "Referring to an argument in another function!", &
I);
 
 5514      Check(GV->
getParent() == &M, 
"Referencing global in another module!", &
I,
 
 5518            "Referring to an instruction in another function!", &
I);
 
 5519      verifyDominatesUse(
I, i);
 
 5521      Check(CBI && &CBI->getCalledOperandUse() == &
I.getOperandUse(i),
 
 5522            "Cannot take the address of an inline asm!", &
I);
 
 5524      visitConstantExprsRecursively(CPA);
 
 5526      if (
CE->getType()->isPtrOrPtrVectorTy()) {
 
 5529        visitConstantExprsRecursively(CE);
 
 5534  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_fpmath)) {
 
 5535    Check(
I.getType()->isFPOrFPVectorTy(),
 
 5536          "fpmath requires a floating point result!", &
I);
 
 5538    if (ConstantFP *CFP0 =
 
 5540      const APFloat &Accuracy = CFP0->getValueAPF();
 
 5542            "fpmath accuracy must have float type", &
I);
 
 5544            "fpmath accuracy not a positive number!", &
I);
 
 5546      Check(
false, 
"invalid fpmath accuracy!", &
I);
 
 5550  if (MDNode *
Range = 
I.getMetadata(LLVMContext::MD_range)) {
 
 5552          "Ranges are only for loads, calls and invokes!", &
I);
 
 5553    visitRangeMetadata(
I, 
Range, 
I.getType());
 
 5556  if (MDNode *
Range = 
I.getMetadata(LLVMContext::MD_noalias_addrspace)) {
 
 5559          "noalias.addrspace are only for memory operations!", &
I);
 
 5560    visitNoaliasAddrspaceMetadata(
I, 
Range, 
I.getType());
 
 5563  if (
I.hasMetadata(LLVMContext::MD_invariant_group)) {
 
 5565          "invariant.group metadata is only for loads and stores", &
I);
 
 5568  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_nonnull)) {
 
 5569    Check(
I.getType()->isPointerTy(), 
"nonnull applies only to pointer types",
 
 5572          "nonnull applies only to load instructions, use attributes" 
 5573          " for calls or invokes",
 
 5578  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_dereferenceable))
 
 5579    visitDereferenceableMetadata(
I, MD);
 
 5581  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_dereferenceable_or_null))
 
 5582    visitDereferenceableMetadata(
I, MD);
 
 5584  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_nofree))
 
 5585    visitNofreeMetadata(
I, MD);
 
 5587  if (MDNode *TBAA = 
I.getMetadata(LLVMContext::MD_tbaa))
 
 5590  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_noalias))
 
 5591    visitAliasScopeListMetadata(MD);
 
 5592  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_alias_scope))
 
 5593    visitAliasScopeListMetadata(MD);
 
 5595  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_access_group))
 
 5596    visitAccessGroupMetadata(MD);
 
 5598  if (MDNode *AlignMD = 
I.getMetadata(LLVMContext::MD_align)) {
 
 5599    Check(
I.getType()->isPointerTy(), 
"align applies only to pointer types",
 
 5602          "align applies only to load instructions, " 
 5603          "use attributes for calls or invokes",
 
 5605    Check(AlignMD->getNumOperands() == 1, 
"align takes one operand!", &
I);
 
 5608          "align metadata value must be an i64!", &
I);
 
 5612    Check(Align <= Value::MaximumAlignment,
 
 5613          "alignment is larger that implementation defined limit", &
I);
 
 5616  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_prof))
 
 5617    visitProfMetadata(
I, MD);
 
 5619  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_memprof))
 
 5620    visitMemProfMetadata(
I, MD);
 
 5622  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_callsite))
 
 5623    visitCallsiteMetadata(
I, MD);
 
 5625  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_callee_type))
 
 5626    visitCalleeTypeMetadata(
I, MD);
 
 5628  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_DIAssignID))
 
 5629    visitDIAssignIDMetadata(
I, MD);
 
 5631  if (MDNode *MMRA = 
I.getMetadata(LLVMContext::MD_mmra))
 
 5632    visitMMRAMetadata(
I, MMRA);
 
 5634  if (MDNode *Annotation = 
I.getMetadata(LLVMContext::MD_annotation))
 
 5635    visitAnnotationMetadata(Annotation);
 
 5637  if (MDNode *Captures = 
I.getMetadata(LLVMContext::MD_captures))
 
 5638    visitCapturesMetadata(
I, Captures);
 
 5640  if (MDNode *MD = 
I.getMetadata(LLVMContext::MD_alloc_token))
 
 5641    visitAllocTokenMetadata(
I, MD);
 
 5643  if (MDNode *
N = 
I.getDebugLoc().getAsMDNode()) {
 
 5645    visitMDNode(*
N, AreDebugLocsAllowed::Yes);
 
 5648      if (
DL->getAtomGroup()) {
 
 5649        CheckDI(
DL->getScope()->getSubprogram()->getKeyInstructionsEnabled(),
 
 5650                "DbgLoc uses atomGroup but DISubprogram doesn't have Key " 
 5651                "Instructions enabled",
 
 5652                DL, 
DL->getScope()->getSubprogram());
 
 5658  I.getAllMetadata(MDs);
 
 5659  for (
auto Attachment : MDs) {
 
 5660    unsigned Kind = Attachment.first;
 
 5662        (
Kind == LLVMContext::MD_dbg || 
Kind == LLVMContext::MD_loop)
 
 5663            ? AreDebugLocsAllowed::Yes
 
 5664            : AreDebugLocsAllowed::
No;
 
 5665    visitMDNode(*Attachment.second, AllowLocs);
 
 5674  Check(
IF->isDeclaration(), 
"Intrinsic functions should never be defined!",
 
 5679  FunctionType *IFTy = 
IF->getFunctionType();
 
 5680  bool IsVarArg = IFTy->isVarArg();
 
 5691        "Intrinsic has incorrect return type!", IF);
 
 5693        "Intrinsic has incorrect argument type!", IF);
 
 5698          "Intrinsic was not defined with variable arguments!", IF);
 
 5701          "Callsite was not defined with variable arguments!", IF);
 
 5710  const std::string ExpectedName =
 
 5712  Check(ExpectedName == 
IF->getName(),
 
 5713        "Intrinsic name not mangled correctly for type arguments! " 
 5725            "const x86_amx is not allowed in argument!");
 
 5731  case Intrinsic::assume: {
 
 5735            "assume with operand bundles must have i1 true condition", 
Call);
 
 5738      unsigned ArgCount = Elem.End - Elem.Begin;
 
 5741      if (Elem.Tag->getKey() == 
"separate_storage") {
 
 5742        Check(ArgCount == 2,
 
 5743              "separate_storage assumptions should have 2 arguments", 
Call);
 
 5746              "arguments to separate_storage assumptions should be pointers",
 
 5750      Check(Elem.Tag->getKey() == 
"ignore" ||
 
 5751                Attribute::isExistingAttribute(Elem.Tag->getKey()),
 
 5752            "tags must be valid attribute names", 
Call);
 
 5753      Attribute::AttrKind 
Kind =
 
 5754          Attribute::getAttrKindFromName(Elem.Tag->getKey());
 
 5755      if (Kind == Attribute::Alignment) {
 
 5756        Check(ArgCount <= 3 && ArgCount >= 2,
 
 5757              "alignment assumptions should have 2 or 3 arguments", 
Call);
 
 5759              "first argument should be a pointer", 
Call);
 
 5761              "second argument should be an integer", 
Call);
 
 5764                "third argument should be an integer if present", 
Call);
 
 5767      if (Kind == Attribute::Dereferenceable) {
 
 5768        Check(ArgCount == 2,
 
 5769              "dereferenceable assumptions should have 2 arguments", 
Call);
 
 5771              "first argument should be a pointer", 
Call);
 
 5773              "second argument should be an integer", 
Call);
 
 5776      Check(ArgCount <= 2, 
"too many arguments", 
Call);
 
 5777      if (Kind == Attribute::None)
 
 5779      if (Attribute::isIntAttrKind(Kind)) {
 
 5780        Check(ArgCount == 2, 
"this attribute should have 2 arguments", 
Call);
 
 5782              "the second argument should be a constant integral value", 
Call);
 
 5783      } 
else if (Attribute::canUseAsParamAttr(Kind)) {
 
 5784        Check((ArgCount) == 1, 
"this attribute should have one argument", 
Call);
 
 5785      } 
else if (Attribute::canUseAsFnAttr(Kind)) {
 
 5786        Check((ArgCount) == 0, 
"this attribute has no argument", 
Call);
 
 5791  case Intrinsic::ucmp:
 
 5792  case Intrinsic::scmp: {
 
 5797          "result type must be at least 2 bits wide", 
Call);
 
 5799    bool IsDestTypeVector = DestTy->
isVectorTy();
 
 5801          "ucmp/scmp argument and result types must both be either vector or " 
 5804    if (IsDestTypeVector) {
 
 5807      Check(SrcVecLen == DestVecLen,
 
 5808            "return type and arguments must have the same number of " 
 5814  case Intrinsic::coro_id: {
 
 5820          "info argument of llvm.coro.id must refer to an initialized " 
 5824          "info argument of llvm.coro.id must refer to either a struct or " 
 5828  case Intrinsic::is_fpclass: {
 
 5831          "unsupported bits for llvm.is.fpclass test mask");
 
 5834  case Intrinsic::fptrunc_round: {
 
 5839      MD = MAV->getMetadata();
 
 5841    Check(MD != 
nullptr, 
"missing rounding mode argument", 
Call);
 
 5844          (
"invalid value for llvm.fptrunc.round metadata operand" 
 5845           " (the operand should be a string)"),
 
 5848    std::optional<RoundingMode> RoundMode =
 
 5850    Check(RoundMode && *RoundMode != RoundingMode::Dynamic,
 
 5851          "unsupported rounding mode argument", 
Call);
 
 5854#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID: 
 5855#include "llvm/IR/VPIntrinsics.def" 
 5856#undef BEGIN_REGISTER_VP_INTRINSIC 
 5859#define INSTRUCTION(NAME, NARGS, ROUND_MODE, INTRINSIC)                        \ 
 5860  case Intrinsic::INTRINSIC: 
 5861#include "llvm/IR/ConstrainedOps.def" 
 5865  case Intrinsic::dbg_declare: 
 
 5866  case Intrinsic::dbg_value:   
 
 5867  case Intrinsic::dbg_assign:  
 
 5868  case Intrinsic::dbg_label:   
 
 5875  case Intrinsic::memcpy:
 
 5876  case Intrinsic::memcpy_inline:
 
 5877  case Intrinsic::memmove:
 
 5878  case Intrinsic::memset:
 
 5879  case Intrinsic::memset_inline:
 
 5881  case Intrinsic::experimental_memset_pattern: {
 
 5883    Check(Memset->getValue()->getType()->isSized(),
 
 5884          "unsized types cannot be used as memset patterns", 
Call);
 
 5887  case Intrinsic::memcpy_element_unordered_atomic:
 
 5888  case Intrinsic::memmove_element_unordered_atomic:
 
 5889  case Intrinsic::memset_element_unordered_atomic: {
 
 5892    ConstantInt *ElementSizeCI =
 
 5894    const APInt &ElementSizeVal = ElementSizeCI->
getValue();
 
 5896          "element size of the element-wise atomic memory intrinsic " 
 5897          "must be a power of 2",
 
 5900    auto IsValidAlignment = [&](MaybeAlign Alignment) {
 
 5901      return Alignment && ElementSizeVal.
ule(Alignment->value());
 
 5903    Check(IsValidAlignment(AMI->getDestAlign()),
 
 5904          "incorrect alignment of the destination argument", 
Call);
 
 5906      Check(IsValidAlignment(AMT->getSourceAlign()),
 
 5907            "incorrect alignment of the source argument", 
Call);
 
 5911  case Intrinsic::call_preallocated_setup: {
 
 5913    bool FoundCall = 
false;
 
 5916      Check(UseCall != 
nullptr,
 
 5917            "Uses of llvm.call.preallocated.setup must be calls");
 
 5919      if (IID == Intrinsic::call_preallocated_arg) {
 
 5921        Check(AllocArgIndex != 
nullptr,
 
 5922              "llvm.call.preallocated.alloc arg index must be a constant");
 
 5923        auto AllocArgIndexInt = AllocArgIndex->getValue();
 
 5924        Check(AllocArgIndexInt.sge(0) &&
 
 5925                  AllocArgIndexInt.slt(NumArgs->getValue()),
 
 5926              "llvm.call.preallocated.alloc arg index must be between 0 and " 
 5928              "llvm.call.preallocated.setup's argument count");
 
 5929      } 
else if (IID == Intrinsic::call_preallocated_teardown) {
 
 5932        Check(!FoundCall, 
"Can have at most one call corresponding to a " 
 5933                          "llvm.call.preallocated.setup");
 
 5935        size_t NumPreallocatedArgs = 0;
 
 5936        for (
unsigned i = 0; i < UseCall->arg_size(); i++) {
 
 5937          if (UseCall->paramHasAttr(i, Attribute::Preallocated)) {
 
 5938            ++NumPreallocatedArgs;
 
 5941        Check(NumPreallocatedArgs != 0,
 
 5942              "cannot use preallocated intrinsics on a call without " 
 5943              "preallocated arguments");
 
 5944        Check(NumArgs->equalsInt(NumPreallocatedArgs),
 
 5945              "llvm.call.preallocated.setup arg size must be equal to number " 
 5946              "of preallocated arguments " 
 5956        auto PreallocatedBundle =
 
 5958        Check(PreallocatedBundle,
 
 5959              "Use of llvm.call.preallocated.setup outside intrinsics " 
 5960              "must be in \"preallocated\" operand bundle");
 
 5961        Check(PreallocatedBundle->Inputs.front().get() == &
Call,
 
 5962              "preallocated bundle must have token from corresponding " 
 5963              "llvm.call.preallocated.setup");
 
 5968  case Intrinsic::call_preallocated_arg: {
 
 5971              Token->getIntrinsicID() == Intrinsic::call_preallocated_setup,
 
 5972          "llvm.call.preallocated.arg token argument must be a " 
 5973          "llvm.call.preallocated.setup");
 
 5975          "llvm.call.preallocated.arg must be called with a \"preallocated\" " 
 5976          "call site attribute");
 
 5979  case Intrinsic::call_preallocated_teardown: {
 
 5982              Token->getIntrinsicID() == Intrinsic::call_preallocated_setup,
 
 5983          "llvm.call.preallocated.teardown token argument must be a " 
 5984          "llvm.call.preallocated.setup");
 
 5987  case Intrinsic::gcroot:
 
 5988  case Intrinsic::gcwrite:
 
 5989  case Intrinsic::gcread:
 
 5990    if (
ID == Intrinsic::gcroot) {
 
 5993      Check(AI, 
"llvm.gcroot parameter #1 must be an alloca.", 
Call);
 
 5995            "llvm.gcroot parameter #2 must be a constant.", 
Call);
 
 5998              "llvm.gcroot parameter #1 must either be a pointer alloca, " 
 5999              "or argument #2 must be a non-null constant.",
 
 6005          "Enclosing function does not use GC.", 
Call);
 
 6007  case Intrinsic::init_trampoline:
 
 6009          "llvm.init_trampoline parameter #2 must resolve to a function.",
 
 6012  case Intrinsic::prefetch:
 
 6014          "rw argument to llvm.prefetch must be 0-1", 
Call);
 
 6016          "locality argument to llvm.prefetch must be 0-3", 
Call);
 
 6018          "cache type argument to llvm.prefetch must be 0-1", 
Call);
 
 6020  case Intrinsic::stackprotector:
 
 6022          "llvm.stackprotector parameter #2 must resolve to an alloca.", 
Call);
 
 6024  case Intrinsic::localescape: {
 
 6028    Check(!SawFrameEscape, 
"multiple calls to llvm.localescape in one function",
 
 6035            "llvm.localescape only accepts static allocas", 
Call);
 
 6038    SawFrameEscape = 
true;
 
 6041  case Intrinsic::localrecover: {
 
 6045          "llvm.localrecover first " 
 6046          "argument must be function defined in this module",
 
 6049    auto &
Entry = FrameEscapeInfo[Fn];
 
 6050    Entry.second = unsigned(
 
 6051        std::max(uint64_t(
Entry.second), IdxArg->getLimitedValue(~0U) + 1));
 
 6055  case Intrinsic::experimental_gc_statepoint:
 
 6057      Check(!CI->isInlineAsm(),
 
 6058            "gc.statepoint support for inline assembly unimplemented", CI);
 
 6060          "Enclosing function does not use GC.", 
Call);
 
 6062    verifyStatepoint(
Call);
 
 6064  case Intrinsic::experimental_gc_result: {
 
 6066          "Enclosing function does not use GC.", 
Call);
 
 6074    Check(StatepointCall && StatepointCall->getIntrinsicID() ==
 
 6075                                Intrinsic::experimental_gc_statepoint,
 
 6076          "gc.result operand #1 must be from a statepoint", 
Call,
 
 6080    auto *TargetFuncType =
 
 6083          "gc.result result type does not match wrapped callee", 
Call);
 
 6086  case Intrinsic::experimental_gc_relocate: {
 
 6090          "gc.relocate must return a pointer or a vector of pointers", 
Call);
 
 6095    if (LandingPadInst *LandingPad =
 
 6099          LandingPad->getParent()->getUniquePredecessor();
 
 6103      Check(InvokeBB, 
"safepoints should have unique landingpads",
 
 6104            LandingPad->getParent());
 
 6108            "gc relocate should be linked to a statepoint", InvokeBB);
 
 6115            "gc relocate is incorrectly tied to the statepoint", 
Call, Token);
 
 6124          "gc.relocate operand #2 must be integer offset", 
Call);
 
 6128          "gc.relocate operand #3 must be integer offset", 
Call);
 
 6138      Check(BaseIndex < Opt->Inputs.size(),
 
 6139            "gc.relocate: statepoint base index out of bounds", 
Call);
 
 6140      Check(DerivedIndex < Opt->Inputs.size(),
 
 6141            "gc.relocate: statepoint derived index out of bounds", 
Call);
 
 6154          "gc.relocate: relocated value must be a pointer", 
Call);
 
 6155    Check(DerivedType->isPtrOrPtrVectorTy(),
 
 6156          "gc.relocate: relocated value must be a pointer", 
Call);
 
 6158    Check(ResultType->isVectorTy() == DerivedType->isVectorTy(),
 
 6159          "gc.relocate: vector relocates to vector and pointer to pointer",
 
 6162        ResultType->getPointerAddressSpace() ==
 
 6163            DerivedType->getPointerAddressSpace(),
 
 6164        "gc.relocate: relocating a pointer shouldn't change its address space",
 
 6168    Check(GC, 
"gc.relocate: calling function must have GCStrategy",
 
 6171      auto isGCPtr = [&
GC](
Type *PTy) {
 
 6172        return GC->isGCManagedPointer(PTy->getScalarType()).value_or(
true);
 
 6174      Check(isGCPtr(ResultType), 
"gc.relocate: must return gc pointer", 
Call);
 
 6176            "gc.relocate: relocated value must be a gc pointer", 
Call);
 
 6177      Check(isGCPtr(DerivedType),
 
 6178            "gc.relocate: relocated value must be a gc pointer", 
Call);
 
 6182  case Intrinsic::experimental_patchpoint: {
 
 6185            "patchpoint: invalid return type used with anyregcc", 
Call);
 
 6189  case Intrinsic::eh_exceptioncode:
 
 6190  case Intrinsic::eh_exceptionpointer: {
 
 6192          "eh.exceptionpointer argument must be a catchpad", 
Call);
 
 6195  case Intrinsic::get_active_lane_mask: {
 
 6197          "get_active_lane_mask: must return a " 
 6201    Check(ElemTy->isIntegerTy(1),
 
 6202          "get_active_lane_mask: element type is not " 
 6207  case Intrinsic::experimental_get_vector_length: {
 
 6210          "get_vector_length: VF must be positive", 
Call);
 
 6213  case Intrinsic::masked_load: {
 
 6219    Check(
Mask->getType()->isVectorTy(), 
"masked_load: mask must be vector",
 
 6222          "masked_load: pass through and return type must match", 
Call);
 
 6225          "masked_load: vector mask must be same length as return", 
Call);
 
 6228  case Intrinsic::masked_store: {
 
 6231    Check(
Mask->getType()->isVectorTy(), 
"masked_store: mask must be vector",
 
 6235          "masked_store: vector mask must be same length as value", 
Call);
 
 6239  case Intrinsic::experimental_guard: {
 
 6242          "experimental_guard must have exactly one " 
 6243          "\"deopt\" operand bundle");
 
 6247  case Intrinsic::experimental_deoptimize: {
 
 6251          "experimental_deoptimize must have exactly one " 
 6252          "\"deopt\" operand bundle");
 
 6254          "experimental_deoptimize return type must match caller return type");
 
 6259            "calls to experimental_deoptimize must be followed by a return");
 
 6263              "calls to experimental_deoptimize must be followed by a return " 
 6264              "of the value computed by experimental_deoptimize");
 
 6269  case Intrinsic::vastart: {
 
 6271          "va_start called in a non-varargs function");
 
 6274  case Intrinsic::get_dynamic_area_offset: {
 
 6276    Check(IntTy && 
DL.getPointerSizeInBits(
DL.getAllocaAddrSpace()) ==
 
 6277                       IntTy->getBitWidth(),
 
 6278          "get_dynamic_area_offset result type must be scalar integer matching " 
 6279          "alloca address space width",
 
 6283  case Intrinsic::vector_reduce_and:
 
 6284  case Intrinsic::vector_reduce_or:
 
 6285  case Intrinsic::vector_reduce_xor:
 
 6286  case Intrinsic::vector_reduce_add:
 
 6287  case Intrinsic::vector_reduce_mul:
 
 6288  case Intrinsic::vector_reduce_smax:
 
 6289  case Intrinsic::vector_reduce_smin:
 
 6290  case Intrinsic::vector_reduce_umax:
 
 6291  case Intrinsic::vector_reduce_umin: {
 
 6294          "Intrinsic has incorrect argument type!");
 
 6297  case Intrinsic::vector_reduce_fmax:
 
 6298  case Intrinsic::vector_reduce_fmin: {
 
 6301          "Intrinsic has incorrect argument type!");
 
 6304  case Intrinsic::vector_reduce_fadd:
 
 6305  case Intrinsic::vector_reduce_fmul: {
 
 6310          "Intrinsic has incorrect argument type!");
 
 6313  case Intrinsic::smul_fix:
 
 6314  case Intrinsic::smul_fix_sat:
 
 6315  case Intrinsic::umul_fix:
 
 6316  case Intrinsic::umul_fix_sat:
 
 6317  case Intrinsic::sdiv_fix:
 
 6318  case Intrinsic::sdiv_fix_sat:
 
 6319  case Intrinsic::udiv_fix:
 
 6320  case Intrinsic::udiv_fix_sat: {
 
 6324          "first operand of [us][mul|div]_fix[_sat] must be an int type or " 
 6327          "second operand of [us][mul|div]_fix[_sat] must be an int type or " 
 6331    Check(Op3->getType()->isIntegerTy(),
 
 6332          "third operand of [us][mul|div]_fix[_sat] must be an int type");
 
 6333    Check(Op3->getBitWidth() <= 32,
 
 6334          "third operand of [us][mul|div]_fix[_sat] must fit within 32 bits");
 
 6336    if (
ID == Intrinsic::smul_fix || 
ID == Intrinsic::smul_fix_sat ||
 
 6337        ID == Intrinsic::sdiv_fix || 
ID == Intrinsic::sdiv_fix_sat) {
 
 6339            "the scale of s[mul|div]_fix[_sat] must be less than the width of " 
 6343            "the scale of u[mul|div]_fix[_sat] must be less than or equal " 
 6344            "to the width of the operands");
 
 6348  case Intrinsic::lrint:
 
 6349  case Intrinsic::llrint:
 
 6350  case Intrinsic::lround:
 
 6351  case Intrinsic::llround: {
 
 6357          ExpectedName + 
": argument must be floating-point or vector " 
 6358                         "of floating-points, and result must be integer or " 
 6359                         "vector of integers",
 
 6362          ExpectedName + 
": argument and result disagree on vector use", &
Call);
 
 6364      Check(VTy->getElementCount() == RTy->getElementCount(),
 
 6365            ExpectedName + 
": argument must be same length as result", &
Call);
 
 6369  case Intrinsic::bswap: {
 
 6372    Check(
Size % 16 == 0, 
"bswap must be an even number of bytes", &
Call);
 
 6375  case Intrinsic::invariant_start: {
 
 6377    Check(InvariantSize &&
 
 6379          "invariant_start parameter must be -1, 0 or a positive number",
 
 6383  case Intrinsic::matrix_multiply:
 
 6384  case Intrinsic::matrix_transpose:
 
 6385  case Intrinsic::matrix_column_major_load:
 
 6386  case Intrinsic::matrix_column_major_store: {
 
 6388    ConstantInt *Stride = 
nullptr;
 
 6389    ConstantInt *NumRows;
 
 6390    ConstantInt *NumColumns;
 
 6392    Type *Op0ElemTy = 
nullptr;
 
 6393    Type *Op1ElemTy = 
nullptr;
 
 6395    case Intrinsic::matrix_multiply: {
 
 6400                    ->getNumElements() ==
 
 6402            "First argument of a matrix operation does not match specified " 
 6405                    ->getNumElements() ==
 
 6407            "Second argument of a matrix operation does not match specified " 
 6417    case Intrinsic::matrix_transpose:
 
 6424    case Intrinsic::matrix_column_major_load: {
 
 6431    case Intrinsic::matrix_column_major_store: {
 
 6444    Check(ResultTy->getElementType()->isIntegerTy() ||
 
 6445              ResultTy->getElementType()->isFloatingPointTy(),
 
 6446          "Result type must be an integer or floating-point type!", IF);
 
 6449      Check(ResultTy->getElementType() == Op0ElemTy,
 
 6450            "Vector element type mismatch of the result and first operand " 
 6455      Check(ResultTy->getElementType() == Op1ElemTy,
 
 6456            "Vector element type mismatch of the result and second operand " 
 6462          "Result of a matrix operation does not fit in the returned vector!");
 
 6468            "Stride must be greater or equal than the number of rows!", IF);
 
 6473  case Intrinsic::vector_splice: {
 
 6476    int64_t KnownMinNumElements = VecTy->getElementCount().getKnownMinValue();
 
 6479      if (
Attrs.hasFnAttr(Attribute::VScaleRange))
 
 6480        KnownMinNumElements *= 
Attrs.getFnAttrs().getVScaleRangeMin();
 
 6482    Check((Idx < 0 && std::abs(Idx) <= KnownMinNumElements) ||
 
 6483              (Idx >= 0 && Idx < KnownMinNumElements),
 
 6484          "The splice index exceeds the range [-VL, VL-1] where VL is the " 
 6485          "known minimum number of elements in the vector. For scalable " 
 6486          "vectors the minimum number of elements is determined from " 
 6491  case Intrinsic::stepvector: {
 
 6493    Check(VecTy && VecTy->getScalarType()->isIntegerTy() &&
 
 6494              VecTy->getScalarSizeInBits() >= 8,
 
 6495          "stepvector only supported for vectors of integers " 
 6496          "with a bitwidth of at least 8.",
 
 6500  case Intrinsic::experimental_vector_match: {
 
 6509    Check(Op1Ty && Op2Ty && MaskTy, 
"Operands must be vectors.", &
Call);
 
 6511          "Second operand must be a fixed length vector.", &
Call);
 
 6512    Check(Op1Ty->getElementType()->isIntegerTy(),
 
 6513          "First operand must be a vector of integers.", &
Call);
 
 6514    Check(Op1Ty->getElementType() == Op2Ty->getElementType(),
 
 6515          "First two operands must have the same element type.", &
Call);
 
 6516    Check(Op1Ty->getElementCount() == MaskTy->getElementCount(),
 
 6517          "First operand and mask must have the same number of elements.",
 
 6519    Check(MaskTy->getElementType()->isIntegerTy(1),
 
 6520          "Mask must be a vector of i1's.", &
Call);
 
 6525  case Intrinsic::vector_insert: {
 
 6534    ElementCount VecEC = VecTy->getElementCount();
 
 6535    ElementCount SubVecEC = SubVecTy->getElementCount();
 
 6536    Check(VecTy->getElementType() == SubVecTy->getElementType(),
 
 6537          "vector_insert parameters must have the same element " 
 6541          "vector_insert index must be a constant multiple of " 
 6542          "the subvector's known minimum vector length.");
 
 6550            "subvector operand of vector_insert would overrun the " 
 6551            "vector being inserted into.");
 
 6555  case Intrinsic::vector_extract: {
 
 6563    ElementCount VecEC = VecTy->getElementCount();
 
 6564    ElementCount ResultEC = ResultTy->getElementCount();
 
 6566    Check(ResultTy->getElementType() == VecTy->getElementType(),
 
 6567          "vector_extract result must have the same element " 
 6568          "type as the input vector.",
 
 6571          "vector_extract index must be a constant multiple of " 
 6572          "the result type's known minimum vector length.");
 
 6580            "vector_extract would overrun.");
 
 6584  case Intrinsic::vector_partial_reduce_add: {
 
 6588    unsigned VecWidth = VecTy->getElementCount().getKnownMinValue();
 
 6589    unsigned AccWidth = AccTy->getElementCount().getKnownMinValue();
 
 6591    Check((VecWidth % AccWidth) == 0,
 
 6592          "Invalid vector widths for partial " 
 6593          "reduction. The width of the input vector " 
 6594          "must be a positive integer multiple of " 
 6595          "the width of the accumulator vector.");
 
 6598  case Intrinsic::experimental_noalias_scope_decl: {
 
 6602  case Intrinsic::preserve_array_access_index:
 
 6603  case Intrinsic::preserve_struct_access_index:
 
 6604  case Intrinsic::aarch64_ldaxr:
 
 6605  case Intrinsic::aarch64_ldxr:
 
 6606  case Intrinsic::arm_ldaex:
 
 6607  case Intrinsic::arm_ldrex: {
 
 6609    Check(ElemTy, 
"Intrinsic requires elementtype attribute on first argument.",
 
 6613  case Intrinsic::aarch64_stlxr:
 
 6614  case Intrinsic::aarch64_stxr:
 
 6615  case Intrinsic::arm_stlex:
 
 6616  case Intrinsic::arm_strex: {
 
 6619          "Intrinsic requires elementtype attribute on second argument.",
 
 6623  case Intrinsic::aarch64_prefetch: {
 
 6625          "write argument to llvm.aarch64.prefetch must be 0 or 1", 
Call);
 
 6627          "target argument to llvm.aarch64.prefetch must be 0-3", 
Call);
 
 6629          "stream argument to llvm.aarch64.prefetch must be 0 or 1", 
Call);
 
 6631          "isdata argument to llvm.aarch64.prefetch must be 0 or 1", 
Call);
 
 6634  case Intrinsic::callbr_landingpad: {
 
 6636    Check(CBR, 
"intrinstic requires callbr operand", &
Call);
 
 6643      CheckFailed(
"Intrinsic in block must have 1 unique predecessor", &
Call);
 
 6647      CheckFailed(
"Intrinsic must have corresponding callbr in predecessor",
 
 6652          "Intrinsic's corresponding callbr must have intrinsic's parent basic " 
 6653          "block in indirect destination list",
 
 6656    Check(&
First == &
Call, 
"No other instructions may proceed intrinsic",
 
 6660  case Intrinsic::amdgcn_cs_chain: {
 
 6663    case CallingConv::AMDGPU_CS:
 
 6664    case CallingConv::AMDGPU_CS_Chain:
 
 6665    case CallingConv::AMDGPU_CS_ChainPreserve:
 
 6668      CheckFailed(
"Intrinsic can only be used from functions with the " 
 6669                  "amdgpu_cs, amdgpu_cs_chain or amdgpu_cs_chain_preserve " 
 6670                  "calling conventions",
 
 6676          "SGPR arguments must have the `inreg` attribute", &
Call);
 
 6678          "VGPR arguments must not have the `inreg` attribute", &
Call);
 
 6683                                Intrinsic::amdgcn_unreachable;
 
 6685          "llvm.amdgcn.cs.chain must be followed by unreachable", &
Call);
 
 6688  case Intrinsic::amdgcn_init_exec_from_input: {
 
 6691          "only inreg arguments to the parent function are valid as inputs to " 
 6696  case Intrinsic::amdgcn_set_inactive_chain_arg: {
 
 6699    case CallingConv::AMDGPU_CS_Chain:
 
 6700    case CallingConv::AMDGPU_CS_ChainPreserve:
 
 6703      CheckFailed(
"Intrinsic can only be used from functions with the " 
 6704                  "amdgpu_cs_chain or amdgpu_cs_chain_preserve " 
 6705                  "calling conventions",
 
 6710    unsigned InactiveIdx = 1;
 
 6712          "Value for inactive lanes must not have the `inreg` attribute",
 
 6715          "Value for inactive lanes must be a function argument", &
Call);
 
 6717          "Value for inactive lanes must be a VGPR function argument", &
Call);
 
 6720  case Intrinsic::amdgcn_call_whole_wave: {
 
 6722    Check(
F, 
"Indirect whole wave calls are not allowed", &
Call);
 
 6724    CallingConv::ID CC = 
F->getCallingConv();
 
 6725    Check(CC == CallingConv::AMDGPU_Gfx_WholeWave,
 
 6726          "Callee must have the amdgpu_gfx_whole_wave calling convention",
 
 6729    Check(!
F->isVarArg(), 
"Variadic whole wave calls are not allowed", &
Call);
 
 6732          "Call argument count must match callee argument count", &
Call);
 
 6736    Check(
F->arg_begin()->getType()->isIntegerTy(1),
 
 6737          "Callee must have i1 as its first argument", &
Call);
 
 6738    for (
auto [CallArg, FuncArg] :
 
 6740      Check(CallArg->getType() == FuncArg.getType(),
 
 6741            "Argument types must match", &
Call);
 
 6745                FuncArg.hasInRegAttr(),
 
 6746            "Argument inreg attributes must match", &
Call);
 
 6750  case Intrinsic::amdgcn_s_prefetch_data: {
 
 6754        "llvm.amdgcn.s.prefetch.data only supports global or constant memory");
 
 6757  case Intrinsic::amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
 
 6758  case Intrinsic::amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {
 
 6764    Check(CBSZ <= 4, 
"invalid value for cbsz format", 
Call,
 
 6766    Check(BLGP <= 4, 
"invalid value for blgp format", 
Call,
 
 6770    auto getFormatNumRegs = [](
unsigned FormatVal) {
 
 6771      switch (FormatVal) {
 
 6785    auto isValidSrcASrcBVector = [](FixedVectorType *Ty) {
 
 6786      if (!Ty || !Ty->getElementType()->
isIntegerTy(32))
 
 6788      unsigned NumElts = Ty->getNumElements();
 
 6789      return NumElts == 4 || NumElts == 6 || NumElts == 8;
 
 6794    Check(isValidSrcASrcBVector(Src0Ty),
 
 6795          "operand 0 must be 4, 6 or 8 element i32 vector", &
Call, Src0);
 
 6796    Check(isValidSrcASrcBVector(Src1Ty),
 
 6797          "operand 1 must be 4, 6 or 8 element i32 vector", &
Call, Src1);
 
 6800    Check(Src0Ty->getNumElements() >= getFormatNumRegs(CBSZ),
 
 6802    Check(Src1Ty->getNumElements() >= getFormatNumRegs(BLGP),
 
 6806  case Intrinsic::amdgcn_wmma_f32_16x16x128_f8f6f4:
 
 6807  case Intrinsic::amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
 
 6808  case Intrinsic::amdgcn_wmma_scale16_f32_16x16x128_f8f6f4: {
 
 6814    Check(FmtA <= 4, 
"invalid value for matrix format", 
Call,
 
 6816    Check(FmtB <= 4, 
"invalid value for matrix format", 
Call,
 
 6820    auto getFormatNumRegs = [](
unsigned FormatVal) {
 
 6821      switch (FormatVal) {
 
 6835    auto isValidSrcASrcBVector = [](FixedVectorType *Ty) {
 
 6836      if (!Ty || !Ty->getElementType()->
isIntegerTy(32))
 
 6838      unsigned NumElts = Ty->getNumElements();
 
 6839      return NumElts == 16 || NumElts == 12 || NumElts == 8;
 
 6844    Check(isValidSrcASrcBVector(Src0Ty),
 
 6845          "operand 1 must be 8, 12 or 16 element i32 vector", &
Call, Src0);
 
 6846    Check(isValidSrcASrcBVector(Src1Ty),
 
 6847          "operand 3 must be 8, 12 or 16 element i32 vector", &
Call, Src1);
 
 6850    Check(Src0Ty->getNumElements() >= getFormatNumRegs(FmtA),
 
 6852    Check(Src1Ty->getNumElements() >= getFormatNumRegs(FmtB),
 
 6856  case Intrinsic::amdgcn_cooperative_atomic_load_32x4B:
 
 6857  case Intrinsic::amdgcn_cooperative_atomic_load_16x8B:
 
 6858  case Intrinsic::amdgcn_cooperative_atomic_load_8x16B:
 
 6859  case Intrinsic::amdgcn_cooperative_atomic_store_32x4B:
 
 6860  case Intrinsic::amdgcn_cooperative_atomic_store_16x8B:
 
 6861  case Intrinsic::amdgcn_cooperative_atomic_store_8x16B: {
 
 6866          "cooperative atomic intrinsics require a generic or global pointer",
 
 6873          "cooperative atomic intrinsics require that the last argument is a " 
 6878  case Intrinsic::nvvm_setmaxnreg_inc_sync_aligned_u32:
 
 6879  case Intrinsic::nvvm_setmaxnreg_dec_sync_aligned_u32: {
 
 6882    Check(RegCount % 8 == 0,
 
 6883          "reg_count argument to nvvm.setmaxnreg must be in multiples of 8");
 
 6886  case Intrinsic::experimental_convergence_entry:
 
 6887  case Intrinsic::experimental_convergence_anchor:
 
 6889  case Intrinsic::experimental_convergence_loop:
 
 6891  case Intrinsic::ptrmask: {
 
 6895          "llvm.ptrmask intrinsic first argument must be pointer or vector " 
 6900        "llvm.ptrmask intrinsic arguments must be both scalars or both vectors",
 
 6905            "llvm.ptrmask intrinsic arguments must have the same number of " 
 6909          "llvm.ptrmask intrinsic second argument bitwidth must match " 
 6910          "pointer index type size of first argument",
 
 6914  case Intrinsic::thread_pointer: {
 
 6916              DL.getDefaultGlobalsAddressSpace(),
 
 6917          "llvm.thread.pointer intrinsic return type must be for the globals " 
 6922  case Intrinsic::threadlocal_address: {
 
 6925          "llvm.threadlocal.address first argument must be a GlobalValue");
 
 6927          "llvm.threadlocal.address operand isThreadLocal() must be true");
 
 6930  case Intrinsic::lifetime_start:
 
 6931  case Intrinsic::lifetime_end: {
 
 6934          "llvm.lifetime.start/end can only be used on alloca or poison",
 
 6943    if (
F->hasPersonalityFn() &&
 
 6947      if (BlockEHFuncletColors.
empty())
 
 6951      bool InEHFunclet = 
false;
 
 6955      for (BasicBlock *ColorFirstBB : CV)
 
 6956        if (
auto It = ColorFirstBB->getFirstNonPHIIt();
 
 6957            It != ColorFirstBB->end())
 
 6962      bool HasToken = 
false;
 
 6969        Check(HasToken, 
"Missing funclet token on intrinsic call", &
Call);
 
 6993void Verifier::visit(DbgLabelRecord &DLR) {
 
 6995          "invalid #dbg_label intrinsic variable", &DLR, DLR.
getRawLabel());
 
 7008  CheckDI(Loc, 
"#dbg_label record requires a !dbg attachment", &DLR, BB, 
F);
 
 7012  if (!LabelSP || !LocSP)
 
 7016          "mismatched subprogram between #dbg_label label and !dbg attachment",
 
 7017          &DLR, BB, 
F, Label, 
Label->getScope()->getSubprogram(), Loc,
 
 7018          Loc->getScope()->getSubprogram());
 
 7021void Verifier::visit(DbgVariableRecord &DVR) {
 
 7025  CheckDI(DVR.
getType() == DbgVariableRecord::LocationType::Value ||
 
 7026              DVR.
getType() == DbgVariableRecord::LocationType::Declare ||
 
 7027              DVR.
getType() == DbgVariableRecord::LocationType::Assign,
 
 7028          "invalid #dbg record type", &DVR, DVR.
getType(), BB, 
F);
 
 7036          "invalid #dbg record address/value", &DVR, MD, BB, 
F);
 
 7038    visitValueAsMetadata(*VAM, 
F);
 
 7041      Type *Ty = VAM->getValue()->getType();
 
 7043              "location of #dbg_declare must be a pointer or int", &DVR, MD, BB,
 
 7047    visitDIArgList(*AL, 
F);
 
 7061            "invalid #dbg_assign DIAssignID", &DVR, DVR.
getRawAssignID(), BB,
 
 7064                AreDebugLocsAllowed::No);
 
 7073        "invalid #dbg_assign address", &DVR, DVR.
getRawAddress(), BB, 
F);
 
 7075      visitValueAsMetadata(*VAM, 
F);
 
 7078            "invalid #dbg_assign address expression", &DVR,
 
 7085              "inst not in same function as #dbg_assign", 
I, &DVR, BB, 
F);
 
 7095          &DVR, DLNode, BB, 
F);
 
 7101  if (!VarSP || !LocSP)
 
 7105          "mismatched subprogram between #dbg record variable and DILocation",
 
 7107          Loc->getScope()->getSubprogram(), BB, 
F);
 
 7112void Verifier::visitVPIntrinsic(VPIntrinsic &VPI) {
 
 7116    Check(RetTy->getElementCount() == ValTy->getElementCount(),
 
 7117          "VP cast intrinsic first argument and result vector lengths must be " 
 7121    switch (VPCast->getIntrinsicID()) {
 
 7124    case Intrinsic::vp_trunc:
 
 7126            "llvm.vp.trunc intrinsic first argument and result element type " 
 7130            "llvm.vp.trunc intrinsic the bit size of first argument must be " 
 7131            "larger than the bit size of the return type",
 
 7134    case Intrinsic::vp_zext:
 
 7135    case Intrinsic::vp_sext:
 
 7137            "llvm.vp.zext or llvm.vp.sext intrinsic first argument and result " 
 7138            "element type must be integer",
 
 7141            "llvm.vp.zext or llvm.vp.sext intrinsic the bit size of first " 
 7142            "argument must be smaller than the bit size of the return type",
 
 7145    case Intrinsic::vp_fptoui:
 
 7146    case Intrinsic::vp_fptosi:
 
 7147    case Intrinsic::vp_lrint:
 
 7148    case Intrinsic::vp_llrint:
 
 7151          "llvm.vp.fptoui, llvm.vp.fptosi, llvm.vp.lrint or llvm.vp.llrint" "intrinsic first argument element " 
 7152          "type must be floating-point and result element type must be integer",
 
 7155    case Intrinsic::vp_uitofp:
 
 7156    case Intrinsic::vp_sitofp:
 
 7159          "llvm.vp.uitofp or llvm.vp.sitofp intrinsic first argument element " 
 7160          "type must be integer and result element type must be floating-point",
 
 7163    case Intrinsic::vp_fptrunc:
 
 7165            "llvm.vp.fptrunc intrinsic first argument and result element type " 
 7166            "must be floating-point",
 
 7169            "llvm.vp.fptrunc intrinsic the bit size of first argument must be " 
 7170            "larger than the bit size of the return type",
 
 7173    case Intrinsic::vp_fpext:
 
 7175            "llvm.vp.fpext intrinsic first argument and result element type " 
 7176            "must be floating-point",
 
 7179            "llvm.vp.fpext intrinsic the bit size of first argument must be " 
 7180            "smaller than the bit size of the return type",
 
 7183    case Intrinsic::vp_ptrtoint:
 
 7185            "llvm.vp.ptrtoint intrinsic first argument element type must be " 
 7186            "pointer and result element type must be integer",
 
 7189    case Intrinsic::vp_inttoptr:
 
 7191            "llvm.vp.inttoptr intrinsic first argument element type must be " 
 7192            "integer and result element type must be pointer",
 
 7199  case Intrinsic::vp_fcmp: {
 
 7202          "invalid predicate for VP FP comparison intrinsic", &VPI);
 
 7205  case Intrinsic::vp_icmp: {
 
 7208          "invalid predicate for VP integer comparison intrinsic", &VPI);
 
 7211  case Intrinsic::vp_is_fpclass: {
 
 7214          "unsupported bits for llvm.vp.is.fpclass test mask");
 
 7217  case Intrinsic::experimental_vp_splice: {
 
 7220    int64_t KnownMinNumElements = VecTy->getElementCount().getKnownMinValue();
 
 7222      AttributeList 
Attrs = VPI.
getParent()->getParent()->getAttributes();
 
 7223      if (
Attrs.hasFnAttr(Attribute::VScaleRange))
 
 7224        KnownMinNumElements *= 
Attrs.getFnAttrs().getVScaleRangeMin();
 
 7226    Check((Idx < 0 && std::abs(Idx) <= KnownMinNumElements) ||
 
 7227              (Idx >= 0 && Idx < KnownMinNumElements),
 
 7228          "The splice index exceeds the range [-VL, VL-1] where VL is the " 
 7229          "known minimum number of elements in the vector. For scalable " 
 7230          "vectors the minimum number of elements is determined from " 
 7238void Verifier::visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI) {
 
 7240  bool HasRoundingMD =
 
 7244  NumOperands += (1 + HasRoundingMD);
 
 7250        "invalid arguments for constrained FP intrinsic", &FPI);
 
 7253  case Intrinsic::experimental_constrained_lrint:
 
 7254  case Intrinsic::experimental_constrained_llrint: {
 
 7258          "Intrinsic does not support vectors", &FPI);
 
 7262  case Intrinsic::experimental_constrained_lround:
 
 7263  case Intrinsic::experimental_constrained_llround: {
 
 7267          "Intrinsic does not support vectors", &FPI);
 
 7271  case Intrinsic::experimental_constrained_fcmp:
 
 7272  case Intrinsic::experimental_constrained_fcmps: {
 
 7275          "invalid predicate for constrained FP comparison intrinsic", &FPI);
 
 7279  case Intrinsic::experimental_constrained_fptosi:
 
 7280  case Intrinsic::experimental_constrained_fptoui: {
 
 7284          "Intrinsic first argument must be floating point", &FPI);
 
 7291          "Intrinsic first argument and result disagree on vector use", &FPI);
 
 7293          "Intrinsic result must be an integer", &FPI);
 
 7296            "Intrinsic first argument and result vector lengths must be equal",
 
 7302  case Intrinsic::experimental_constrained_sitofp:
 
 7303  case Intrinsic::experimental_constrained_uitofp: {
 
 7307          "Intrinsic first argument must be integer", &FPI);
 
 7314          "Intrinsic first argument and result disagree on vector use", &FPI);
 
 7316          "Intrinsic result must be a floating point", &FPI);
 
 7319            "Intrinsic first argument and result vector lengths must be equal",
 
 7325  case Intrinsic::experimental_constrained_fptrunc:
 
 7326  case Intrinsic::experimental_constrained_fpext: {
 
 7332          "Intrinsic first argument must be FP or FP vector", &FPI);
 
 7334          "Intrinsic result must be FP or FP vector", &FPI);
 
 7336          "Intrinsic first argument and result disagree on vector use", &FPI);
 
 7340            "Intrinsic first argument and result vector lengths must be equal",
 
 7343    if (FPI.
getIntrinsicID() == Intrinsic::experimental_constrained_fptrunc) {
 
 7345            "Intrinsic first argument's type must be larger than result type",
 
 7349            "Intrinsic first argument's type must be smaller than result type",
 
 7365        "invalid exception behavior argument", &FPI);
 
 7366  if (HasRoundingMD) {
 
 7372void Verifier::verifyFragmentExpression(
const DbgVariableRecord &DVR) {
 
 7377  if (!V || !
E || !
E->isValid())
 
 7381  auto Fragment = 
E->getFragmentInfo();
 
 7391  if (
V->isArtificial())
 
 7394  verifyFragmentExpression(*V, *Fragment, &DVR);
 
 7397template <
typename ValueOrMetadata>
 
 7398void Verifier::verifyFragmentExpression(
const DIVariable &V,
 
 7400                                        ValueOrMetadata *
Desc) {
 
 7403  auto VarSize = 
V.getSizeInBits();
 
 7409  CheckDI(FragSize + FragOffset <= *VarSize,
 
 7410          "fragment is larger than or outside of variable", 
Desc, &V);
 
 7411  CheckDI(FragSize != *VarSize, 
"fragment covers entire variable", 
Desc, &V);
 
 7414void Verifier::verifyFnArgs(
const DbgVariableRecord &DVR) {
 
 7426  CheckDI(Var, 
"#dbg record without variable");
 
 7428  unsigned ArgNo = Var->
getArg();
 
 7434  if (DebugFnArgs.
size() < ArgNo)
 
 7435    DebugFnArgs.
resize(ArgNo, 
nullptr);
 
 7437  auto *Prev = DebugFnArgs[ArgNo - 1];
 
 7438  DebugFnArgs[ArgNo - 1] = Var;
 
 7439  CheckDI(!Prev || (Prev == Var), 
"conflicting debug info for argument", &DVR,
 
 7443void Verifier::verifyNotEntryValue(
const DbgVariableRecord &DVR) {
 
 7447  if (!
E || !
E->isValid())
 
 7457        ArgLoc && ArgLoc->hasAttribute(Attribute::SwiftAsync))
 
 7462          "Entry values are only allowed in MIR unless they target a " 
 7463          "swiftasync Argument",
 
 7467void Verifier::verifyCompileUnits() {
 
 7471  if (
M.getContext().isODRUniquingDebugTypes())
 
 7473  auto *CUs = 
M.getNamedMetadata(
"llvm.dbg.cu");
 
 7474  SmallPtrSet<const Metadata *, 2> Listed;
 
 7477  for (
const auto *CU : CUVisited)
 
 7478    CheckDI(Listed.
count(CU), 
"DICompileUnit not listed in llvm.dbg.cu", CU);
 
 7482void Verifier::verifyDeoptimizeCallingConvs() {
 
 7483  if (DeoptimizeDeclarations.
empty())
 
 7487  for (
const auto *
F : 
ArrayRef(DeoptimizeDeclarations).slice(1)) {
 
 7488    Check(
First->getCallingConv() == 
F->getCallingConv(),
 
 7489          "All llvm.experimental.deoptimize declarations must have the same " 
 7490          "calling convention",
 
 7495void Verifier::verifyAttachedCallBundle(
const CallBase &
Call,
 
 7496                                        const OperandBundleUse &BU) {
 
 7499  Check((FTy->getReturnType()->isPointerTy() ||
 
 7501        "a call with operand bundle \"clang.arc.attachedcall\" must call a " 
 7502        "function returning a pointer or a non-returning function that has a " 
 7507        "operand bundle \"clang.arc.attachedcall\" requires one function as " 
 7515    Check((IID == Intrinsic::objc_retainAutoreleasedReturnValue ||
 
 7516           IID == Intrinsic::objc_claimAutoreleasedReturnValue ||
 
 7517           IID == Intrinsic::objc_unsafeClaimAutoreleasedReturnValue),
 
 7518          "invalid function argument", 
Call);
 
 7520    StringRef FnName = Fn->
getName();
 
 7521    Check((FnName == 
"objc_retainAutoreleasedReturnValue" ||
 
 7522           FnName == 
"objc_claimAutoreleasedReturnValue" ||
 
 7523           FnName == 
"objc_unsafeClaimAutoreleasedReturnValue"),
 
 7524          "invalid function argument", 
Call);
 
 7528void Verifier::verifyNoAliasScopeDecl() {
 
 7529  if (NoAliasScopeDecls.
empty())
 
 7533  for (
auto *
II : NoAliasScopeDecls) {
 
 7534    assert(
II->getIntrinsicID() == Intrinsic::experimental_noalias_scope_decl &&
 
 7535           "Not a llvm.experimental.noalias.scope.decl ?");
 
 7538    Check(ScopeListMV != 
nullptr,
 
 7539          "llvm.experimental.noalias.scope.decl must have a MetadataAsValue " 
 7544    Check(ScopeListMD != 
nullptr, 
"!id.scope.list must point to an MDNode", 
II);
 
 7545    Check(ScopeListMD->getNumOperands() == 1,
 
 7546          "!id.scope.list must point to a list with a single scope", 
II);
 
 7547    visitAliasScopeListMetadata(ScopeListMD);
 
 7557  auto GetScope = [](IntrinsicInst *
II) {
 
 7560    return &
cast<MDNode>(ScopeListMV->getMetadata())->getOperand(0);
 
 7565  auto Compare = [GetScope](IntrinsicInst *Lhs, IntrinsicInst *Rhs) {
 
 7566    return GetScope(Lhs) < GetScope(Rhs);
 
 7573  auto ItCurrent = NoAliasScopeDecls.begin();
 
 7574  while (ItCurrent != NoAliasScopeDecls.end()) {
 
 7575    auto CurScope = GetScope(*ItCurrent);
 
 7576    auto ItNext = ItCurrent;
 
 7579    } 
while (ItNext != NoAliasScopeDecls.end() &&
 
 7580             GetScope(*ItNext) == CurScope);
 
 7585    if (ItNext - ItCurrent < 32)
 
 7589            Check(!DT.dominates(
I, J),
 
 7590                  "llvm.experimental.noalias.scope.decl dominates another one " 
 7591                  "with the same scope",
 
 7605  Verifier V(OS, 
true, *f.getParent());
 
 7609  return !V.verify(
F);
 
 
 7613                        bool *BrokenDebugInfo) {
 
 7615  Verifier V(OS, !BrokenDebugInfo, M);
 
 7617  bool Broken = 
false;
 
 7619    Broken |= !V.verify(
F);
 
 7621  Broken |= !V.verify();
 
 7622  if (BrokenDebugInfo)
 
 7623    *BrokenDebugInfo = V.hasBrokenDebugInfo();
 
 
 7634  std::unique_ptr<Verifier> V;
 
 7635  bool FatalErrors = 
true;
 
 7640  explicit VerifierLegacyPass(
bool FatalErrors)
 
 7642        FatalErrors(FatalErrors) {
 
 7646  bool doInitialization(
Module &M)
 override {
 
 7647    V = std::make_unique<Verifier>(
 
 7653    if (!
V->verify(
F) && FatalErrors) {
 
 7654      errs() << 
"in function " << 
F.getName() << 
'\n';
 
 7660  bool doFinalization(
Module &M)
 override {
 
 7661    bool HasErrors = 
false;
 
 7662    for (Function &
F : M)
 
 7663      if (
F.isDeclaration())
 
 7664        HasErrors |= !
V->verify(
F);
 
 7666    HasErrors |= !
V->verify();
 
 7667    if (FatalErrors && (HasErrors || 
V->hasBrokenDebugInfo()))
 
 7672  void getAnalysisUsage(AnalysisUsage &AU)
 const override {
 
 7680template <
typename... Tys> 
void TBAAVerifier::CheckFailed(Tys &&... Args) {
 
 7682    return Diagnostic->CheckFailed(
Args...);
 
 7685#define CheckTBAA(C, ...)                                                      \ 
 7688      CheckFailed(__VA_ARGS__);                                                \ 
 
 7696TBAAVerifier::TBAABaseNodeSummary
 
 7700    CheckFailed(
"Base nodes must have at least two operands", 
I, BaseNode);
 
 7704  auto Itr = TBAABaseNodes.find(BaseNode);
 
 7705  if (Itr != TBAABaseNodes.end())
 
 7708  auto Result = verifyTBAABaseNodeImpl(
I, BaseNode, IsNewFormat);
 
 7709  auto InsertResult = TBAABaseNodes.insert({BaseNode, Result});
 
 7711  assert(InsertResult.second && 
"We just checked!");
 
 7715TBAAVerifier::TBAABaseNodeSummary
 
 7716TBAAVerifier::verifyTBAABaseNodeImpl(
const Instruction *
I,
 
 7717                                     const MDNode *BaseNode, 
bool IsNewFormat) {
 
 7718  const TBAAVerifier::TBAABaseNodeSummary InvalidNode = {
true, ~0
u};
 
 7722    return isValidScalarTBAANode(BaseNode)
 
 7723               ? TBAAVerifier::TBAABaseNodeSummary({
false, 0})
 
 7729      CheckFailed(
"Access tag nodes must have the number of operands that is a " 
 7730                  "multiple of 3!", BaseNode);
 
 7735      CheckFailed(
"Struct tag nodes must have an odd number of operands!",
 
 7745    if (!TypeSizeNode) {
 
 7746      CheckFailed(
"Type size nodes must be constants!", 
I, BaseNode);
 
 7753    CheckFailed(
"Struct tag nodes have a string as their first operand",
 
 7760  std::optional<APInt> PrevOffset;
 
 7765  unsigned FirstFieldOpNo = IsNewFormat ? 3 : 1;
 
 7766  unsigned NumOpsPerField = IsNewFormat ? 3 : 2;
 
 7767  for (
unsigned Idx = FirstFieldOpNo; Idx < BaseNode->
getNumOperands();
 
 7768           Idx += NumOpsPerField) {
 
 7769    const MDOperand &FieldTy = BaseNode->
getOperand(Idx);
 
 7770    const MDOperand &FieldOffset = BaseNode->
getOperand(Idx + 1);
 
 7772      CheckFailed(
"Incorrect field entry in struct type node!", 
I, BaseNode);
 
 7777    auto *OffsetEntryCI =
 
 7779    if (!OffsetEntryCI) {
 
 7780      CheckFailed(
"Offset entries must be constants!", 
I, BaseNode);
 
 7786      BitWidth = OffsetEntryCI->getBitWidth();
 
 7788    if (OffsetEntryCI->getBitWidth() != 
BitWidth) {
 
 7790          "Bitwidth between the offsets and struct type entries must match", 
I,
 
 7802        !PrevOffset || PrevOffset->ule(OffsetEntryCI->getValue());
 
 7805      CheckFailed(
"Offsets must be increasing!", 
I, BaseNode);
 
 7809    PrevOffset = OffsetEntryCI->getValue();
 
 7814      if (!MemberSizeNode) {
 
 7815        CheckFailed(
"Member size entries must be constants!", 
I, BaseNode);
 
 7822  return Failed ? InvalidNode
 
 7823                : TBAAVerifier::TBAABaseNodeSummary(
false, 
BitWidth);
 
 7845  return Parent && Visited.
insert(Parent).second &&
 
 
 7849bool TBAAVerifier::isValidScalarTBAANode(
const MDNode *MD) {
 
 7850  auto ResultIt = TBAAScalarNodes.find(MD);
 
 7851  if (ResultIt != TBAAScalarNodes.end())
 
 7852    return ResultIt->second;
 
 7854  SmallPtrSet<const MDNode *, 4> Visited;
 
 7856  auto InsertResult = TBAAScalarNodes.insert({MD, 
Result});
 
 7858  assert(InsertResult.second && 
"Just checked!");
 
 7867MDNode *TBAAVerifier::getFieldNodeFromTBAABaseNode(
const Instruction *
I,
 
 7868                                                   const MDNode *BaseNode,
 
 7879  unsigned FirstFieldOpNo = IsNewFormat ? 3 : 1;
 
 7880  unsigned NumOpsPerField = IsNewFormat ? 3 : 2;
 
 7881  for (
unsigned Idx = FirstFieldOpNo; Idx < BaseNode->
getNumOperands();
 
 7882           Idx += NumOpsPerField) {
 
 7883    auto *OffsetEntryCI =
 
 7885    if (OffsetEntryCI->getValue().ugt(
Offset)) {
 
 7886      if (Idx == FirstFieldOpNo) {
 
 7887        CheckFailed(
"Could not find TBAA parent in struct type node", 
I,
 
 7892      unsigned PrevIdx = Idx - NumOpsPerField;
 
 7893      auto *PrevOffsetEntryCI =
 
 7895      Offset -= PrevOffsetEntryCI->getValue();
 
 7903  Offset -= LastOffsetEntryCI->getValue();
 
 7908  if (!
Type || 
Type->getNumOperands() < 3)
 
 
 7924              "This instruction shall not have a TBAA access tag!", 
I);
 
 7926  bool IsStructPathTBAA =
 
 7930            "Old-style TBAA is no longer allowed, use struct-path TBAA instead",
 
 7940              "Access tag metadata must have either 4 or 5 operands", 
I, MD);
 
 7943              "Struct tag metadata must have either 3 or 4 operands", 
I, MD);
 
 7950    CheckTBAA(AccessSizeNode, 
"Access size field must be a constant", 
I, MD);
 
 7954  unsigned ImmutabilityFlagOpNo = IsNewFormat ? 4 : 3;
 
 7959              "Immutability tag on struct tag metadata must be a constant", 
I,
 
 7962        IsImmutableCI->isZero() || IsImmutableCI->isOne(),
 
 7963        "Immutability part of the struct tag metadata must be either 0 or 1", 
I,
 
 7968            "Malformed struct tag metadata: base and access-type " 
 7969            "should be non-null and point to Metadata nodes",
 
 7970            I, MD, BaseNode, AccessType);
 
 7973    CheckTBAA(isValidScalarTBAANode(AccessType),
 
 7974              "Access type node must be a valid scalar type", 
I, MD,
 
 7979  CheckTBAA(OffsetCI, 
"Offset must be constant integer", 
I, MD);
 
 7982  bool SeenAccessTypeInPath = 
false;
 
 7988           getFieldNodeFromTBAABaseNode(
I, BaseNode, 
Offset, IsNewFormat)) {
 
 7989    if (!StructPath.
insert(BaseNode).second) {
 
 7990      CheckFailed(
"Cycle detected in struct path", 
I, MD);
 
 7995    unsigned BaseNodeBitWidth;
 
 7996    std::tie(
Invalid, BaseNodeBitWidth) =
 
 7997        verifyTBAABaseNode(
I, BaseNode, IsNewFormat);
 
 8004    SeenAccessTypeInPath |= BaseNode == AccessType;
 
 8006    if (isValidScalarTBAANode(BaseNode) || BaseNode == AccessType)
 
 8011                  (BaseNodeBitWidth == 0 && 
Offset == 0) ||
 
 8012                  (IsNewFormat && BaseNodeBitWidth == ~0u),
 
 8013              "Access bit-width not the same as description bit-width", 
I, MD,
 
 8014              BaseNodeBitWidth, 
Offset.getBitWidth());
 
 8016    if (IsNewFormat && SeenAccessTypeInPath)
 
 8020  CheckTBAA(SeenAccessTypeInPath, 
"Did not see access type in access path!", 
I,
 
 
 8025char VerifierLegacyPass::ID = 0;
 
 8026INITIALIZE_PASS(VerifierLegacyPass, 
"verify", 
"Module Verifier", 
false, 
false)
 
 8029  return new VerifierLegacyPass(FatalErrors);
 
 
 8047  if (FatalErrors && (Res.IRBroken || Res.DebugInfoBroken))
 
 
 8055  if (res.IRBroken && FatalErrors)
 
 
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
 
AMDGPU address space definition.
 
ArrayRef< TableEntry > TableRef
 
This file declares a class to represent arbitrary precision floating point values and provide a varie...
 
This file implements a class to represent arbitrary precision integral constant values and operations...
 
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
 
Function Alias Analysis false
 
Atomic ordering constants.
 
This file contains the simple types necessary to represent the attributes associated with functions a...
 
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
 
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
 
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
 
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
 
Analysis containing CSE Info
 
This file contains the declarations for the subclasses of Constant, which represent the different fla...
 
This file declares the LLVM IR specialization of the GenericConvergenceVerifier template.
 
static DISubprogram * getSubprogram(bool IsDistinct, Ts &&...Args)
 
This file defines the DenseMap class.
 
This file contains constants used for implementing Dwarf debug support.
 
static bool runOnFunction(Function &F, bool PostInlining)
 
This file provides various utilities for inspecting and working with the control flow graph in LLVM I...
 
Module.h This file contains the declarations for the Module class.
 
This header defines various interfaces for pass management in LLVM.
 
This defines the Use class.
 
const size_t AbstractManglingParser< Derived, Alloc >::NumOps
 
Machine Check Debug Module
 
This file implements a map that provides insertion order iteration.
 
This file provides utility for Memory Model Relaxation Annotations (MMRAs).
 
ConstantRange Range(APInt(BitWidth, Low), APInt(BitWidth, High))
 
uint64_t IntrinsicInst * II
 
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
 
This file contains the declarations for profiling metadata utility functions.
 
const SmallVectorImpl< MachineOperand > & Cond
 
static bool isValid(const char C)
Returns true if C is a valid mangled character: <0-9a-zA-Z_>.
 
static unsigned getNumElements(Type *Ty)
 
void visit(MachineFunction &MF, MachineBasicBlock &Start, std::function< void(MachineBasicBlock *)> op)
 
verify safepoint Safepoint IR Verifier
 
BaseType
A given derived pointer can have multiple base pointers through phi/selects.
 
This file defines the SmallPtrSet class.
 
This file defines the SmallVector class.
 
static unsigned getBitWidth(Type *Ty, const DataLayout &DL)
Returns the bitwidth of the given scalar or pointer type.
 
static bool IsScalarTBAANodeImpl(const MDNode *MD, SmallPtrSetImpl< const MDNode * > &Visited)
 
static bool isType(const Metadata *MD)
 
static Instruction * getSuccPad(Instruction *Terminator)
 
static bool isNewFormatTBAATypeNode(llvm::MDNode *Type)
 
#define CheckDI(C,...)
We know that a debug info condition should be true, if not print an error message.
 
static void forEachUser(const Value *User, SmallPtrSet< const Value *, 32 > &Visited, llvm::function_ref< bool(const Value *)> Callback)
 
static bool isDINode(const Metadata *MD)
 
static bool isScope(const Metadata *MD)
 
static cl::opt< bool > VerifyNoAliasScopeDomination("verify-noalias-scope-decl-dom", cl::Hidden, cl::init(false), cl::desc("Ensure that llvm.experimental.noalias.scope.decl for identical " "scopes are not dominating"))
 
static bool isTypeCongruent(Type *L, Type *R)
Two types are "congruent" if they are identical, or if they are both pointer types with different poi...
 
static bool isConstantIntMetadataOperand(const Metadata *MD)
 
static bool IsRootTBAANode(const MDNode *MD)
 
static Value * getParentPad(Value *EHPad)
 
static bool hasConflictingReferenceFlags(unsigned Flags)
Detect mutually exclusive flags.
 
static AttrBuilder getParameterABIAttributes(LLVMContext &C, unsigned I, AttributeList Attrs)
 
static const char PassName[]
 
bool isFiniteNonZero() const
 
const fltSemantics & getSemantics() const
 
Class for arbitrary precision integers.
 
bool sgt(const APInt &RHS) const
Signed greater than comparison.
 
bool isMinValue() const
Determine if this is the smallest unsigned value.
 
bool ule(const APInt &RHS) const
Unsigned less or equal comparison.
 
bool isPowerOf2() const
Check if this APInt's value is a power of two greater than zero.
 
int64_t getSExtValue() const
Get sign extended value.
 
bool isMaxValue() const
Determine if this is the largest unsigned value.
 
This class represents a conversion between pointers from one address space to another.
 
bool isSwiftError() const
Return true if this alloca is used as a swifterror argument to a call.
 
LLVM_ABI bool isStaticAlloca() const
Return true if this alloca is in the entry block of the function and is a constant size.
 
Align getAlign() const
Return the alignment of the memory that is being allocated by the instruction.
 
Type * getAllocatedType() const
Return the type that is being allocated by the instruction.
 
unsigned getAddressSpace() const
Return the address space for the allocation.
 
LLVM_ABI bool isArrayAllocation() const
Return true if there is an allocation size parameter to the allocation instruction that is not 1.
 
const Value * getArraySize() const
Get the number of elements allocated.
 
PassT::Result & getResult(IRUnitT &IR, ExtraArgTs... ExtraArgs)
Get the result of an analysis pass for a given IR unit.
 
void setPreservesAll()
Set by analyses that do not transform their input at all.
 
LLVM_ABI bool hasInRegAttr() const
Return true if this argument has the inreg attribute.
 
bool empty() const
empty - Check if the array is empty.
 
static bool isFPOperation(BinOp Op)
 
BinOp getOperation() const
 
static LLVM_ABI StringRef getOperationName(BinOp Op)
 
AtomicOrdering getOrdering() const
Returns the ordering constraint of this rmw instruction.
 
bool contains(Attribute::AttrKind A) const
Return true if the builder has the specified attribute.
 
LLVM_ABI bool hasAttribute(Attribute::AttrKind Kind) const
Return true if the attribute exists in this set.
 
LLVM_ABI std::string getAsString(bool InAttrGrp=false) const
 
Functions, function parameters, and return types can have attributes to indicate how they should be t...
 
LLVM_ABI const ConstantRange & getValueAsConstantRange() const
Return the attribute's value as a ConstantRange.
 
LLVM_ABI StringRef getValueAsString() const
Return the attribute's value as a string.
 
AttrKind
This enumeration lists the attributes that can be associated with parameters, function results,...
 
bool isValid() const
Return true if the attribute is any kind of attribute.
 
LLVM Basic Block Representation.
 
iterator begin()
Instruction iterator methods.
 
iterator_range< const_phi_iterator > phis() const
Returns a range that iterates over the phis in the basic block.
 
const Function * getParent() const
Return the enclosing method, or null if none.
 
LLVM_ABI InstListType::const_iterator getFirstNonPHIIt() const
Returns an iterator to the first instruction in this block that is not a PHINode instruction.
 
LLVM_ABI bool isEntryBlock() const
Return true if this is the entry block of the containing function.
 
const Instruction & front() const
 
LLVM_ABI const BasicBlock * getUniquePredecessor() const
Return the predecessor of this block if it has a unique predecessor block.
 
InstListType::iterator iterator
Instruction iterators...
 
const Instruction * getTerminator() const LLVM_READONLY
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
 
This class represents a no-op cast from one type to another.
 
static LLVM_ABI BlockAddress * lookup(const BasicBlock *BB)
Lookup an existing BlockAddress constant for the given BasicBlock.
 
bool isConditional() const
 
Value * getCondition() const
 
Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to callin...
 
bool isInlineAsm() const
Check if this call is an inline asm statement.
 
bool hasInAllocaArgument() const
Determine if there are is an inalloca argument.
 
OperandBundleUse getOperandBundleAt(unsigned Index) const
Return the operand bundle at a specific index.
 
Function * getCalledFunction() const
Returns the function called, or null if this is an indirect function invocation or the function signa...
 
bool doesNotAccessMemory(unsigned OpNo) const
 
bool hasFnAttr(Attribute::AttrKind Kind) const
Determine whether this call has the given attribute.
 
unsigned getNumOperandBundles() const
Return the number of operand bundles associated with this User.
 
CallingConv::ID getCallingConv() const
 
LLVM_ABI bool paramHasAttr(unsigned ArgNo, Attribute::AttrKind Kind) const
Determine whether the argument or parameter has the given attribute.
 
Attribute getParamAttr(unsigned ArgNo, Attribute::AttrKind Kind) const
Get the attribute of a given kind from a given arg.
 
iterator_range< bundle_op_iterator > bundle_op_infos()
Return the range [bundle_op_info_begin, bundle_op_info_end).
 
unsigned countOperandBundlesOfType(StringRef Name) const
Return the number of operand bundles with the tag Name attached to this instruction.
 
bool onlyReadsMemory(unsigned OpNo) const
 
Value * getCalledOperand() const
 
Type * getParamElementType(unsigned ArgNo) const
Extract the elementtype type for a parameter.
 
Value * getArgOperand(unsigned i) const
 
FunctionType * getFunctionType() const
 
LLVM_ABI Intrinsic::ID getIntrinsicID() const
Returns the intrinsic ID of the intrinsic called or Intrinsic::not_intrinsic if the called function i...
 
iterator_range< User::op_iterator > args()
Iteration adapter for range-for loops.
 
bool doesNotReturn() const
Determine if the call cannot return.
 
LLVM_ABI bool onlyAccessesArgMemory() const
Determine if the call can access memmory only using pointers based on its arguments.
 
unsigned arg_size() const
 
AttributeList getAttributes() const
Return the attributes for this call.
 
bool hasOperandBundles() const
Return true if this User has any operand bundles.
 
LLVM_ABI Function * getCaller()
Helper to get the caller (the parent function).
 
bool isMustTailCall() const
 
static LLVM_ABI bool castIsValid(Instruction::CastOps op, Type *SrcTy, Type *DstTy)
This method can be used to determine if a cast from SrcTy to DstTy using Opcode op is valid or not.
 
unsigned getNumHandlers() const
return the number of 'handlers' in this catchswitch instruction, except the default handler
 
Value * getParentPad() const
 
BasicBlock * getUnwindDest() const
 
handler_range handlers()
iteration adapter for range-for loops.
 
BasicBlock * getUnwindDest() const
 
bool isFPPredicate() const
 
bool isIntPredicate() const
 
static bool isIntPredicate(Predicate P)
 
bool isMinusOne() const
This function will return true iff every bit in this constant is set to true.
 
bool isZero() const
This is just a convenience method to make client code smaller for a common code.
 
unsigned getBitWidth() const
getBitWidth - Return the scalar bitwidth of this constant.
 
uint64_t getZExtValue() const
Return the constant as a 64-bit unsigned integer value after it has been zero extended as appropriate...
 
const APInt & getValue() const
Return the constant as an APInt value reference.
 
Constant * getAddrDiscriminator() const
The address discriminator if any, or the null constant.
 
Constant * getPointer() const
The pointer that is signed in this ptrauth signed pointer.
 
ConstantInt * getKey() const
The Key ID, an i32 constant.
 
ConstantInt * getDiscriminator() const
The integer discriminator, an i64 constant, or 0.
 
static LLVM_ABI bool isOrderedRanges(ArrayRef< ConstantRange > RangesRef)
 
This class represents a range of values.
 
const APInt & getLower() const
Return the lower value for this range.
 
const APInt & getUpper() const
Return the upper value for this range.
 
LLVM_ABI bool contains(const APInt &Val) const
Return true if the specified value is in the set.
 
uint32_t getBitWidth() const
Get the bit width of this ConstantRange.
 
static LLVM_ABI ConstantTokenNone * get(LLVMContext &Context)
Return the ConstantTokenNone.
 
LLVM_ABI bool isNullValue() const
Return true if this is the value that would be returned by getNullValue.
 
LLVM_ABI std::optional< fp::ExceptionBehavior > getExceptionBehavior() const
 
LLVM_ABI std::optional< RoundingMode > getRoundingMode() const
 
LLVM_ABI unsigned getNonMetadataArgCount() const
 
DbgVariableFragmentInfo FragmentInfo
 
@ FixedPointBinary
Scale factor 2^Factor.
 
@ FixedPointDecimal
Scale factor 10^Factor.
 
@ FixedPointRational
Arbitrary rational scale factor.
 
DIGlobalVariable * getVariable() const
 
DIExpression * getExpression() const
 
LLVM_ABI DISubprogram * getSubprogram() const
Get the subprogram for this scope.
 
DILocalScope * getScope() const
Get the local scope for this variable.
 
Metadata * getRawScope() const
 
Base class for scope-like contexts.
 
Subprogram description. Uses SubclassData1.
 
Base class for template parameters.
 
Base class for variables.
 
Metadata * getRawType() const
 
Metadata * getRawScope() const
 
uint64_t getNumOperands() const
 
A parsed version of the target data layout string in and methods for querying it.
 
Records a position in IR for a source label (DILabel).
 
MDNode * getRawLabel() const
 
DILabel * getLabel() const
 
Base class for non-instruction debug metadata records that have positions within IR.
 
LLVM_ABI Function * getFunction()
 
LLVM_ABI void print(raw_ostream &O, bool IsForDebug=false) const
 
DebugLoc getDebugLoc() const
 
LLVM_ABI const BasicBlock * getParent() const
 
Record of a variable value-assignment, aka a non instruction representation of the dbg....
 
LocationType getType() const
 
MDNode * getRawExpression() const
 
MDNode * getRawAddressExpression() const
 
DIExpression * getExpression() const
 
Metadata * getRawAssignID() const
 
LLVM_ABI Value * getVariableLocationOp(unsigned OpIdx) const
 
MDNode * getRawVariable() const
 
DILocalVariable * getVariable() const
 
Metadata * getRawLocation() const
Returns the metadata operand for the first location description.
 
bool isDbgDeclare() const
 
Metadata * getRawAddress() const
 
@ End
Marks the end of the concrete types.
 
@ Any
To indicate all LocationTypes in searches.
 
DIExpression * getAddressExpression() const
 
MDNode * getAsMDNode() const
Return this as a bar MDNode.
 
ValueT lookup(const_arg_type_t< KeyT > Val) const
lookup - Return the entry for the specified key, or a default constructed value if no such entry exis...
 
iterator find(const_arg_type_t< KeyT > Val)
 
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
 
This instruction compares its operands according to the predicate given to the constructor.
 
This class represents an extension of floating point types.
 
This class represents a cast from floating point to signed integer.
 
This class represents a cast from floating point to unsigned integer.
 
This class represents a truncation of floating point types.
 
AtomicOrdering getOrdering() const
Returns the ordering constraint of this fence instruction.
 
Value * getParentPad() const
Convenience accessors.
 
FunctionPass class - This class is used to implement most global optimizations.
 
Type * getReturnType() const
 
FunctionType * getFunctionType() const
Returns the FunctionType for me.
 
Intrinsic::ID getIntrinsicID() const LLVM_READONLY
getIntrinsicID - This method returns the ID number of the specified function, or Intrinsic::not_intri...
 
DISubprogram * getSubprogram() const
Get the attached subprogram.
 
CallingConv::ID getCallingConv() const
getCallingConv()/setCallingConv(CC) - These method get and set the calling convention of this functio...
 
bool hasPersonalityFn() const
Check whether this function has a personality function.
 
const Function & getFunction() const
 
const std::string & getGC() const
 
Type * getReturnType() const
Returns the type of the ret val.
 
bool isVarArg() const
isVarArg - Return true if this function takes a variable number of arguments.
 
LLVM_ABI Value * getBasePtr() const
 
LLVM_ABI Value * getDerivedPtr() const
 
void visit(const BlockT &BB)
 
static LLVM_ABI Type * getIndexedType(Type *Ty, ArrayRef< Value * > IdxList)
Returns the result type of a getelementptr with the given source element type and indexes.
 
static bool isValidLinkage(LinkageTypes L)
 
const Constant * getAliasee() const
 
LLVM_ABI const Function * getResolverFunction() const
 
static bool isValidLinkage(LinkageTypes L)
 
const Constant * getResolver() const
 
LLVM_ABI void getAllMetadata(SmallVectorImpl< std::pair< unsigned, MDNode * > > &MDs) const
Appends all metadata attached to this value to MDs, sorting by KindID.
 
MDNode * getMetadata(unsigned KindID) const
Get the current metadata attachments for the given kind, if any.
 
bool hasExternalLinkage() const
 
bool isImplicitDSOLocal() const
 
LLVM_ABI bool isDeclaration() const
Return true if the primary definition of this global value is outside of the current translation unit...
 
bool hasValidDeclarationLinkage() const
 
LinkageTypes getLinkage() const
 
bool hasDefaultVisibility() const
 
bool hasPrivateLinkage() const
 
bool hasHiddenVisibility() const
 
bool hasExternalWeakLinkage() const
 
bool hasDLLImportStorageClass() const
 
bool hasDLLExportStorageClass() const
 
bool isDeclarationForLinker() const
 
unsigned getAddressSpace() const
 
Module * getParent()
Get the module that this global value is contained inside of...
 
PointerType * getType() const
Global values are always pointers.
 
LLVM_ABI bool isInterposable() const
Return true if this global's definition can be substituted with an arbitrary definition at link time ...
 
bool hasCommonLinkage() const
 
bool hasGlobalUnnamedAddr() const
 
bool hasAppendingLinkage() const
 
bool hasAvailableExternallyLinkage() const
 
Type * getValueType() const
 
const Constant * getInitializer() const
getInitializer - Return the initializer for this global variable.
 
bool hasInitializer() const
Definitions have initializers, declarations don't.
 
MaybeAlign getAlign() const
Returns the alignment of the given variable.
 
bool isConstant() const
If the value is a global constant, its value is immutable throughout the runtime execution of the pro...
 
bool hasDefinitiveInitializer() const
hasDefinitiveInitializer - Whether the global variable has an initializer, and any other instances of...
 
This instruction compares its operands according to the predicate given to the constructor.
 
BasicBlock * getDestination(unsigned i)
Return the specified destination.
 
unsigned getNumDestinations() const
return the number of possible destinations in this indirectbr instruction.
 
unsigned getNumSuccessors() const
 
This instruction inserts a single (scalar) element into a VectorType value.
 
static LLVM_ABI bool isValidOperands(const Value *Vec, const Value *NewElt, const Value *Idx)
Return true if an insertelement instruction can be formed with the specified operands.
 
Value * getAggregateOperand()
 
ArrayRef< unsigned > getIndices() const
 
Base class for instruction visitors.
 
void visit(Iterator Start, Iterator End)
 
LLVM_ABI unsigned getNumSuccessors() const LLVM_READONLY
Return the number of successors that this instruction has.
 
const DebugLoc & getDebugLoc() const
Return the debug location for this node as a DebugLoc.
 
LLVM_ABI bool isAtomic() const LLVM_READONLY
Return true if this instruction has an AtomicOrdering of unordered or higher.
 
LLVM_ABI const Function * getFunction() const
Return the function this instruction belongs to.
 
This class represents a cast from an integer to a pointer.
 
static LLVM_ABI bool mayLowerToFunctionCall(Intrinsic::ID IID)
Check if the intrinsic might lower into a regular function call in the course of IR transformations.
 
Intrinsic::ID getIntrinsicID() const
Return the intrinsic ID of this intrinsic.
 
This is an important class for using LLVM in a threaded context.
 
@ OB_clang_arc_attachedcall
 
bool isCleanup() const
Return 'true' if this landingpad instruction is a cleanup.
 
unsigned getNumClauses() const
Get the number of clauses for this landing pad.
 
bool isCatch(unsigned Idx) const
Return 'true' if the clause and index Idx is a catch clause.
 
bool isFilter(unsigned Idx) const
Return 'true' if the clause and index Idx is a filter clause.
 
Constant * getClause(unsigned Idx) const
Get the value of the clause at index Idx.
 
AtomicOrdering getOrdering() const
Returns the ordering constraint of this load instruction.
 
SyncScope::ID getSyncScopeID() const
Returns the synchronization scope ID of this load instruction.
 
Align getAlign() const
Return the alignment of the access that is being performed.
 
const MDOperand & getOperand(unsigned I) const
 
ArrayRef< MDOperand > operands() const
 
unsigned getNumOperands() const
Return number of MDNode operands.
 
bool isResolved() const
Check if node is fully resolved.
 
LLVMContext & getContext() const
 
bool equalsStr(StringRef Str) const
 
LLVM_ABI StringRef getString() const
 
Manage lifetime of a slot tracker for printing IR.
 
A Module instance is used to store all the information related to an LLVM module.
 
LLVM_ABI StringRef getName() const
 
LLVM_ABI void print(raw_ostream &ROS, bool IsForDebug=false) const
 
LLVM_ABI unsigned getNumOperands() const
 
iterator_range< op_iterator > operands()
 
op_range incoming_values()
 
static LLVM_ABI PassRegistry * getPassRegistry()
getPassRegistry - Access the global registry object, which is automatically initialized at applicatio...
 
A set of analyses that are preserved following a run of a transformation pass.
 
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
 
This class represents a cast from a pointer to an address (non-capturing ptrtoint).
 
This class represents a cast from a pointer to an integer.
 
Value * getValue() const
Convenience accessor.
 
This class represents a sign extension of integer types.
 
This class represents a cast from signed integer to floating point.
 
static LLVM_ABI const char * areInvalidOperands(Value *Cond, Value *True, Value *False)
Return a string if the specified operands are invalid for a select operation, otherwise return null.
 
This instruction constructs a fixed permutation of two input vectors.
 
static LLVM_ABI bool isValidOperands(const Value *V1, const Value *V2, const Value *Mask)
Return true if a shufflevector instruction can be formed with the specified operands.
 
static LLVM_ABI void getShuffleMask(const Constant *Mask, SmallVectorImpl< int > &Result)
Convert the input shuffle mask operand to a vector of integers.
 
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
 
size_type count(ConstPtrType Ptr) const
count - Return 1 if the specified pointer is in the set, 0 otherwise.
 
void insert_range(Range &&R)
 
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
 
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
 
void reserve(size_type N)
 
iterator insert(iterator I, T &&Elt)
 
void push_back(const T &Elt)
 
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
 
static constexpr size_t npos
 
bool getAsInteger(unsigned Radix, T &Result) const
Parse the current string as an integer of the specified radix.
 
bool starts_with(StringRef Prefix) const
Check if this string starts with the given Prefix.
 
constexpr bool empty() const
empty - Check if the string is empty.
 
unsigned getNumElements() const
Random access to the elements.
 
LLVM_ABI Type * getTypeAtIndex(const Value *V) const
Given an index value into the type, return the type of the element.
 
LLVM_ABI bool isScalableTy(SmallPtrSetImpl< const Type * > &Visited) const
Returns true if this struct contains a scalable vector.
 
LLVM_ABI bool visitTBAAMetadata(const Instruction *I, const MDNode *MD)
Visit an instruction, or a TBAA node itself as part of a metadata, and return true if it is valid,...
 
Triple - Helper class for working with autoconf configuration names.
 
This class represents a truncation of integer types.
 
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
 
The instances of the Type class are immutable: once they are created, they are never changed.
 
bool isVectorTy() const
True if this is an instance of VectorType.
 
LLVM_ABI bool containsNonGlobalTargetExtType(SmallPtrSetImpl< const Type * > &Visited) const
Return true if this type is or contains a target extension type that disallows being used as a global...
 
bool isArrayTy() const
True if this is an instance of ArrayType.
 
LLVM_ABI bool containsNonLocalTargetExtType(SmallPtrSetImpl< const Type * > &Visited) const
Return true if this type is or contains a target extension type that disallows being used as a local.
 
LLVM_ABI bool isScalableTy(SmallPtrSetImpl< const Type * > &Visited) const
Return true if this is a type whose size is a known multiple of vscale.
 
bool isLabelTy() const
Return true if this is 'label'.
 
bool isIntOrIntVectorTy() const
Return true if this is an integer type or a vector of integer types.
 
bool isPointerTy() const
True if this is an instance of PointerType.
 
bool isTokenLikeTy() const
Returns true if this is 'token' or a token-like target type.s.
 
LLVM_ABI unsigned getPointerAddressSpace() const
Get the address space of this pointer or pointer vector type.
 
bool isSingleValueType() const
Return true if the type is a valid type for a register in codegen.
 
LLVM_ABI bool canLosslesslyBitCastTo(Type *Ty) const
Return true if this type could be converted with a lossless BitCast to type 'Ty'.
 
Type * getScalarType() const
If this is a vector type, return the element type, otherwise return 'this'.
 
bool isSized(SmallPtrSetImpl< Type * > *Visited=nullptr) const
Return true if it makes sense to take the size of this type.
 
LLVM_ABI unsigned getScalarSizeInBits() const LLVM_READONLY
If this is a vector type, return the getPrimitiveSizeInBits value for the element type.
 
bool isFloatingPointTy() const
Return true if this is one of the floating-point types.
 
bool isPtrOrPtrVectorTy() const
Return true if this is a pointer type or a vector of pointer types.
 
bool isIntOrPtrTy() const
Return true if this is an integer type or a pointer type.
 
bool isIntegerTy() const
True if this is an instance of IntegerType.
 
bool isFPOrFPVectorTy() const
Return true if this is a FP type or a vector of FP.
 
bool isVoidTy() const
Return true if this is 'void'.
 
bool isMetadataTy() const
Return true if this is 'metadata'.
 
This class represents a cast unsigned integer to floating point.
 
Value * getOperand(unsigned i) const
 
unsigned getNumOperands() const
 
This class represents the va_arg llvm instruction, which returns an argument of the specified type gi...
 
LLVM Value Representation.
 
iterator_range< user_iterator > materialized_users()
 
Type * getType() const
All values are typed, get the type of this value.
 
LLVM_ABI const Value * stripInBoundsOffsets(function_ref< void(const Value *)> Func=[](const Value *) {}) const
Strip off pointer casts and inbounds GEPs.
 
iterator_range< user_iterator > users()
 
bool materialized_use_empty() const
 
LLVM_ABI const Value * stripPointerCasts() const
Strip off pointer casts, all-zero GEPs and address space casts.
 
LLVM_ABI LLVMContext & getContext() const
All values hold a context through their type.
 
LLVM_ABI StringRef getName() const
Return a constant reference to the value's name.
 
Check a module for errors, and report separate error states for IR and debug info errors.
 
LLVM_ABI Result run(Module &M, ModuleAnalysisManager &)
 
LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
 
This class represents zero extension of integer types.
 
constexpr bool isNonZero() const
 
constexpr bool isScalable() const
Returns whether the quantity is scaled by a runtime quantity (vscale).
 
constexpr ScalarTy getKnownMinValue() const
Returns the minimum value this quantity can represent.
 
An efficient, type-erasing, non-owning reference to a callable.
 
const ParentTy * getParent() const
 
NodeTy * getNextNode()
Get the next node, or nullptr for the list tail.
 
This class implements an extremely fast bulk output stream that can only output to a stream.
 
This file contains the declaration of the Comdat class, which represents a single COMDAT in LLVM.
 
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
 
@ FLAT_ADDRESS
Address space for flat memory.
 
@ GLOBAL_ADDRESS
Address space for global memory (RAT0, VTX0).
 
@ PRIVATE_ADDRESS
Address space for private memory.
 
constexpr char Align[]
Key for Kernel::Arg::Metadata::mAlign.
 
constexpr char Args[]
Key for Kernel::Metadata::mArgs.
 
constexpr char Attrs[]
Key for Kernel::Metadata::mAttrs.
 
bool isFlatGlobalAddrSpace(unsigned AS)
 
constexpr std::underlying_type_t< E > Mask()
Get a bitmask with 1s in all places up to the high-order bit of E's largest value.
 
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
 
@ C
The default llvm calling convention, compatible with C.
 
@ BasicBlock
Various leaf nodes.
 
LLVM_ABI MatchIntrinsicTypesResult matchIntrinsicSignature(FunctionType *FTy, ArrayRef< IITDescriptor > &Infos, SmallVectorImpl< Type * > &ArgTys)
Match the specified function type with the type constraints specified by the .td file.
 
LLVM_ABI void getIntrinsicInfoTableEntries(ID id, SmallVectorImpl< IITDescriptor > &T)
Return the IIT table descriptor for the specified intrinsic into an array of IITDescriptors.
 
MatchIntrinsicTypesResult
 
@ MatchIntrinsicTypes_NoMatchRet
 
@ MatchIntrinsicTypes_NoMatchArg
 
LLVM_ABI bool hasConstrainedFPRoundingModeOperand(ID QID)
Returns true if the intrinsic ID is for one of the "ConstrainedFloating-Point Intrinsics" that take r...
 
LLVM_ABI StringRef getName(ID id)
Return the LLVM name for an intrinsic, such as "llvm.ppc.altivec.lvx".
 
static const int NoAliasScopeDeclScopeArg
 
LLVM_ABI bool matchIntrinsicVarArg(bool isVarArg, ArrayRef< IITDescriptor > &Infos)
Verify if the intrinsic has variable arguments.
 
std::variant< std::monostate, Loc::Single, Loc::Multi, Loc::MMI, Loc::EntryValue > Variant
Alias for the std::variant specialization base class of DbgVariable.
 
Flag
These should be considered private to the implementation of the MCInstrDesc class.
 
@ System
Synchronized with respect to all concurrently executing threads.
 
LLVM_ABI std::optional< VFInfo > tryDemangleForVFABI(StringRef MangledName, const FunctionType *FTy)
Function to construct a VFInfo out of a mangled names in the following format:
 
@ CE
Windows NT (Windows on ARM)
 
LLVM_ABI AssignmentInstRange getAssignmentInsts(DIAssignID *ID)
Return a range of instructions (typically just one) that have ID as an attachment.
 
initializer< Ty > init(const Ty &Val)
 
Scope
Defines the scope in which this symbol should be visible: Default – Visible in the public interface o...
 
std::enable_if_t< detail::IsValidPointer< X, Y >::value, X * > dyn_extract_or_null(Y &&MD)
Extract a Value from Metadata, if any, allowing null.
 
std::enable_if_t< detail::IsValidPointer< X, Y >::value, X * > dyn_extract(Y &&MD)
Extract a Value from Metadata, if any.
 
std::enable_if_t< detail::IsValidPointer< X, Y >::value, X * > extract(Y &&MD)
Extract a Value from Metadata.
 
@ User
could "use" a pointer
 
NodeAddr< UseNode * > Use
 
NodeAddr< NodeBase * > Node
 
friend class Instruction
Iterator for Instructions in a `BasicBlock.
 
This is an optimization pass for GlobalISel generic memory operations.
 
auto drop_begin(T &&RangeOrContainer, size_t N=1)
Return a range covering RangeOrContainer with the first N elements excluded.
 
@ Low
Lower the current thread's priority such that it does not affect foreground tasks significantly.
 
FunctionAddr VTableAddr Value
 
bool all_of(R &&range, UnaryPredicate P)
Provide wrappers to std::all_of which take ranges instead of having to pass begin/end explicitly.
 
LLVM_ABI bool canInstructionHaveMMRAs(const Instruction &I)
 
detail::zippy< detail::zip_first, T, U, Args... > zip_equal(T &&t, U &&u, Args &&...args)
zip iterator that assumes that all iteratees have the same length.
 
LLVM_ABI unsigned getBranchWeightOffset(const MDNode *ProfileData)
Return the offset to the first branch weight data.
 
constexpr bool isInt(int64_t x)
Checks if an integer fits into the given bit width.
 
auto enumerate(FirstRange &&First, RestRanges &&...Rest)
Given two or more input ranges, returns a new range whose values are tuples (A, B,...
 
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
 
LLVM_ABI bool verifyFunction(const Function &F, raw_ostream *OS=nullptr)
Check a function for errors, useful for use when debugging a pass.
 
testing::Matcher< const detail::ErrorHolder & > Failed()
 
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
 
void append_range(Container &C, Range &&R)
Wrapper function to append range R to container C.
 
LLVM_ABI DenseMap< BasicBlock *, ColorVector > colorEHFunclets(Function &F)
If an EH funclet personality is in use (see isFuncletEHPersonality), this will recompute which blocks...
 
constexpr bool isPowerOf2_64(uint64_t Value)
Return true if the argument is a power of two > 0 (64 bit edition.)
 
bool isa_and_nonnull(const Y &Val)
 
bool isScopedEHPersonality(EHPersonality Pers)
Returns true if this personality uses scope-style EH IR instructions: catchswitch,...
 
auto dyn_cast_or_null(const Y &Val)
 
GenericConvergenceVerifier< SSAContext > ConvergenceVerifier
 
LLVM_ABI void initializeVerifierLegacyPassPass(PassRegistry &)
 
constexpr bool isPowerOf2_32(uint32_t Value)
Return true if the argument is a power of two > 0.
 
bool isModSet(const ModRefInfo MRI)
 
void sort(IteratorTy Start, IteratorTy End)
 
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
 
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
 
FunctionAddr VTableAddr Count
 
LLVM_ABI EHPersonality classifyEHPersonality(const Value *Pers)
See if the given exception handling personality function is one that we understand.
 
class LLVM_GSL_OWNER SmallVector
Forward declaration of SmallVector so that calculateSmallVectorDefaultInlinedElements can reference s...
 
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
 
LLVM_ABI bool isValueProfileMD(const MDNode *ProfileData)
Checks if an MDNode contains value profiling Metadata.
 
LLVM_ABI raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
 
LLVM_ABI unsigned getNumBranchWeights(const MDNode &ProfileData)
 
AtomicOrdering
Atomic ordering for LLVM's memory model.
 
@ First
Helpers to iterate all locations in the MemoryEffectsBase class.
 
LLVM_ABI FunctionPass * createVerifierPass(bool FatalErrors=true)
 
FunctionAddr VTableAddr Next
 
DWARFExpression::Operation Op
 
ArrayRef(const T &OneElt) -> ArrayRef< T >
 
constexpr unsigned BitWidth
 
TinyPtrVector< BasicBlock * > ColorVector
 
LLVM_ABI const char * LLVMLoopEstimatedTripCount
Profile-based loop metadata that should be accessed only by using llvm::getLoopEstimatedTripCount and...
 
DenormalMode parseDenormalFPAttribute(StringRef Str)
Returns the denormal mode to use for inputs and outputs.
 
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
 
LLVM_ABI std::optional< RoundingMode > convertStrToRoundingMode(StringRef)
Returns a valid RoundingMode enumerator when given a string that is valid as input in constrained int...
 
LLVM_ABI std::unique_ptr< GCStrategy > getGCStrategy(const StringRef Name)
Lookup the GCStrategy object associated with the given gc name.
 
auto predecessors(const MachineBasicBlock *BB)
 
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.
 
bool pred_empty(const BasicBlock *BB)
 
bool isHexDigit(char C)
Checks if character C is a hexadecimal numeric character.
 
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
 
constexpr bool isCallableCC(CallingConv::ID CC)
 
LLVM_ABI bool verifyModule(const Module &M, raw_ostream *OS=nullptr, bool *BrokenDebugInfo=nullptr)
Check a module for errors.
 
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
 
constexpr uint64_t value() const
This is a hole in the type system and should not be abused.
 
A special type used by analysis passes to provide an address that identifies that particular analysis...
 
static LLVM_ABI const char * SyntheticFunctionEntryCount
 
static LLVM_ABI const char * UnknownBranchWeightsMarker
 
static LLVM_ABI const char * ValueProfile
 
static LLVM_ABI const char * FunctionEntryCount
 
static LLVM_ABI const char * BranchWeights
 
uint32_t getTagID() const
Return the tag of this operand bundle as an integer.
 
void DebugInfoCheckFailed(const Twine &Message)
A debug info check failed.
 
VerifierSupport(raw_ostream *OS, const Module &M)
 
bool Broken
Track the brokenness of the module while recursively visiting.
 
void CheckFailed(const Twine &Message, const T1 &V1, const Ts &... Vs)
A check failed (with values to print).
 
bool BrokenDebugInfo
Broken debug info can be "recovered" from by stripping the debug info.
 
bool TreatBrokenDebugInfoAsError
Whether to treat broken debug info as an error.
 
void CheckFailed(const Twine &Message)
A check failed, so printout out the condition and the message.
 
void DebugInfoCheckFailed(const Twine &Message, const T1 &V1, const Ts &... Vs)
A debug info check failed (with values to print).