xref: /freebsd/contrib/llvm-project/llvm/lib/IR/Verifier.cpp (revision 59c8e88e72633afbc47a4ace0d2170d00d51f7dc)
1 //===-- Verifier.cpp - Implement the Module Verifier -----------------------==//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines the function verifier interface, that can be used for some
10 // basic correctness checking of input to the system.
11 //
12 // Note that this does not provide full `Java style' security and verifications,
13 // instead it just tries to ensure that code is well-formed.
14 //
15 //  * Both of a binary operator's parameters are of the same type
16 //  * Verify that the indices of mem access instructions match other operands
17 //  * Verify that arithmetic and other things are only performed on first-class
18 //    types.  Verify that shifts & logicals only happen on integrals f.e.
19 //  * All of the constants in a switch statement are of the correct type
20 //  * The code is in valid SSA form
21 //  * It should be illegal to put a label into any other type (like a structure)
22 //    or to return one. [except constant arrays!]
23 //  * Only phi nodes can be self referential: 'add i32 %0, %0 ; <int>:0' is bad
24 //  * PHI nodes must have an entry for each predecessor, with no extras.
25 //  * PHI nodes must be the first thing in a basic block, all grouped together
26 //  * All basic blocks should only end with terminator insts, not contain them
27 //  * The entry node to a function must not have predecessors
28 //  * All Instructions must be embedded into a basic block
29 //  * Functions cannot take a void-typed parameter
30 //  * Verify that a function's argument list agrees with it's declared type.
31 //  * It is illegal to specify a name for a void value.
32 //  * It is illegal to have a internal global value with no initializer
33 //  * It is illegal to have a ret instruction that returns a value that does not
34 //    agree with the function return value type.
35 //  * Function call argument types match the function prototype
36 //  * A landing pad is defined by a landingpad instruction, and can be jumped to
37 //    only by the unwind edge of an invoke instruction.
38 //  * A landingpad instruction must be the first non-PHI instruction in the
39 //    block.
40 //  * Landingpad instructions must be in a function with a personality function.
41 //  * Convergence control intrinsics are introduced in ConvergentOperations.rst.
42 //    The applied restrictions are too numerous to list here.
43 //  * The convergence entry intrinsic and the loop heart must be the first
44 //    non-PHI instruction in their respective block. This does not conflict with
45 //    the landing pads, since these two kinds cannot occur in the same block.
46 //  * All other things that are tested by asserts spread about the code...
47 //
48 //===----------------------------------------------------------------------===//
49 
50 #include "llvm/IR/Verifier.h"
51 #include "llvm/ADT/APFloat.h"
52 #include "llvm/ADT/APInt.h"
53 #include "llvm/ADT/ArrayRef.h"
54 #include "llvm/ADT/DenseMap.h"
55 #include "llvm/ADT/MapVector.h"
56 #include "llvm/ADT/PostOrderIterator.h"
57 #include "llvm/ADT/STLExtras.h"
58 #include "llvm/ADT/SmallPtrSet.h"
59 #include "llvm/ADT/SmallSet.h"
60 #include "llvm/ADT/SmallVector.h"
61 #include "llvm/ADT/StringExtras.h"
62 #include "llvm/ADT/StringMap.h"
63 #include "llvm/ADT/StringRef.h"
64 #include "llvm/ADT/Twine.h"
65 #include "llvm/BinaryFormat/Dwarf.h"
66 #include "llvm/IR/Argument.h"
67 #include "llvm/IR/AttributeMask.h"
68 #include "llvm/IR/Attributes.h"
69 #include "llvm/IR/BasicBlock.h"
70 #include "llvm/IR/CFG.h"
71 #include "llvm/IR/CallingConv.h"
72 #include "llvm/IR/Comdat.h"
73 #include "llvm/IR/Constant.h"
74 #include "llvm/IR/ConstantRange.h"
75 #include "llvm/IR/Constants.h"
76 #include "llvm/IR/CycleInfo.h"
77 #include "llvm/IR/DataLayout.h"
78 #include "llvm/IR/DebugInfo.h"
79 #include "llvm/IR/DebugInfoMetadata.h"
80 #include "llvm/IR/DebugLoc.h"
81 #include "llvm/IR/DerivedTypes.h"
82 #include "llvm/IR/Dominators.h"
83 #include "llvm/IR/EHPersonalities.h"
84 #include "llvm/IR/Function.h"
85 #include "llvm/IR/GCStrategy.h"
86 #include "llvm/IR/GlobalAlias.h"
87 #include "llvm/IR/GlobalValue.h"
88 #include "llvm/IR/GlobalVariable.h"
89 #include "llvm/IR/InlineAsm.h"
90 #include "llvm/IR/InstVisitor.h"
91 #include "llvm/IR/InstrTypes.h"
92 #include "llvm/IR/Instruction.h"
93 #include "llvm/IR/Instructions.h"
94 #include "llvm/IR/IntrinsicInst.h"
95 #include "llvm/IR/Intrinsics.h"
96 #include "llvm/IR/IntrinsicsAArch64.h"
97 #include "llvm/IR/IntrinsicsAMDGPU.h"
98 #include "llvm/IR/IntrinsicsARM.h"
99 #include "llvm/IR/IntrinsicsWebAssembly.h"
100 #include "llvm/IR/LLVMContext.h"
101 #include "llvm/IR/Metadata.h"
102 #include "llvm/IR/Module.h"
103 #include "llvm/IR/ModuleSlotTracker.h"
104 #include "llvm/IR/PassManager.h"
105 #include "llvm/IR/Statepoint.h"
106 #include "llvm/IR/Type.h"
107 #include "llvm/IR/Use.h"
108 #include "llvm/IR/User.h"
109 #include "llvm/IR/Value.h"
110 #include "llvm/InitializePasses.h"
111 #include "llvm/Pass.h"
112 #include "llvm/Support/AtomicOrdering.h"
113 #include "llvm/Support/Casting.h"
114 #include "llvm/Support/CommandLine.h"
115 #include "llvm/Support/ErrorHandling.h"
116 #include "llvm/Support/MathExtras.h"
117 #include "llvm/Support/raw_ostream.h"
118 #include <algorithm>
119 #include <cassert>
120 #include <cstdint>
121 #include <memory>
122 #include <optional>
123 #include <string>
124 #include <utility>
125 
126 using namespace llvm;
127 
128 static cl::opt<bool> VerifyNoAliasScopeDomination(
129     "verify-noalias-scope-decl-dom", cl::Hidden, cl::init(false),
130     cl::desc("Ensure that llvm.experimental.noalias.scope.decl for identical "
131              "scopes are not dominating"));
132 
133 namespace llvm {
134 
135 struct VerifierSupport {
136   raw_ostream *OS;
137   const Module &M;
138   ModuleSlotTracker MST;
139   Triple TT;
140   const DataLayout &DL;
141   LLVMContext &Context;
142 
143   /// Track the brokenness of the module while recursively visiting.
144   bool Broken = false;
145   /// Broken debug info can be "recovered" from by stripping the debug info.
146   bool BrokenDebugInfo = false;
147   /// Whether to treat broken debug info as an error.
148   bool TreatBrokenDebugInfoAsError = true;
149 
150   explicit VerifierSupport(raw_ostream *OS, const Module &M)
151       : OS(OS), M(M), MST(&M), TT(M.getTargetTriple()), DL(M.getDataLayout()),
152         Context(M.getContext()) {}
153 
154 private:
155   void Write(const Module *M) {
156     *OS << "; ModuleID = '" << M->getModuleIdentifier() << "'\n";
157   }
158 
159   void Write(const Value *V) {
160     if (V)
161       Write(*V);
162   }
163 
164   void Write(const Value &V) {
165     if (isa<Instruction>(V)) {
166       V.print(*OS, MST);
167       *OS << '\n';
168     } else {
169       V.printAsOperand(*OS, true, MST);
170       *OS << '\n';
171     }
172   }
173 
174   void Write(const Metadata *MD) {
175     if (!MD)
176       return;
177     MD->print(*OS, MST, &M);
178     *OS << '\n';
179   }
180 
181   template <class T> void Write(const MDTupleTypedArrayWrapper<T> &MD) {
182     Write(MD.get());
183   }
184 
185   void Write(const NamedMDNode *NMD) {
186     if (!NMD)
187       return;
188     NMD->print(*OS, MST);
189     *OS << '\n';
190   }
191 
192   void Write(Type *T) {
193     if (!T)
194       return;
195     *OS << ' ' << *T;
196   }
197 
198   void Write(const Comdat *C) {
199     if (!C)
200       return;
201     *OS << *C;
202   }
203 
204   void Write(const APInt *AI) {
205     if (!AI)
206       return;
207     *OS << *AI << '\n';
208   }
209 
210   void Write(const unsigned i) { *OS << i << '\n'; }
211 
212   // NOLINTNEXTLINE(readability-identifier-naming)
213   void Write(const Attribute *A) {
214     if (!A)
215       return;
216     *OS << A->getAsString() << '\n';
217   }
218 
219   // NOLINTNEXTLINE(readability-identifier-naming)
220   void Write(const AttributeSet *AS) {
221     if (!AS)
222       return;
223     *OS << AS->getAsString() << '\n';
224   }
225 
226   // NOLINTNEXTLINE(readability-identifier-naming)
227   void Write(const AttributeList *AL) {
228     if (!AL)
229       return;
230     AL->print(*OS);
231   }
232 
233   void Write(Printable P) { *OS << P << '\n'; }
234 
235   template <typename T> void Write(ArrayRef<T> Vs) {
236     for (const T &V : Vs)
237       Write(V);
238   }
239 
240   template <typename T1, typename... Ts>
241   void WriteTs(const T1 &V1, const Ts &... Vs) {
242     Write(V1);
243     WriteTs(Vs...);
244   }
245 
246   template <typename... Ts> void WriteTs() {}
247 
248 public:
249   /// A check failed, so printout out the condition and the message.
250   ///
251   /// This provides a nice place to put a breakpoint if you want to see why
252   /// something is not correct.
253   void CheckFailed(const Twine &Message) {
254     if (OS)
255       *OS << Message << '\n';
256     Broken = true;
257   }
258 
259   /// A check failed (with values to print).
260   ///
261   /// This calls the Message-only version so that the above is easier to set a
262   /// breakpoint on.
263   template <typename T1, typename... Ts>
264   void CheckFailed(const Twine &Message, const T1 &V1, const Ts &... Vs) {
265     CheckFailed(Message);
266     if (OS)
267       WriteTs(V1, Vs...);
268   }
269 
270   /// A debug info check failed.
271   void DebugInfoCheckFailed(const Twine &Message) {
272     if (OS)
273       *OS << Message << '\n';
274     Broken |= TreatBrokenDebugInfoAsError;
275     BrokenDebugInfo = true;
276   }
277 
278   /// A debug info check failed (with values to print).
279   template <typename T1, typename... Ts>
280   void DebugInfoCheckFailed(const Twine &Message, const T1 &V1,
281                             const Ts &... Vs) {
282     DebugInfoCheckFailed(Message);
283     if (OS)
284       WriteTs(V1, Vs...);
285   }
286 };
287 
288 } // namespace llvm
289 
290 namespace {
291 
292 class Verifier : public InstVisitor<Verifier>, VerifierSupport {
293   friend class InstVisitor<Verifier>;
294 
295   // ISD::ArgFlagsTy::MemAlign only have 4 bits for alignment, so
296   // the alignment size should not exceed 2^15. Since encode(Align)
297   // would plus the shift value by 1, the alignment size should
298   // not exceed 2^14, otherwise it can NOT be properly lowered
299   // in backend.
300   static constexpr unsigned ParamMaxAlignment = 1 << 14;
301   DominatorTree DT;
302 
303   /// When verifying a basic block, keep track of all of the
304   /// instructions we have seen so far.
305   ///
306   /// This allows us to do efficient dominance checks for the case when an
307   /// instruction has an operand that is an instruction in the same block.
308   SmallPtrSet<Instruction *, 16> InstsInThisBlock;
309 
310   /// Keep track of the metadata nodes that have been checked already.
311   SmallPtrSet<const Metadata *, 32> MDNodes;
312 
313   /// Keep track which DISubprogram is attached to which function.
314   DenseMap<const DISubprogram *, const Function *> DISubprogramAttachments;
315 
316   /// Track all DICompileUnits visited.
317   SmallPtrSet<const Metadata *, 2> CUVisited;
318 
319   /// The result type for a landingpad.
320   Type *LandingPadResultTy;
321 
322   /// Whether we've seen a call to @llvm.localescape in this function
323   /// already.
324   bool SawFrameEscape;
325 
326   /// Whether the current function has a DISubprogram attached to it.
327   bool HasDebugInfo = false;
328 
329   /// The current source language.
330   dwarf::SourceLanguage CurrentSourceLang = dwarf::DW_LANG_lo_user;
331 
332   /// Whether the current function has convergencectrl operand bundles.
333   enum {
334     ControlledConvergence,
335     UncontrolledConvergence,
336     NoConvergence
337   } ConvergenceKind = NoConvergence;
338 
339   /// Whether source was present on the first DIFile encountered in each CU.
340   DenseMap<const DICompileUnit *, bool> HasSourceDebugInfo;
341 
342   /// Stores the count of how many objects were passed to llvm.localescape for a
343   /// given function and the largest index passed to llvm.localrecover.
344   DenseMap<Function *, std::pair<unsigned, unsigned>> FrameEscapeInfo;
345 
346   // Maps catchswitches and cleanuppads that unwind to siblings to the
347   // terminators that indicate the unwind, used to detect cycles therein.
348   MapVector<Instruction *, Instruction *> SiblingFuncletInfo;
349 
350   /// Cache which blocks are in which funclet, if an EH funclet personality is
351   /// in use. Otherwise empty.
352   DenseMap<BasicBlock *, ColorVector> BlockEHFuncletColors;
353 
354   /// Cache of constants visited in search of ConstantExprs.
355   SmallPtrSet<const Constant *, 32> ConstantExprVisited;
356 
357   /// Cache of declarations of the llvm.experimental.deoptimize.<ty> intrinsic.
358   SmallVector<const Function *, 4> DeoptimizeDeclarations;
359 
360   /// Cache of attribute lists verified.
361   SmallPtrSet<const void *, 32> AttributeListsVisited;
362 
363   // Verify that this GlobalValue is only used in this module.
364   // This map is used to avoid visiting uses twice. We can arrive at a user
365   // twice, if they have multiple operands. In particular for very large
366   // constant expressions, we can arrive at a particular user many times.
367   SmallPtrSet<const Value *, 32> GlobalValueVisited;
368 
369   // Keeps track of duplicate function argument debug info.
370   SmallVector<const DILocalVariable *, 16> DebugFnArgs;
371 
372   TBAAVerifier TBAAVerifyHelper;
373 
374   SmallVector<IntrinsicInst *, 4> NoAliasScopeDecls;
375 
376   void checkAtomicMemAccessSize(Type *Ty, const Instruction *I);
377 
378 public:
379   explicit Verifier(raw_ostream *OS, bool ShouldTreatBrokenDebugInfoAsError,
380                     const Module &M)
381       : VerifierSupport(OS, M), LandingPadResultTy(nullptr),
382         SawFrameEscape(false), TBAAVerifyHelper(this) {
383     TreatBrokenDebugInfoAsError = ShouldTreatBrokenDebugInfoAsError;
384   }
385 
386   bool hasBrokenDebugInfo() const { return BrokenDebugInfo; }
387 
388   bool verify(const Function &F) {
389     assert(F.getParent() == &M &&
390            "An instance of this class only works with a specific module!");
391 
392     // First ensure the function is well-enough formed to compute dominance
393     // information, and directly compute a dominance tree. We don't rely on the
394     // pass manager to provide this as it isolates us from a potentially
395     // out-of-date dominator tree and makes it significantly more complex to run
396     // this code outside of a pass manager.
397     // FIXME: It's really gross that we have to cast away constness here.
398     if (!F.empty())
399       DT.recalculate(const_cast<Function &>(F));
400 
401     for (const BasicBlock &BB : F) {
402       if (!BB.empty() && BB.back().isTerminator())
403         continue;
404 
405       if (OS) {
406         *OS << "Basic Block in function '" << F.getName()
407             << "' does not have terminator!\n";
408         BB.printAsOperand(*OS, true, MST);
409         *OS << "\n";
410       }
411       return false;
412     }
413 
414     Broken = false;
415     // FIXME: We strip const here because the inst visitor strips const.
416     visit(const_cast<Function &>(F));
417     verifySiblingFuncletUnwinds();
418     if (ConvergenceKind == ControlledConvergence)
419       verifyConvergenceControl(const_cast<Function &>(F));
420     InstsInThisBlock.clear();
421     DebugFnArgs.clear();
422     LandingPadResultTy = nullptr;
423     SawFrameEscape = false;
424     SiblingFuncletInfo.clear();
425     verifyNoAliasScopeDecl();
426     NoAliasScopeDecls.clear();
427     ConvergenceKind = NoConvergence;
428 
429     return !Broken;
430   }
431 
432   /// Verify the module that this instance of \c Verifier was initialized with.
433   bool verify() {
434     Broken = false;
435 
436     // Collect all declarations of the llvm.experimental.deoptimize intrinsic.
437     for (const Function &F : M)
438       if (F.getIntrinsicID() == Intrinsic::experimental_deoptimize)
439         DeoptimizeDeclarations.push_back(&F);
440 
441     // Now that we've visited every function, verify that we never asked to
442     // recover a frame index that wasn't escaped.
443     verifyFrameRecoverIndices();
444     for (const GlobalVariable &GV : M.globals())
445       visitGlobalVariable(GV);
446 
447     for (const GlobalAlias &GA : M.aliases())
448       visitGlobalAlias(GA);
449 
450     for (const GlobalIFunc &GI : M.ifuncs())
451       visitGlobalIFunc(GI);
452 
453     for (const NamedMDNode &NMD : M.named_metadata())
454       visitNamedMDNode(NMD);
455 
456     for (const StringMapEntry<Comdat> &SMEC : M.getComdatSymbolTable())
457       visitComdat(SMEC.getValue());
458 
459     visitModuleFlags();
460     visitModuleIdents();
461     visitModuleCommandLines();
462 
463     verifyCompileUnits();
464 
465     verifyDeoptimizeCallingConvs();
466     DISubprogramAttachments.clear();
467     return !Broken;
468   }
469 
470 private:
471   /// Whether a metadata node is allowed to be, or contain, a DILocation.
472   enum class AreDebugLocsAllowed { No, Yes };
473 
474   // Verification methods...
475   void visitGlobalValue(const GlobalValue &GV);
476   void visitGlobalVariable(const GlobalVariable &GV);
477   void visitGlobalAlias(const GlobalAlias &GA);
478   void visitGlobalIFunc(const GlobalIFunc &GI);
479   void visitAliaseeSubExpr(const GlobalAlias &A, const Constant &C);
480   void visitAliaseeSubExpr(SmallPtrSetImpl<const GlobalAlias *> &Visited,
481                            const GlobalAlias &A, const Constant &C);
482   void visitNamedMDNode(const NamedMDNode &NMD);
483   void visitMDNode(const MDNode &MD, AreDebugLocsAllowed AllowLocs);
484   void visitMetadataAsValue(const MetadataAsValue &MD, Function *F);
485   void visitValueAsMetadata(const ValueAsMetadata &MD, Function *F);
486   void visitComdat(const Comdat &C);
487   void visitModuleIdents();
488   void visitModuleCommandLines();
489   void visitModuleFlags();
490   void visitModuleFlag(const MDNode *Op,
491                        DenseMap<const MDString *, const MDNode *> &SeenIDs,
492                        SmallVectorImpl<const MDNode *> &Requirements);
493   void visitModuleFlagCGProfileEntry(const MDOperand &MDO);
494   void visitFunction(const Function &F);
495   void visitBasicBlock(BasicBlock &BB);
496   void verifyRangeMetadata(const Value &V, const MDNode *Range, Type *Ty,
497                            bool IsAbsoluteSymbol);
498   void visitRangeMetadata(Instruction &I, MDNode *Range, Type *Ty);
499   void visitDereferenceableMetadata(Instruction &I, MDNode *MD);
500   void visitProfMetadata(Instruction &I, MDNode *MD);
501   void visitCallStackMetadata(MDNode *MD);
502   void visitMemProfMetadata(Instruction &I, MDNode *MD);
503   void visitCallsiteMetadata(Instruction &I, MDNode *MD);
504   void visitDIAssignIDMetadata(Instruction &I, MDNode *MD);
505   void visitAnnotationMetadata(MDNode *Annotation);
506   void visitAliasScopeMetadata(const MDNode *MD);
507   void visitAliasScopeListMetadata(const MDNode *MD);
508   void visitAccessGroupMetadata(const MDNode *MD);
509 
510   template <class Ty> bool isValidMetadataArray(const MDTuple &N);
511 #define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) void visit##CLASS(const CLASS &N);
512 #include "llvm/IR/Metadata.def"
513   void visitDIScope(const DIScope &N);
514   void visitDIVariable(const DIVariable &N);
515   void visitDILexicalBlockBase(const DILexicalBlockBase &N);
516   void visitDITemplateParameter(const DITemplateParameter &N);
517 
518   void visitTemplateParams(const MDNode &N, const Metadata &RawParams);
519 
520   // InstVisitor overrides...
521   using InstVisitor<Verifier>::visit;
522   void visit(Instruction &I);
523 
524   void visitTruncInst(TruncInst &I);
525   void visitZExtInst(ZExtInst &I);
526   void visitSExtInst(SExtInst &I);
527   void visitFPTruncInst(FPTruncInst &I);
528   void visitFPExtInst(FPExtInst &I);
529   void visitFPToUIInst(FPToUIInst &I);
530   void visitFPToSIInst(FPToSIInst &I);
531   void visitUIToFPInst(UIToFPInst &I);
532   void visitSIToFPInst(SIToFPInst &I);
533   void visitIntToPtrInst(IntToPtrInst &I);
534   void visitPtrToIntInst(PtrToIntInst &I);
535   void visitBitCastInst(BitCastInst &I);
536   void visitAddrSpaceCastInst(AddrSpaceCastInst &I);
537   void visitPHINode(PHINode &PN);
538   void visitCallBase(CallBase &Call);
539   void visitUnaryOperator(UnaryOperator &U);
540   void visitBinaryOperator(BinaryOperator &B);
541   void visitICmpInst(ICmpInst &IC);
542   void visitFCmpInst(FCmpInst &FC);
543   void visitExtractElementInst(ExtractElementInst &EI);
544   void visitInsertElementInst(InsertElementInst &EI);
545   void visitShuffleVectorInst(ShuffleVectorInst &EI);
546   void visitVAArgInst(VAArgInst &VAA) { visitInstruction(VAA); }
547   void visitCallInst(CallInst &CI);
548   void visitInvokeInst(InvokeInst &II);
549   void visitGetElementPtrInst(GetElementPtrInst &GEP);
550   void visitLoadInst(LoadInst &LI);
551   void visitStoreInst(StoreInst &SI);
552   void verifyDominatesUse(Instruction &I, unsigned i);
553   void visitInstruction(Instruction &I);
554   void visitTerminator(Instruction &I);
555   void visitBranchInst(BranchInst &BI);
556   void visitReturnInst(ReturnInst &RI);
557   void visitSwitchInst(SwitchInst &SI);
558   void visitIndirectBrInst(IndirectBrInst &BI);
559   void visitCallBrInst(CallBrInst &CBI);
560   void visitSelectInst(SelectInst &SI);
561   void visitUserOp1(Instruction &I);
562   void visitUserOp2(Instruction &I) { visitUserOp1(I); }
563   void visitIntrinsicCall(Intrinsic::ID ID, CallBase &Call);
564   void visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI);
565   void visitVPIntrinsic(VPIntrinsic &VPI);
566   void visitDbgIntrinsic(StringRef Kind, DbgVariableIntrinsic &DII);
567   void visitDbgLabelIntrinsic(StringRef Kind, DbgLabelInst &DLI);
568   void visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI);
569   void visitAtomicRMWInst(AtomicRMWInst &RMWI);
570   void visitFenceInst(FenceInst &FI);
571   void visitAllocaInst(AllocaInst &AI);
572   void visitExtractValueInst(ExtractValueInst &EVI);
573   void visitInsertValueInst(InsertValueInst &IVI);
574   void visitEHPadPredecessors(Instruction &I);
575   void visitLandingPadInst(LandingPadInst &LPI);
576   void visitResumeInst(ResumeInst &RI);
577   void visitCatchPadInst(CatchPadInst &CPI);
578   void visitCatchReturnInst(CatchReturnInst &CatchReturn);
579   void visitCleanupPadInst(CleanupPadInst &CPI);
580   void visitFuncletPadInst(FuncletPadInst &FPI);
581   void visitCatchSwitchInst(CatchSwitchInst &CatchSwitch);
582   void visitCleanupReturnInst(CleanupReturnInst &CRI);
583 
584   void verifySwiftErrorCall(CallBase &Call, const Value *SwiftErrorVal);
585   void verifySwiftErrorValue(const Value *SwiftErrorVal);
586   void verifyTailCCMustTailAttrs(const AttrBuilder &Attrs, StringRef Context);
587   void verifyMustTailCall(CallInst &CI);
588   bool verifyAttributeCount(AttributeList Attrs, unsigned Params);
589   void verifyAttributeTypes(AttributeSet Attrs, const Value *V);
590   void verifyParameterAttrs(AttributeSet Attrs, Type *Ty, const Value *V);
591   void checkUnsignedBaseTenFuncAttr(AttributeList Attrs, StringRef Attr,
592                                     const Value *V);
593   void verifyFunctionAttrs(FunctionType *FT, AttributeList Attrs,
594                            const Value *V, bool IsIntrinsic, bool IsInlineAsm);
595   void verifyFunctionMetadata(ArrayRef<std::pair<unsigned, MDNode *>> MDs);
596 
597   void visitConstantExprsRecursively(const Constant *EntryC);
598   void visitConstantExpr(const ConstantExpr *CE);
599   void verifyInlineAsmCall(const CallBase &Call);
600   void verifyStatepoint(const CallBase &Call);
601   void verifyFrameRecoverIndices();
602   void verifySiblingFuncletUnwinds();
603   void verifyConvergenceControl(Function &F);
604 
605   void verifyFragmentExpression(const DbgVariableIntrinsic &I);
606   template <typename ValueOrMetadata>
607   void verifyFragmentExpression(const DIVariable &V,
608                                 DIExpression::FragmentInfo Fragment,
609                                 ValueOrMetadata *Desc);
610   void verifyFnArgs(const DbgVariableIntrinsic &I);
611   void verifyNotEntryValue(const DbgVariableIntrinsic &I);
612 
613   /// Module-level debug info verification...
614   void verifyCompileUnits();
615 
616   /// Module-level verification that all @llvm.experimental.deoptimize
617   /// declarations share the same calling convention.
618   void verifyDeoptimizeCallingConvs();
619 
620   void verifyAttachedCallBundle(const CallBase &Call,
621                                 const OperandBundleUse &BU);
622 
623   /// Verify all-or-nothing property of DIFile source attribute within a CU.
624   void verifySourceDebugInfo(const DICompileUnit &U, const DIFile &F);
625 
626   /// Verify the llvm.experimental.noalias.scope.decl declarations
627   void verifyNoAliasScopeDecl();
628 };
629 
630 } // end anonymous namespace
631 
632 /// We know that cond should be true, if not print an error message.
633 #define Check(C, ...)                                                          \
634   do {                                                                         \
635     if (!(C)) {                                                                \
636       CheckFailed(__VA_ARGS__);                                                \
637       return;                                                                  \
638     }                                                                          \
639   } while (false)
640 
641 /// We know that a debug info condition should be true, if not print
642 /// an error message.
643 #define CheckDI(C, ...)                                                        \
644   do {                                                                         \
645     if (!(C)) {                                                                \
646       DebugInfoCheckFailed(__VA_ARGS__);                                       \
647       return;                                                                  \
648     }                                                                          \
649   } while (false)
650 
651 void Verifier::visit(Instruction &I) {
652   for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
653     Check(I.getOperand(i) != nullptr, "Operand is null", &I);
654   InstVisitor<Verifier>::visit(I);
655 }
656 
657 // Helper to iterate over indirect users. By returning false, the callback can ask to stop traversing further.
658 static void forEachUser(const Value *User,
659                         SmallPtrSet<const Value *, 32> &Visited,
660                         llvm::function_ref<bool(const Value *)> Callback) {
661   if (!Visited.insert(User).second)
662     return;
663 
664   SmallVector<const Value *> WorkList;
665   append_range(WorkList, User->materialized_users());
666   while (!WorkList.empty()) {
667    const Value *Cur = WorkList.pop_back_val();
668     if (!Visited.insert(Cur).second)
669       continue;
670     if (Callback(Cur))
671       append_range(WorkList, Cur->materialized_users());
672   }
673 }
674 
675 void Verifier::visitGlobalValue(const GlobalValue &GV) {
676   Check(!GV.isDeclaration() || GV.hasValidDeclarationLinkage(),
677         "Global is external, but doesn't have external or weak linkage!", &GV);
678 
679   if (const GlobalObject *GO = dyn_cast<GlobalObject>(&GV)) {
680 
681     if (MaybeAlign A = GO->getAlign()) {
682       Check(A->value() <= Value::MaximumAlignment,
683             "huge alignment values are unsupported", GO);
684     }
685 
686     if (const MDNode *Associated =
687             GO->getMetadata(LLVMContext::MD_associated)) {
688       Check(Associated->getNumOperands() == 1,
689             "associated metadata must have one operand", &GV, Associated);
690       const Metadata *Op = Associated->getOperand(0).get();
691       Check(Op, "associated metadata must have a global value", GO, Associated);
692 
693       const auto *VM = dyn_cast_or_null<ValueAsMetadata>(Op);
694       Check(VM, "associated metadata must be ValueAsMetadata", GO, Associated);
695       if (VM) {
696         Check(isa<PointerType>(VM->getValue()->getType()),
697               "associated value must be pointer typed", GV, Associated);
698 
699         const Value *Stripped = VM->getValue()->stripPointerCastsAndAliases();
700         Check(isa<GlobalObject>(Stripped) || isa<Constant>(Stripped),
701               "associated metadata must point to a GlobalObject", GO, Stripped);
702         Check(Stripped != GO,
703               "global values should not associate to themselves", GO,
704               Associated);
705       }
706     }
707 
708     // FIXME: Why is getMetadata on GlobalValue protected?
709     if (const MDNode *AbsoluteSymbol =
710             GO->getMetadata(LLVMContext::MD_absolute_symbol)) {
711       verifyRangeMetadata(*GO, AbsoluteSymbol, DL.getIntPtrType(GO->getType()),
712                           true);
713     }
714   }
715 
716   Check(!GV.hasAppendingLinkage() || isa<GlobalVariable>(GV),
717         "Only global variables can have appending linkage!", &GV);
718 
719   if (GV.hasAppendingLinkage()) {
720     const GlobalVariable *GVar = dyn_cast<GlobalVariable>(&GV);
721     Check(GVar && GVar->getValueType()->isArrayTy(),
722           "Only global arrays can have appending linkage!", GVar);
723   }
724 
725   if (GV.isDeclarationForLinker())
726     Check(!GV.hasComdat(), "Declaration may not be in a Comdat!", &GV);
727 
728   if (GV.hasDLLExportStorageClass()) {
729     Check(!GV.hasHiddenVisibility(),
730           "dllexport GlobalValue must have default or protected visibility",
731           &GV);
732   }
733   if (GV.hasDLLImportStorageClass()) {
734     Check(GV.hasDefaultVisibility(),
735           "dllimport GlobalValue must have default visibility", &GV);
736     Check(!GV.isDSOLocal(), "GlobalValue with DLLImport Storage is dso_local!",
737           &GV);
738 
739     Check((GV.isDeclaration() &&
740            (GV.hasExternalLinkage() || GV.hasExternalWeakLinkage())) ||
741               GV.hasAvailableExternallyLinkage(),
742           "Global is marked as dllimport, but not external", &GV);
743   }
744 
745   if (GV.isImplicitDSOLocal())
746     Check(GV.isDSOLocal(),
747           "GlobalValue with local linkage or non-default "
748           "visibility must be dso_local!",
749           &GV);
750 
751   forEachUser(&GV, GlobalValueVisited, [&](const Value *V) -> bool {
752     if (const Instruction *I = dyn_cast<Instruction>(V)) {
753       if (!I->getParent() || !I->getParent()->getParent())
754         CheckFailed("Global is referenced by parentless instruction!", &GV, &M,
755                     I);
756       else if (I->getParent()->getParent()->getParent() != &M)
757         CheckFailed("Global is referenced in a different module!", &GV, &M, I,
758                     I->getParent()->getParent(),
759                     I->getParent()->getParent()->getParent());
760       return false;
761     } else if (const Function *F = dyn_cast<Function>(V)) {
762       if (F->getParent() != &M)
763         CheckFailed("Global is used by function in a different module", &GV, &M,
764                     F, F->getParent());
765       return false;
766     }
767     return true;
768   });
769 }
770 
771 void Verifier::visitGlobalVariable(const GlobalVariable &GV) {
772   if (GV.hasInitializer()) {
773     Check(GV.getInitializer()->getType() == GV.getValueType(),
774           "Global variable initializer type does not match global "
775           "variable type!",
776           &GV);
777     // If the global has common linkage, it must have a zero initializer and
778     // cannot be constant.
779     if (GV.hasCommonLinkage()) {
780       Check(GV.getInitializer()->isNullValue(),
781             "'common' global must have a zero initializer!", &GV);
782       Check(!GV.isConstant(), "'common' global may not be marked constant!",
783             &GV);
784       Check(!GV.hasComdat(), "'common' global may not be in a Comdat!", &GV);
785     }
786   }
787 
788   if (GV.hasName() && (GV.getName() == "llvm.global_ctors" ||
789                        GV.getName() == "llvm.global_dtors")) {
790     Check(!GV.hasInitializer() || GV.hasAppendingLinkage(),
791           "invalid linkage for intrinsic global variable", &GV);
792     Check(GV.materialized_use_empty(),
793           "invalid uses of intrinsic global variable", &GV);
794 
795     // Don't worry about emitting an error for it not being an array,
796     // visitGlobalValue will complain on appending non-array.
797     if (ArrayType *ATy = dyn_cast<ArrayType>(GV.getValueType())) {
798       StructType *STy = dyn_cast<StructType>(ATy->getElementType());
799       PointerType *FuncPtrTy =
800           FunctionType::get(Type::getVoidTy(Context), false)->
801           getPointerTo(DL.getProgramAddressSpace());
802       Check(STy && (STy->getNumElements() == 2 || STy->getNumElements() == 3) &&
803                 STy->getTypeAtIndex(0u)->isIntegerTy(32) &&
804                 STy->getTypeAtIndex(1) == FuncPtrTy,
805             "wrong type for intrinsic global variable", &GV);
806       Check(STy->getNumElements() == 3,
807             "the third field of the element type is mandatory, "
808             "specify ptr null to migrate from the obsoleted 2-field form");
809       Type *ETy = STy->getTypeAtIndex(2);
810       Check(ETy->isPointerTy(), "wrong type for intrinsic global variable",
811             &GV);
812     }
813   }
814 
815   if (GV.hasName() && (GV.getName() == "llvm.used" ||
816                        GV.getName() == "llvm.compiler.used")) {
817     Check(!GV.hasInitializer() || GV.hasAppendingLinkage(),
818           "invalid linkage for intrinsic global variable", &GV);
819     Check(GV.materialized_use_empty(),
820           "invalid uses of intrinsic global variable", &GV);
821 
822     Type *GVType = GV.getValueType();
823     if (ArrayType *ATy = dyn_cast<ArrayType>(GVType)) {
824       PointerType *PTy = dyn_cast<PointerType>(ATy->getElementType());
825       Check(PTy, "wrong type for intrinsic global variable", &GV);
826       if (GV.hasInitializer()) {
827         const Constant *Init = GV.getInitializer();
828         const ConstantArray *InitArray = dyn_cast<ConstantArray>(Init);
829         Check(InitArray, "wrong initalizer for intrinsic global variable",
830               Init);
831         for (Value *Op : InitArray->operands()) {
832           Value *V = Op->stripPointerCasts();
833           Check(isa<GlobalVariable>(V) || isa<Function>(V) ||
834                     isa<GlobalAlias>(V),
835                 Twine("invalid ") + GV.getName() + " member", V);
836           Check(V->hasName(),
837                 Twine("members of ") + GV.getName() + " must be named", V);
838         }
839       }
840     }
841   }
842 
843   // Visit any debug info attachments.
844   SmallVector<MDNode *, 1> MDs;
845   GV.getMetadata(LLVMContext::MD_dbg, MDs);
846   for (auto *MD : MDs) {
847     if (auto *GVE = dyn_cast<DIGlobalVariableExpression>(MD))
848       visitDIGlobalVariableExpression(*GVE);
849     else
850       CheckDI(false, "!dbg attachment of global variable must be a "
851                      "DIGlobalVariableExpression");
852   }
853 
854   // Scalable vectors cannot be global variables, since we don't know
855   // the runtime size. If the global is an array containing scalable vectors,
856   // that will be caught by the isValidElementType methods in StructType or
857   // ArrayType instead.
858   Check(!isa<ScalableVectorType>(GV.getValueType()),
859         "Globals cannot contain scalable vectors", &GV);
860 
861   if (auto *STy = dyn_cast<StructType>(GV.getValueType())) {
862     SmallPtrSet<Type *, 4> Visited;
863     Check(!STy->containsScalableVectorType(&Visited),
864           "Globals cannot contain scalable vectors", &GV);
865   }
866 
867   // Check if it's a target extension type that disallows being used as a
868   // global.
869   if (auto *TTy = dyn_cast<TargetExtType>(GV.getValueType()))
870     Check(TTy->hasProperty(TargetExtType::CanBeGlobal),
871           "Global @" + GV.getName() + " has illegal target extension type",
872           TTy);
873 
874   if (!GV.hasInitializer()) {
875     visitGlobalValue(GV);
876     return;
877   }
878 
879   // Walk any aggregate initializers looking for bitcasts between address spaces
880   visitConstantExprsRecursively(GV.getInitializer());
881 
882   visitGlobalValue(GV);
883 }
884 
885 void Verifier::visitAliaseeSubExpr(const GlobalAlias &GA, const Constant &C) {
886   SmallPtrSet<const GlobalAlias*, 4> Visited;
887   Visited.insert(&GA);
888   visitAliaseeSubExpr(Visited, GA, C);
889 }
890 
891 void Verifier::visitAliaseeSubExpr(SmallPtrSetImpl<const GlobalAlias*> &Visited,
892                                    const GlobalAlias &GA, const Constant &C) {
893   if (GA.hasAvailableExternallyLinkage()) {
894     Check(isa<GlobalValue>(C) &&
895               cast<GlobalValue>(C).hasAvailableExternallyLinkage(),
896           "available_externally alias must point to available_externally "
897           "global value",
898           &GA);
899   }
900   if (const auto *GV = dyn_cast<GlobalValue>(&C)) {
901     if (!GA.hasAvailableExternallyLinkage()) {
902       Check(!GV->isDeclarationForLinker(), "Alias must point to a definition",
903             &GA);
904     }
905 
906     if (const auto *GA2 = dyn_cast<GlobalAlias>(GV)) {
907       Check(Visited.insert(GA2).second, "Aliases cannot form a cycle", &GA);
908 
909       Check(!GA2->isInterposable(),
910             "Alias cannot point to an interposable alias", &GA);
911     } else {
912       // Only continue verifying subexpressions of GlobalAliases.
913       // Do not recurse into global initializers.
914       return;
915     }
916   }
917 
918   if (const auto *CE = dyn_cast<ConstantExpr>(&C))
919     visitConstantExprsRecursively(CE);
920 
921   for (const Use &U : C.operands()) {
922     Value *V = &*U;
923     if (const auto *GA2 = dyn_cast<GlobalAlias>(V))
924       visitAliaseeSubExpr(Visited, GA, *GA2->getAliasee());
925     else if (const auto *C2 = dyn_cast<Constant>(V))
926       visitAliaseeSubExpr(Visited, GA, *C2);
927   }
928 }
929 
930 void Verifier::visitGlobalAlias(const GlobalAlias &GA) {
931   Check(GlobalAlias::isValidLinkage(GA.getLinkage()),
932         "Alias should have private, internal, linkonce, weak, linkonce_odr, "
933         "weak_odr, external, or available_externally linkage!",
934         &GA);
935   const Constant *Aliasee = GA.getAliasee();
936   Check(Aliasee, "Aliasee cannot be NULL!", &GA);
937   Check(GA.getType() == Aliasee->getType(),
938         "Alias and aliasee types should match!", &GA);
939 
940   Check(isa<GlobalValue>(Aliasee) || isa<ConstantExpr>(Aliasee),
941         "Aliasee should be either GlobalValue or ConstantExpr", &GA);
942 
943   visitAliaseeSubExpr(GA, *Aliasee);
944 
945   visitGlobalValue(GA);
946 }
947 
948 void Verifier::visitGlobalIFunc(const GlobalIFunc &GI) {
949   Check(GlobalIFunc::isValidLinkage(GI.getLinkage()),
950         "IFunc should have private, internal, linkonce, weak, linkonce_odr, "
951         "weak_odr, or external linkage!",
952         &GI);
953   // Pierce through ConstantExprs and GlobalAliases and check that the resolver
954   // is a Function definition.
955   const Function *Resolver = GI.getResolverFunction();
956   Check(Resolver, "IFunc must have a Function resolver", &GI);
957   Check(!Resolver->isDeclarationForLinker(),
958         "IFunc resolver must be a definition", &GI);
959 
960   // Check that the immediate resolver operand (prior to any bitcasts) has the
961   // correct type.
962   const Type *ResolverTy = GI.getResolver()->getType();
963 
964   Check(isa<PointerType>(Resolver->getFunctionType()->getReturnType()),
965         "IFunc resolver must return a pointer", &GI);
966 
967   const Type *ResolverFuncTy =
968       GlobalIFunc::getResolverFunctionType(GI.getValueType());
969   Check(ResolverTy == ResolverFuncTy->getPointerTo(GI.getAddressSpace()),
970         "IFunc resolver has incorrect type", &GI);
971 }
972 
973 void Verifier::visitNamedMDNode(const NamedMDNode &NMD) {
974   // There used to be various other llvm.dbg.* nodes, but we don't support
975   // upgrading them and we want to reserve the namespace for future uses.
976   if (NMD.getName().startswith("llvm.dbg."))
977     CheckDI(NMD.getName() == "llvm.dbg.cu",
978             "unrecognized named metadata node in the llvm.dbg namespace", &NMD);
979   for (const MDNode *MD : NMD.operands()) {
980     if (NMD.getName() == "llvm.dbg.cu")
981       CheckDI(MD && isa<DICompileUnit>(MD), "invalid compile unit", &NMD, MD);
982 
983     if (!MD)
984       continue;
985 
986     visitMDNode(*MD, AreDebugLocsAllowed::Yes);
987   }
988 }
989 
990 void Verifier::visitMDNode(const MDNode &MD, AreDebugLocsAllowed AllowLocs) {
991   // Only visit each node once.  Metadata can be mutually recursive, so this
992   // avoids infinite recursion here, as well as being an optimization.
993   if (!MDNodes.insert(&MD).second)
994     return;
995 
996   Check(&MD.getContext() == &Context,
997         "MDNode context does not match Module context!", &MD);
998 
999   switch (MD.getMetadataID()) {
1000   default:
1001     llvm_unreachable("Invalid MDNode subclass");
1002   case Metadata::MDTupleKind:
1003     break;
1004 #define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS)                                  \
1005   case Metadata::CLASS##Kind:                                                  \
1006     visit##CLASS(cast<CLASS>(MD));                                             \
1007     break;
1008 #include "llvm/IR/Metadata.def"
1009   }
1010 
1011   for (const Metadata *Op : MD.operands()) {
1012     if (!Op)
1013       continue;
1014     Check(!isa<LocalAsMetadata>(Op), "Invalid operand for global metadata!",
1015           &MD, Op);
1016     CheckDI(!isa<DILocation>(Op) || AllowLocs == AreDebugLocsAllowed::Yes,
1017             "DILocation not allowed within this metadata node", &MD, Op);
1018     if (auto *N = dyn_cast<MDNode>(Op)) {
1019       visitMDNode(*N, AllowLocs);
1020       continue;
1021     }
1022     if (auto *V = dyn_cast<ValueAsMetadata>(Op)) {
1023       visitValueAsMetadata(*V, nullptr);
1024       continue;
1025     }
1026   }
1027 
1028   // Check these last, so we diagnose problems in operands first.
1029   Check(!MD.isTemporary(), "Expected no forward declarations!", &MD);
1030   Check(MD.isResolved(), "All nodes should be resolved!", &MD);
1031 }
1032 
1033 void Verifier::visitValueAsMetadata(const ValueAsMetadata &MD, Function *F) {
1034   Check(MD.getValue(), "Expected valid value", &MD);
1035   Check(!MD.getValue()->getType()->isMetadataTy(),
1036         "Unexpected metadata round-trip through values", &MD, MD.getValue());
1037 
1038   auto *L = dyn_cast<LocalAsMetadata>(&MD);
1039   if (!L)
1040     return;
1041 
1042   Check(F, "function-local metadata used outside a function", L);
1043 
1044   // If this was an instruction, bb, or argument, verify that it is in the
1045   // function that we expect.
1046   Function *ActualF = nullptr;
1047   if (Instruction *I = dyn_cast<Instruction>(L->getValue())) {
1048     Check(I->getParent(), "function-local metadata not in basic block", L, I);
1049     ActualF = I->getParent()->getParent();
1050   } else if (BasicBlock *BB = dyn_cast<BasicBlock>(L->getValue()))
1051     ActualF = BB->getParent();
1052   else if (Argument *A = dyn_cast<Argument>(L->getValue()))
1053     ActualF = A->getParent();
1054   assert(ActualF && "Unimplemented function local metadata case!");
1055 
1056   Check(ActualF == F, "function-local metadata used in wrong function", L);
1057 }
1058 
1059 void Verifier::visitMetadataAsValue(const MetadataAsValue &MDV, Function *F) {
1060   Metadata *MD = MDV.getMetadata();
1061   if (auto *N = dyn_cast<MDNode>(MD)) {
1062     visitMDNode(*N, AreDebugLocsAllowed::No);
1063     return;
1064   }
1065 
1066   // Only visit each node once.  Metadata can be mutually recursive, so this
1067   // avoids infinite recursion here, as well as being an optimization.
1068   if (!MDNodes.insert(MD).second)
1069     return;
1070 
1071   if (auto *V = dyn_cast<ValueAsMetadata>(MD))
1072     visitValueAsMetadata(*V, F);
1073 }
1074 
1075 static bool isType(const Metadata *MD) { return !MD || isa<DIType>(MD); }
1076 static bool isScope(const Metadata *MD) { return !MD || isa<DIScope>(MD); }
1077 static bool isDINode(const Metadata *MD) { return !MD || isa<DINode>(MD); }
1078 
1079 void Verifier::visitDILocation(const DILocation &N) {
1080   CheckDI(N.getRawScope() && isa<DILocalScope>(N.getRawScope()),
1081           "location requires a valid scope", &N, N.getRawScope());
1082   if (auto *IA = N.getRawInlinedAt())
1083     CheckDI(isa<DILocation>(IA), "inlined-at should be a location", &N, IA);
1084   if (auto *SP = dyn_cast<DISubprogram>(N.getRawScope()))
1085     CheckDI(SP->isDefinition(), "scope points into the type hierarchy", &N);
1086 }
1087 
1088 void Verifier::visitGenericDINode(const GenericDINode &N) {
1089   CheckDI(N.getTag(), "invalid tag", &N);
1090 }
1091 
1092 void Verifier::visitDIScope(const DIScope &N) {
1093   if (auto *F = N.getRawFile())
1094     CheckDI(isa<DIFile>(F), "invalid file", &N, F);
1095 }
1096 
1097 void Verifier::visitDISubrange(const DISubrange &N) {
1098   CheckDI(N.getTag() == dwarf::DW_TAG_subrange_type, "invalid tag", &N);
1099   bool HasAssumedSizedArraySupport = dwarf::isFortran(CurrentSourceLang);
1100   CheckDI(HasAssumedSizedArraySupport || N.getRawCountNode() ||
1101               N.getRawUpperBound(),
1102           "Subrange must contain count or upperBound", &N);
1103   CheckDI(!N.getRawCountNode() || !N.getRawUpperBound(),
1104           "Subrange can have any one of count or upperBound", &N);
1105   auto *CBound = N.getRawCountNode();
1106   CheckDI(!CBound || isa<ConstantAsMetadata>(CBound) ||
1107               isa<DIVariable>(CBound) || isa<DIExpression>(CBound),
1108           "Count must be signed constant or DIVariable or DIExpression", &N);
1109   auto Count = N.getCount();
1110   CheckDI(!Count || !isa<ConstantInt *>(Count) ||
1111               cast<ConstantInt *>(Count)->getSExtValue() >= -1,
1112           "invalid subrange count", &N);
1113   auto *LBound = N.getRawLowerBound();
1114   CheckDI(!LBound || isa<ConstantAsMetadata>(LBound) ||
1115               isa<DIVariable>(LBound) || isa<DIExpression>(LBound),
1116           "LowerBound must be signed constant or DIVariable or DIExpression",
1117           &N);
1118   auto *UBound = N.getRawUpperBound();
1119   CheckDI(!UBound || isa<ConstantAsMetadata>(UBound) ||
1120               isa<DIVariable>(UBound) || isa<DIExpression>(UBound),
1121           "UpperBound must be signed constant or DIVariable or DIExpression",
1122           &N);
1123   auto *Stride = N.getRawStride();
1124   CheckDI(!Stride || isa<ConstantAsMetadata>(Stride) ||
1125               isa<DIVariable>(Stride) || isa<DIExpression>(Stride),
1126           "Stride must be signed constant or DIVariable or DIExpression", &N);
1127 }
1128 
1129 void Verifier::visitDIGenericSubrange(const DIGenericSubrange &N) {
1130   CheckDI(N.getTag() == dwarf::DW_TAG_generic_subrange, "invalid tag", &N);
1131   CheckDI(N.getRawCountNode() || N.getRawUpperBound(),
1132           "GenericSubrange must contain count or upperBound", &N);
1133   CheckDI(!N.getRawCountNode() || !N.getRawUpperBound(),
1134           "GenericSubrange can have any one of count or upperBound", &N);
1135   auto *CBound = N.getRawCountNode();
1136   CheckDI(!CBound || isa<DIVariable>(CBound) || isa<DIExpression>(CBound),
1137           "Count must be signed constant or DIVariable or DIExpression", &N);
1138   auto *LBound = N.getRawLowerBound();
1139   CheckDI(LBound, "GenericSubrange must contain lowerBound", &N);
1140   CheckDI(isa<DIVariable>(LBound) || isa<DIExpression>(LBound),
1141           "LowerBound must be signed constant or DIVariable or DIExpression",
1142           &N);
1143   auto *UBound = N.getRawUpperBound();
1144   CheckDI(!UBound || isa<DIVariable>(UBound) || isa<DIExpression>(UBound),
1145           "UpperBound must be signed constant or DIVariable or DIExpression",
1146           &N);
1147   auto *Stride = N.getRawStride();
1148   CheckDI(Stride, "GenericSubrange must contain stride", &N);
1149   CheckDI(isa<DIVariable>(Stride) || isa<DIExpression>(Stride),
1150           "Stride must be signed constant or DIVariable or DIExpression", &N);
1151 }
1152 
1153 void Verifier::visitDIEnumerator(const DIEnumerator &N) {
1154   CheckDI(N.getTag() == dwarf::DW_TAG_enumerator, "invalid tag", &N);
1155 }
1156 
1157 void Verifier::visitDIBasicType(const DIBasicType &N) {
1158   CheckDI(N.getTag() == dwarf::DW_TAG_base_type ||
1159               N.getTag() == dwarf::DW_TAG_unspecified_type ||
1160               N.getTag() == dwarf::DW_TAG_string_type,
1161           "invalid tag", &N);
1162 }
1163 
1164 void Verifier::visitDIStringType(const DIStringType &N) {
1165   CheckDI(N.getTag() == dwarf::DW_TAG_string_type, "invalid tag", &N);
1166   CheckDI(!(N.isBigEndian() && N.isLittleEndian()), "has conflicting flags",
1167           &N);
1168 }
1169 
1170 void Verifier::visitDIDerivedType(const DIDerivedType &N) {
1171   // Common scope checks.
1172   visitDIScope(N);
1173 
1174   CheckDI(N.getTag() == dwarf::DW_TAG_typedef ||
1175               N.getTag() == dwarf::DW_TAG_pointer_type ||
1176               N.getTag() == dwarf::DW_TAG_ptr_to_member_type ||
1177               N.getTag() == dwarf::DW_TAG_reference_type ||
1178               N.getTag() == dwarf::DW_TAG_rvalue_reference_type ||
1179               N.getTag() == dwarf::DW_TAG_const_type ||
1180               N.getTag() == dwarf::DW_TAG_immutable_type ||
1181               N.getTag() == dwarf::DW_TAG_volatile_type ||
1182               N.getTag() == dwarf::DW_TAG_restrict_type ||
1183               N.getTag() == dwarf::DW_TAG_atomic_type ||
1184               N.getTag() == dwarf::DW_TAG_member ||
1185               N.getTag() == dwarf::DW_TAG_inheritance ||
1186               N.getTag() == dwarf::DW_TAG_friend ||
1187               N.getTag() == dwarf::DW_TAG_set_type,
1188           "invalid tag", &N);
1189   if (N.getTag() == dwarf::DW_TAG_ptr_to_member_type) {
1190     CheckDI(isType(N.getRawExtraData()), "invalid pointer to member type", &N,
1191             N.getRawExtraData());
1192   }
1193 
1194   if (N.getTag() == dwarf::DW_TAG_set_type) {
1195     if (auto *T = N.getRawBaseType()) {
1196       auto *Enum = dyn_cast_or_null<DICompositeType>(T);
1197       auto *Basic = dyn_cast_or_null<DIBasicType>(T);
1198       CheckDI(
1199           (Enum && Enum->getTag() == dwarf::DW_TAG_enumeration_type) ||
1200               (Basic && (Basic->getEncoding() == dwarf::DW_ATE_unsigned ||
1201                          Basic->getEncoding() == dwarf::DW_ATE_signed ||
1202                          Basic->getEncoding() == dwarf::DW_ATE_unsigned_char ||
1203                          Basic->getEncoding() == dwarf::DW_ATE_signed_char ||
1204                          Basic->getEncoding() == dwarf::DW_ATE_boolean)),
1205           "invalid set base type", &N, T);
1206     }
1207   }
1208 
1209   CheckDI(isScope(N.getRawScope()), "invalid scope", &N, N.getRawScope());
1210   CheckDI(isType(N.getRawBaseType()), "invalid base type", &N,
1211           N.getRawBaseType());
1212 
1213   if (N.getDWARFAddressSpace()) {
1214     CheckDI(N.getTag() == dwarf::DW_TAG_pointer_type ||
1215                 N.getTag() == dwarf::DW_TAG_reference_type ||
1216                 N.getTag() == dwarf::DW_TAG_rvalue_reference_type,
1217             "DWARF address space only applies to pointer or reference types",
1218             &N);
1219   }
1220 }
1221 
1222 /// Detect mutually exclusive flags.
1223 static bool hasConflictingReferenceFlags(unsigned Flags) {
1224   return ((Flags & DINode::FlagLValueReference) &&
1225           (Flags & DINode::FlagRValueReference)) ||
1226          ((Flags & DINode::FlagTypePassByValue) &&
1227           (Flags & DINode::FlagTypePassByReference));
1228 }
1229 
1230 void Verifier::visitTemplateParams(const MDNode &N, const Metadata &RawParams) {
1231   auto *Params = dyn_cast<MDTuple>(&RawParams);
1232   CheckDI(Params, "invalid template params", &N, &RawParams);
1233   for (Metadata *Op : Params->operands()) {
1234     CheckDI(Op && isa<DITemplateParameter>(Op), "invalid template parameter",
1235             &N, Params, Op);
1236   }
1237 }
1238 
1239 void Verifier::visitDICompositeType(const DICompositeType &N) {
1240   // Common scope checks.
1241   visitDIScope(N);
1242 
1243   CheckDI(N.getTag() == dwarf::DW_TAG_array_type ||
1244               N.getTag() == dwarf::DW_TAG_structure_type ||
1245               N.getTag() == dwarf::DW_TAG_union_type ||
1246               N.getTag() == dwarf::DW_TAG_enumeration_type ||
1247               N.getTag() == dwarf::DW_TAG_class_type ||
1248               N.getTag() == dwarf::DW_TAG_variant_part ||
1249               N.getTag() == dwarf::DW_TAG_namelist,
1250           "invalid tag", &N);
1251 
1252   CheckDI(isScope(N.getRawScope()), "invalid scope", &N, N.getRawScope());
1253   CheckDI(isType(N.getRawBaseType()), "invalid base type", &N,
1254           N.getRawBaseType());
1255 
1256   CheckDI(!N.getRawElements() || isa<MDTuple>(N.getRawElements()),
1257           "invalid composite elements", &N, N.getRawElements());
1258   CheckDI(isType(N.getRawVTableHolder()), "invalid vtable holder", &N,
1259           N.getRawVTableHolder());
1260   CheckDI(!hasConflictingReferenceFlags(N.getFlags()),
1261           "invalid reference flags", &N);
1262   unsigned DIBlockByRefStruct = 1 << 4;
1263   CheckDI((N.getFlags() & DIBlockByRefStruct) == 0,
1264           "DIBlockByRefStruct on DICompositeType is no longer supported", &N);
1265 
1266   if (N.isVector()) {
1267     const DINodeArray Elements = N.getElements();
1268     CheckDI(Elements.size() == 1 &&
1269                 Elements[0]->getTag() == dwarf::DW_TAG_subrange_type,
1270             "invalid vector, expected one element of type subrange", &N);
1271   }
1272 
1273   if (auto *Params = N.getRawTemplateParams())
1274     visitTemplateParams(N, *Params);
1275 
1276   if (auto *D = N.getRawDiscriminator()) {
1277     CheckDI(isa<DIDerivedType>(D) && N.getTag() == dwarf::DW_TAG_variant_part,
1278             "discriminator can only appear on variant part");
1279   }
1280 
1281   if (N.getRawDataLocation()) {
1282     CheckDI(N.getTag() == dwarf::DW_TAG_array_type,
1283             "dataLocation can only appear in array type");
1284   }
1285 
1286   if (N.getRawAssociated()) {
1287     CheckDI(N.getTag() == dwarf::DW_TAG_array_type,
1288             "associated can only appear in array type");
1289   }
1290 
1291   if (N.getRawAllocated()) {
1292     CheckDI(N.getTag() == dwarf::DW_TAG_array_type,
1293             "allocated can only appear in array type");
1294   }
1295 
1296   if (N.getRawRank()) {
1297     CheckDI(N.getTag() == dwarf::DW_TAG_array_type,
1298             "rank can only appear in array type");
1299   }
1300 }
1301 
1302 void Verifier::visitDISubroutineType(const DISubroutineType &N) {
1303   CheckDI(N.getTag() == dwarf::DW_TAG_subroutine_type, "invalid tag", &N);
1304   if (auto *Types = N.getRawTypeArray()) {
1305     CheckDI(isa<MDTuple>(Types), "invalid composite elements", &N, Types);
1306     for (Metadata *Ty : N.getTypeArray()->operands()) {
1307       CheckDI(isType(Ty), "invalid subroutine type ref", &N, Types, Ty);
1308     }
1309   }
1310   CheckDI(!hasConflictingReferenceFlags(N.getFlags()),
1311           "invalid reference flags", &N);
1312 }
1313 
1314 void Verifier::visitDIFile(const DIFile &N) {
1315   CheckDI(N.getTag() == dwarf::DW_TAG_file_type, "invalid tag", &N);
1316   std::optional<DIFile::ChecksumInfo<StringRef>> Checksum = N.getChecksum();
1317   if (Checksum) {
1318     CheckDI(Checksum->Kind <= DIFile::ChecksumKind::CSK_Last,
1319             "invalid checksum kind", &N);
1320     size_t Size;
1321     switch (Checksum->Kind) {
1322     case DIFile::CSK_MD5:
1323       Size = 32;
1324       break;
1325     case DIFile::CSK_SHA1:
1326       Size = 40;
1327       break;
1328     case DIFile::CSK_SHA256:
1329       Size = 64;
1330       break;
1331     }
1332     CheckDI(Checksum->Value.size() == Size, "invalid checksum length", &N);
1333     CheckDI(Checksum->Value.find_if_not(llvm::isHexDigit) == StringRef::npos,
1334             "invalid checksum", &N);
1335   }
1336 }
1337 
1338 void Verifier::visitDICompileUnit(const DICompileUnit &N) {
1339   CheckDI(N.isDistinct(), "compile units must be distinct", &N);
1340   CheckDI(N.getTag() == dwarf::DW_TAG_compile_unit, "invalid tag", &N);
1341 
1342   // Don't bother verifying the compilation directory or producer string
1343   // as those could be empty.
1344   CheckDI(N.getRawFile() && isa<DIFile>(N.getRawFile()), "invalid file", &N,
1345           N.getRawFile());
1346   CheckDI(!N.getFile()->getFilename().empty(), "invalid filename", &N,
1347           N.getFile());
1348 
1349   CurrentSourceLang = (dwarf::SourceLanguage)N.getSourceLanguage();
1350 
1351   verifySourceDebugInfo(N, *N.getFile());
1352 
1353   CheckDI((N.getEmissionKind() <= DICompileUnit::LastEmissionKind),
1354           "invalid emission kind", &N);
1355 
1356   if (auto *Array = N.getRawEnumTypes()) {
1357     CheckDI(isa<MDTuple>(Array), "invalid enum list", &N, Array);
1358     for (Metadata *Op : N.getEnumTypes()->operands()) {
1359       auto *Enum = dyn_cast_or_null<DICompositeType>(Op);
1360       CheckDI(Enum && Enum->getTag() == dwarf::DW_TAG_enumeration_type,
1361               "invalid enum type", &N, N.getEnumTypes(), Op);
1362     }
1363   }
1364   if (auto *Array = N.getRawRetainedTypes()) {
1365     CheckDI(isa<MDTuple>(Array), "invalid retained type list", &N, Array);
1366     for (Metadata *Op : N.getRetainedTypes()->operands()) {
1367       CheckDI(
1368           Op && (isa<DIType>(Op) || (isa<DISubprogram>(Op) &&
1369                                      !cast<DISubprogram>(Op)->isDefinition())),
1370           "invalid retained type", &N, Op);
1371     }
1372   }
1373   if (auto *Array = N.getRawGlobalVariables()) {
1374     CheckDI(isa<MDTuple>(Array), "invalid global variable list", &N, Array);
1375     for (Metadata *Op : N.getGlobalVariables()->operands()) {
1376       CheckDI(Op && (isa<DIGlobalVariableExpression>(Op)),
1377               "invalid global variable ref", &N, Op);
1378     }
1379   }
1380   if (auto *Array = N.getRawImportedEntities()) {
1381     CheckDI(isa<MDTuple>(Array), "invalid imported entity list", &N, Array);
1382     for (Metadata *Op : N.getImportedEntities()->operands()) {
1383       CheckDI(Op && isa<DIImportedEntity>(Op), "invalid imported entity ref",
1384               &N, Op);
1385     }
1386   }
1387   if (auto *Array = N.getRawMacros()) {
1388     CheckDI(isa<MDTuple>(Array), "invalid macro list", &N, Array);
1389     for (Metadata *Op : N.getMacros()->operands()) {
1390       CheckDI(Op && isa<DIMacroNode>(Op), "invalid macro ref", &N, Op);
1391     }
1392   }
1393   CUVisited.insert(&N);
1394 }
1395 
1396 void Verifier::visitDISubprogram(const DISubprogram &N) {
1397   CheckDI(N.getTag() == dwarf::DW_TAG_subprogram, "invalid tag", &N);
1398   CheckDI(isScope(N.getRawScope()), "invalid scope", &N, N.getRawScope());
1399   if (auto *F = N.getRawFile())
1400     CheckDI(isa<DIFile>(F), "invalid file", &N, F);
1401   else
1402     CheckDI(N.getLine() == 0, "line specified with no file", &N, N.getLine());
1403   if (auto *T = N.getRawType())
1404     CheckDI(isa<DISubroutineType>(T), "invalid subroutine type", &N, T);
1405   CheckDI(isType(N.getRawContainingType()), "invalid containing type", &N,
1406           N.getRawContainingType());
1407   if (auto *Params = N.getRawTemplateParams())
1408     visitTemplateParams(N, *Params);
1409   if (auto *S = N.getRawDeclaration())
1410     CheckDI(isa<DISubprogram>(S) && !cast<DISubprogram>(S)->isDefinition(),
1411             "invalid subprogram declaration", &N, S);
1412   if (auto *RawNode = N.getRawRetainedNodes()) {
1413     auto *Node = dyn_cast<MDTuple>(RawNode);
1414     CheckDI(Node, "invalid retained nodes list", &N, RawNode);
1415     for (Metadata *Op : Node->operands()) {
1416       CheckDI(Op && (isa<DILocalVariable>(Op) || isa<DILabel>(Op) ||
1417                      isa<DIImportedEntity>(Op)),
1418               "invalid retained nodes, expected DILocalVariable, DILabel or "
1419               "DIImportedEntity",
1420               &N, Node, Op);
1421     }
1422   }
1423   CheckDI(!hasConflictingReferenceFlags(N.getFlags()),
1424           "invalid reference flags", &N);
1425 
1426   auto *Unit = N.getRawUnit();
1427   if (N.isDefinition()) {
1428     // Subprogram definitions (not part of the type hierarchy).
1429     CheckDI(N.isDistinct(), "subprogram definitions must be distinct", &N);
1430     CheckDI(Unit, "subprogram definitions must have a compile unit", &N);
1431     CheckDI(isa<DICompileUnit>(Unit), "invalid unit type", &N, Unit);
1432     if (N.getFile())
1433       verifySourceDebugInfo(*N.getUnit(), *N.getFile());
1434   } else {
1435     // Subprogram declarations (part of the type hierarchy).
1436     CheckDI(!Unit, "subprogram declarations must not have a compile unit", &N);
1437     CheckDI(!N.getRawDeclaration(),
1438             "subprogram declaration must not have a declaration field");
1439   }
1440 
1441   if (auto *RawThrownTypes = N.getRawThrownTypes()) {
1442     auto *ThrownTypes = dyn_cast<MDTuple>(RawThrownTypes);
1443     CheckDI(ThrownTypes, "invalid thrown types list", &N, RawThrownTypes);
1444     for (Metadata *Op : ThrownTypes->operands())
1445       CheckDI(Op && isa<DIType>(Op), "invalid thrown type", &N, ThrownTypes,
1446               Op);
1447   }
1448 
1449   if (N.areAllCallsDescribed())
1450     CheckDI(N.isDefinition(),
1451             "DIFlagAllCallsDescribed must be attached to a definition");
1452 }
1453 
1454 void Verifier::visitDILexicalBlockBase(const DILexicalBlockBase &N) {
1455   CheckDI(N.getTag() == dwarf::DW_TAG_lexical_block, "invalid tag", &N);
1456   CheckDI(N.getRawScope() && isa<DILocalScope>(N.getRawScope()),
1457           "invalid local scope", &N, N.getRawScope());
1458   if (auto *SP = dyn_cast<DISubprogram>(N.getRawScope()))
1459     CheckDI(SP->isDefinition(), "scope points into the type hierarchy", &N);
1460 }
1461 
1462 void Verifier::visitDILexicalBlock(const DILexicalBlock &N) {
1463   visitDILexicalBlockBase(N);
1464 
1465   CheckDI(N.getLine() || !N.getColumn(),
1466           "cannot have column info without line info", &N);
1467 }
1468 
1469 void Verifier::visitDILexicalBlockFile(const DILexicalBlockFile &N) {
1470   visitDILexicalBlockBase(N);
1471 }
1472 
1473 void Verifier::visitDICommonBlock(const DICommonBlock &N) {
1474   CheckDI(N.getTag() == dwarf::DW_TAG_common_block, "invalid tag", &N);
1475   if (auto *S = N.getRawScope())
1476     CheckDI(isa<DIScope>(S), "invalid scope ref", &N, S);
1477   if (auto *S = N.getRawDecl())
1478     CheckDI(isa<DIGlobalVariable>(S), "invalid declaration", &N, S);
1479 }
1480 
1481 void Verifier::visitDINamespace(const DINamespace &N) {
1482   CheckDI(N.getTag() == dwarf::DW_TAG_namespace, "invalid tag", &N);
1483   if (auto *S = N.getRawScope())
1484     CheckDI(isa<DIScope>(S), "invalid scope ref", &N, S);
1485 }
1486 
1487 void Verifier::visitDIMacro(const DIMacro &N) {
1488   CheckDI(N.getMacinfoType() == dwarf::DW_MACINFO_define ||
1489               N.getMacinfoType() == dwarf::DW_MACINFO_undef,
1490           "invalid macinfo type", &N);
1491   CheckDI(!N.getName().empty(), "anonymous macro", &N);
1492   if (!N.getValue().empty()) {
1493     assert(N.getValue().data()[0] != ' ' && "Macro value has a space prefix");
1494   }
1495 }
1496 
1497 void Verifier::visitDIMacroFile(const DIMacroFile &N) {
1498   CheckDI(N.getMacinfoType() == dwarf::DW_MACINFO_start_file,
1499           "invalid macinfo type", &N);
1500   if (auto *F = N.getRawFile())
1501     CheckDI(isa<DIFile>(F), "invalid file", &N, F);
1502 
1503   if (auto *Array = N.getRawElements()) {
1504     CheckDI(isa<MDTuple>(Array), "invalid macro list", &N, Array);
1505     for (Metadata *Op : N.getElements()->operands()) {
1506       CheckDI(Op && isa<DIMacroNode>(Op), "invalid macro ref", &N, Op);
1507     }
1508   }
1509 }
1510 
1511 void Verifier::visitDIArgList(const DIArgList &N) {
1512   CheckDI(!N.getNumOperands(),
1513           "DIArgList should have no operands other than a list of "
1514           "ValueAsMetadata",
1515           &N);
1516 }
1517 
1518 void Verifier::visitDIModule(const DIModule &N) {
1519   CheckDI(N.getTag() == dwarf::DW_TAG_module, "invalid tag", &N);
1520   CheckDI(!N.getName().empty(), "anonymous module", &N);
1521 }
1522 
1523 void Verifier::visitDITemplateParameter(const DITemplateParameter &N) {
1524   CheckDI(isType(N.getRawType()), "invalid type ref", &N, N.getRawType());
1525 }
1526 
1527 void Verifier::visitDITemplateTypeParameter(const DITemplateTypeParameter &N) {
1528   visitDITemplateParameter(N);
1529 
1530   CheckDI(N.getTag() == dwarf::DW_TAG_template_type_parameter, "invalid tag",
1531           &N);
1532 }
1533 
1534 void Verifier::visitDITemplateValueParameter(
1535     const DITemplateValueParameter &N) {
1536   visitDITemplateParameter(N);
1537 
1538   CheckDI(N.getTag() == dwarf::DW_TAG_template_value_parameter ||
1539               N.getTag() == dwarf::DW_TAG_GNU_template_template_param ||
1540               N.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack,
1541           "invalid tag", &N);
1542 }
1543 
1544 void Verifier::visitDIVariable(const DIVariable &N) {
1545   if (auto *S = N.getRawScope())
1546     CheckDI(isa<DIScope>(S), "invalid scope", &N, S);
1547   if (auto *F = N.getRawFile())
1548     CheckDI(isa<DIFile>(F), "invalid file", &N, F);
1549 }
1550 
1551 void Verifier::visitDIGlobalVariable(const DIGlobalVariable &N) {
1552   // Checks common to all variables.
1553   visitDIVariable(N);
1554 
1555   CheckDI(N.getTag() == dwarf::DW_TAG_variable, "invalid tag", &N);
1556   CheckDI(isType(N.getRawType()), "invalid type ref", &N, N.getRawType());
1557   // Check only if the global variable is not an extern
1558   if (N.isDefinition())
1559     CheckDI(N.getType(), "missing global variable type", &N);
1560   if (auto *Member = N.getRawStaticDataMemberDeclaration()) {
1561     CheckDI(isa<DIDerivedType>(Member),
1562             "invalid static data member declaration", &N, Member);
1563   }
1564 }
1565 
1566 void Verifier::visitDILocalVariable(const DILocalVariable &N) {
1567   // Checks common to all variables.
1568   visitDIVariable(N);
1569 
1570   CheckDI(isType(N.getRawType()), "invalid type ref", &N, N.getRawType());
1571   CheckDI(N.getTag() == dwarf::DW_TAG_variable, "invalid tag", &N);
1572   CheckDI(N.getRawScope() && isa<DILocalScope>(N.getRawScope()),
1573           "local variable requires a valid scope", &N, N.getRawScope());
1574   if (auto Ty = N.getType())
1575     CheckDI(!isa<DISubroutineType>(Ty), "invalid type", &N, N.getType());
1576 }
1577 
1578 void Verifier::visitDIAssignID(const DIAssignID &N) {
1579   CheckDI(!N.getNumOperands(), "DIAssignID has no arguments", &N);
1580   CheckDI(N.isDistinct(), "DIAssignID must be distinct", &N);
1581 }
1582 
1583 void Verifier::visitDILabel(const DILabel &N) {
1584   if (auto *S = N.getRawScope())
1585     CheckDI(isa<DIScope>(S), "invalid scope", &N, S);
1586   if (auto *F = N.getRawFile())
1587     CheckDI(isa<DIFile>(F), "invalid file", &N, F);
1588 
1589   CheckDI(N.getTag() == dwarf::DW_TAG_label, "invalid tag", &N);
1590   CheckDI(N.getRawScope() && isa<DILocalScope>(N.getRawScope()),
1591           "label requires a valid scope", &N, N.getRawScope());
1592 }
1593 
1594 void Verifier::visitDIExpression(const DIExpression &N) {
1595   CheckDI(N.isValid(), "invalid expression", &N);
1596 }
1597 
1598 void Verifier::visitDIGlobalVariableExpression(
1599     const DIGlobalVariableExpression &GVE) {
1600   CheckDI(GVE.getVariable(), "missing variable");
1601   if (auto *Var = GVE.getVariable())
1602     visitDIGlobalVariable(*Var);
1603   if (auto *Expr = GVE.getExpression()) {
1604     visitDIExpression(*Expr);
1605     if (auto Fragment = Expr->getFragmentInfo())
1606       verifyFragmentExpression(*GVE.getVariable(), *Fragment, &GVE);
1607   }
1608 }
1609 
1610 void Verifier::visitDIObjCProperty(const DIObjCProperty &N) {
1611   CheckDI(N.getTag() == dwarf::DW_TAG_APPLE_property, "invalid tag", &N);
1612   if (auto *T = N.getRawType())
1613     CheckDI(isType(T), "invalid type ref", &N, T);
1614   if (auto *F = N.getRawFile())
1615     CheckDI(isa<DIFile>(F), "invalid file", &N, F);
1616 }
1617 
1618 void Verifier::visitDIImportedEntity(const DIImportedEntity &N) {
1619   CheckDI(N.getTag() == dwarf::DW_TAG_imported_module ||
1620               N.getTag() == dwarf::DW_TAG_imported_declaration,
1621           "invalid tag", &N);
1622   if (auto *S = N.getRawScope())
1623     CheckDI(isa<DIScope>(S), "invalid scope for imported entity", &N, S);
1624   CheckDI(isDINode(N.getRawEntity()), "invalid imported entity", &N,
1625           N.getRawEntity());
1626 }
1627 
1628 void Verifier::visitComdat(const Comdat &C) {
1629   // In COFF the Module is invalid if the GlobalValue has private linkage.
1630   // Entities with private linkage don't have entries in the symbol table.
1631   if (TT.isOSBinFormatCOFF())
1632     if (const GlobalValue *GV = M.getNamedValue(C.getName()))
1633       Check(!GV->hasPrivateLinkage(), "comdat global value has private linkage",
1634             GV);
1635 }
1636 
1637 void Verifier::visitModuleIdents() {
1638   const NamedMDNode *Idents = M.getNamedMetadata("llvm.ident");
1639   if (!Idents)
1640     return;
1641 
1642   // llvm.ident takes a list of metadata entry. Each entry has only one string.
1643   // Scan each llvm.ident entry and make sure that this requirement is met.
1644   for (const MDNode *N : Idents->operands()) {
1645     Check(N->getNumOperands() == 1,
1646           "incorrect number of operands in llvm.ident metadata", N);
1647     Check(dyn_cast_or_null<MDString>(N->getOperand(0)),
1648           ("invalid value for llvm.ident metadata entry operand"
1649            "(the operand should be a string)"),
1650           N->getOperand(0));
1651   }
1652 }
1653 
1654 void Verifier::visitModuleCommandLines() {
1655   const NamedMDNode *CommandLines = M.getNamedMetadata("llvm.commandline");
1656   if (!CommandLines)
1657     return;
1658 
1659   // llvm.commandline takes a list of metadata entry. Each entry has only one
1660   // string. Scan each llvm.commandline entry and make sure that this
1661   // requirement is met.
1662   for (const MDNode *N : CommandLines->operands()) {
1663     Check(N->getNumOperands() == 1,
1664           "incorrect number of operands in llvm.commandline metadata", N);
1665     Check(dyn_cast_or_null<MDString>(N->getOperand(0)),
1666           ("invalid value for llvm.commandline metadata entry operand"
1667            "(the operand should be a string)"),
1668           N->getOperand(0));
1669   }
1670 }
1671 
1672 void Verifier::visitModuleFlags() {
1673   const NamedMDNode *Flags = M.getModuleFlagsMetadata();
1674   if (!Flags) return;
1675 
1676   // Scan each flag, and track the flags and requirements.
1677   DenseMap<const MDString*, const MDNode*> SeenIDs;
1678   SmallVector<const MDNode*, 16> Requirements;
1679   for (const MDNode *MDN : Flags->operands())
1680     visitModuleFlag(MDN, SeenIDs, Requirements);
1681 
1682   // Validate that the requirements in the module are valid.
1683   for (const MDNode *Requirement : Requirements) {
1684     const MDString *Flag = cast<MDString>(Requirement->getOperand(0));
1685     const Metadata *ReqValue = Requirement->getOperand(1);
1686 
1687     const MDNode *Op = SeenIDs.lookup(Flag);
1688     if (!Op) {
1689       CheckFailed("invalid requirement on flag, flag is not present in module",
1690                   Flag);
1691       continue;
1692     }
1693 
1694     if (Op->getOperand(2) != ReqValue) {
1695       CheckFailed(("invalid requirement on flag, "
1696                    "flag does not have the required value"),
1697                   Flag);
1698       continue;
1699     }
1700   }
1701 }
1702 
1703 void
1704 Verifier::visitModuleFlag(const MDNode *Op,
1705                           DenseMap<const MDString *, const MDNode *> &SeenIDs,
1706                           SmallVectorImpl<const MDNode *> &Requirements) {
1707   // Each module flag should have three arguments, the merge behavior (a
1708   // constant int), the flag ID (an MDString), and the value.
1709   Check(Op->getNumOperands() == 3,
1710         "incorrect number of operands in module flag", Op);
1711   Module::ModFlagBehavior MFB;
1712   if (!Module::isValidModFlagBehavior(Op->getOperand(0), MFB)) {
1713     Check(mdconst::dyn_extract_or_null<ConstantInt>(Op->getOperand(0)),
1714           "invalid behavior operand in module flag (expected constant integer)",
1715           Op->getOperand(0));
1716     Check(false,
1717           "invalid behavior operand in module flag (unexpected constant)",
1718           Op->getOperand(0));
1719   }
1720   MDString *ID = dyn_cast_or_null<MDString>(Op->getOperand(1));
1721   Check(ID, "invalid ID operand in module flag (expected metadata string)",
1722         Op->getOperand(1));
1723 
1724   // Check the values for behaviors with additional requirements.
1725   switch (MFB) {
1726   case Module::Error:
1727   case Module::Warning:
1728   case Module::Override:
1729     // These behavior types accept any value.
1730     break;
1731 
1732   case Module::Min: {
1733     auto *V = mdconst::dyn_extract_or_null<ConstantInt>(Op->getOperand(2));
1734     Check(V && V->getValue().isNonNegative(),
1735           "invalid value for 'min' module flag (expected constant non-negative "
1736           "integer)",
1737           Op->getOperand(2));
1738     break;
1739   }
1740 
1741   case Module::Max: {
1742     Check(mdconst::dyn_extract_or_null<ConstantInt>(Op->getOperand(2)),
1743           "invalid value for 'max' module flag (expected constant integer)",
1744           Op->getOperand(2));
1745     break;
1746   }
1747 
1748   case Module::Require: {
1749     // The value should itself be an MDNode with two operands, a flag ID (an
1750     // MDString), and a value.
1751     MDNode *Value = dyn_cast<MDNode>(Op->getOperand(2));
1752     Check(Value && Value->getNumOperands() == 2,
1753           "invalid value for 'require' module flag (expected metadata pair)",
1754           Op->getOperand(2));
1755     Check(isa<MDString>(Value->getOperand(0)),
1756           ("invalid value for 'require' module flag "
1757            "(first value operand should be a string)"),
1758           Value->getOperand(0));
1759 
1760     // Append it to the list of requirements, to check once all module flags are
1761     // scanned.
1762     Requirements.push_back(Value);
1763     break;
1764   }
1765 
1766   case Module::Append:
1767   case Module::AppendUnique: {
1768     // These behavior types require the operand be an MDNode.
1769     Check(isa<MDNode>(Op->getOperand(2)),
1770           "invalid value for 'append'-type module flag "
1771           "(expected a metadata node)",
1772           Op->getOperand(2));
1773     break;
1774   }
1775   }
1776 
1777   // Unless this is a "requires" flag, check the ID is unique.
1778   if (MFB != Module::Require) {
1779     bool Inserted = SeenIDs.insert(std::make_pair(ID, Op)).second;
1780     Check(Inserted,
1781           "module flag identifiers must be unique (or of 'require' type)", ID);
1782   }
1783 
1784   if (ID->getString() == "wchar_size") {
1785     ConstantInt *Value
1786       = mdconst::dyn_extract_or_null<ConstantInt>(Op->getOperand(2));
1787     Check(Value, "wchar_size metadata requires constant integer argument");
1788   }
1789 
1790   if (ID->getString() == "Linker Options") {
1791     // If the llvm.linker.options named metadata exists, we assume that the
1792     // bitcode reader has upgraded the module flag. Otherwise the flag might
1793     // have been created by a client directly.
1794     Check(M.getNamedMetadata("llvm.linker.options"),
1795           "'Linker Options' named metadata no longer supported");
1796   }
1797 
1798   if (ID->getString() == "SemanticInterposition") {
1799     ConstantInt *Value =
1800         mdconst::dyn_extract_or_null<ConstantInt>(Op->getOperand(2));
1801     Check(Value,
1802           "SemanticInterposition metadata requires constant integer argument");
1803   }
1804 
1805   if (ID->getString() == "CG Profile") {
1806     for (const MDOperand &MDO : cast<MDNode>(Op->getOperand(2))->operands())
1807       visitModuleFlagCGProfileEntry(MDO);
1808   }
1809 }
1810 
1811 void Verifier::visitModuleFlagCGProfileEntry(const MDOperand &MDO) {
1812   auto CheckFunction = [&](const MDOperand &FuncMDO) {
1813     if (!FuncMDO)
1814       return;
1815     auto F = dyn_cast<ValueAsMetadata>(FuncMDO);
1816     Check(F && isa<Function>(F->getValue()->stripPointerCasts()),
1817           "expected a Function or null", FuncMDO);
1818   };
1819   auto Node = dyn_cast_or_null<MDNode>(MDO);
1820   Check(Node && Node->getNumOperands() == 3, "expected a MDNode triple", MDO);
1821   CheckFunction(Node->getOperand(0));
1822   CheckFunction(Node->getOperand(1));
1823   auto Count = dyn_cast_or_null<ConstantAsMetadata>(Node->getOperand(2));
1824   Check(Count && Count->getType()->isIntegerTy(),
1825         "expected an integer constant", Node->getOperand(2));
1826 }
1827 
1828 void Verifier::verifyAttributeTypes(AttributeSet Attrs, const Value *V) {
1829   for (Attribute A : Attrs) {
1830 
1831     if (A.isStringAttribute()) {
1832 #define GET_ATTR_NAMES
1833 #define ATTRIBUTE_ENUM(ENUM_NAME, DISPLAY_NAME)
1834 #define ATTRIBUTE_STRBOOL(ENUM_NAME, DISPLAY_NAME)                             \
1835   if (A.getKindAsString() == #DISPLAY_NAME) {                                  \
1836     auto V = A.getValueAsString();                                             \
1837     if (!(V.empty() || V == "true" || V == "false"))                           \
1838       CheckFailed("invalid value for '" #DISPLAY_NAME "' attribute: " + V +    \
1839                   "");                                                         \
1840   }
1841 
1842 #include "llvm/IR/Attributes.inc"
1843       continue;
1844     }
1845 
1846     if (A.isIntAttribute() != Attribute::isIntAttrKind(A.getKindAsEnum())) {
1847       CheckFailed("Attribute '" + A.getAsString() + "' should have an Argument",
1848                   V);
1849       return;
1850     }
1851   }
1852 }
1853 
1854 // VerifyParameterAttrs - Check the given attributes for an argument or return
1855 // value of the specified type.  The value V is printed in error messages.
1856 void Verifier::verifyParameterAttrs(AttributeSet Attrs, Type *Ty,
1857                                     const Value *V) {
1858   if (!Attrs.hasAttributes())
1859     return;
1860 
1861   verifyAttributeTypes(Attrs, V);
1862 
1863   for (Attribute Attr : Attrs)
1864     Check(Attr.isStringAttribute() ||
1865               Attribute::canUseAsParamAttr(Attr.getKindAsEnum()),
1866           "Attribute '" + Attr.getAsString() + "' does not apply to parameters",
1867           V);
1868 
1869   if (Attrs.hasAttribute(Attribute::ImmArg)) {
1870     Check(Attrs.getNumAttributes() == 1,
1871           "Attribute 'immarg' is incompatible with other attributes", V);
1872   }
1873 
1874   // Check for mutually incompatible attributes.  Only inreg is compatible with
1875   // sret.
1876   unsigned AttrCount = 0;
1877   AttrCount += Attrs.hasAttribute(Attribute::ByVal);
1878   AttrCount += Attrs.hasAttribute(Attribute::InAlloca);
1879   AttrCount += Attrs.hasAttribute(Attribute::Preallocated);
1880   AttrCount += Attrs.hasAttribute(Attribute::StructRet) ||
1881                Attrs.hasAttribute(Attribute::InReg);
1882   AttrCount += Attrs.hasAttribute(Attribute::Nest);
1883   AttrCount += Attrs.hasAttribute(Attribute::ByRef);
1884   Check(AttrCount <= 1,
1885         "Attributes 'byval', 'inalloca', 'preallocated', 'inreg', 'nest', "
1886         "'byref', and 'sret' are incompatible!",
1887         V);
1888 
1889   Check(!(Attrs.hasAttribute(Attribute::InAlloca) &&
1890           Attrs.hasAttribute(Attribute::ReadOnly)),
1891         "Attributes "
1892         "'inalloca and readonly' are incompatible!",
1893         V);
1894 
1895   Check(!(Attrs.hasAttribute(Attribute::StructRet) &&
1896           Attrs.hasAttribute(Attribute::Returned)),
1897         "Attributes "
1898         "'sret and returned' are incompatible!",
1899         V);
1900 
1901   Check(!(Attrs.hasAttribute(Attribute::ZExt) &&
1902           Attrs.hasAttribute(Attribute::SExt)),
1903         "Attributes "
1904         "'zeroext and signext' are incompatible!",
1905         V);
1906 
1907   Check(!(Attrs.hasAttribute(Attribute::ReadNone) &&
1908           Attrs.hasAttribute(Attribute::ReadOnly)),
1909         "Attributes "
1910         "'readnone and readonly' are incompatible!",
1911         V);
1912 
1913   Check(!(Attrs.hasAttribute(Attribute::ReadNone) &&
1914           Attrs.hasAttribute(Attribute::WriteOnly)),
1915         "Attributes "
1916         "'readnone and writeonly' are incompatible!",
1917         V);
1918 
1919   Check(!(Attrs.hasAttribute(Attribute::ReadOnly) &&
1920           Attrs.hasAttribute(Attribute::WriteOnly)),
1921         "Attributes "
1922         "'readonly and writeonly' are incompatible!",
1923         V);
1924 
1925   Check(!(Attrs.hasAttribute(Attribute::NoInline) &&
1926           Attrs.hasAttribute(Attribute::AlwaysInline)),
1927         "Attributes "
1928         "'noinline and alwaysinline' are incompatible!",
1929         V);
1930 
1931   AttributeMask IncompatibleAttrs = AttributeFuncs::typeIncompatible(Ty);
1932   for (Attribute Attr : Attrs) {
1933     if (!Attr.isStringAttribute() &&
1934         IncompatibleAttrs.contains(Attr.getKindAsEnum())) {
1935       CheckFailed("Attribute '" + Attr.getAsString() +
1936                   "' applied to incompatible type!", V);
1937       return;
1938     }
1939   }
1940 
1941   if (isa<PointerType>(Ty)) {
1942     if (Attrs.hasAttribute(Attribute::ByVal)) {
1943       if (Attrs.hasAttribute(Attribute::Alignment)) {
1944         Align AttrAlign = Attrs.getAlignment().valueOrOne();
1945         Align MaxAlign(ParamMaxAlignment);
1946         Check(AttrAlign <= MaxAlign,
1947               "Attribute 'align' exceed the max size 2^14", V);
1948       }
1949       SmallPtrSet<Type *, 4> Visited;
1950       Check(Attrs.getByValType()->isSized(&Visited),
1951             "Attribute 'byval' does not support unsized types!", V);
1952     }
1953     if (Attrs.hasAttribute(Attribute::ByRef)) {
1954       SmallPtrSet<Type *, 4> Visited;
1955       Check(Attrs.getByRefType()->isSized(&Visited),
1956             "Attribute 'byref' does not support unsized types!", V);
1957     }
1958     if (Attrs.hasAttribute(Attribute::InAlloca)) {
1959       SmallPtrSet<Type *, 4> Visited;
1960       Check(Attrs.getInAllocaType()->isSized(&Visited),
1961             "Attribute 'inalloca' does not support unsized types!", V);
1962     }
1963     if (Attrs.hasAttribute(Attribute::Preallocated)) {
1964       SmallPtrSet<Type *, 4> Visited;
1965       Check(Attrs.getPreallocatedType()->isSized(&Visited),
1966             "Attribute 'preallocated' does not support unsized types!", V);
1967     }
1968   }
1969 
1970   if (Attrs.hasAttribute(Attribute::NoFPClass)) {
1971     uint64_t Val = Attrs.getAttribute(Attribute::NoFPClass).getValueAsInt();
1972     Check(Val != 0, "Attribute 'nofpclass' must have at least one test bit set",
1973           V);
1974     Check((Val & ~static_cast<unsigned>(fcAllFlags)) == 0,
1975           "Invalid value for 'nofpclass' test mask", V);
1976   }
1977 }
1978 
1979 void Verifier::checkUnsignedBaseTenFuncAttr(AttributeList Attrs, StringRef Attr,
1980                                             const Value *V) {
1981   if (Attrs.hasFnAttr(Attr)) {
1982     StringRef S = Attrs.getFnAttr(Attr).getValueAsString();
1983     unsigned N;
1984     if (S.getAsInteger(10, N))
1985       CheckFailed("\"" + Attr + "\" takes an unsigned integer: " + S, V);
1986   }
1987 }
1988 
1989 // Check parameter attributes against a function type.
1990 // The value V is printed in error messages.
1991 void Verifier::verifyFunctionAttrs(FunctionType *FT, AttributeList Attrs,
1992                                    const Value *V, bool IsIntrinsic,
1993                                    bool IsInlineAsm) {
1994   if (Attrs.isEmpty())
1995     return;
1996 
1997   if (AttributeListsVisited.insert(Attrs.getRawPointer()).second) {
1998     Check(Attrs.hasParentContext(Context),
1999           "Attribute list does not match Module context!", &Attrs, V);
2000     for (const auto &AttrSet : Attrs) {
2001       Check(!AttrSet.hasAttributes() || AttrSet.hasParentContext(Context),
2002             "Attribute set does not match Module context!", &AttrSet, V);
2003       for (const auto &A : AttrSet) {
2004         Check(A.hasParentContext(Context),
2005               "Attribute does not match Module context!", &A, V);
2006       }
2007     }
2008   }
2009 
2010   bool SawNest = false;
2011   bool SawReturned = false;
2012   bool SawSRet = false;
2013   bool SawSwiftSelf = false;
2014   bool SawSwiftAsync = false;
2015   bool SawSwiftError = false;
2016 
2017   // Verify return value attributes.
2018   AttributeSet RetAttrs = Attrs.getRetAttrs();
2019   for (Attribute RetAttr : RetAttrs)
2020     Check(RetAttr.isStringAttribute() ||
2021               Attribute::canUseAsRetAttr(RetAttr.getKindAsEnum()),
2022           "Attribute '" + RetAttr.getAsString() +
2023               "' does not apply to function return values",
2024           V);
2025 
2026   verifyParameterAttrs(RetAttrs, FT->getReturnType(), V);
2027 
2028   // Verify parameter attributes.
2029   for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i) {
2030     Type *Ty = FT->getParamType(i);
2031     AttributeSet ArgAttrs = Attrs.getParamAttrs(i);
2032 
2033     if (!IsIntrinsic) {
2034       Check(!ArgAttrs.hasAttribute(Attribute::ImmArg),
2035             "immarg attribute only applies to intrinsics", V);
2036       if (!IsInlineAsm)
2037         Check(!ArgAttrs.hasAttribute(Attribute::ElementType),
2038               "Attribute 'elementtype' can only be applied to intrinsics"
2039               " and inline asm.",
2040               V);
2041     }
2042 
2043     verifyParameterAttrs(ArgAttrs, Ty, V);
2044 
2045     if (ArgAttrs.hasAttribute(Attribute::Nest)) {
2046       Check(!SawNest, "More than one parameter has attribute nest!", V);
2047       SawNest = true;
2048     }
2049 
2050     if (ArgAttrs.hasAttribute(Attribute::Returned)) {
2051       Check(!SawReturned, "More than one parameter has attribute returned!", V);
2052       Check(Ty->canLosslesslyBitCastTo(FT->getReturnType()),
2053             "Incompatible argument and return types for 'returned' attribute",
2054             V);
2055       SawReturned = true;
2056     }
2057 
2058     if (ArgAttrs.hasAttribute(Attribute::StructRet)) {
2059       Check(!SawSRet, "Cannot have multiple 'sret' parameters!", V);
2060       Check(i == 0 || i == 1,
2061             "Attribute 'sret' is not on first or second parameter!", V);
2062       SawSRet = true;
2063     }
2064 
2065     if (ArgAttrs.hasAttribute(Attribute::SwiftSelf)) {
2066       Check(!SawSwiftSelf, "Cannot have multiple 'swiftself' parameters!", V);
2067       SawSwiftSelf = true;
2068     }
2069 
2070     if (ArgAttrs.hasAttribute(Attribute::SwiftAsync)) {
2071       Check(!SawSwiftAsync, "Cannot have multiple 'swiftasync' parameters!", V);
2072       SawSwiftAsync = true;
2073     }
2074 
2075     if (ArgAttrs.hasAttribute(Attribute::SwiftError)) {
2076       Check(!SawSwiftError, "Cannot have multiple 'swifterror' parameters!", V);
2077       SawSwiftError = true;
2078     }
2079 
2080     if (ArgAttrs.hasAttribute(Attribute::InAlloca)) {
2081       Check(i == FT->getNumParams() - 1,
2082             "inalloca isn't on the last parameter!", V);
2083     }
2084   }
2085 
2086   if (!Attrs.hasFnAttrs())
2087     return;
2088 
2089   verifyAttributeTypes(Attrs.getFnAttrs(), V);
2090   for (Attribute FnAttr : Attrs.getFnAttrs())
2091     Check(FnAttr.isStringAttribute() ||
2092               Attribute::canUseAsFnAttr(FnAttr.getKindAsEnum()),
2093           "Attribute '" + FnAttr.getAsString() +
2094               "' does not apply to functions!",
2095           V);
2096 
2097   Check(!(Attrs.hasFnAttr(Attribute::NoInline) &&
2098           Attrs.hasFnAttr(Attribute::AlwaysInline)),
2099         "Attributes 'noinline and alwaysinline' are incompatible!", V);
2100 
2101   if (Attrs.hasFnAttr(Attribute::OptimizeNone)) {
2102     Check(Attrs.hasFnAttr(Attribute::NoInline),
2103           "Attribute 'optnone' requires 'noinline'!", V);
2104 
2105     Check(!Attrs.hasFnAttr(Attribute::OptimizeForSize),
2106           "Attributes 'optsize and optnone' are incompatible!", V);
2107 
2108     Check(!Attrs.hasFnAttr(Attribute::MinSize),
2109           "Attributes 'minsize and optnone' are incompatible!", V);
2110   }
2111 
2112   if (Attrs.hasFnAttr("aarch64_pstate_sm_enabled")) {
2113     Check(!Attrs.hasFnAttr("aarch64_pstate_sm_compatible"),
2114            "Attributes 'aarch64_pstate_sm_enabled and "
2115            "aarch64_pstate_sm_compatible' are incompatible!",
2116            V);
2117   }
2118 
2119   if (Attrs.hasFnAttr("aarch64_pstate_za_new")) {
2120     Check(!Attrs.hasFnAttr("aarch64_pstate_za_preserved"),
2121            "Attributes 'aarch64_pstate_za_new and aarch64_pstate_za_preserved' "
2122            "are incompatible!",
2123            V);
2124 
2125     Check(!Attrs.hasFnAttr("aarch64_pstate_za_shared"),
2126            "Attributes 'aarch64_pstate_za_new and aarch64_pstate_za_shared' "
2127            "are incompatible!",
2128            V);
2129   }
2130 
2131   if (Attrs.hasFnAttr(Attribute::JumpTable)) {
2132     const GlobalValue *GV = cast<GlobalValue>(V);
2133     Check(GV->hasGlobalUnnamedAddr(),
2134           "Attribute 'jumptable' requires 'unnamed_addr'", V);
2135   }
2136 
2137   if (auto Args = Attrs.getFnAttrs().getAllocSizeArgs()) {
2138     auto CheckParam = [&](StringRef Name, unsigned ParamNo) {
2139       if (ParamNo >= FT->getNumParams()) {
2140         CheckFailed("'allocsize' " + Name + " argument is out of bounds", V);
2141         return false;
2142       }
2143 
2144       if (!FT->getParamType(ParamNo)->isIntegerTy()) {
2145         CheckFailed("'allocsize' " + Name +
2146                         " argument must refer to an integer parameter",
2147                     V);
2148         return false;
2149       }
2150 
2151       return true;
2152     };
2153 
2154     if (!CheckParam("element size", Args->first))
2155       return;
2156 
2157     if (Args->second && !CheckParam("number of elements", *Args->second))
2158       return;
2159   }
2160 
2161   if (Attrs.hasFnAttr(Attribute::AllocKind)) {
2162     AllocFnKind K = Attrs.getAllocKind();
2163     AllocFnKind Type =
2164         K & (AllocFnKind::Alloc | AllocFnKind::Realloc | AllocFnKind::Free);
2165     if (!is_contained(
2166             {AllocFnKind::Alloc, AllocFnKind::Realloc, AllocFnKind::Free},
2167             Type))
2168       CheckFailed(
2169           "'allockind()' requires exactly one of alloc, realloc, and free");
2170     if ((Type == AllocFnKind::Free) &&
2171         ((K & (AllocFnKind::Uninitialized | AllocFnKind::Zeroed |
2172                AllocFnKind::Aligned)) != AllocFnKind::Unknown))
2173       CheckFailed("'allockind(\"free\")' doesn't allow uninitialized, zeroed, "
2174                   "or aligned modifiers.");
2175     AllocFnKind ZeroedUninit = AllocFnKind::Uninitialized | AllocFnKind::Zeroed;
2176     if ((K & ZeroedUninit) == ZeroedUninit)
2177       CheckFailed("'allockind()' can't be both zeroed and uninitialized");
2178   }
2179 
2180   if (Attrs.hasFnAttr(Attribute::VScaleRange)) {
2181     unsigned VScaleMin = Attrs.getFnAttrs().getVScaleRangeMin();
2182     if (VScaleMin == 0)
2183       CheckFailed("'vscale_range' minimum must be greater than 0", V);
2184     else if (!isPowerOf2_32(VScaleMin))
2185       CheckFailed("'vscale_range' minimum must be power-of-two value", V);
2186     std::optional<unsigned> VScaleMax = Attrs.getFnAttrs().getVScaleRangeMax();
2187     if (VScaleMax && VScaleMin > VScaleMax)
2188       CheckFailed("'vscale_range' minimum cannot be greater than maximum", V);
2189     else if (VScaleMax && !isPowerOf2_32(*VScaleMax))
2190       CheckFailed("'vscale_range' maximum must be power-of-two value", V);
2191   }
2192 
2193   if (Attrs.hasFnAttr("frame-pointer")) {
2194     StringRef FP = Attrs.getFnAttr("frame-pointer").getValueAsString();
2195     if (FP != "all" && FP != "non-leaf" && FP != "none")
2196       CheckFailed("invalid value for 'frame-pointer' attribute: " + FP, V);
2197   }
2198 
2199   checkUnsignedBaseTenFuncAttr(Attrs, "patchable-function-prefix", V);
2200   checkUnsignedBaseTenFuncAttr(Attrs, "patchable-function-entry", V);
2201   checkUnsignedBaseTenFuncAttr(Attrs, "warn-stack-size", V);
2202 }
2203 
2204 void Verifier::verifyFunctionMetadata(
2205     ArrayRef<std::pair<unsigned, MDNode *>> MDs) {
2206   for (const auto &Pair : MDs) {
2207     if (Pair.first == LLVMContext::MD_prof) {
2208       MDNode *MD = Pair.second;
2209       Check(MD->getNumOperands() >= 2,
2210             "!prof annotations should have no less than 2 operands", MD);
2211 
2212       // Check first operand.
2213       Check(MD->getOperand(0) != nullptr, "first operand should not be null",
2214             MD);
2215       Check(isa<MDString>(MD->getOperand(0)),
2216             "expected string with name of the !prof annotation", MD);
2217       MDString *MDS = cast<MDString>(MD->getOperand(0));
2218       StringRef ProfName = MDS->getString();
2219       Check(ProfName.equals("function_entry_count") ||
2220                 ProfName.equals("synthetic_function_entry_count"),
2221             "first operand should be 'function_entry_count'"
2222             " or 'synthetic_function_entry_count'",
2223             MD);
2224 
2225       // Check second operand.
2226       Check(MD->getOperand(1) != nullptr, "second operand should not be null",
2227             MD);
2228       Check(isa<ConstantAsMetadata>(MD->getOperand(1)),
2229             "expected integer argument to function_entry_count", MD);
2230     } else if (Pair.first == LLVMContext::MD_kcfi_type) {
2231       MDNode *MD = Pair.second;
2232       Check(MD->getNumOperands() == 1,
2233             "!kcfi_type must have exactly one operand", MD);
2234       Check(MD->getOperand(0) != nullptr, "!kcfi_type operand must not be null",
2235             MD);
2236       Check(isa<ConstantAsMetadata>(MD->getOperand(0)),
2237             "expected a constant operand for !kcfi_type", MD);
2238       Constant *C = cast<ConstantAsMetadata>(MD->getOperand(0))->getValue();
2239       Check(isa<ConstantInt>(C),
2240             "expected a constant integer operand for !kcfi_type", MD);
2241       IntegerType *Type = cast<ConstantInt>(C)->getType();
2242       Check(Type->getBitWidth() == 32,
2243             "expected a 32-bit integer constant operand for !kcfi_type", MD);
2244     }
2245   }
2246 }
2247 
2248 void Verifier::visitConstantExprsRecursively(const Constant *EntryC) {
2249   if (!ConstantExprVisited.insert(EntryC).second)
2250     return;
2251 
2252   SmallVector<const Constant *, 16> Stack;
2253   Stack.push_back(EntryC);
2254 
2255   while (!Stack.empty()) {
2256     const Constant *C = Stack.pop_back_val();
2257 
2258     // Check this constant expression.
2259     if (const auto *CE = dyn_cast<ConstantExpr>(C))
2260       visitConstantExpr(CE);
2261 
2262     if (const auto *GV = dyn_cast<GlobalValue>(C)) {
2263       // Global Values get visited separately, but we do need to make sure
2264       // that the global value is in the correct module
2265       Check(GV->getParent() == &M, "Referencing global in another module!",
2266             EntryC, &M, GV, GV->getParent());
2267       continue;
2268     }
2269 
2270     // Visit all sub-expressions.
2271     for (const Use &U : C->operands()) {
2272       const auto *OpC = dyn_cast<Constant>(U);
2273       if (!OpC)
2274         continue;
2275       if (!ConstantExprVisited.insert(OpC).second)
2276         continue;
2277       Stack.push_back(OpC);
2278     }
2279   }
2280 }
2281 
2282 void Verifier::visitConstantExpr(const ConstantExpr *CE) {
2283   if (CE->getOpcode() == Instruction::BitCast)
2284     Check(CastInst::castIsValid(Instruction::BitCast, CE->getOperand(0),
2285                                 CE->getType()),
2286           "Invalid bitcast", CE);
2287 }
2288 
2289 bool Verifier::verifyAttributeCount(AttributeList Attrs, unsigned Params) {
2290   // There shouldn't be more attribute sets than there are parameters plus the
2291   // function and return value.
2292   return Attrs.getNumAttrSets() <= Params + 2;
2293 }
2294 
2295 void Verifier::verifyInlineAsmCall(const CallBase &Call) {
2296   const InlineAsm *IA = cast<InlineAsm>(Call.getCalledOperand());
2297   unsigned ArgNo = 0;
2298   unsigned LabelNo = 0;
2299   for (const InlineAsm::ConstraintInfo &CI : IA->ParseConstraints()) {
2300     if (CI.Type == InlineAsm::isLabel) {
2301       ++LabelNo;
2302       continue;
2303     }
2304 
2305     // Only deal with constraints that correspond to call arguments.
2306     if (!CI.hasArg())
2307       continue;
2308 
2309     if (CI.isIndirect) {
2310       const Value *Arg = Call.getArgOperand(ArgNo);
2311       Check(Arg->getType()->isPointerTy(),
2312             "Operand for indirect constraint must have pointer type", &Call);
2313 
2314       Check(Call.getParamElementType(ArgNo),
2315             "Operand for indirect constraint must have elementtype attribute",
2316             &Call);
2317     } else {
2318       Check(!Call.paramHasAttr(ArgNo, Attribute::ElementType),
2319             "Elementtype attribute can only be applied for indirect "
2320             "constraints",
2321             &Call);
2322     }
2323 
2324     ArgNo++;
2325   }
2326 
2327   if (auto *CallBr = dyn_cast<CallBrInst>(&Call)) {
2328     Check(LabelNo == CallBr->getNumIndirectDests(),
2329           "Number of label constraints does not match number of callbr dests",
2330           &Call);
2331   } else {
2332     Check(LabelNo == 0, "Label constraints can only be used with callbr",
2333           &Call);
2334   }
2335 }
2336 
2337 /// Verify that statepoint intrinsic is well formed.
2338 void Verifier::verifyStatepoint(const CallBase &Call) {
2339   assert(Call.getCalledFunction() &&
2340          Call.getCalledFunction()->getIntrinsicID() ==
2341              Intrinsic::experimental_gc_statepoint);
2342 
2343   Check(!Call.doesNotAccessMemory() && !Call.onlyReadsMemory() &&
2344             !Call.onlyAccessesArgMemory(),
2345         "gc.statepoint must read and write all memory to preserve "
2346         "reordering restrictions required by safepoint semantics",
2347         Call);
2348 
2349   const int64_t NumPatchBytes =
2350       cast<ConstantInt>(Call.getArgOperand(1))->getSExtValue();
2351   assert(isInt<32>(NumPatchBytes) && "NumPatchBytesV is an i32!");
2352   Check(NumPatchBytes >= 0,
2353         "gc.statepoint number of patchable bytes must be "
2354         "positive",
2355         Call);
2356 
2357   Type *TargetElemType = Call.getParamElementType(2);
2358   Check(TargetElemType,
2359         "gc.statepoint callee argument must have elementtype attribute", Call);
2360   FunctionType *TargetFuncType = dyn_cast<FunctionType>(TargetElemType);
2361   Check(TargetFuncType,
2362         "gc.statepoint callee elementtype must be function type", Call);
2363 
2364   const int NumCallArgs = cast<ConstantInt>(Call.getArgOperand(3))->getZExtValue();
2365   Check(NumCallArgs >= 0,
2366         "gc.statepoint number of arguments to underlying call "
2367         "must be positive",
2368         Call);
2369   const int NumParams = (int)TargetFuncType->getNumParams();
2370   if (TargetFuncType->isVarArg()) {
2371     Check(NumCallArgs >= NumParams,
2372           "gc.statepoint mismatch in number of vararg call args", Call);
2373 
2374     // TODO: Remove this limitation
2375     Check(TargetFuncType->getReturnType()->isVoidTy(),
2376           "gc.statepoint doesn't support wrapping non-void "
2377           "vararg functions yet",
2378           Call);
2379   } else
2380     Check(NumCallArgs == NumParams,
2381           "gc.statepoint mismatch in number of call args", Call);
2382 
2383   const uint64_t Flags
2384     = cast<ConstantInt>(Call.getArgOperand(4))->getZExtValue();
2385   Check((Flags & ~(uint64_t)StatepointFlags::MaskAll) == 0,
2386         "unknown flag used in gc.statepoint flags argument", Call);
2387 
2388   // Verify that the types of the call parameter arguments match
2389   // the type of the wrapped callee.
2390   AttributeList Attrs = Call.getAttributes();
2391   for (int i = 0; i < NumParams; i++) {
2392     Type *ParamType = TargetFuncType->getParamType(i);
2393     Type *ArgType = Call.getArgOperand(5 + i)->getType();
2394     Check(ArgType == ParamType,
2395           "gc.statepoint call argument does not match wrapped "
2396           "function type",
2397           Call);
2398 
2399     if (TargetFuncType->isVarArg()) {
2400       AttributeSet ArgAttrs = Attrs.getParamAttrs(5 + i);
2401       Check(!ArgAttrs.hasAttribute(Attribute::StructRet),
2402             "Attribute 'sret' cannot be used for vararg call arguments!", Call);
2403     }
2404   }
2405 
2406   const int EndCallArgsInx = 4 + NumCallArgs;
2407 
2408   const Value *NumTransitionArgsV = Call.getArgOperand(EndCallArgsInx + 1);
2409   Check(isa<ConstantInt>(NumTransitionArgsV),
2410         "gc.statepoint number of transition arguments "
2411         "must be constant integer",
2412         Call);
2413   const int NumTransitionArgs =
2414       cast<ConstantInt>(NumTransitionArgsV)->getZExtValue();
2415   Check(NumTransitionArgs == 0,
2416         "gc.statepoint w/inline transition bundle is deprecated", Call);
2417   const int EndTransitionArgsInx = EndCallArgsInx + 1 + NumTransitionArgs;
2418 
2419   const Value *NumDeoptArgsV = Call.getArgOperand(EndTransitionArgsInx + 1);
2420   Check(isa<ConstantInt>(NumDeoptArgsV),
2421         "gc.statepoint number of deoptimization arguments "
2422         "must be constant integer",
2423         Call);
2424   const int NumDeoptArgs = cast<ConstantInt>(NumDeoptArgsV)->getZExtValue();
2425   Check(NumDeoptArgs == 0,
2426         "gc.statepoint w/inline deopt operands is deprecated", Call);
2427 
2428   const int ExpectedNumArgs = 7 + NumCallArgs;
2429   Check(ExpectedNumArgs == (int)Call.arg_size(),
2430         "gc.statepoint too many arguments", Call);
2431 
2432   // Check that the only uses of this gc.statepoint are gc.result or
2433   // gc.relocate calls which are tied to this statepoint and thus part
2434   // of the same statepoint sequence
2435   for (const User *U : Call.users()) {
2436     const CallInst *UserCall = dyn_cast<const CallInst>(U);
2437     Check(UserCall, "illegal use of statepoint token", Call, U);
2438     if (!UserCall)
2439       continue;
2440     Check(isa<GCRelocateInst>(UserCall) || isa<GCResultInst>(UserCall),
2441           "gc.result or gc.relocate are the only value uses "
2442           "of a gc.statepoint",
2443           Call, U);
2444     if (isa<GCResultInst>(UserCall)) {
2445       Check(UserCall->getArgOperand(0) == &Call,
2446             "gc.result connected to wrong gc.statepoint", Call, UserCall);
2447     } else if (isa<GCRelocateInst>(Call)) {
2448       Check(UserCall->getArgOperand(0) == &Call,
2449             "gc.relocate connected to wrong gc.statepoint", Call, UserCall);
2450     }
2451   }
2452 
2453   // Note: It is legal for a single derived pointer to be listed multiple
2454   // times.  It's non-optimal, but it is legal.  It can also happen after
2455   // insertion if we strip a bitcast away.
2456   // Note: It is really tempting to check that each base is relocated and
2457   // that a derived pointer is never reused as a base pointer.  This turns
2458   // out to be problematic since optimizations run after safepoint insertion
2459   // can recognize equality properties that the insertion logic doesn't know
2460   // about.  See example statepoint.ll in the verifier subdirectory
2461 }
2462 
2463 void Verifier::verifyFrameRecoverIndices() {
2464   for (auto &Counts : FrameEscapeInfo) {
2465     Function *F = Counts.first;
2466     unsigned EscapedObjectCount = Counts.second.first;
2467     unsigned MaxRecoveredIndex = Counts.second.second;
2468     Check(MaxRecoveredIndex <= EscapedObjectCount,
2469           "all indices passed to llvm.localrecover must be less than the "
2470           "number of arguments passed to llvm.localescape in the parent "
2471           "function",
2472           F);
2473   }
2474 }
2475 
2476 static Instruction *getSuccPad(Instruction *Terminator) {
2477   BasicBlock *UnwindDest;
2478   if (auto *II = dyn_cast<InvokeInst>(Terminator))
2479     UnwindDest = II->getUnwindDest();
2480   else if (auto *CSI = dyn_cast<CatchSwitchInst>(Terminator))
2481     UnwindDest = CSI->getUnwindDest();
2482   else
2483     UnwindDest = cast<CleanupReturnInst>(Terminator)->getUnwindDest();
2484   return UnwindDest->getFirstNonPHI();
2485 }
2486 
2487 void Verifier::verifySiblingFuncletUnwinds() {
2488   SmallPtrSet<Instruction *, 8> Visited;
2489   SmallPtrSet<Instruction *, 8> Active;
2490   for (const auto &Pair : SiblingFuncletInfo) {
2491     Instruction *PredPad = Pair.first;
2492     if (Visited.count(PredPad))
2493       continue;
2494     Active.insert(PredPad);
2495     Instruction *Terminator = Pair.second;
2496     do {
2497       Instruction *SuccPad = getSuccPad(Terminator);
2498       if (Active.count(SuccPad)) {
2499         // Found a cycle; report error
2500         Instruction *CyclePad = SuccPad;
2501         SmallVector<Instruction *, 8> CycleNodes;
2502         do {
2503           CycleNodes.push_back(CyclePad);
2504           Instruction *CycleTerminator = SiblingFuncletInfo[CyclePad];
2505           if (CycleTerminator != CyclePad)
2506             CycleNodes.push_back(CycleTerminator);
2507           CyclePad = getSuccPad(CycleTerminator);
2508         } while (CyclePad != SuccPad);
2509         Check(false, "EH pads can't handle each other's exceptions",
2510               ArrayRef<Instruction *>(CycleNodes));
2511       }
2512       // Don't re-walk a node we've already checked
2513       if (!Visited.insert(SuccPad).second)
2514         break;
2515       // Walk to this successor if it has a map entry.
2516       PredPad = SuccPad;
2517       auto TermI = SiblingFuncletInfo.find(PredPad);
2518       if (TermI == SiblingFuncletInfo.end())
2519         break;
2520       Terminator = TermI->second;
2521       Active.insert(PredPad);
2522     } while (true);
2523     // Each node only has one successor, so we've walked all the active
2524     // nodes' successors.
2525     Active.clear();
2526   }
2527 }
2528 
2529 void Verifier::verifyConvergenceControl(Function &F) {
2530   DenseMap<BasicBlock *, SmallVector<CallBase *, 8>> LiveTokenMap;
2531   DenseMap<const Cycle *, const CallBase *> CycleHearts;
2532 
2533   // Just like the DominatorTree, compute the CycleInfo locally so that we
2534   // can run the verifier outside of a pass manager and we don't rely on
2535   // potentially out-dated analysis results.
2536   CycleInfo CI;
2537   CI.compute(F);
2538 
2539   auto checkBundle = [&](OperandBundleUse &Bundle, CallBase *CB,
2540                          SmallVectorImpl<CallBase *> &LiveTokens) {
2541     Check(Bundle.Inputs.size() == 1 && Bundle.Inputs[0]->getType()->isTokenTy(),
2542           "The 'convergencectrl' bundle requires exactly one token use.", CB);
2543 
2544     Value *Token = Bundle.Inputs[0].get();
2545     auto *Def = dyn_cast<CallBase>(Token);
2546     Check(Def != nullptr,
2547           "Convergence control tokens can only be produced by call "
2548           "instructions.",
2549           Token);
2550 
2551     Check(llvm::is_contained(LiveTokens, Token),
2552           "Convergence region is not well-nested.", Token, CB);
2553 
2554     while (LiveTokens.back() != Token)
2555       LiveTokens.pop_back();
2556 
2557     // Check static rules about cycles.
2558     auto *BB = CB->getParent();
2559     auto *BBCycle = CI.getCycle(BB);
2560     if (!BBCycle)
2561       return;
2562 
2563     BasicBlock *DefBB = Def->getParent();
2564     if (DefBB == BB || BBCycle->contains(DefBB)) {
2565       // degenerate occurrence of a loop intrinsic
2566       return;
2567     }
2568 
2569     auto *II = dyn_cast<IntrinsicInst>(CB);
2570     Check(II &&
2571               II->getIntrinsicID() == Intrinsic::experimental_convergence_loop,
2572           "Convergence token used by an instruction other than "
2573           "llvm.experimental.convergence.loop in a cycle that does "
2574           "not contain the token's definition.",
2575           CB, CI.print(BBCycle));
2576 
2577     while (true) {
2578       auto *Parent = BBCycle->getParentCycle();
2579       if (!Parent || Parent->contains(DefBB))
2580         break;
2581       BBCycle = Parent;
2582     };
2583 
2584     Check(BBCycle->isReducible() && BB == BBCycle->getHeader(),
2585           "Cycle heart must dominate all blocks in the cycle.", CB, BB,
2586           CI.print(BBCycle));
2587     Check(!CycleHearts.count(BBCycle),
2588           "Two static convergence token uses in a cycle that does "
2589           "not contain either token's definition.",
2590           CB, CycleHearts[BBCycle], CI.print(BBCycle));
2591     CycleHearts[BBCycle] = CB;
2592   };
2593 
2594   ReversePostOrderTraversal<Function *> RPOT(&F);
2595   SmallVector<CallBase *, 8> LiveTokens;
2596   for (BasicBlock *BB : RPOT) {
2597     LiveTokens.clear();
2598     auto LTIt = LiveTokenMap.find(BB);
2599     if (LTIt != LiveTokenMap.end()) {
2600       LiveTokens = std::move(LTIt->second);
2601       LiveTokenMap.erase(LTIt);
2602     }
2603 
2604     for (Instruction &I : *BB) {
2605       CallBase *CB = dyn_cast<CallBase>(&I);
2606       if (!CB)
2607         continue;
2608 
2609       auto Bundle = CB->getOperandBundle(LLVMContext::OB_convergencectrl);
2610       if (Bundle)
2611         checkBundle(*Bundle, CB, LiveTokens);
2612 
2613       if (CB->getType()->isTokenTy())
2614         LiveTokens.push_back(CB);
2615     }
2616 
2617     // Propagate token liveness
2618     for (BasicBlock *Succ : successors(BB)) {
2619       DomTreeNode *SuccNode = DT.getNode(Succ);
2620       LTIt = LiveTokenMap.find(Succ);
2621       if (LTIt == LiveTokenMap.end()) {
2622         // We're the first predecessor: all tokens which dominate the
2623         // successor are live for now.
2624         LTIt = LiveTokenMap.try_emplace(Succ).first;
2625         for (CallBase *LiveToken : LiveTokens) {
2626           if (!DT.dominates(DT.getNode(LiveToken->getParent()), SuccNode))
2627             break;
2628           LTIt->second.push_back(LiveToken);
2629         }
2630       } else {
2631         // Compute the intersection of live tokens.
2632         auto It = llvm::partition(LTIt->second, [&LiveTokens](CallBase *Token) {
2633           return llvm::is_contained(LiveTokens, Token);
2634         });
2635         LTIt->second.erase(It, LTIt->second.end());
2636       }
2637     }
2638   }
2639 }
2640 
2641 // visitFunction - Verify that a function is ok.
2642 //
2643 void Verifier::visitFunction(const Function &F) {
2644   visitGlobalValue(F);
2645 
2646   // Check function arguments.
2647   FunctionType *FT = F.getFunctionType();
2648   unsigned NumArgs = F.arg_size();
2649 
2650   Check(&Context == &F.getContext(),
2651         "Function context does not match Module context!", &F);
2652 
2653   Check(!F.hasCommonLinkage(), "Functions may not have common linkage", &F);
2654   Check(FT->getNumParams() == NumArgs,
2655         "# formal arguments must match # of arguments for function type!", &F,
2656         FT);
2657   Check(F.getReturnType()->isFirstClassType() ||
2658             F.getReturnType()->isVoidTy() || F.getReturnType()->isStructTy(),
2659         "Functions cannot return aggregate values!", &F);
2660 
2661   Check(!F.hasStructRetAttr() || F.getReturnType()->isVoidTy(),
2662         "Invalid struct return type!", &F);
2663 
2664   AttributeList Attrs = F.getAttributes();
2665 
2666   Check(verifyAttributeCount(Attrs, FT->getNumParams()),
2667         "Attribute after last parameter!", &F);
2668 
2669   bool IsIntrinsic = F.isIntrinsic();
2670 
2671   // Check function attributes.
2672   verifyFunctionAttrs(FT, Attrs, &F, IsIntrinsic, /* IsInlineAsm */ false);
2673 
2674   // On function declarations/definitions, we do not support the builtin
2675   // attribute. We do not check this in VerifyFunctionAttrs since that is
2676   // checking for Attributes that can/can not ever be on functions.
2677   Check(!Attrs.hasFnAttr(Attribute::Builtin),
2678         "Attribute 'builtin' can only be applied to a callsite.", &F);
2679 
2680   Check(!Attrs.hasAttrSomewhere(Attribute::ElementType),
2681         "Attribute 'elementtype' can only be applied to a callsite.", &F);
2682 
2683   // Check that this function meets the restrictions on this calling convention.
2684   // Sometimes varargs is used for perfectly forwarding thunks, so some of these
2685   // restrictions can be lifted.
2686   switch (F.getCallingConv()) {
2687   default:
2688   case CallingConv::C:
2689     break;
2690   case CallingConv::X86_INTR: {
2691     Check(F.arg_empty() || Attrs.hasParamAttr(0, Attribute::ByVal),
2692           "Calling convention parameter requires byval", &F);
2693     break;
2694   }
2695   case CallingConv::AMDGPU_KERNEL:
2696   case CallingConv::SPIR_KERNEL:
2697   case CallingConv::AMDGPU_CS_Chain:
2698   case CallingConv::AMDGPU_CS_ChainPreserve:
2699     Check(F.getReturnType()->isVoidTy(),
2700           "Calling convention requires void return type", &F);
2701     [[fallthrough]];
2702   case CallingConv::AMDGPU_VS:
2703   case CallingConv::AMDGPU_HS:
2704   case CallingConv::AMDGPU_GS:
2705   case CallingConv::AMDGPU_PS:
2706   case CallingConv::AMDGPU_CS:
2707     Check(!F.hasStructRetAttr(), "Calling convention does not allow sret", &F);
2708     if (F.getCallingConv() != CallingConv::SPIR_KERNEL) {
2709       const unsigned StackAS = DL.getAllocaAddrSpace();
2710       unsigned i = 0;
2711       for (const Argument &Arg : F.args()) {
2712         Check(!Attrs.hasParamAttr(i, Attribute::ByVal),
2713               "Calling convention disallows byval", &F);
2714         Check(!Attrs.hasParamAttr(i, Attribute::Preallocated),
2715               "Calling convention disallows preallocated", &F);
2716         Check(!Attrs.hasParamAttr(i, Attribute::InAlloca),
2717               "Calling convention disallows inalloca", &F);
2718 
2719         if (Attrs.hasParamAttr(i, Attribute::ByRef)) {
2720           // FIXME: Should also disallow LDS and GDS, but we don't have the enum
2721           // value here.
2722           Check(Arg.getType()->getPointerAddressSpace() != StackAS,
2723                 "Calling convention disallows stack byref", &F);
2724         }
2725 
2726         ++i;
2727       }
2728     }
2729 
2730     [[fallthrough]];
2731   case CallingConv::Fast:
2732   case CallingConv::Cold:
2733   case CallingConv::Intel_OCL_BI:
2734   case CallingConv::PTX_Kernel:
2735   case CallingConv::PTX_Device:
2736     Check(!F.isVarArg(),
2737           "Calling convention does not support varargs or "
2738           "perfect forwarding!",
2739           &F);
2740     break;
2741   }
2742 
2743   // Check that the argument values match the function type for this function...
2744   unsigned i = 0;
2745   for (const Argument &Arg : F.args()) {
2746     Check(Arg.getType() == FT->getParamType(i),
2747           "Argument value does not match function argument type!", &Arg,
2748           FT->getParamType(i));
2749     Check(Arg.getType()->isFirstClassType(),
2750           "Function arguments must have first-class types!", &Arg);
2751     if (!IsIntrinsic) {
2752       Check(!Arg.getType()->isMetadataTy(),
2753             "Function takes metadata but isn't an intrinsic", &Arg, &F);
2754       Check(!Arg.getType()->isTokenTy(),
2755             "Function takes token but isn't an intrinsic", &Arg, &F);
2756       Check(!Arg.getType()->isX86_AMXTy(),
2757             "Function takes x86_amx but isn't an intrinsic", &Arg, &F);
2758     }
2759 
2760     // Check that swifterror argument is only used by loads and stores.
2761     if (Attrs.hasParamAttr(i, Attribute::SwiftError)) {
2762       verifySwiftErrorValue(&Arg);
2763     }
2764     ++i;
2765   }
2766 
2767   if (!IsIntrinsic) {
2768     Check(!F.getReturnType()->isTokenTy(),
2769           "Function returns a token but isn't an intrinsic", &F);
2770     Check(!F.getReturnType()->isX86_AMXTy(),
2771           "Function returns a x86_amx but isn't an intrinsic", &F);
2772   }
2773 
2774   // Get the function metadata attachments.
2775   SmallVector<std::pair<unsigned, MDNode *>, 4> MDs;
2776   F.getAllMetadata(MDs);
2777   assert(F.hasMetadata() != MDs.empty() && "Bit out-of-sync");
2778   verifyFunctionMetadata(MDs);
2779 
2780   // Check validity of the personality function
2781   if (F.hasPersonalityFn()) {
2782     auto *Per = dyn_cast<Function>(F.getPersonalityFn()->stripPointerCasts());
2783     if (Per)
2784       Check(Per->getParent() == F.getParent(),
2785             "Referencing personality function in another module!", &F,
2786             F.getParent(), Per, Per->getParent());
2787   }
2788 
2789   // EH funclet coloring can be expensive, recompute on-demand
2790   BlockEHFuncletColors.clear();
2791 
2792   if (F.isMaterializable()) {
2793     // Function has a body somewhere we can't see.
2794     Check(MDs.empty(), "unmaterialized function cannot have metadata", &F,
2795           MDs.empty() ? nullptr : MDs.front().second);
2796   } else if (F.isDeclaration()) {
2797     for (const auto &I : MDs) {
2798       // This is used for call site debug information.
2799       CheckDI(I.first != LLVMContext::MD_dbg ||
2800                   !cast<DISubprogram>(I.second)->isDistinct(),
2801               "function declaration may only have a unique !dbg attachment",
2802               &F);
2803       Check(I.first != LLVMContext::MD_prof,
2804             "function declaration may not have a !prof attachment", &F);
2805 
2806       // Verify the metadata itself.
2807       visitMDNode(*I.second, AreDebugLocsAllowed::Yes);
2808     }
2809     Check(!F.hasPersonalityFn(),
2810           "Function declaration shouldn't have a personality routine", &F);
2811   } else {
2812     // Verify that this function (which has a body) is not named "llvm.*".  It
2813     // is not legal to define intrinsics.
2814     Check(!IsIntrinsic, "llvm intrinsics cannot be defined!", &F);
2815 
2816     // Check the entry node
2817     const BasicBlock *Entry = &F.getEntryBlock();
2818     Check(pred_empty(Entry),
2819           "Entry block to function must not have predecessors!", Entry);
2820 
2821     // The address of the entry block cannot be taken, unless it is dead.
2822     if (Entry->hasAddressTaken()) {
2823       Check(!BlockAddress::lookup(Entry)->isConstantUsed(),
2824             "blockaddress may not be used with the entry block!", Entry);
2825     }
2826 
2827     unsigned NumDebugAttachments = 0, NumProfAttachments = 0,
2828              NumKCFIAttachments = 0;
2829     // Visit metadata attachments.
2830     for (const auto &I : MDs) {
2831       // Verify that the attachment is legal.
2832       auto AllowLocs = AreDebugLocsAllowed::No;
2833       switch (I.first) {
2834       default:
2835         break;
2836       case LLVMContext::MD_dbg: {
2837         ++NumDebugAttachments;
2838         CheckDI(NumDebugAttachments == 1,
2839                 "function must have a single !dbg attachment", &F, I.second);
2840         CheckDI(isa<DISubprogram>(I.second),
2841                 "function !dbg attachment must be a subprogram", &F, I.second);
2842         CheckDI(cast<DISubprogram>(I.second)->isDistinct(),
2843                 "function definition may only have a distinct !dbg attachment",
2844                 &F);
2845 
2846         auto *SP = cast<DISubprogram>(I.second);
2847         const Function *&AttachedTo = DISubprogramAttachments[SP];
2848         CheckDI(!AttachedTo || AttachedTo == &F,
2849                 "DISubprogram attached to more than one function", SP, &F);
2850         AttachedTo = &F;
2851         AllowLocs = AreDebugLocsAllowed::Yes;
2852         break;
2853       }
2854       case LLVMContext::MD_prof:
2855         ++NumProfAttachments;
2856         Check(NumProfAttachments == 1,
2857               "function must have a single !prof attachment", &F, I.second);
2858         break;
2859       case LLVMContext::MD_kcfi_type:
2860         ++NumKCFIAttachments;
2861         Check(NumKCFIAttachments == 1,
2862               "function must have a single !kcfi_type attachment", &F,
2863               I.second);
2864         break;
2865       }
2866 
2867       // Verify the metadata itself.
2868       visitMDNode(*I.second, AllowLocs);
2869     }
2870   }
2871 
2872   // If this function is actually an intrinsic, verify that it is only used in
2873   // direct call/invokes, never having its "address taken".
2874   // Only do this if the module is materialized, otherwise we don't have all the
2875   // uses.
2876   if (F.isIntrinsic() && F.getParent()->isMaterialized()) {
2877     const User *U;
2878     if (F.hasAddressTaken(&U, false, true, false,
2879                           /*IgnoreARCAttachedCall=*/true))
2880       Check(false, "Invalid user of intrinsic instruction!", U);
2881   }
2882 
2883   // Check intrinsics' signatures.
2884   switch (F.getIntrinsicID()) {
2885   case Intrinsic::experimental_gc_get_pointer_base: {
2886     FunctionType *FT = F.getFunctionType();
2887     Check(FT->getNumParams() == 1, "wrong number of parameters", F);
2888     Check(isa<PointerType>(F.getReturnType()),
2889           "gc.get.pointer.base must return a pointer", F);
2890     Check(FT->getParamType(0) == F.getReturnType(),
2891           "gc.get.pointer.base operand and result must be of the same type", F);
2892     break;
2893   }
2894   case Intrinsic::experimental_gc_get_pointer_offset: {
2895     FunctionType *FT = F.getFunctionType();
2896     Check(FT->getNumParams() == 1, "wrong number of parameters", F);
2897     Check(isa<PointerType>(FT->getParamType(0)),
2898           "gc.get.pointer.offset operand must be a pointer", F);
2899     Check(F.getReturnType()->isIntegerTy(),
2900           "gc.get.pointer.offset must return integer", F);
2901     break;
2902   }
2903   }
2904 
2905   auto *N = F.getSubprogram();
2906   HasDebugInfo = (N != nullptr);
2907   if (!HasDebugInfo)
2908     return;
2909 
2910   // Check that all !dbg attachments lead to back to N.
2911   //
2912   // FIXME: Check this incrementally while visiting !dbg attachments.
2913   // FIXME: Only check when N is the canonical subprogram for F.
2914   SmallPtrSet<const MDNode *, 32> Seen;
2915   auto VisitDebugLoc = [&](const Instruction &I, const MDNode *Node) {
2916     // Be careful about using DILocation here since we might be dealing with
2917     // broken code (this is the Verifier after all).
2918     const DILocation *DL = dyn_cast_or_null<DILocation>(Node);
2919     if (!DL)
2920       return;
2921     if (!Seen.insert(DL).second)
2922       return;
2923 
2924     Metadata *Parent = DL->getRawScope();
2925     CheckDI(Parent && isa<DILocalScope>(Parent),
2926             "DILocation's scope must be a DILocalScope", N, &F, &I, DL, Parent);
2927 
2928     DILocalScope *Scope = DL->getInlinedAtScope();
2929     Check(Scope, "Failed to find DILocalScope", DL);
2930 
2931     if (!Seen.insert(Scope).second)
2932       return;
2933 
2934     DISubprogram *SP = Scope->getSubprogram();
2935 
2936     // Scope and SP could be the same MDNode and we don't want to skip
2937     // validation in that case
2938     if (SP && ((Scope != SP) && !Seen.insert(SP).second))
2939       return;
2940 
2941     CheckDI(SP->describes(&F),
2942             "!dbg attachment points at wrong subprogram for function", N, &F,
2943             &I, DL, Scope, SP);
2944   };
2945   for (auto &BB : F)
2946     for (auto &I : BB) {
2947       VisitDebugLoc(I, I.getDebugLoc().getAsMDNode());
2948       // The llvm.loop annotations also contain two DILocations.
2949       if (auto MD = I.getMetadata(LLVMContext::MD_loop))
2950         for (unsigned i = 1; i < MD->getNumOperands(); ++i)
2951           VisitDebugLoc(I, dyn_cast_or_null<MDNode>(MD->getOperand(i)));
2952       if (BrokenDebugInfo)
2953         return;
2954     }
2955 }
2956 
2957 // verifyBasicBlock - Verify that a basic block is well formed...
2958 //
2959 void Verifier::visitBasicBlock(BasicBlock &BB) {
2960   InstsInThisBlock.clear();
2961 
2962   // Ensure that basic blocks have terminators!
2963   Check(BB.getTerminator(), "Basic Block does not have terminator!", &BB);
2964 
2965   // Check constraints that this basic block imposes on all of the PHI nodes in
2966   // it.
2967   if (isa<PHINode>(BB.front())) {
2968     SmallVector<BasicBlock *, 8> Preds(predecessors(&BB));
2969     SmallVector<std::pair<BasicBlock*, Value*>, 8> Values;
2970     llvm::sort(Preds);
2971     for (const PHINode &PN : BB.phis()) {
2972       Check(PN.getNumIncomingValues() == Preds.size(),
2973             "PHINode should have one entry for each predecessor of its "
2974             "parent basic block!",
2975             &PN);
2976 
2977       // Get and sort all incoming values in the PHI node...
2978       Values.clear();
2979       Values.reserve(PN.getNumIncomingValues());
2980       for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i)
2981         Values.push_back(
2982             std::make_pair(PN.getIncomingBlock(i), PN.getIncomingValue(i)));
2983       llvm::sort(Values);
2984 
2985       for (unsigned i = 0, e = Values.size(); i != e; ++i) {
2986         // Check to make sure that if there is more than one entry for a
2987         // particular basic block in this PHI node, that the incoming values are
2988         // all identical.
2989         //
2990         Check(i == 0 || Values[i].first != Values[i - 1].first ||
2991                   Values[i].second == Values[i - 1].second,
2992               "PHI node has multiple entries for the same basic block with "
2993               "different incoming values!",
2994               &PN, Values[i].first, Values[i].second, Values[i - 1].second);
2995 
2996         // Check to make sure that the predecessors and PHI node entries are
2997         // matched up.
2998         Check(Values[i].first == Preds[i],
2999               "PHI node entries do not match predecessors!", &PN,
3000               Values[i].first, Preds[i]);
3001       }
3002     }
3003   }
3004 
3005   // Check that all instructions have their parent pointers set up correctly.
3006   for (auto &I : BB)
3007   {
3008     Check(I.getParent() == &BB, "Instruction has bogus parent pointer!");
3009   }
3010 }
3011 
3012 void Verifier::visitTerminator(Instruction &I) {
3013   // Ensure that terminators only exist at the end of the basic block.
3014   Check(&I == I.getParent()->getTerminator(),
3015         "Terminator found in the middle of a basic block!", I.getParent());
3016   visitInstruction(I);
3017 }
3018 
3019 void Verifier::visitBranchInst(BranchInst &BI) {
3020   if (BI.isConditional()) {
3021     Check(BI.getCondition()->getType()->isIntegerTy(1),
3022           "Branch condition is not 'i1' type!", &BI, BI.getCondition());
3023   }
3024   visitTerminator(BI);
3025 }
3026 
3027 void Verifier::visitReturnInst(ReturnInst &RI) {
3028   Function *F = RI.getParent()->getParent();
3029   unsigned N = RI.getNumOperands();
3030   if (F->getReturnType()->isVoidTy())
3031     Check(N == 0,
3032           "Found return instr that returns non-void in Function of void "
3033           "return type!",
3034           &RI, F->getReturnType());
3035   else
3036     Check(N == 1 && F->getReturnType() == RI.getOperand(0)->getType(),
3037           "Function return type does not match operand "
3038           "type of return inst!",
3039           &RI, F->getReturnType());
3040 
3041   // Check to make sure that the return value has necessary properties for
3042   // terminators...
3043   visitTerminator(RI);
3044 }
3045 
3046 void Verifier::visitSwitchInst(SwitchInst &SI) {
3047   Check(SI.getType()->isVoidTy(), "Switch must have void result type!", &SI);
3048   // Check to make sure that all of the constants in the switch instruction
3049   // have the same type as the switched-on value.
3050   Type *SwitchTy = SI.getCondition()->getType();
3051   SmallPtrSet<ConstantInt*, 32> Constants;
3052   for (auto &Case : SI.cases()) {
3053     Check(isa<ConstantInt>(SI.getOperand(Case.getCaseIndex() * 2 + 2)),
3054           "Case value is not a constant integer.", &SI);
3055     Check(Case.getCaseValue()->getType() == SwitchTy,
3056           "Switch constants must all be same type as switch value!", &SI);
3057     Check(Constants.insert(Case.getCaseValue()).second,
3058           "Duplicate integer as switch case", &SI, Case.getCaseValue());
3059   }
3060 
3061   visitTerminator(SI);
3062 }
3063 
3064 void Verifier::visitIndirectBrInst(IndirectBrInst &BI) {
3065   Check(BI.getAddress()->getType()->isPointerTy(),
3066         "Indirectbr operand must have pointer type!", &BI);
3067   for (unsigned i = 0, e = BI.getNumDestinations(); i != e; ++i)
3068     Check(BI.getDestination(i)->getType()->isLabelTy(),
3069           "Indirectbr destinations must all have pointer type!", &BI);
3070 
3071   visitTerminator(BI);
3072 }
3073 
3074 void Verifier::visitCallBrInst(CallBrInst &CBI) {
3075   Check(CBI.isInlineAsm(), "Callbr is currently only used for asm-goto!", &CBI);
3076   const InlineAsm *IA = cast<InlineAsm>(CBI.getCalledOperand());
3077   Check(!IA->canThrow(), "Unwinding from Callbr is not allowed");
3078 
3079   verifyInlineAsmCall(CBI);
3080   visitTerminator(CBI);
3081 }
3082 
3083 void Verifier::visitSelectInst(SelectInst &SI) {
3084   Check(!SelectInst::areInvalidOperands(SI.getOperand(0), SI.getOperand(1),
3085                                         SI.getOperand(2)),
3086         "Invalid operands for select instruction!", &SI);
3087 
3088   Check(SI.getTrueValue()->getType() == SI.getType(),
3089         "Select values must have same type as select instruction!", &SI);
3090   visitInstruction(SI);
3091 }
3092 
3093 /// visitUserOp1 - User defined operators shouldn't live beyond the lifetime of
3094 /// a pass, if any exist, it's an error.
3095 ///
3096 void Verifier::visitUserOp1(Instruction &I) {
3097   Check(false, "User-defined operators should not live outside of a pass!", &I);
3098 }
3099 
3100 void Verifier::visitTruncInst(TruncInst &I) {
3101   // Get the source and destination types
3102   Type *SrcTy = I.getOperand(0)->getType();
3103   Type *DestTy = I.getType();
3104 
3105   // Get the size of the types in bits, we'll need this later
3106   unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
3107   unsigned DestBitSize = DestTy->getScalarSizeInBits();
3108 
3109   Check(SrcTy->isIntOrIntVectorTy(), "Trunc only operates on integer", &I);
3110   Check(DestTy->isIntOrIntVectorTy(), "Trunc only produces integer", &I);
3111   Check(SrcTy->isVectorTy() == DestTy->isVectorTy(),
3112         "trunc source and destination must both be a vector or neither", &I);
3113   Check(SrcBitSize > DestBitSize, "DestTy too big for Trunc", &I);
3114 
3115   visitInstruction(I);
3116 }
3117 
3118 void Verifier::visitZExtInst(ZExtInst &I) {
3119   // Get the source and destination types
3120   Type *SrcTy = I.getOperand(0)->getType();
3121   Type *DestTy = I.getType();
3122 
3123   // Get the size of the types in bits, we'll need this later
3124   Check(SrcTy->isIntOrIntVectorTy(), "ZExt only operates on integer", &I);
3125   Check(DestTy->isIntOrIntVectorTy(), "ZExt only produces an integer", &I);
3126   Check(SrcTy->isVectorTy() == DestTy->isVectorTy(),
3127         "zext source and destination must both be a vector or neither", &I);
3128   unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
3129   unsigned DestBitSize = DestTy->getScalarSizeInBits();
3130 
3131   Check(SrcBitSize < DestBitSize, "Type too small for ZExt", &I);
3132 
3133   visitInstruction(I);
3134 }
3135 
3136 void Verifier::visitSExtInst(SExtInst &I) {
3137   // Get the source and destination types
3138   Type *SrcTy = I.getOperand(0)->getType();
3139   Type *DestTy = I.getType();
3140 
3141   // Get the size of the types in bits, we'll need this later
3142   unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
3143   unsigned DestBitSize = DestTy->getScalarSizeInBits();
3144 
3145   Check(SrcTy->isIntOrIntVectorTy(), "SExt only operates on integer", &I);
3146   Check(DestTy->isIntOrIntVectorTy(), "SExt only produces an integer", &I);
3147   Check(SrcTy->isVectorTy() == DestTy->isVectorTy(),
3148         "sext source and destination must both be a vector or neither", &I);
3149   Check(SrcBitSize < DestBitSize, "Type too small for SExt", &I);
3150 
3151   visitInstruction(I);
3152 }
3153 
3154 void Verifier::visitFPTruncInst(FPTruncInst &I) {
3155   // Get the source and destination types
3156   Type *SrcTy = I.getOperand(0)->getType();
3157   Type *DestTy = I.getType();
3158   // Get the size of the types in bits, we'll need this later
3159   unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
3160   unsigned DestBitSize = DestTy->getScalarSizeInBits();
3161 
3162   Check(SrcTy->isFPOrFPVectorTy(), "FPTrunc only operates on FP", &I);
3163   Check(DestTy->isFPOrFPVectorTy(), "FPTrunc only produces an FP", &I);
3164   Check(SrcTy->isVectorTy() == DestTy->isVectorTy(),
3165         "fptrunc source and destination must both be a vector or neither", &I);
3166   Check(SrcBitSize > DestBitSize, "DestTy too big for FPTrunc", &I);
3167 
3168   visitInstruction(I);
3169 }
3170 
3171 void Verifier::visitFPExtInst(FPExtInst &I) {
3172   // Get the source and destination types
3173   Type *SrcTy = I.getOperand(0)->getType();
3174   Type *DestTy = I.getType();
3175 
3176   // Get the size of the types in bits, we'll need this later
3177   unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
3178   unsigned DestBitSize = DestTy->getScalarSizeInBits();
3179 
3180   Check(SrcTy->isFPOrFPVectorTy(), "FPExt only operates on FP", &I);
3181   Check(DestTy->isFPOrFPVectorTy(), "FPExt only produces an FP", &I);
3182   Check(SrcTy->isVectorTy() == DestTy->isVectorTy(),
3183         "fpext source and destination must both be a vector or neither", &I);
3184   Check(SrcBitSize < DestBitSize, "DestTy too small for FPExt", &I);
3185 
3186   visitInstruction(I);
3187 }
3188 
3189 void Verifier::visitUIToFPInst(UIToFPInst &I) {
3190   // Get the source and destination types
3191   Type *SrcTy = I.getOperand(0)->getType();
3192   Type *DestTy = I.getType();
3193 
3194   bool SrcVec = SrcTy->isVectorTy();
3195   bool DstVec = DestTy->isVectorTy();
3196 
3197   Check(SrcVec == DstVec,
3198         "UIToFP source and dest must both be vector or scalar", &I);
3199   Check(SrcTy->isIntOrIntVectorTy(),
3200         "UIToFP source must be integer or integer vector", &I);
3201   Check(DestTy->isFPOrFPVectorTy(), "UIToFP result must be FP or FP vector",
3202         &I);
3203 
3204   if (SrcVec && DstVec)
3205     Check(cast<VectorType>(SrcTy)->getElementCount() ==
3206               cast<VectorType>(DestTy)->getElementCount(),
3207           "UIToFP source and dest vector length mismatch", &I);
3208 
3209   visitInstruction(I);
3210 }
3211 
3212 void Verifier::visitSIToFPInst(SIToFPInst &I) {
3213   // Get the source and destination types
3214   Type *SrcTy = I.getOperand(0)->getType();
3215   Type *DestTy = I.getType();
3216 
3217   bool SrcVec = SrcTy->isVectorTy();
3218   bool DstVec = DestTy->isVectorTy();
3219 
3220   Check(SrcVec == DstVec,
3221         "SIToFP source and dest must both be vector or scalar", &I);
3222   Check(SrcTy->isIntOrIntVectorTy(),
3223         "SIToFP source must be integer or integer vector", &I);
3224   Check(DestTy->isFPOrFPVectorTy(), "SIToFP result must be FP or FP vector",
3225         &I);
3226 
3227   if (SrcVec && DstVec)
3228     Check(cast<VectorType>(SrcTy)->getElementCount() ==
3229               cast<VectorType>(DestTy)->getElementCount(),
3230           "SIToFP source and dest vector length mismatch", &I);
3231 
3232   visitInstruction(I);
3233 }
3234 
3235 void Verifier::visitFPToUIInst(FPToUIInst &I) {
3236   // Get the source and destination types
3237   Type *SrcTy = I.getOperand(0)->getType();
3238   Type *DestTy = I.getType();
3239 
3240   bool SrcVec = SrcTy->isVectorTy();
3241   bool DstVec = DestTy->isVectorTy();
3242 
3243   Check(SrcVec == DstVec,
3244         "FPToUI source and dest must both be vector or scalar", &I);
3245   Check(SrcTy->isFPOrFPVectorTy(), "FPToUI source must be FP or FP vector", &I);
3246   Check(DestTy->isIntOrIntVectorTy(),
3247         "FPToUI result must be integer or integer vector", &I);
3248 
3249   if (SrcVec && DstVec)
3250     Check(cast<VectorType>(SrcTy)->getElementCount() ==
3251               cast<VectorType>(DestTy)->getElementCount(),
3252           "FPToUI source and dest vector length mismatch", &I);
3253 
3254   visitInstruction(I);
3255 }
3256 
3257 void Verifier::visitFPToSIInst(FPToSIInst &I) {
3258   // Get the source and destination types
3259   Type *SrcTy = I.getOperand(0)->getType();
3260   Type *DestTy = I.getType();
3261 
3262   bool SrcVec = SrcTy->isVectorTy();
3263   bool DstVec = DestTy->isVectorTy();
3264 
3265   Check(SrcVec == DstVec,
3266         "FPToSI source and dest must both be vector or scalar", &I);
3267   Check(SrcTy->isFPOrFPVectorTy(), "FPToSI source must be FP or FP vector", &I);
3268   Check(DestTy->isIntOrIntVectorTy(),
3269         "FPToSI result must be integer or integer vector", &I);
3270 
3271   if (SrcVec && DstVec)
3272     Check(cast<VectorType>(SrcTy)->getElementCount() ==
3273               cast<VectorType>(DestTy)->getElementCount(),
3274           "FPToSI source and dest vector length mismatch", &I);
3275 
3276   visitInstruction(I);
3277 }
3278 
3279 void Verifier::visitPtrToIntInst(PtrToIntInst &I) {
3280   // Get the source and destination types
3281   Type *SrcTy = I.getOperand(0)->getType();
3282   Type *DestTy = I.getType();
3283 
3284   Check(SrcTy->isPtrOrPtrVectorTy(), "PtrToInt source must be pointer", &I);
3285 
3286   Check(DestTy->isIntOrIntVectorTy(), "PtrToInt result must be integral", &I);
3287   Check(SrcTy->isVectorTy() == DestTy->isVectorTy(), "PtrToInt type mismatch",
3288         &I);
3289 
3290   if (SrcTy->isVectorTy()) {
3291     auto *VSrc = cast<VectorType>(SrcTy);
3292     auto *VDest = cast<VectorType>(DestTy);
3293     Check(VSrc->getElementCount() == VDest->getElementCount(),
3294           "PtrToInt Vector width mismatch", &I);
3295   }
3296 
3297   visitInstruction(I);
3298 }
3299 
3300 void Verifier::visitIntToPtrInst(IntToPtrInst &I) {
3301   // Get the source and destination types
3302   Type *SrcTy = I.getOperand(0)->getType();
3303   Type *DestTy = I.getType();
3304 
3305   Check(SrcTy->isIntOrIntVectorTy(), "IntToPtr source must be an integral", &I);
3306   Check(DestTy->isPtrOrPtrVectorTy(), "IntToPtr result must be a pointer", &I);
3307 
3308   Check(SrcTy->isVectorTy() == DestTy->isVectorTy(), "IntToPtr type mismatch",
3309         &I);
3310   if (SrcTy->isVectorTy()) {
3311     auto *VSrc = cast<VectorType>(SrcTy);
3312     auto *VDest = cast<VectorType>(DestTy);
3313     Check(VSrc->getElementCount() == VDest->getElementCount(),
3314           "IntToPtr Vector width mismatch", &I);
3315   }
3316   visitInstruction(I);
3317 }
3318 
3319 void Verifier::visitBitCastInst(BitCastInst &I) {
3320   Check(
3321       CastInst::castIsValid(Instruction::BitCast, I.getOperand(0), I.getType()),
3322       "Invalid bitcast", &I);
3323   visitInstruction(I);
3324 }
3325 
3326 void Verifier::visitAddrSpaceCastInst(AddrSpaceCastInst &I) {
3327   Type *SrcTy = I.getOperand(0)->getType();
3328   Type *DestTy = I.getType();
3329 
3330   Check(SrcTy->isPtrOrPtrVectorTy(), "AddrSpaceCast source must be a pointer",
3331         &I);
3332   Check(DestTy->isPtrOrPtrVectorTy(), "AddrSpaceCast result must be a pointer",
3333         &I);
3334   Check(SrcTy->getPointerAddressSpace() != DestTy->getPointerAddressSpace(),
3335         "AddrSpaceCast must be between different address spaces", &I);
3336   if (auto *SrcVTy = dyn_cast<VectorType>(SrcTy))
3337     Check(SrcVTy->getElementCount() ==
3338               cast<VectorType>(DestTy)->getElementCount(),
3339           "AddrSpaceCast vector pointer number of elements mismatch", &I);
3340   visitInstruction(I);
3341 }
3342 
3343 /// visitPHINode - Ensure that a PHI node is well formed.
3344 ///
3345 void Verifier::visitPHINode(PHINode &PN) {
3346   // Ensure that the PHI nodes are all grouped together at the top of the block.
3347   // This can be tested by checking whether the instruction before this is
3348   // either nonexistent (because this is begin()) or is a PHI node.  If not,
3349   // then there is some other instruction before a PHI.
3350   Check(&PN == &PN.getParent()->front() ||
3351             isa<PHINode>(--BasicBlock::iterator(&PN)),
3352         "PHI nodes not grouped at top of basic block!", &PN, PN.getParent());
3353 
3354   // Check that a PHI doesn't yield a Token.
3355   Check(!PN.getType()->isTokenTy(), "PHI nodes cannot have token type!");
3356 
3357   // Check that all of the values of the PHI node have the same type as the
3358   // result, and that the incoming blocks are really basic blocks.
3359   for (Value *IncValue : PN.incoming_values()) {
3360     Check(PN.getType() == IncValue->getType(),
3361           "PHI node operands are not the same type as the result!", &PN);
3362   }
3363 
3364   // All other PHI node constraints are checked in the visitBasicBlock method.
3365 
3366   visitInstruction(PN);
3367 }
3368 
3369 static bool isControlledConvergent(const CallBase &Call) {
3370   if (Call.getOperandBundle(LLVMContext::OB_convergencectrl))
3371     return true;
3372   if (const auto *F = dyn_cast<Function>(Call.getCalledOperand())) {
3373     switch (F->getIntrinsicID()) {
3374     case Intrinsic::experimental_convergence_anchor:
3375     case Intrinsic::experimental_convergence_entry:
3376     case Intrinsic::experimental_convergence_loop:
3377       return true;
3378     }
3379   }
3380   return false;
3381 }
3382 
3383 void Verifier::visitCallBase(CallBase &Call) {
3384   Check(Call.getCalledOperand()->getType()->isPointerTy(),
3385         "Called function must be a pointer!", Call);
3386   FunctionType *FTy = Call.getFunctionType();
3387 
3388   // Verify that the correct number of arguments are being passed
3389   if (FTy->isVarArg())
3390     Check(Call.arg_size() >= FTy->getNumParams(),
3391           "Called function requires more parameters than were provided!", Call);
3392   else
3393     Check(Call.arg_size() == FTy->getNumParams(),
3394           "Incorrect number of arguments passed to called function!", Call);
3395 
3396   // Verify that all arguments to the call match the function type.
3397   for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
3398     Check(Call.getArgOperand(i)->getType() == FTy->getParamType(i),
3399           "Call parameter type does not match function signature!",
3400           Call.getArgOperand(i), FTy->getParamType(i), Call);
3401 
3402   AttributeList Attrs = Call.getAttributes();
3403 
3404   Check(verifyAttributeCount(Attrs, Call.arg_size()),
3405         "Attribute after last parameter!", Call);
3406 
3407   Function *Callee =
3408       dyn_cast<Function>(Call.getCalledOperand()->stripPointerCasts());
3409   bool IsIntrinsic = Callee && Callee->isIntrinsic();
3410   if (IsIntrinsic)
3411     Check(Callee->getValueType() == FTy,
3412           "Intrinsic called with incompatible signature", Call);
3413 
3414   // Disallow calls to functions with the amdgpu_cs_chain[_preserve] calling
3415   // convention.
3416   auto CC = Call.getCallingConv();
3417   Check(CC != CallingConv::AMDGPU_CS_Chain &&
3418             CC != CallingConv::AMDGPU_CS_ChainPreserve,
3419         "Direct calls to amdgpu_cs_chain/amdgpu_cs_chain_preserve functions "
3420         "not allowed. Please use the @llvm.amdgpu.cs.chain intrinsic instead.",
3421         Call);
3422 
3423   auto VerifyTypeAlign = [&](Type *Ty, const Twine &Message) {
3424     if (!Ty->isSized())
3425       return;
3426     Align ABIAlign = DL.getABITypeAlign(Ty);
3427     Align MaxAlign(ParamMaxAlignment);
3428     Check(ABIAlign <= MaxAlign,
3429           "Incorrect alignment of " + Message + " to called function!", Call);
3430   };
3431 
3432   if (!IsIntrinsic) {
3433     VerifyTypeAlign(FTy->getReturnType(), "return type");
3434     for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) {
3435       Type *Ty = FTy->getParamType(i);
3436       VerifyTypeAlign(Ty, "argument passed");
3437     }
3438   }
3439 
3440   if (Attrs.hasFnAttr(Attribute::Speculatable)) {
3441     // Don't allow speculatable on call sites, unless the underlying function
3442     // declaration is also speculatable.
3443     Check(Callee && Callee->isSpeculatable(),
3444           "speculatable attribute may not apply to call sites", Call);
3445   }
3446 
3447   if (Attrs.hasFnAttr(Attribute::Preallocated)) {
3448     Check(Call.getCalledFunction()->getIntrinsicID() ==
3449               Intrinsic::call_preallocated_arg,
3450           "preallocated as a call site attribute can only be on "
3451           "llvm.call.preallocated.arg");
3452   }
3453 
3454   // Verify call attributes.
3455   verifyFunctionAttrs(FTy, Attrs, &Call, IsIntrinsic, Call.isInlineAsm());
3456 
3457   // Conservatively check the inalloca argument.
3458   // We have a bug if we can find that there is an underlying alloca without
3459   // inalloca.
3460   if (Call.hasInAllocaArgument()) {
3461     Value *InAllocaArg = Call.getArgOperand(FTy->getNumParams() - 1);
3462     if (auto AI = dyn_cast<AllocaInst>(InAllocaArg->stripInBoundsOffsets()))
3463       Check(AI->isUsedWithInAlloca(),
3464             "inalloca argument for call has mismatched alloca", AI, Call);
3465   }
3466 
3467   // For each argument of the callsite, if it has the swifterror argument,
3468   // make sure the underlying alloca/parameter it comes from has a swifterror as
3469   // well.
3470   for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) {
3471     if (Call.paramHasAttr(i, Attribute::SwiftError)) {
3472       Value *SwiftErrorArg = Call.getArgOperand(i);
3473       if (auto AI = dyn_cast<AllocaInst>(SwiftErrorArg->stripInBoundsOffsets())) {
3474         Check(AI->isSwiftError(),
3475               "swifterror argument for call has mismatched alloca", AI, Call);
3476         continue;
3477       }
3478       auto ArgI = dyn_cast<Argument>(SwiftErrorArg);
3479       Check(ArgI, "swifterror argument should come from an alloca or parameter",
3480             SwiftErrorArg, Call);
3481       Check(ArgI->hasSwiftErrorAttr(),
3482             "swifterror argument for call has mismatched parameter", ArgI,
3483             Call);
3484     }
3485 
3486     if (Attrs.hasParamAttr(i, Attribute::ImmArg)) {
3487       // Don't allow immarg on call sites, unless the underlying declaration
3488       // also has the matching immarg.
3489       Check(Callee && Callee->hasParamAttribute(i, Attribute::ImmArg),
3490             "immarg may not apply only to call sites", Call.getArgOperand(i),
3491             Call);
3492     }
3493 
3494     if (Call.paramHasAttr(i, Attribute::ImmArg)) {
3495       Value *ArgVal = Call.getArgOperand(i);
3496       Check(isa<ConstantInt>(ArgVal) || isa<ConstantFP>(ArgVal),
3497             "immarg operand has non-immediate parameter", ArgVal, Call);
3498     }
3499 
3500     if (Call.paramHasAttr(i, Attribute::Preallocated)) {
3501       Value *ArgVal = Call.getArgOperand(i);
3502       bool hasOB =
3503           Call.countOperandBundlesOfType(LLVMContext::OB_preallocated) != 0;
3504       bool isMustTail = Call.isMustTailCall();
3505       Check(hasOB != isMustTail,
3506             "preallocated operand either requires a preallocated bundle or "
3507             "the call to be musttail (but not both)",
3508             ArgVal, Call);
3509     }
3510   }
3511 
3512   if (FTy->isVarArg()) {
3513     // FIXME? is 'nest' even legal here?
3514     bool SawNest = false;
3515     bool SawReturned = false;
3516 
3517     for (unsigned Idx = 0; Idx < FTy->getNumParams(); ++Idx) {
3518       if (Attrs.hasParamAttr(Idx, Attribute::Nest))
3519         SawNest = true;
3520       if (Attrs.hasParamAttr(Idx, Attribute::Returned))
3521         SawReturned = true;
3522     }
3523 
3524     // Check attributes on the varargs part.
3525     for (unsigned Idx = FTy->getNumParams(); Idx < Call.arg_size(); ++Idx) {
3526       Type *Ty = Call.getArgOperand(Idx)->getType();
3527       AttributeSet ArgAttrs = Attrs.getParamAttrs(Idx);
3528       verifyParameterAttrs(ArgAttrs, Ty, &Call);
3529 
3530       if (ArgAttrs.hasAttribute(Attribute::Nest)) {
3531         Check(!SawNest, "More than one parameter has attribute nest!", Call);
3532         SawNest = true;
3533       }
3534 
3535       if (ArgAttrs.hasAttribute(Attribute::Returned)) {
3536         Check(!SawReturned, "More than one parameter has attribute returned!",
3537               Call);
3538         Check(Ty->canLosslesslyBitCastTo(FTy->getReturnType()),
3539               "Incompatible argument and return types for 'returned' "
3540               "attribute",
3541               Call);
3542         SawReturned = true;
3543       }
3544 
3545       // Statepoint intrinsic is vararg but the wrapped function may be not.
3546       // Allow sret here and check the wrapped function in verifyStatepoint.
3547       if (!Call.getCalledFunction() ||
3548           Call.getCalledFunction()->getIntrinsicID() !=
3549               Intrinsic::experimental_gc_statepoint)
3550         Check(!ArgAttrs.hasAttribute(Attribute::StructRet),
3551               "Attribute 'sret' cannot be used for vararg call arguments!",
3552               Call);
3553 
3554       if (ArgAttrs.hasAttribute(Attribute::InAlloca))
3555         Check(Idx == Call.arg_size() - 1,
3556               "inalloca isn't on the last argument!", Call);
3557     }
3558   }
3559 
3560   // Verify that there's no metadata unless it's a direct call to an intrinsic.
3561   if (!IsIntrinsic) {
3562     for (Type *ParamTy : FTy->params()) {
3563       Check(!ParamTy->isMetadataTy(),
3564             "Function has metadata parameter but isn't an intrinsic", Call);
3565       Check(!ParamTy->isTokenTy(),
3566             "Function has token parameter but isn't an intrinsic", Call);
3567     }
3568   }
3569 
3570   // Verify that indirect calls don't return tokens.
3571   if (!Call.getCalledFunction()) {
3572     Check(!FTy->getReturnType()->isTokenTy(),
3573           "Return type cannot be token for indirect call!");
3574     Check(!FTy->getReturnType()->isX86_AMXTy(),
3575           "Return type cannot be x86_amx for indirect call!");
3576   }
3577 
3578   if (Function *F = Call.getCalledFunction())
3579     if (Intrinsic::ID ID = (Intrinsic::ID)F->getIntrinsicID())
3580       visitIntrinsicCall(ID, Call);
3581 
3582   // Verify that a callsite has at most one "deopt", at most one "funclet", at
3583   // most one "gc-transition", at most one "cfguardtarget", at most one
3584   // "preallocated" operand bundle, and at most one "ptrauth" operand bundle.
3585   bool FoundDeoptBundle = false, FoundFuncletBundle = false,
3586        FoundGCTransitionBundle = false, FoundCFGuardTargetBundle = false,
3587        FoundPreallocatedBundle = false, FoundGCLiveBundle = false,
3588        FoundPtrauthBundle = false, FoundKCFIBundle = false,
3589        FoundAttachedCallBundle = false;
3590   for (unsigned i = 0, e = Call.getNumOperandBundles(); i < e; ++i) {
3591     OperandBundleUse BU = Call.getOperandBundleAt(i);
3592     uint32_t Tag = BU.getTagID();
3593     if (Tag == LLVMContext::OB_deopt) {
3594       Check(!FoundDeoptBundle, "Multiple deopt operand bundles", Call);
3595       FoundDeoptBundle = true;
3596     } else if (Tag == LLVMContext::OB_gc_transition) {
3597       Check(!FoundGCTransitionBundle, "Multiple gc-transition operand bundles",
3598             Call);
3599       FoundGCTransitionBundle = true;
3600     } else if (Tag == LLVMContext::OB_funclet) {
3601       Check(!FoundFuncletBundle, "Multiple funclet operand bundles", Call);
3602       FoundFuncletBundle = true;
3603       Check(BU.Inputs.size() == 1,
3604             "Expected exactly one funclet bundle operand", Call);
3605       Check(isa<FuncletPadInst>(BU.Inputs.front()),
3606             "Funclet bundle operands should correspond to a FuncletPadInst",
3607             Call);
3608     } else if (Tag == LLVMContext::OB_cfguardtarget) {
3609       Check(!FoundCFGuardTargetBundle, "Multiple CFGuardTarget operand bundles",
3610             Call);
3611       FoundCFGuardTargetBundle = true;
3612       Check(BU.Inputs.size() == 1,
3613             "Expected exactly one cfguardtarget bundle operand", Call);
3614     } else if (Tag == LLVMContext::OB_ptrauth) {
3615       Check(!FoundPtrauthBundle, "Multiple ptrauth operand bundles", Call);
3616       FoundPtrauthBundle = true;
3617       Check(BU.Inputs.size() == 2,
3618             "Expected exactly two ptrauth bundle operands", Call);
3619       Check(isa<ConstantInt>(BU.Inputs[0]) &&
3620                 BU.Inputs[0]->getType()->isIntegerTy(32),
3621             "Ptrauth bundle key operand must be an i32 constant", Call);
3622       Check(BU.Inputs[1]->getType()->isIntegerTy(64),
3623             "Ptrauth bundle discriminator operand must be an i64", Call);
3624     } else if (Tag == LLVMContext::OB_kcfi) {
3625       Check(!FoundKCFIBundle, "Multiple kcfi operand bundles", Call);
3626       FoundKCFIBundle = true;
3627       Check(BU.Inputs.size() == 1, "Expected exactly one kcfi bundle operand",
3628             Call);
3629       Check(isa<ConstantInt>(BU.Inputs[0]) &&
3630                 BU.Inputs[0]->getType()->isIntegerTy(32),
3631             "Kcfi bundle operand must be an i32 constant", Call);
3632     } else if (Tag == LLVMContext::OB_preallocated) {
3633       Check(!FoundPreallocatedBundle, "Multiple preallocated operand bundles",
3634             Call);
3635       FoundPreallocatedBundle = true;
3636       Check(BU.Inputs.size() == 1,
3637             "Expected exactly one preallocated bundle operand", Call);
3638       auto Input = dyn_cast<IntrinsicInst>(BU.Inputs.front());
3639       Check(Input &&
3640                 Input->getIntrinsicID() == Intrinsic::call_preallocated_setup,
3641             "\"preallocated\" argument must be a token from "
3642             "llvm.call.preallocated.setup",
3643             Call);
3644     } else if (Tag == LLVMContext::OB_gc_live) {
3645       Check(!FoundGCLiveBundle, "Multiple gc-live operand bundles", Call);
3646       FoundGCLiveBundle = true;
3647     } else if (Tag == LLVMContext::OB_clang_arc_attachedcall) {
3648       Check(!FoundAttachedCallBundle,
3649             "Multiple \"clang.arc.attachedcall\" operand bundles", Call);
3650       FoundAttachedCallBundle = true;
3651       verifyAttachedCallBundle(Call, BU);
3652     }
3653   }
3654 
3655   // Verify that callee and callsite agree on whether to use pointer auth.
3656   Check(!(Call.getCalledFunction() && FoundPtrauthBundle),
3657         "Direct call cannot have a ptrauth bundle", Call);
3658 
3659   // Verify that each inlinable callsite of a debug-info-bearing function in a
3660   // debug-info-bearing function has a debug location attached to it. Failure to
3661   // do so causes assertion failures when the inliner sets up inline scope info
3662   // (Interposable functions are not inlinable, neither are functions without
3663   //  definitions.)
3664   if (Call.getFunction()->getSubprogram() && Call.getCalledFunction() &&
3665       !Call.getCalledFunction()->isInterposable() &&
3666       !Call.getCalledFunction()->isDeclaration() &&
3667       Call.getCalledFunction()->getSubprogram())
3668     CheckDI(Call.getDebugLoc(),
3669             "inlinable function call in a function with "
3670             "debug info must have a !dbg location",
3671             Call);
3672 
3673   if (Call.isInlineAsm())
3674     verifyInlineAsmCall(Call);
3675 
3676   if (isControlledConvergent(Call)) {
3677     Check(Call.isConvergent(),
3678           "Expected convergent attribute on a controlled convergent call.",
3679           Call);
3680     Check(ConvergenceKind != UncontrolledConvergence,
3681           "Cannot mix controlled and uncontrolled convergence in the same "
3682           "function.",
3683           Call);
3684     ConvergenceKind = ControlledConvergence;
3685   } else if (Call.isConvergent()) {
3686     Check(ConvergenceKind != ControlledConvergence,
3687           "Cannot mix controlled and uncontrolled convergence in the same "
3688           "function.",
3689           Call);
3690     ConvergenceKind = UncontrolledConvergence;
3691   }
3692 
3693   visitInstruction(Call);
3694 }
3695 
3696 void Verifier::verifyTailCCMustTailAttrs(const AttrBuilder &Attrs,
3697                                          StringRef Context) {
3698   Check(!Attrs.contains(Attribute::InAlloca),
3699         Twine("inalloca attribute not allowed in ") + Context);
3700   Check(!Attrs.contains(Attribute::InReg),
3701         Twine("inreg attribute not allowed in ") + Context);
3702   Check(!Attrs.contains(Attribute::SwiftError),
3703         Twine("swifterror attribute not allowed in ") + Context);
3704   Check(!Attrs.contains(Attribute::Preallocated),
3705         Twine("preallocated attribute not allowed in ") + Context);
3706   Check(!Attrs.contains(Attribute::ByRef),
3707         Twine("byref attribute not allowed in ") + Context);
3708 }
3709 
3710 /// Two types are "congruent" if they are identical, or if they are both pointer
3711 /// types with different pointee types and the same address space.
3712 static bool isTypeCongruent(Type *L, Type *R) {
3713   if (L == R)
3714     return true;
3715   PointerType *PL = dyn_cast<PointerType>(L);
3716   PointerType *PR = dyn_cast<PointerType>(R);
3717   if (!PL || !PR)
3718     return false;
3719   return PL->getAddressSpace() == PR->getAddressSpace();
3720 }
3721 
3722 static AttrBuilder getParameterABIAttributes(LLVMContext& C, unsigned I, AttributeList Attrs) {
3723   static const Attribute::AttrKind ABIAttrs[] = {
3724       Attribute::StructRet,  Attribute::ByVal,          Attribute::InAlloca,
3725       Attribute::InReg,      Attribute::StackAlignment, Attribute::SwiftSelf,
3726       Attribute::SwiftAsync, Attribute::SwiftError,     Attribute::Preallocated,
3727       Attribute::ByRef};
3728   AttrBuilder Copy(C);
3729   for (auto AK : ABIAttrs) {
3730     Attribute Attr = Attrs.getParamAttrs(I).getAttribute(AK);
3731     if (Attr.isValid())
3732       Copy.addAttribute(Attr);
3733   }
3734 
3735   // `align` is ABI-affecting only in combination with `byval` or `byref`.
3736   if (Attrs.hasParamAttr(I, Attribute::Alignment) &&
3737       (Attrs.hasParamAttr(I, Attribute::ByVal) ||
3738        Attrs.hasParamAttr(I, Attribute::ByRef)))
3739     Copy.addAlignmentAttr(Attrs.getParamAlignment(I));
3740   return Copy;
3741 }
3742 
3743 void Verifier::verifyMustTailCall(CallInst &CI) {
3744   Check(!CI.isInlineAsm(), "cannot use musttail call with inline asm", &CI);
3745 
3746   Function *F = CI.getParent()->getParent();
3747   FunctionType *CallerTy = F->getFunctionType();
3748   FunctionType *CalleeTy = CI.getFunctionType();
3749   Check(CallerTy->isVarArg() == CalleeTy->isVarArg(),
3750         "cannot guarantee tail call due to mismatched varargs", &CI);
3751   Check(isTypeCongruent(CallerTy->getReturnType(), CalleeTy->getReturnType()),
3752         "cannot guarantee tail call due to mismatched return types", &CI);
3753 
3754   // - The calling conventions of the caller and callee must match.
3755   Check(F->getCallingConv() == CI.getCallingConv(),
3756         "cannot guarantee tail call due to mismatched calling conv", &CI);
3757 
3758   // - The call must immediately precede a :ref:`ret <i_ret>` instruction,
3759   //   or a pointer bitcast followed by a ret instruction.
3760   // - The ret instruction must return the (possibly bitcasted) value
3761   //   produced by the call or void.
3762   Value *RetVal = &CI;
3763   Instruction *Next = CI.getNextNode();
3764 
3765   // Handle the optional bitcast.
3766   if (BitCastInst *BI = dyn_cast_or_null<BitCastInst>(Next)) {
3767     Check(BI->getOperand(0) == RetVal,
3768           "bitcast following musttail call must use the call", BI);
3769     RetVal = BI;
3770     Next = BI->getNextNode();
3771   }
3772 
3773   // Check the return.
3774   ReturnInst *Ret = dyn_cast_or_null<ReturnInst>(Next);
3775   Check(Ret, "musttail call must precede a ret with an optional bitcast", &CI);
3776   Check(!Ret->getReturnValue() || Ret->getReturnValue() == RetVal ||
3777             isa<UndefValue>(Ret->getReturnValue()),
3778         "musttail call result must be returned", Ret);
3779 
3780   AttributeList CallerAttrs = F->getAttributes();
3781   AttributeList CalleeAttrs = CI.getAttributes();
3782   if (CI.getCallingConv() == CallingConv::SwiftTail ||
3783       CI.getCallingConv() == CallingConv::Tail) {
3784     StringRef CCName =
3785         CI.getCallingConv() == CallingConv::Tail ? "tailcc" : "swifttailcc";
3786 
3787     // - Only sret, byval, swiftself, and swiftasync ABI-impacting attributes
3788     //   are allowed in swifttailcc call
3789     for (unsigned I = 0, E = CallerTy->getNumParams(); I != E; ++I) {
3790       AttrBuilder ABIAttrs = getParameterABIAttributes(F->getContext(), I, CallerAttrs);
3791       SmallString<32> Context{CCName, StringRef(" musttail caller")};
3792       verifyTailCCMustTailAttrs(ABIAttrs, Context);
3793     }
3794     for (unsigned I = 0, E = CalleeTy->getNumParams(); I != E; ++I) {
3795       AttrBuilder ABIAttrs = getParameterABIAttributes(F->getContext(), I, CalleeAttrs);
3796       SmallString<32> Context{CCName, StringRef(" musttail callee")};
3797       verifyTailCCMustTailAttrs(ABIAttrs, Context);
3798     }
3799     // - Varargs functions are not allowed
3800     Check(!CallerTy->isVarArg(), Twine("cannot guarantee ") + CCName +
3801                                      " tail call for varargs function");
3802     return;
3803   }
3804 
3805   // - The caller and callee prototypes must match.  Pointer types of
3806   //   parameters or return types may differ in pointee type, but not
3807   //   address space.
3808   if (!CI.getCalledFunction() || !CI.getCalledFunction()->isIntrinsic()) {
3809     Check(CallerTy->getNumParams() == CalleeTy->getNumParams(),
3810           "cannot guarantee tail call due to mismatched parameter counts", &CI);
3811     for (unsigned I = 0, E = CallerTy->getNumParams(); I != E; ++I) {
3812       Check(
3813           isTypeCongruent(CallerTy->getParamType(I), CalleeTy->getParamType(I)),
3814           "cannot guarantee tail call due to mismatched parameter types", &CI);
3815     }
3816   }
3817 
3818   // - All ABI-impacting function attributes, such as sret, byval, inreg,
3819   //   returned, preallocated, and inalloca, must match.
3820   for (unsigned I = 0, E = CallerTy->getNumParams(); I != E; ++I) {
3821     AttrBuilder CallerABIAttrs = getParameterABIAttributes(F->getContext(), I, CallerAttrs);
3822     AttrBuilder CalleeABIAttrs = getParameterABIAttributes(F->getContext(), I, CalleeAttrs);
3823     Check(CallerABIAttrs == CalleeABIAttrs,
3824           "cannot guarantee tail call due to mismatched ABI impacting "
3825           "function attributes",
3826           &CI, CI.getOperand(I));
3827   }
3828 }
3829 
3830 void Verifier::visitCallInst(CallInst &CI) {
3831   visitCallBase(CI);
3832 
3833   if (CI.isMustTailCall())
3834     verifyMustTailCall(CI);
3835 }
3836 
3837 void Verifier::visitInvokeInst(InvokeInst &II) {
3838   visitCallBase(II);
3839 
3840   // Verify that the first non-PHI instruction of the unwind destination is an
3841   // exception handling instruction.
3842   Check(
3843       II.getUnwindDest()->isEHPad(),
3844       "The unwind destination does not have an exception handling instruction!",
3845       &II);
3846 
3847   visitTerminator(II);
3848 }
3849 
3850 /// visitUnaryOperator - Check the argument to the unary operator.
3851 ///
3852 void Verifier::visitUnaryOperator(UnaryOperator &U) {
3853   Check(U.getType() == U.getOperand(0)->getType(),
3854         "Unary operators must have same type for"
3855         "operands and result!",
3856         &U);
3857 
3858   switch (U.getOpcode()) {
3859   // Check that floating-point arithmetic operators are only used with
3860   // floating-point operands.
3861   case Instruction::FNeg:
3862     Check(U.getType()->isFPOrFPVectorTy(),
3863           "FNeg operator only works with float types!", &U);
3864     break;
3865   default:
3866     llvm_unreachable("Unknown UnaryOperator opcode!");
3867   }
3868 
3869   visitInstruction(U);
3870 }
3871 
3872 /// visitBinaryOperator - Check that both arguments to the binary operator are
3873 /// of the same type!
3874 ///
3875 void Verifier::visitBinaryOperator(BinaryOperator &B) {
3876   Check(B.getOperand(0)->getType() == B.getOperand(1)->getType(),
3877         "Both operands to a binary operator are not of the same type!", &B);
3878 
3879   switch (B.getOpcode()) {
3880   // Check that integer arithmetic operators are only used with
3881   // integral operands.
3882   case Instruction::Add:
3883   case Instruction::Sub:
3884   case Instruction::Mul:
3885   case Instruction::SDiv:
3886   case Instruction::UDiv:
3887   case Instruction::SRem:
3888   case Instruction::URem:
3889     Check(B.getType()->isIntOrIntVectorTy(),
3890           "Integer arithmetic operators only work with integral types!", &B);
3891     Check(B.getType() == B.getOperand(0)->getType(),
3892           "Integer arithmetic operators must have same type "
3893           "for operands and result!",
3894           &B);
3895     break;
3896   // Check that floating-point arithmetic operators are only used with
3897   // floating-point operands.
3898   case Instruction::FAdd:
3899   case Instruction::FSub:
3900   case Instruction::FMul:
3901   case Instruction::FDiv:
3902   case Instruction::FRem:
3903     Check(B.getType()->isFPOrFPVectorTy(),
3904           "Floating-point arithmetic operators only work with "
3905           "floating-point types!",
3906           &B);
3907     Check(B.getType() == B.getOperand(0)->getType(),
3908           "Floating-point arithmetic operators must have same type "
3909           "for operands and result!",
3910           &B);
3911     break;
3912   // Check that logical operators are only used with integral operands.
3913   case Instruction::And:
3914   case Instruction::Or:
3915   case Instruction::Xor:
3916     Check(B.getType()->isIntOrIntVectorTy(),
3917           "Logical operators only work with integral types!", &B);
3918     Check(B.getType() == B.getOperand(0)->getType(),
3919           "Logical operators must have same type for operands and result!", &B);
3920     break;
3921   case Instruction::Shl:
3922   case Instruction::LShr:
3923   case Instruction::AShr:
3924     Check(B.getType()->isIntOrIntVectorTy(),
3925           "Shifts only work with integral types!", &B);
3926     Check(B.getType() == B.getOperand(0)->getType(),
3927           "Shift return type must be same as operands!", &B);
3928     break;
3929   default:
3930     llvm_unreachable("Unknown BinaryOperator opcode!");
3931   }
3932 
3933   visitInstruction(B);
3934 }
3935 
3936 void Verifier::visitICmpInst(ICmpInst &IC) {
3937   // Check that the operands are the same type
3938   Type *Op0Ty = IC.getOperand(0)->getType();
3939   Type *Op1Ty = IC.getOperand(1)->getType();
3940   Check(Op0Ty == Op1Ty,
3941         "Both operands to ICmp instruction are not of the same type!", &IC);
3942   // Check that the operands are the right type
3943   Check(Op0Ty->isIntOrIntVectorTy() || Op0Ty->isPtrOrPtrVectorTy(),
3944         "Invalid operand types for ICmp instruction", &IC);
3945   // Check that the predicate is valid.
3946   Check(IC.isIntPredicate(), "Invalid predicate in ICmp instruction!", &IC);
3947 
3948   visitInstruction(IC);
3949 }
3950 
3951 void Verifier::visitFCmpInst(FCmpInst &FC) {
3952   // Check that the operands are the same type
3953   Type *Op0Ty = FC.getOperand(0)->getType();
3954   Type *Op1Ty = FC.getOperand(1)->getType();
3955   Check(Op0Ty == Op1Ty,
3956         "Both operands to FCmp instruction are not of the same type!", &FC);
3957   // Check that the operands are the right type
3958   Check(Op0Ty->isFPOrFPVectorTy(), "Invalid operand types for FCmp instruction",
3959         &FC);
3960   // Check that the predicate is valid.
3961   Check(FC.isFPPredicate(), "Invalid predicate in FCmp instruction!", &FC);
3962 
3963   visitInstruction(FC);
3964 }
3965 
3966 void Verifier::visitExtractElementInst(ExtractElementInst &EI) {
3967   Check(ExtractElementInst::isValidOperands(EI.getOperand(0), EI.getOperand(1)),
3968         "Invalid extractelement operands!", &EI);
3969   visitInstruction(EI);
3970 }
3971 
3972 void Verifier::visitInsertElementInst(InsertElementInst &IE) {
3973   Check(InsertElementInst::isValidOperands(IE.getOperand(0), IE.getOperand(1),
3974                                            IE.getOperand(2)),
3975         "Invalid insertelement operands!", &IE);
3976   visitInstruction(IE);
3977 }
3978 
3979 void Verifier::visitShuffleVectorInst(ShuffleVectorInst &SV) {
3980   Check(ShuffleVectorInst::isValidOperands(SV.getOperand(0), SV.getOperand(1),
3981                                            SV.getShuffleMask()),
3982         "Invalid shufflevector operands!", &SV);
3983   visitInstruction(SV);
3984 }
3985 
3986 void Verifier::visitGetElementPtrInst(GetElementPtrInst &GEP) {
3987   Type *TargetTy = GEP.getPointerOperandType()->getScalarType();
3988 
3989   Check(isa<PointerType>(TargetTy),
3990         "GEP base pointer is not a vector or a vector of pointers", &GEP);
3991   Check(GEP.getSourceElementType()->isSized(), "GEP into unsized type!", &GEP);
3992 
3993   if (auto *STy = dyn_cast<StructType>(GEP.getSourceElementType())) {
3994     SmallPtrSet<Type *, 4> Visited;
3995     Check(!STy->containsScalableVectorType(&Visited),
3996           "getelementptr cannot target structure that contains scalable vector"
3997           "type",
3998           &GEP);
3999   }
4000 
4001   SmallVector<Value *, 16> Idxs(GEP.indices());
4002   Check(
4003       all_of(Idxs, [](Value *V) { return V->getType()->isIntOrIntVectorTy(); }),
4004       "GEP indexes must be integers", &GEP);
4005   Type *ElTy =
4006       GetElementPtrInst::getIndexedType(GEP.getSourceElementType(), Idxs);
4007   Check(ElTy, "Invalid indices for GEP pointer type!", &GEP);
4008 
4009   Check(GEP.getType()->isPtrOrPtrVectorTy() &&
4010             GEP.getResultElementType() == ElTy,
4011         "GEP is not of right type for indices!", &GEP, ElTy);
4012 
4013   if (auto *GEPVTy = dyn_cast<VectorType>(GEP.getType())) {
4014     // Additional checks for vector GEPs.
4015     ElementCount GEPWidth = GEPVTy->getElementCount();
4016     if (GEP.getPointerOperandType()->isVectorTy())
4017       Check(
4018           GEPWidth ==
4019               cast<VectorType>(GEP.getPointerOperandType())->getElementCount(),
4020           "Vector GEP result width doesn't match operand's", &GEP);
4021     for (Value *Idx : Idxs) {
4022       Type *IndexTy = Idx->getType();
4023       if (auto *IndexVTy = dyn_cast<VectorType>(IndexTy)) {
4024         ElementCount IndexWidth = IndexVTy->getElementCount();
4025         Check(IndexWidth == GEPWidth, "Invalid GEP index vector width", &GEP);
4026       }
4027       Check(IndexTy->isIntOrIntVectorTy(),
4028             "All GEP indices should be of integer type");
4029     }
4030   }
4031 
4032   if (auto *PTy = dyn_cast<PointerType>(GEP.getType())) {
4033     Check(GEP.getAddressSpace() == PTy->getAddressSpace(),
4034           "GEP address space doesn't match type", &GEP);
4035   }
4036 
4037   visitInstruction(GEP);
4038 }
4039 
4040 static bool isContiguous(const ConstantRange &A, const ConstantRange &B) {
4041   return A.getUpper() == B.getLower() || A.getLower() == B.getUpper();
4042 }
4043 
4044 /// Verify !range and !absolute_symbol metadata. These have the same
4045 /// restrictions, except !absolute_symbol allows the full set.
4046 void Verifier::verifyRangeMetadata(const Value &I, const MDNode *Range,
4047                                    Type *Ty, bool IsAbsoluteSymbol) {
4048   unsigned NumOperands = Range->getNumOperands();
4049   Check(NumOperands % 2 == 0, "Unfinished range!", Range);
4050   unsigned NumRanges = NumOperands / 2;
4051   Check(NumRanges >= 1, "It should have at least one range!", Range);
4052 
4053   ConstantRange LastRange(1, true); // Dummy initial value
4054   for (unsigned i = 0; i < NumRanges; ++i) {
4055     ConstantInt *Low =
4056         mdconst::dyn_extract<ConstantInt>(Range->getOperand(2 * i));
4057     Check(Low, "The lower limit must be an integer!", Low);
4058     ConstantInt *High =
4059         mdconst::dyn_extract<ConstantInt>(Range->getOperand(2 * i + 1));
4060     Check(High, "The upper limit must be an integer!", High);
4061     Check(High->getType() == Low->getType() &&
4062           High->getType() == Ty->getScalarType(),
4063           "Range types must match instruction type!", &I);
4064 
4065     APInt HighV = High->getValue();
4066     APInt LowV = Low->getValue();
4067 
4068     // ConstantRange asserts if the ranges are the same except for the min/max
4069     // value. Leave the cases it tolerates for the empty range error below.
4070     Check(LowV != HighV || LowV.isMaxValue() || LowV.isMinValue(),
4071           "The upper and lower limits cannot be the same value", &I);
4072 
4073     ConstantRange CurRange(LowV, HighV);
4074     Check(!CurRange.isEmptySet() && (IsAbsoluteSymbol || !CurRange.isFullSet()),
4075           "Range must not be empty!", Range);
4076     if (i != 0) {
4077       Check(CurRange.intersectWith(LastRange).isEmptySet(),
4078             "Intervals are overlapping", Range);
4079       Check(LowV.sgt(LastRange.getLower()), "Intervals are not in order",
4080             Range);
4081       Check(!isContiguous(CurRange, LastRange), "Intervals are contiguous",
4082             Range);
4083     }
4084     LastRange = ConstantRange(LowV, HighV);
4085   }
4086   if (NumRanges > 2) {
4087     APInt FirstLow =
4088         mdconst::dyn_extract<ConstantInt>(Range->getOperand(0))->getValue();
4089     APInt FirstHigh =
4090         mdconst::dyn_extract<ConstantInt>(Range->getOperand(1))->getValue();
4091     ConstantRange FirstRange(FirstLow, FirstHigh);
4092     Check(FirstRange.intersectWith(LastRange).isEmptySet(),
4093           "Intervals are overlapping", Range);
4094     Check(!isContiguous(FirstRange, LastRange), "Intervals are contiguous",
4095           Range);
4096   }
4097 }
4098 
4099 void Verifier::visitRangeMetadata(Instruction &I, MDNode *Range, Type *Ty) {
4100   assert(Range && Range == I.getMetadata(LLVMContext::MD_range) &&
4101          "precondition violation");
4102   verifyRangeMetadata(I, Range, Ty, false);
4103 }
4104 
4105 void Verifier::checkAtomicMemAccessSize(Type *Ty, const Instruction *I) {
4106   unsigned Size = DL.getTypeSizeInBits(Ty);
4107   Check(Size >= 8, "atomic memory access' size must be byte-sized", Ty, I);
4108   Check(!(Size & (Size - 1)),
4109         "atomic memory access' operand must have a power-of-two size", Ty, I);
4110 }
4111 
4112 void Verifier::visitLoadInst(LoadInst &LI) {
4113   PointerType *PTy = dyn_cast<PointerType>(LI.getOperand(0)->getType());
4114   Check(PTy, "Load operand must be a pointer.", &LI);
4115   Type *ElTy = LI.getType();
4116   if (MaybeAlign A = LI.getAlign()) {
4117     Check(A->value() <= Value::MaximumAlignment,
4118           "huge alignment values are unsupported", &LI);
4119   }
4120   Check(ElTy->isSized(), "loading unsized types is not allowed", &LI);
4121   if (LI.isAtomic()) {
4122     Check(LI.getOrdering() != AtomicOrdering::Release &&
4123               LI.getOrdering() != AtomicOrdering::AcquireRelease,
4124           "Load cannot have Release ordering", &LI);
4125     Check(ElTy->isIntOrPtrTy() || ElTy->isFloatingPointTy(),
4126           "atomic load operand must have integer, pointer, or floating point "
4127           "type!",
4128           ElTy, &LI);
4129     checkAtomicMemAccessSize(ElTy, &LI);
4130   } else {
4131     Check(LI.getSyncScopeID() == SyncScope::System,
4132           "Non-atomic load cannot have SynchronizationScope specified", &LI);
4133   }
4134 
4135   visitInstruction(LI);
4136 }
4137 
4138 void Verifier::visitStoreInst(StoreInst &SI) {
4139   PointerType *PTy = dyn_cast<PointerType>(SI.getOperand(1)->getType());
4140   Check(PTy, "Store operand must be a pointer.", &SI);
4141   Type *ElTy = SI.getOperand(0)->getType();
4142   if (MaybeAlign A = SI.getAlign()) {
4143     Check(A->value() <= Value::MaximumAlignment,
4144           "huge alignment values are unsupported", &SI);
4145   }
4146   Check(ElTy->isSized(), "storing unsized types is not allowed", &SI);
4147   if (SI.isAtomic()) {
4148     Check(SI.getOrdering() != AtomicOrdering::Acquire &&
4149               SI.getOrdering() != AtomicOrdering::AcquireRelease,
4150           "Store cannot have Acquire ordering", &SI);
4151     Check(ElTy->isIntOrPtrTy() || ElTy->isFloatingPointTy(),
4152           "atomic store operand must have integer, pointer, or floating point "
4153           "type!",
4154           ElTy, &SI);
4155     checkAtomicMemAccessSize(ElTy, &SI);
4156   } else {
4157     Check(SI.getSyncScopeID() == SyncScope::System,
4158           "Non-atomic store cannot have SynchronizationScope specified", &SI);
4159   }
4160   visitInstruction(SI);
4161 }
4162 
4163 /// Check that SwiftErrorVal is used as a swifterror argument in CS.
4164 void Verifier::verifySwiftErrorCall(CallBase &Call,
4165                                     const Value *SwiftErrorVal) {
4166   for (const auto &I : llvm::enumerate(Call.args())) {
4167     if (I.value() == SwiftErrorVal) {
4168       Check(Call.paramHasAttr(I.index(), Attribute::SwiftError),
4169             "swifterror value when used in a callsite should be marked "
4170             "with swifterror attribute",
4171             SwiftErrorVal, Call);
4172     }
4173   }
4174 }
4175 
4176 void Verifier::verifySwiftErrorValue(const Value *SwiftErrorVal) {
4177   // Check that swifterror value is only used by loads, stores, or as
4178   // a swifterror argument.
4179   for (const User *U : SwiftErrorVal->users()) {
4180     Check(isa<LoadInst>(U) || isa<StoreInst>(U) || isa<CallInst>(U) ||
4181               isa<InvokeInst>(U),
4182           "swifterror value can only be loaded and stored from, or "
4183           "as a swifterror argument!",
4184           SwiftErrorVal, U);
4185     // If it is used by a store, check it is the second operand.
4186     if (auto StoreI = dyn_cast<StoreInst>(U))
4187       Check(StoreI->getOperand(1) == SwiftErrorVal,
4188             "swifterror value should be the second operand when used "
4189             "by stores",
4190             SwiftErrorVal, U);
4191     if (auto *Call = dyn_cast<CallBase>(U))
4192       verifySwiftErrorCall(*const_cast<CallBase *>(Call), SwiftErrorVal);
4193   }
4194 }
4195 
4196 void Verifier::visitAllocaInst(AllocaInst &AI) {
4197   SmallPtrSet<Type*, 4> Visited;
4198   Check(AI.getAllocatedType()->isSized(&Visited),
4199         "Cannot allocate unsized type", &AI);
4200   Check(AI.getArraySize()->getType()->isIntegerTy(),
4201         "Alloca array size must have integer type", &AI);
4202   if (MaybeAlign A = AI.getAlign()) {
4203     Check(A->value() <= Value::MaximumAlignment,
4204           "huge alignment values are unsupported", &AI);
4205   }
4206 
4207   if (AI.isSwiftError()) {
4208     Check(AI.getAllocatedType()->isPointerTy(),
4209           "swifterror alloca must have pointer type", &AI);
4210     Check(!AI.isArrayAllocation(),
4211           "swifterror alloca must not be array allocation", &AI);
4212     verifySwiftErrorValue(&AI);
4213   }
4214 
4215   visitInstruction(AI);
4216 }
4217 
4218 void Verifier::visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI) {
4219   Type *ElTy = CXI.getOperand(1)->getType();
4220   Check(ElTy->isIntOrPtrTy(),
4221         "cmpxchg operand must have integer or pointer type", ElTy, &CXI);
4222   checkAtomicMemAccessSize(ElTy, &CXI);
4223   visitInstruction(CXI);
4224 }
4225 
4226 void Verifier::visitAtomicRMWInst(AtomicRMWInst &RMWI) {
4227   Check(RMWI.getOrdering() != AtomicOrdering::Unordered,
4228         "atomicrmw instructions cannot be unordered.", &RMWI);
4229   auto Op = RMWI.getOperation();
4230   Type *ElTy = RMWI.getOperand(1)->getType();
4231   if (Op == AtomicRMWInst::Xchg) {
4232     Check(ElTy->isIntegerTy() || ElTy->isFloatingPointTy() ||
4233               ElTy->isPointerTy(),
4234           "atomicrmw " + AtomicRMWInst::getOperationName(Op) +
4235               " operand must have integer or floating point type!",
4236           &RMWI, ElTy);
4237   } else if (AtomicRMWInst::isFPOperation(Op)) {
4238     Check(ElTy->isFloatingPointTy(),
4239           "atomicrmw " + AtomicRMWInst::getOperationName(Op) +
4240               " operand must have floating point type!",
4241           &RMWI, ElTy);
4242   } else {
4243     Check(ElTy->isIntegerTy(),
4244           "atomicrmw " + AtomicRMWInst::getOperationName(Op) +
4245               " operand must have integer type!",
4246           &RMWI, ElTy);
4247   }
4248   checkAtomicMemAccessSize(ElTy, &RMWI);
4249   Check(AtomicRMWInst::FIRST_BINOP <= Op && Op <= AtomicRMWInst::LAST_BINOP,
4250         "Invalid binary operation!", &RMWI);
4251   visitInstruction(RMWI);
4252 }
4253 
4254 void Verifier::visitFenceInst(FenceInst &FI) {
4255   const AtomicOrdering Ordering = FI.getOrdering();
4256   Check(Ordering == AtomicOrdering::Acquire ||
4257             Ordering == AtomicOrdering::Release ||
4258             Ordering == AtomicOrdering::AcquireRelease ||
4259             Ordering == AtomicOrdering::SequentiallyConsistent,
4260         "fence instructions may only have acquire, release, acq_rel, or "
4261         "seq_cst ordering.",
4262         &FI);
4263   visitInstruction(FI);
4264 }
4265 
4266 void Verifier::visitExtractValueInst(ExtractValueInst &EVI) {
4267   Check(ExtractValueInst::getIndexedType(EVI.getAggregateOperand()->getType(),
4268                                          EVI.getIndices()) == EVI.getType(),
4269         "Invalid ExtractValueInst operands!", &EVI);
4270 
4271   visitInstruction(EVI);
4272 }
4273 
4274 void Verifier::visitInsertValueInst(InsertValueInst &IVI) {
4275   Check(ExtractValueInst::getIndexedType(IVI.getAggregateOperand()->getType(),
4276                                          IVI.getIndices()) ==
4277             IVI.getOperand(1)->getType(),
4278         "Invalid InsertValueInst operands!", &IVI);
4279 
4280   visitInstruction(IVI);
4281 }
4282 
4283 static Value *getParentPad(Value *EHPad) {
4284   if (auto *FPI = dyn_cast<FuncletPadInst>(EHPad))
4285     return FPI->getParentPad();
4286 
4287   return cast<CatchSwitchInst>(EHPad)->getParentPad();
4288 }
4289 
4290 void Verifier::visitEHPadPredecessors(Instruction &I) {
4291   assert(I.isEHPad());
4292 
4293   BasicBlock *BB = I.getParent();
4294   Function *F = BB->getParent();
4295 
4296   Check(BB != &F->getEntryBlock(), "EH pad cannot be in entry block.", &I);
4297 
4298   if (auto *LPI = dyn_cast<LandingPadInst>(&I)) {
4299     // The landingpad instruction defines its parent as a landing pad block. The
4300     // landing pad block may be branched to only by the unwind edge of an
4301     // invoke.
4302     for (BasicBlock *PredBB : predecessors(BB)) {
4303       const auto *II = dyn_cast<InvokeInst>(PredBB->getTerminator());
4304       Check(II && II->getUnwindDest() == BB && II->getNormalDest() != BB,
4305             "Block containing LandingPadInst must be jumped to "
4306             "only by the unwind edge of an invoke.",
4307             LPI);
4308     }
4309     return;
4310   }
4311   if (auto *CPI = dyn_cast<CatchPadInst>(&I)) {
4312     if (!pred_empty(BB))
4313       Check(BB->getUniquePredecessor() == CPI->getCatchSwitch()->getParent(),
4314             "Block containg CatchPadInst must be jumped to "
4315             "only by its catchswitch.",
4316             CPI);
4317     Check(BB != CPI->getCatchSwitch()->getUnwindDest(),
4318           "Catchswitch cannot unwind to one of its catchpads",
4319           CPI->getCatchSwitch(), CPI);
4320     return;
4321   }
4322 
4323   // Verify that each pred has a legal terminator with a legal to/from EH
4324   // pad relationship.
4325   Instruction *ToPad = &I;
4326   Value *ToPadParent = getParentPad(ToPad);
4327   for (BasicBlock *PredBB : predecessors(BB)) {
4328     Instruction *TI = PredBB->getTerminator();
4329     Value *FromPad;
4330     if (auto *II = dyn_cast<InvokeInst>(TI)) {
4331       Check(II->getUnwindDest() == BB && II->getNormalDest() != BB,
4332             "EH pad must be jumped to via an unwind edge", ToPad, II);
4333       if (auto Bundle = II->getOperandBundle(LLVMContext::OB_funclet))
4334         FromPad = Bundle->Inputs[0];
4335       else
4336         FromPad = ConstantTokenNone::get(II->getContext());
4337     } else if (auto *CRI = dyn_cast<CleanupReturnInst>(TI)) {
4338       FromPad = CRI->getOperand(0);
4339       Check(FromPad != ToPadParent, "A cleanupret must exit its cleanup", CRI);
4340     } else if (auto *CSI = dyn_cast<CatchSwitchInst>(TI)) {
4341       FromPad = CSI;
4342     } else {
4343       Check(false, "EH pad must be jumped to via an unwind edge", ToPad, TI);
4344     }
4345 
4346     // The edge may exit from zero or more nested pads.
4347     SmallSet<Value *, 8> Seen;
4348     for (;; FromPad = getParentPad(FromPad)) {
4349       Check(FromPad != ToPad,
4350             "EH pad cannot handle exceptions raised within it", FromPad, TI);
4351       if (FromPad == ToPadParent) {
4352         // This is a legal unwind edge.
4353         break;
4354       }
4355       Check(!isa<ConstantTokenNone>(FromPad),
4356             "A single unwind edge may only enter one EH pad", TI);
4357       Check(Seen.insert(FromPad).second, "EH pad jumps through a cycle of pads",
4358             FromPad);
4359 
4360       // This will be diagnosed on the corresponding instruction already. We
4361       // need the extra check here to make sure getParentPad() works.
4362       Check(isa<FuncletPadInst>(FromPad) || isa<CatchSwitchInst>(FromPad),
4363             "Parent pad must be catchpad/cleanuppad/catchswitch", TI);
4364     }
4365   }
4366 }
4367 
4368 void Verifier::visitLandingPadInst(LandingPadInst &LPI) {
4369   // The landingpad instruction is ill-formed if it doesn't have any clauses and
4370   // isn't a cleanup.
4371   Check(LPI.getNumClauses() > 0 || LPI.isCleanup(),
4372         "LandingPadInst needs at least one clause or to be a cleanup.", &LPI);
4373 
4374   visitEHPadPredecessors(LPI);
4375 
4376   if (!LandingPadResultTy)
4377     LandingPadResultTy = LPI.getType();
4378   else
4379     Check(LandingPadResultTy == LPI.getType(),
4380           "The landingpad instruction should have a consistent result type "
4381           "inside a function.",
4382           &LPI);
4383 
4384   Function *F = LPI.getParent()->getParent();
4385   Check(F->hasPersonalityFn(),
4386         "LandingPadInst needs to be in a function with a personality.", &LPI);
4387 
4388   // The landingpad instruction must be the first non-PHI instruction in the
4389   // block.
4390   Check(LPI.getParent()->getLandingPadInst() == &LPI,
4391         "LandingPadInst not the first non-PHI instruction in the block.", &LPI);
4392 
4393   for (unsigned i = 0, e = LPI.getNumClauses(); i < e; ++i) {
4394     Constant *Clause = LPI.getClause(i);
4395     if (LPI.isCatch(i)) {
4396       Check(isa<PointerType>(Clause->getType()),
4397             "Catch operand does not have pointer type!", &LPI);
4398     } else {
4399       Check(LPI.isFilter(i), "Clause is neither catch nor filter!", &LPI);
4400       Check(isa<ConstantArray>(Clause) || isa<ConstantAggregateZero>(Clause),
4401             "Filter operand is not an array of constants!", &LPI);
4402     }
4403   }
4404 
4405   visitInstruction(LPI);
4406 }
4407 
4408 void Verifier::visitResumeInst(ResumeInst &RI) {
4409   Check(RI.getFunction()->hasPersonalityFn(),
4410         "ResumeInst needs to be in a function with a personality.", &RI);
4411 
4412   if (!LandingPadResultTy)
4413     LandingPadResultTy = RI.getValue()->getType();
4414   else
4415     Check(LandingPadResultTy == RI.getValue()->getType(),
4416           "The resume instruction should have a consistent result type "
4417           "inside a function.",
4418           &RI);
4419 
4420   visitTerminator(RI);
4421 }
4422 
4423 void Verifier::visitCatchPadInst(CatchPadInst &CPI) {
4424   BasicBlock *BB = CPI.getParent();
4425 
4426   Function *F = BB->getParent();
4427   Check(F->hasPersonalityFn(),
4428         "CatchPadInst needs to be in a function with a personality.", &CPI);
4429 
4430   Check(isa<CatchSwitchInst>(CPI.getParentPad()),
4431         "CatchPadInst needs to be directly nested in a CatchSwitchInst.",
4432         CPI.getParentPad());
4433 
4434   // The catchpad instruction must be the first non-PHI instruction in the
4435   // block.
4436   Check(BB->getFirstNonPHI() == &CPI,
4437         "CatchPadInst not the first non-PHI instruction in the block.", &CPI);
4438 
4439   visitEHPadPredecessors(CPI);
4440   visitFuncletPadInst(CPI);
4441 }
4442 
4443 void Verifier::visitCatchReturnInst(CatchReturnInst &CatchReturn) {
4444   Check(isa<CatchPadInst>(CatchReturn.getOperand(0)),
4445         "CatchReturnInst needs to be provided a CatchPad", &CatchReturn,
4446         CatchReturn.getOperand(0));
4447 
4448   visitTerminator(CatchReturn);
4449 }
4450 
4451 void Verifier::visitCleanupPadInst(CleanupPadInst &CPI) {
4452   BasicBlock *BB = CPI.getParent();
4453 
4454   Function *F = BB->getParent();
4455   Check(F->hasPersonalityFn(),
4456         "CleanupPadInst needs to be in a function with a personality.", &CPI);
4457 
4458   // The cleanuppad instruction must be the first non-PHI instruction in the
4459   // block.
4460   Check(BB->getFirstNonPHI() == &CPI,
4461         "CleanupPadInst not the first non-PHI instruction in the block.", &CPI);
4462 
4463   auto *ParentPad = CPI.getParentPad();
4464   Check(isa<ConstantTokenNone>(ParentPad) || isa<FuncletPadInst>(ParentPad),
4465         "CleanupPadInst has an invalid parent.", &CPI);
4466 
4467   visitEHPadPredecessors(CPI);
4468   visitFuncletPadInst(CPI);
4469 }
4470 
4471 void Verifier::visitFuncletPadInst(FuncletPadInst &FPI) {
4472   User *FirstUser = nullptr;
4473   Value *FirstUnwindPad = nullptr;
4474   SmallVector<FuncletPadInst *, 8> Worklist({&FPI});
4475   SmallSet<FuncletPadInst *, 8> Seen;
4476 
4477   while (!Worklist.empty()) {
4478     FuncletPadInst *CurrentPad = Worklist.pop_back_val();
4479     Check(Seen.insert(CurrentPad).second,
4480           "FuncletPadInst must not be nested within itself", CurrentPad);
4481     Value *UnresolvedAncestorPad = nullptr;
4482     for (User *U : CurrentPad->users()) {
4483       BasicBlock *UnwindDest;
4484       if (auto *CRI = dyn_cast<CleanupReturnInst>(U)) {
4485         UnwindDest = CRI->getUnwindDest();
4486       } else if (auto *CSI = dyn_cast<CatchSwitchInst>(U)) {
4487         // We allow catchswitch unwind to caller to nest
4488         // within an outer pad that unwinds somewhere else,
4489         // because catchswitch doesn't have a nounwind variant.
4490         // See e.g. SimplifyCFGOpt::SimplifyUnreachable.
4491         if (CSI->unwindsToCaller())
4492           continue;
4493         UnwindDest = CSI->getUnwindDest();
4494       } else if (auto *II = dyn_cast<InvokeInst>(U)) {
4495         UnwindDest = II->getUnwindDest();
4496       } else if (isa<CallInst>(U)) {
4497         // Calls which don't unwind may be found inside funclet
4498         // pads that unwind somewhere else.  We don't *require*
4499         // such calls to be annotated nounwind.
4500         continue;
4501       } else if (auto *CPI = dyn_cast<CleanupPadInst>(U)) {
4502         // The unwind dest for a cleanup can only be found by
4503         // recursive search.  Add it to the worklist, and we'll
4504         // search for its first use that determines where it unwinds.
4505         Worklist.push_back(CPI);
4506         continue;
4507       } else {
4508         Check(isa<CatchReturnInst>(U), "Bogus funclet pad use", U);
4509         continue;
4510       }
4511 
4512       Value *UnwindPad;
4513       bool ExitsFPI;
4514       if (UnwindDest) {
4515         UnwindPad = UnwindDest->getFirstNonPHI();
4516         if (!cast<Instruction>(UnwindPad)->isEHPad())
4517           continue;
4518         Value *UnwindParent = getParentPad(UnwindPad);
4519         // Ignore unwind edges that don't exit CurrentPad.
4520         if (UnwindParent == CurrentPad)
4521           continue;
4522         // Determine whether the original funclet pad is exited,
4523         // and if we are scanning nested pads determine how many
4524         // of them are exited so we can stop searching their
4525         // children.
4526         Value *ExitedPad = CurrentPad;
4527         ExitsFPI = false;
4528         do {
4529           if (ExitedPad == &FPI) {
4530             ExitsFPI = true;
4531             // Now we can resolve any ancestors of CurrentPad up to
4532             // FPI, but not including FPI since we need to make sure
4533             // to check all direct users of FPI for consistency.
4534             UnresolvedAncestorPad = &FPI;
4535             break;
4536           }
4537           Value *ExitedParent = getParentPad(ExitedPad);
4538           if (ExitedParent == UnwindParent) {
4539             // ExitedPad is the ancestor-most pad which this unwind
4540             // edge exits, so we can resolve up to it, meaning that
4541             // ExitedParent is the first ancestor still unresolved.
4542             UnresolvedAncestorPad = ExitedParent;
4543             break;
4544           }
4545           ExitedPad = ExitedParent;
4546         } while (!isa<ConstantTokenNone>(ExitedPad));
4547       } else {
4548         // Unwinding to caller exits all pads.
4549         UnwindPad = ConstantTokenNone::get(FPI.getContext());
4550         ExitsFPI = true;
4551         UnresolvedAncestorPad = &FPI;
4552       }
4553 
4554       if (ExitsFPI) {
4555         // This unwind edge exits FPI.  Make sure it agrees with other
4556         // such edges.
4557         if (FirstUser) {
4558           Check(UnwindPad == FirstUnwindPad,
4559                 "Unwind edges out of a funclet "
4560                 "pad must have the same unwind "
4561                 "dest",
4562                 &FPI, U, FirstUser);
4563         } else {
4564           FirstUser = U;
4565           FirstUnwindPad = UnwindPad;
4566           // Record cleanup sibling unwinds for verifySiblingFuncletUnwinds
4567           if (isa<CleanupPadInst>(&FPI) && !isa<ConstantTokenNone>(UnwindPad) &&
4568               getParentPad(UnwindPad) == getParentPad(&FPI))
4569             SiblingFuncletInfo[&FPI] = cast<Instruction>(U);
4570         }
4571       }
4572       // Make sure we visit all uses of FPI, but for nested pads stop as
4573       // soon as we know where they unwind to.
4574       if (CurrentPad != &FPI)
4575         break;
4576     }
4577     if (UnresolvedAncestorPad) {
4578       if (CurrentPad == UnresolvedAncestorPad) {
4579         // When CurrentPad is FPI itself, we don't mark it as resolved even if
4580         // we've found an unwind edge that exits it, because we need to verify
4581         // all direct uses of FPI.
4582         assert(CurrentPad == &FPI);
4583         continue;
4584       }
4585       // Pop off the worklist any nested pads that we've found an unwind
4586       // destination for.  The pads on the worklist are the uncles,
4587       // great-uncles, etc. of CurrentPad.  We've found an unwind destination
4588       // for all ancestors of CurrentPad up to but not including
4589       // UnresolvedAncestorPad.
4590       Value *ResolvedPad = CurrentPad;
4591       while (!Worklist.empty()) {
4592         Value *UnclePad = Worklist.back();
4593         Value *AncestorPad = getParentPad(UnclePad);
4594         // Walk ResolvedPad up the ancestor list until we either find the
4595         // uncle's parent or the last resolved ancestor.
4596         while (ResolvedPad != AncestorPad) {
4597           Value *ResolvedParent = getParentPad(ResolvedPad);
4598           if (ResolvedParent == UnresolvedAncestorPad) {
4599             break;
4600           }
4601           ResolvedPad = ResolvedParent;
4602         }
4603         // If the resolved ancestor search didn't find the uncle's parent,
4604         // then the uncle is not yet resolved.
4605         if (ResolvedPad != AncestorPad)
4606           break;
4607         // This uncle is resolved, so pop it from the worklist.
4608         Worklist.pop_back();
4609       }
4610     }
4611   }
4612 
4613   if (FirstUnwindPad) {
4614     if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(FPI.getParentPad())) {
4615       BasicBlock *SwitchUnwindDest = CatchSwitch->getUnwindDest();
4616       Value *SwitchUnwindPad;
4617       if (SwitchUnwindDest)
4618         SwitchUnwindPad = SwitchUnwindDest->getFirstNonPHI();
4619       else
4620         SwitchUnwindPad = ConstantTokenNone::get(FPI.getContext());
4621       Check(SwitchUnwindPad == FirstUnwindPad,
4622             "Unwind edges out of a catch must have the same unwind dest as "
4623             "the parent catchswitch",
4624             &FPI, FirstUser, CatchSwitch);
4625     }
4626   }
4627 
4628   visitInstruction(FPI);
4629 }
4630 
4631 void Verifier::visitCatchSwitchInst(CatchSwitchInst &CatchSwitch) {
4632   BasicBlock *BB = CatchSwitch.getParent();
4633 
4634   Function *F = BB->getParent();
4635   Check(F->hasPersonalityFn(),
4636         "CatchSwitchInst needs to be in a function with a personality.",
4637         &CatchSwitch);
4638 
4639   // The catchswitch instruction must be the first non-PHI instruction in the
4640   // block.
4641   Check(BB->getFirstNonPHI() == &CatchSwitch,
4642         "CatchSwitchInst not the first non-PHI instruction in the block.",
4643         &CatchSwitch);
4644 
4645   auto *ParentPad = CatchSwitch.getParentPad();
4646   Check(isa<ConstantTokenNone>(ParentPad) || isa<FuncletPadInst>(ParentPad),
4647         "CatchSwitchInst has an invalid parent.", ParentPad);
4648 
4649   if (BasicBlock *UnwindDest = CatchSwitch.getUnwindDest()) {
4650     Instruction *I = UnwindDest->getFirstNonPHI();
4651     Check(I->isEHPad() && !isa<LandingPadInst>(I),
4652           "CatchSwitchInst must unwind to an EH block which is not a "
4653           "landingpad.",
4654           &CatchSwitch);
4655 
4656     // Record catchswitch sibling unwinds for verifySiblingFuncletUnwinds
4657     if (getParentPad(I) == ParentPad)
4658       SiblingFuncletInfo[&CatchSwitch] = &CatchSwitch;
4659   }
4660 
4661   Check(CatchSwitch.getNumHandlers() != 0,
4662         "CatchSwitchInst cannot have empty handler list", &CatchSwitch);
4663 
4664   for (BasicBlock *Handler : CatchSwitch.handlers()) {
4665     Check(isa<CatchPadInst>(Handler->getFirstNonPHI()),
4666           "CatchSwitchInst handlers must be catchpads", &CatchSwitch, Handler);
4667   }
4668 
4669   visitEHPadPredecessors(CatchSwitch);
4670   visitTerminator(CatchSwitch);
4671 }
4672 
4673 void Verifier::visitCleanupReturnInst(CleanupReturnInst &CRI) {
4674   Check(isa<CleanupPadInst>(CRI.getOperand(0)),
4675         "CleanupReturnInst needs to be provided a CleanupPad", &CRI,
4676         CRI.getOperand(0));
4677 
4678   if (BasicBlock *UnwindDest = CRI.getUnwindDest()) {
4679     Instruction *I = UnwindDest->getFirstNonPHI();
4680     Check(I->isEHPad() && !isa<LandingPadInst>(I),
4681           "CleanupReturnInst must unwind to an EH block which is not a "
4682           "landingpad.",
4683           &CRI);
4684   }
4685 
4686   visitTerminator(CRI);
4687 }
4688 
4689 void Verifier::verifyDominatesUse(Instruction &I, unsigned i) {
4690   Instruction *Op = cast<Instruction>(I.getOperand(i));
4691   // If the we have an invalid invoke, don't try to compute the dominance.
4692   // We already reject it in the invoke specific checks and the dominance
4693   // computation doesn't handle multiple edges.
4694   if (InvokeInst *II = dyn_cast<InvokeInst>(Op)) {
4695     if (II->getNormalDest() == II->getUnwindDest())
4696       return;
4697   }
4698 
4699   // Quick check whether the def has already been encountered in the same block.
4700   // PHI nodes are not checked to prevent accepting preceding PHIs, because PHI
4701   // uses are defined to happen on the incoming edge, not at the instruction.
4702   //
4703   // FIXME: If this operand is a MetadataAsValue (wrapping a LocalAsMetadata)
4704   // wrapping an SSA value, assert that we've already encountered it.  See
4705   // related FIXME in Mapper::mapLocalAsMetadata in ValueMapper.cpp.
4706   if (!isa<PHINode>(I) && InstsInThisBlock.count(Op))
4707     return;
4708 
4709   const Use &U = I.getOperandUse(i);
4710   Check(DT.dominates(Op, U), "Instruction does not dominate all uses!", Op, &I);
4711 }
4712 
4713 void Verifier::visitDereferenceableMetadata(Instruction& I, MDNode* MD) {
4714   Check(I.getType()->isPointerTy(),
4715         "dereferenceable, dereferenceable_or_null "
4716         "apply only to pointer types",
4717         &I);
4718   Check((isa<LoadInst>(I) || isa<IntToPtrInst>(I)),
4719         "dereferenceable, dereferenceable_or_null apply only to load"
4720         " and inttoptr instructions, use attributes for calls or invokes",
4721         &I);
4722   Check(MD->getNumOperands() == 1,
4723         "dereferenceable, dereferenceable_or_null "
4724         "take one operand!",
4725         &I);
4726   ConstantInt *CI = mdconst::dyn_extract<ConstantInt>(MD->getOperand(0));
4727   Check(CI && CI->getType()->isIntegerTy(64),
4728         "dereferenceable, "
4729         "dereferenceable_or_null metadata value must be an i64!",
4730         &I);
4731 }
4732 
4733 void Verifier::visitProfMetadata(Instruction &I, MDNode *MD) {
4734   Check(MD->getNumOperands() >= 2,
4735         "!prof annotations should have no less than 2 operands", MD);
4736 
4737   // Check first operand.
4738   Check(MD->getOperand(0) != nullptr, "first operand should not be null", MD);
4739   Check(isa<MDString>(MD->getOperand(0)),
4740         "expected string with name of the !prof annotation", MD);
4741   MDString *MDS = cast<MDString>(MD->getOperand(0));
4742   StringRef ProfName = MDS->getString();
4743 
4744   // Check consistency of !prof branch_weights metadata.
4745   if (ProfName.equals("branch_weights")) {
4746     if (isa<InvokeInst>(&I)) {
4747       Check(MD->getNumOperands() == 2 || MD->getNumOperands() == 3,
4748             "Wrong number of InvokeInst branch_weights operands", MD);
4749     } else {
4750       unsigned ExpectedNumOperands = 0;
4751       if (BranchInst *BI = dyn_cast<BranchInst>(&I))
4752         ExpectedNumOperands = BI->getNumSuccessors();
4753       else if (SwitchInst *SI = dyn_cast<SwitchInst>(&I))
4754         ExpectedNumOperands = SI->getNumSuccessors();
4755       else if (isa<CallInst>(&I))
4756         ExpectedNumOperands = 1;
4757       else if (IndirectBrInst *IBI = dyn_cast<IndirectBrInst>(&I))
4758         ExpectedNumOperands = IBI->getNumDestinations();
4759       else if (isa<SelectInst>(&I))
4760         ExpectedNumOperands = 2;
4761       else if (CallBrInst *CI = dyn_cast<CallBrInst>(&I))
4762         ExpectedNumOperands = CI->getNumSuccessors();
4763       else
4764         CheckFailed("!prof branch_weights are not allowed for this instruction",
4765                     MD);
4766 
4767       Check(MD->getNumOperands() == 1 + ExpectedNumOperands,
4768             "Wrong number of operands", MD);
4769     }
4770     for (unsigned i = 1; i < MD->getNumOperands(); ++i) {
4771       auto &MDO = MD->getOperand(i);
4772       Check(MDO, "second operand should not be null", MD);
4773       Check(mdconst::dyn_extract<ConstantInt>(MDO),
4774             "!prof brunch_weights operand is not a const int");
4775     }
4776   }
4777 }
4778 
4779 void Verifier::visitDIAssignIDMetadata(Instruction &I, MDNode *MD) {
4780   assert(I.hasMetadata(LLVMContext::MD_DIAssignID));
4781   bool ExpectedInstTy =
4782       isa<AllocaInst>(I) || isa<StoreInst>(I) || isa<MemIntrinsic>(I);
4783   CheckDI(ExpectedInstTy, "!DIAssignID attached to unexpected instruction kind",
4784           I, MD);
4785   // Iterate over the MetadataAsValue uses of the DIAssignID - these should
4786   // only be found as DbgAssignIntrinsic operands.
4787   if (auto *AsValue = MetadataAsValue::getIfExists(Context, MD)) {
4788     for (auto *User : AsValue->users()) {
4789       CheckDI(isa<DbgAssignIntrinsic>(User),
4790               "!DIAssignID should only be used by llvm.dbg.assign intrinsics",
4791               MD, User);
4792       // All of the dbg.assign intrinsics should be in the same function as I.
4793       if (auto *DAI = dyn_cast<DbgAssignIntrinsic>(User))
4794         CheckDI(DAI->getFunction() == I.getFunction(),
4795                 "dbg.assign not in same function as inst", DAI, &I);
4796     }
4797   }
4798 }
4799 
4800 void Verifier::visitCallStackMetadata(MDNode *MD) {
4801   // Call stack metadata should consist of a list of at least 1 constant int
4802   // (representing a hash of the location).
4803   Check(MD->getNumOperands() >= 1,
4804         "call stack metadata should have at least 1 operand", MD);
4805 
4806   for (const auto &Op : MD->operands())
4807     Check(mdconst::dyn_extract_or_null<ConstantInt>(Op),
4808           "call stack metadata operand should be constant integer", Op);
4809 }
4810 
4811 void Verifier::visitMemProfMetadata(Instruction &I, MDNode *MD) {
4812   Check(isa<CallBase>(I), "!memprof metadata should only exist on calls", &I);
4813   Check(MD->getNumOperands() >= 1,
4814         "!memprof annotations should have at least 1 metadata operand "
4815         "(MemInfoBlock)",
4816         MD);
4817 
4818   // Check each MIB
4819   for (auto &MIBOp : MD->operands()) {
4820     MDNode *MIB = dyn_cast<MDNode>(MIBOp);
4821     // The first operand of an MIB should be the call stack metadata.
4822     // There rest of the operands should be MDString tags, and there should be
4823     // at least one.
4824     Check(MIB->getNumOperands() >= 2,
4825           "Each !memprof MemInfoBlock should have at least 2 operands", MIB);
4826 
4827     // Check call stack metadata (first operand).
4828     Check(MIB->getOperand(0) != nullptr,
4829           "!memprof MemInfoBlock first operand should not be null", MIB);
4830     Check(isa<MDNode>(MIB->getOperand(0)),
4831           "!memprof MemInfoBlock first operand should be an MDNode", MIB);
4832     MDNode *StackMD = dyn_cast<MDNode>(MIB->getOperand(0));
4833     visitCallStackMetadata(StackMD);
4834 
4835     // Check that remaining operands are MDString.
4836     Check(llvm::all_of(llvm::drop_begin(MIB->operands()),
4837                        [](const MDOperand &Op) { return isa<MDString>(Op); }),
4838           "Not all !memprof MemInfoBlock operands 1 to N are MDString", MIB);
4839   }
4840 }
4841 
4842 void Verifier::visitCallsiteMetadata(Instruction &I, MDNode *MD) {
4843   Check(isa<CallBase>(I), "!callsite metadata should only exist on calls", &I);
4844   // Verify the partial callstack annotated from memprof profiles. This callsite
4845   // is a part of a profiled allocation callstack.
4846   visitCallStackMetadata(MD);
4847 }
4848 
4849 void Verifier::visitAnnotationMetadata(MDNode *Annotation) {
4850   Check(isa<MDTuple>(Annotation), "annotation must be a tuple");
4851   Check(Annotation->getNumOperands() >= 1,
4852         "annotation must have at least one operand");
4853   for (const MDOperand &Op : Annotation->operands()) {
4854     bool TupleOfStrings =
4855         isa<MDTuple>(Op.get()) &&
4856         all_of(cast<MDTuple>(Op)->operands(), [](auto &Annotation) {
4857           return isa<MDString>(Annotation.get());
4858         });
4859     Check(isa<MDString>(Op.get()) || TupleOfStrings,
4860           "operands must be a string or a tuple of strings");
4861   }
4862 }
4863 
4864 void Verifier::visitAliasScopeMetadata(const MDNode *MD) {
4865   unsigned NumOps = MD->getNumOperands();
4866   Check(NumOps >= 2 && NumOps <= 3, "scope must have two or three operands",
4867         MD);
4868   Check(MD->getOperand(0).get() == MD || isa<MDString>(MD->getOperand(0)),
4869         "first scope operand must be self-referential or string", MD);
4870   if (NumOps == 3)
4871     Check(isa<MDString>(MD->getOperand(2)),
4872           "third scope operand must be string (if used)", MD);
4873 
4874   MDNode *Domain = dyn_cast<MDNode>(MD->getOperand(1));
4875   Check(Domain != nullptr, "second scope operand must be MDNode", MD);
4876 
4877   unsigned NumDomainOps = Domain->getNumOperands();
4878   Check(NumDomainOps >= 1 && NumDomainOps <= 2,
4879         "domain must have one or two operands", Domain);
4880   Check(Domain->getOperand(0).get() == Domain ||
4881             isa<MDString>(Domain->getOperand(0)),
4882         "first domain operand must be self-referential or string", Domain);
4883   if (NumDomainOps == 2)
4884     Check(isa<MDString>(Domain->getOperand(1)),
4885           "second domain operand must be string (if used)", Domain);
4886 }
4887 
4888 void Verifier::visitAliasScopeListMetadata(const MDNode *MD) {
4889   for (const MDOperand &Op : MD->operands()) {
4890     const MDNode *OpMD = dyn_cast<MDNode>(Op);
4891     Check(OpMD != nullptr, "scope list must consist of MDNodes", MD);
4892     visitAliasScopeMetadata(OpMD);
4893   }
4894 }
4895 
4896 void Verifier::visitAccessGroupMetadata(const MDNode *MD) {
4897   auto IsValidAccessScope = [](const MDNode *MD) {
4898     return MD->getNumOperands() == 0 && MD->isDistinct();
4899   };
4900 
4901   // It must be either an access scope itself...
4902   if (IsValidAccessScope(MD))
4903     return;
4904 
4905   // ...or a list of access scopes.
4906   for (const MDOperand &Op : MD->operands()) {
4907     const MDNode *OpMD = dyn_cast<MDNode>(Op);
4908     Check(OpMD != nullptr, "Access scope list must consist of MDNodes", MD);
4909     Check(IsValidAccessScope(OpMD),
4910           "Access scope list contains invalid access scope", MD);
4911   }
4912 }
4913 
4914 /// verifyInstruction - Verify that an instruction is well formed.
4915 ///
4916 void Verifier::visitInstruction(Instruction &I) {
4917   BasicBlock *BB = I.getParent();
4918   Check(BB, "Instruction not embedded in basic block!", &I);
4919 
4920   if (!isa<PHINode>(I)) {   // Check that non-phi nodes are not self referential
4921     for (User *U : I.users()) {
4922       Check(U != (User *)&I || !DT.isReachableFromEntry(BB),
4923             "Only PHI nodes may reference their own value!", &I);
4924     }
4925   }
4926 
4927   // Check that void typed values don't have names
4928   Check(!I.getType()->isVoidTy() || !I.hasName(),
4929         "Instruction has a name, but provides a void value!", &I);
4930 
4931   // Check that the return value of the instruction is either void or a legal
4932   // value type.
4933   Check(I.getType()->isVoidTy() || I.getType()->isFirstClassType(),
4934         "Instruction returns a non-scalar type!", &I);
4935 
4936   // Check that the instruction doesn't produce metadata. Calls are already
4937   // checked against the callee type.
4938   Check(!I.getType()->isMetadataTy() || isa<CallInst>(I) || isa<InvokeInst>(I),
4939         "Invalid use of metadata!", &I);
4940 
4941   // Check that all uses of the instruction, if they are instructions
4942   // themselves, actually have parent basic blocks.  If the use is not an
4943   // instruction, it is an error!
4944   for (Use &U : I.uses()) {
4945     if (Instruction *Used = dyn_cast<Instruction>(U.getUser()))
4946       Check(Used->getParent() != nullptr,
4947             "Instruction referencing"
4948             " instruction not embedded in a basic block!",
4949             &I, Used);
4950     else {
4951       CheckFailed("Use of instruction is not an instruction!", U);
4952       return;
4953     }
4954   }
4955 
4956   // Get a pointer to the call base of the instruction if it is some form of
4957   // call.
4958   const CallBase *CBI = dyn_cast<CallBase>(&I);
4959 
4960   for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i) {
4961     Check(I.getOperand(i) != nullptr, "Instruction has null operand!", &I);
4962 
4963     // Check to make sure that only first-class-values are operands to
4964     // instructions.
4965     if (!I.getOperand(i)->getType()->isFirstClassType()) {
4966       Check(false, "Instruction operands must be first-class values!", &I);
4967     }
4968 
4969     if (Function *F = dyn_cast<Function>(I.getOperand(i))) {
4970       // This code checks whether the function is used as the operand of a
4971       // clang_arc_attachedcall operand bundle.
4972       auto IsAttachedCallOperand = [](Function *F, const CallBase *CBI,
4973                                       int Idx) {
4974         return CBI && CBI->isOperandBundleOfType(
4975                           LLVMContext::OB_clang_arc_attachedcall, Idx);
4976       };
4977 
4978       // Check to make sure that the "address of" an intrinsic function is never
4979       // taken. Ignore cases where the address of the intrinsic function is used
4980       // as the argument of operand bundle "clang.arc.attachedcall" as those
4981       // cases are handled in verifyAttachedCallBundle.
4982       Check((!F->isIntrinsic() ||
4983              (CBI && &CBI->getCalledOperandUse() == &I.getOperandUse(i)) ||
4984              IsAttachedCallOperand(F, CBI, i)),
4985             "Cannot take the address of an intrinsic!", &I);
4986       Check(!F->isIntrinsic() || isa<CallInst>(I) ||
4987                 F->getIntrinsicID() == Intrinsic::donothing ||
4988                 F->getIntrinsicID() == Intrinsic::seh_try_begin ||
4989                 F->getIntrinsicID() == Intrinsic::seh_try_end ||
4990                 F->getIntrinsicID() == Intrinsic::seh_scope_begin ||
4991                 F->getIntrinsicID() == Intrinsic::seh_scope_end ||
4992                 F->getIntrinsicID() == Intrinsic::coro_resume ||
4993                 F->getIntrinsicID() == Intrinsic::coro_destroy ||
4994                 F->getIntrinsicID() ==
4995                     Intrinsic::experimental_patchpoint_void ||
4996                 F->getIntrinsicID() == Intrinsic::experimental_patchpoint_i64 ||
4997                 F->getIntrinsicID() == Intrinsic::experimental_gc_statepoint ||
4998                 F->getIntrinsicID() == Intrinsic::wasm_rethrow ||
4999                 IsAttachedCallOperand(F, CBI, i),
5000             "Cannot invoke an intrinsic other than donothing, patchpoint, "
5001             "statepoint, coro_resume, coro_destroy or clang.arc.attachedcall",
5002             &I);
5003       Check(F->getParent() == &M, "Referencing function in another module!", &I,
5004             &M, F, F->getParent());
5005     } else if (BasicBlock *OpBB = dyn_cast<BasicBlock>(I.getOperand(i))) {
5006       Check(OpBB->getParent() == BB->getParent(),
5007             "Referring to a basic block in another function!", &I);
5008     } else if (Argument *OpArg = dyn_cast<Argument>(I.getOperand(i))) {
5009       Check(OpArg->getParent() == BB->getParent(),
5010             "Referring to an argument in another function!", &I);
5011     } else if (GlobalValue *GV = dyn_cast<GlobalValue>(I.getOperand(i))) {
5012       Check(GV->getParent() == &M, "Referencing global in another module!", &I,
5013             &M, GV, GV->getParent());
5014     } else if (isa<Instruction>(I.getOperand(i))) {
5015       verifyDominatesUse(I, i);
5016     } else if (isa<InlineAsm>(I.getOperand(i))) {
5017       Check(CBI && &CBI->getCalledOperandUse() == &I.getOperandUse(i),
5018             "Cannot take the address of an inline asm!", &I);
5019     } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(I.getOperand(i))) {
5020       if (CE->getType()->isPtrOrPtrVectorTy()) {
5021         // If we have a ConstantExpr pointer, we need to see if it came from an
5022         // illegal bitcast.
5023         visitConstantExprsRecursively(CE);
5024       }
5025     }
5026   }
5027 
5028   if (MDNode *MD = I.getMetadata(LLVMContext::MD_fpmath)) {
5029     Check(I.getType()->isFPOrFPVectorTy(),
5030           "fpmath requires a floating point result!", &I);
5031     Check(MD->getNumOperands() == 1, "fpmath takes one operand!", &I);
5032     if (ConstantFP *CFP0 =
5033             mdconst::dyn_extract_or_null<ConstantFP>(MD->getOperand(0))) {
5034       const APFloat &Accuracy = CFP0->getValueAPF();
5035       Check(&Accuracy.getSemantics() == &APFloat::IEEEsingle(),
5036             "fpmath accuracy must have float type", &I);
5037       Check(Accuracy.isFiniteNonZero() && !Accuracy.isNegative(),
5038             "fpmath accuracy not a positive number!", &I);
5039     } else {
5040       Check(false, "invalid fpmath accuracy!", &I);
5041     }
5042   }
5043 
5044   if (MDNode *Range = I.getMetadata(LLVMContext::MD_range)) {
5045     Check(isa<LoadInst>(I) || isa<CallInst>(I) || isa<InvokeInst>(I),
5046           "Ranges are only for loads, calls and invokes!", &I);
5047     visitRangeMetadata(I, Range, I.getType());
5048   }
5049 
5050   if (I.hasMetadata(LLVMContext::MD_invariant_group)) {
5051     Check(isa<LoadInst>(I) || isa<StoreInst>(I),
5052           "invariant.group metadata is only for loads and stores", &I);
5053   }
5054 
5055   if (MDNode *MD = I.getMetadata(LLVMContext::MD_nonnull)) {
5056     Check(I.getType()->isPointerTy(), "nonnull applies only to pointer types",
5057           &I);
5058     Check(isa<LoadInst>(I),
5059           "nonnull applies only to load instructions, use attributes"
5060           " for calls or invokes",
5061           &I);
5062     Check(MD->getNumOperands() == 0, "nonnull metadata must be empty", &I);
5063   }
5064 
5065   if (MDNode *MD = I.getMetadata(LLVMContext::MD_dereferenceable))
5066     visitDereferenceableMetadata(I, MD);
5067 
5068   if (MDNode *MD = I.getMetadata(LLVMContext::MD_dereferenceable_or_null))
5069     visitDereferenceableMetadata(I, MD);
5070 
5071   if (MDNode *TBAA = I.getMetadata(LLVMContext::MD_tbaa))
5072     TBAAVerifyHelper.visitTBAAMetadata(I, TBAA);
5073 
5074   if (MDNode *MD = I.getMetadata(LLVMContext::MD_noalias))
5075     visitAliasScopeListMetadata(MD);
5076   if (MDNode *MD = I.getMetadata(LLVMContext::MD_alias_scope))
5077     visitAliasScopeListMetadata(MD);
5078 
5079   if (MDNode *MD = I.getMetadata(LLVMContext::MD_access_group))
5080     visitAccessGroupMetadata(MD);
5081 
5082   if (MDNode *AlignMD = I.getMetadata(LLVMContext::MD_align)) {
5083     Check(I.getType()->isPointerTy(), "align applies only to pointer types",
5084           &I);
5085     Check(isa<LoadInst>(I),
5086           "align applies only to load instructions, "
5087           "use attributes for calls or invokes",
5088           &I);
5089     Check(AlignMD->getNumOperands() == 1, "align takes one operand!", &I);
5090     ConstantInt *CI = mdconst::dyn_extract<ConstantInt>(AlignMD->getOperand(0));
5091     Check(CI && CI->getType()->isIntegerTy(64),
5092           "align metadata value must be an i64!", &I);
5093     uint64_t Align = CI->getZExtValue();
5094     Check(isPowerOf2_64(Align), "align metadata value must be a power of 2!",
5095           &I);
5096     Check(Align <= Value::MaximumAlignment,
5097           "alignment is larger that implementation defined limit", &I);
5098   }
5099 
5100   if (MDNode *MD = I.getMetadata(LLVMContext::MD_prof))
5101     visitProfMetadata(I, MD);
5102 
5103   if (MDNode *MD = I.getMetadata(LLVMContext::MD_memprof))
5104     visitMemProfMetadata(I, MD);
5105 
5106   if (MDNode *MD = I.getMetadata(LLVMContext::MD_callsite))
5107     visitCallsiteMetadata(I, MD);
5108 
5109   if (MDNode *MD = I.getMetadata(LLVMContext::MD_DIAssignID))
5110     visitDIAssignIDMetadata(I, MD);
5111 
5112   if (MDNode *Annotation = I.getMetadata(LLVMContext::MD_annotation))
5113     visitAnnotationMetadata(Annotation);
5114 
5115   if (MDNode *N = I.getDebugLoc().getAsMDNode()) {
5116     CheckDI(isa<DILocation>(N), "invalid !dbg metadata attachment", &I, N);
5117     visitMDNode(*N, AreDebugLocsAllowed::Yes);
5118   }
5119 
5120   if (auto *DII = dyn_cast<DbgVariableIntrinsic>(&I)) {
5121     verifyFragmentExpression(*DII);
5122     verifyNotEntryValue(*DII);
5123   }
5124 
5125   SmallVector<std::pair<unsigned, MDNode *>, 4> MDs;
5126   I.getAllMetadata(MDs);
5127   for (auto Attachment : MDs) {
5128     unsigned Kind = Attachment.first;
5129     auto AllowLocs =
5130         (Kind == LLVMContext::MD_dbg || Kind == LLVMContext::MD_loop)
5131             ? AreDebugLocsAllowed::Yes
5132             : AreDebugLocsAllowed::No;
5133     visitMDNode(*Attachment.second, AllowLocs);
5134   }
5135 
5136   InstsInThisBlock.insert(&I);
5137 }
5138 
5139 /// Allow intrinsics to be verified in different ways.
5140 void Verifier::visitIntrinsicCall(Intrinsic::ID ID, CallBase &Call) {
5141   Function *IF = Call.getCalledFunction();
5142   Check(IF->isDeclaration(), "Intrinsic functions should never be defined!",
5143         IF);
5144 
5145   // Verify that the intrinsic prototype lines up with what the .td files
5146   // describe.
5147   FunctionType *IFTy = IF->getFunctionType();
5148   bool IsVarArg = IFTy->isVarArg();
5149 
5150   SmallVector<Intrinsic::IITDescriptor, 8> Table;
5151   getIntrinsicInfoTableEntries(ID, Table);
5152   ArrayRef<Intrinsic::IITDescriptor> TableRef = Table;
5153 
5154   // Walk the descriptors to extract overloaded types.
5155   SmallVector<Type *, 4> ArgTys;
5156   Intrinsic::MatchIntrinsicTypesResult Res =
5157       Intrinsic::matchIntrinsicSignature(IFTy, TableRef, ArgTys);
5158   Check(Res != Intrinsic::MatchIntrinsicTypes_NoMatchRet,
5159         "Intrinsic has incorrect return type!", IF);
5160   Check(Res != Intrinsic::MatchIntrinsicTypes_NoMatchArg,
5161         "Intrinsic has incorrect argument type!", IF);
5162 
5163   // Verify if the intrinsic call matches the vararg property.
5164   if (IsVarArg)
5165     Check(!Intrinsic::matchIntrinsicVarArg(IsVarArg, TableRef),
5166           "Intrinsic was not defined with variable arguments!", IF);
5167   else
5168     Check(!Intrinsic::matchIntrinsicVarArg(IsVarArg, TableRef),
5169           "Callsite was not defined with variable arguments!", IF);
5170 
5171   // All descriptors should be absorbed by now.
5172   Check(TableRef.empty(), "Intrinsic has too few arguments!", IF);
5173 
5174   // Now that we have the intrinsic ID and the actual argument types (and we
5175   // know they are legal for the intrinsic!) get the intrinsic name through the
5176   // usual means.  This allows us to verify the mangling of argument types into
5177   // the name.
5178   const std::string ExpectedName =
5179       Intrinsic::getName(ID, ArgTys, IF->getParent(), IFTy);
5180   Check(ExpectedName == IF->getName(),
5181         "Intrinsic name not mangled correctly for type arguments! "
5182         "Should be: " +
5183             ExpectedName,
5184         IF);
5185 
5186   // If the intrinsic takes MDNode arguments, verify that they are either global
5187   // or are local to *this* function.
5188   for (Value *V : Call.args()) {
5189     if (auto *MD = dyn_cast<MetadataAsValue>(V))
5190       visitMetadataAsValue(*MD, Call.getCaller());
5191     if (auto *Const = dyn_cast<Constant>(V))
5192       Check(!Const->getType()->isX86_AMXTy(),
5193             "const x86_amx is not allowed in argument!");
5194   }
5195 
5196   switch (ID) {
5197   default:
5198     break;
5199   case Intrinsic::assume: {
5200     for (auto &Elem : Call.bundle_op_infos()) {
5201       unsigned ArgCount = Elem.End - Elem.Begin;
5202       // Separate storage assumptions are special insofar as they're the only
5203       // operand bundles allowed on assumes that aren't parameter attributes.
5204       if (Elem.Tag->getKey() == "separate_storage") {
5205         Check(ArgCount == 2,
5206               "separate_storage assumptions should have 2 arguments", Call);
5207         Check(Call.getOperand(Elem.Begin)->getType()->isPointerTy() &&
5208                   Call.getOperand(Elem.Begin + 1)->getType()->isPointerTy(),
5209               "arguments to separate_storage assumptions should be pointers",
5210               Call);
5211         return;
5212       }
5213       Check(Elem.Tag->getKey() == "ignore" ||
5214                 Attribute::isExistingAttribute(Elem.Tag->getKey()),
5215             "tags must be valid attribute names", Call);
5216       Attribute::AttrKind Kind =
5217           Attribute::getAttrKindFromName(Elem.Tag->getKey());
5218       if (Kind == Attribute::Alignment) {
5219         Check(ArgCount <= 3 && ArgCount >= 2,
5220               "alignment assumptions should have 2 or 3 arguments", Call);
5221         Check(Call.getOperand(Elem.Begin)->getType()->isPointerTy(),
5222               "first argument should be a pointer", Call);
5223         Check(Call.getOperand(Elem.Begin + 1)->getType()->isIntegerTy(),
5224               "second argument should be an integer", Call);
5225         if (ArgCount == 3)
5226           Check(Call.getOperand(Elem.Begin + 2)->getType()->isIntegerTy(),
5227                 "third argument should be an integer if present", Call);
5228         return;
5229       }
5230       Check(ArgCount <= 2, "too many arguments", Call);
5231       if (Kind == Attribute::None)
5232         break;
5233       if (Attribute::isIntAttrKind(Kind)) {
5234         Check(ArgCount == 2, "this attribute should have 2 arguments", Call);
5235         Check(isa<ConstantInt>(Call.getOperand(Elem.Begin + 1)),
5236               "the second argument should be a constant integral value", Call);
5237       } else if (Attribute::canUseAsParamAttr(Kind)) {
5238         Check((ArgCount) == 1, "this attribute should have one argument", Call);
5239       } else if (Attribute::canUseAsFnAttr(Kind)) {
5240         Check((ArgCount) == 0, "this attribute has no argument", Call);
5241       }
5242     }
5243     break;
5244   }
5245   case Intrinsic::coro_id: {
5246     auto *InfoArg = Call.getArgOperand(3)->stripPointerCasts();
5247     if (isa<ConstantPointerNull>(InfoArg))
5248       break;
5249     auto *GV = dyn_cast<GlobalVariable>(InfoArg);
5250     Check(GV && GV->isConstant() && GV->hasDefinitiveInitializer(),
5251           "info argument of llvm.coro.id must refer to an initialized "
5252           "constant");
5253     Constant *Init = GV->getInitializer();
5254     Check(isa<ConstantStruct>(Init) || isa<ConstantArray>(Init),
5255           "info argument of llvm.coro.id must refer to either a struct or "
5256           "an array");
5257     break;
5258   }
5259   case Intrinsic::is_fpclass: {
5260     const ConstantInt *TestMask = cast<ConstantInt>(Call.getOperand(1));
5261     Check((TestMask->getZExtValue() & ~static_cast<unsigned>(fcAllFlags)) == 0,
5262           "unsupported bits for llvm.is.fpclass test mask");
5263     break;
5264   }
5265   case Intrinsic::fptrunc_round: {
5266     // Check the rounding mode
5267     Metadata *MD = nullptr;
5268     auto *MAV = dyn_cast<MetadataAsValue>(Call.getOperand(1));
5269     if (MAV)
5270       MD = MAV->getMetadata();
5271 
5272     Check(MD != nullptr, "missing rounding mode argument", Call);
5273 
5274     Check(isa<MDString>(MD),
5275           ("invalid value for llvm.fptrunc.round metadata operand"
5276            " (the operand should be a string)"),
5277           MD);
5278 
5279     std::optional<RoundingMode> RoundMode =
5280         convertStrToRoundingMode(cast<MDString>(MD)->getString());
5281     Check(RoundMode && *RoundMode != RoundingMode::Dynamic,
5282           "unsupported rounding mode argument", Call);
5283     break;
5284   }
5285 #define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
5286 #include "llvm/IR/VPIntrinsics.def"
5287     visitVPIntrinsic(cast<VPIntrinsic>(Call));
5288     break;
5289 #define INSTRUCTION(NAME, NARGS, ROUND_MODE, INTRINSIC)                        \
5290   case Intrinsic::INTRINSIC:
5291 #include "llvm/IR/ConstrainedOps.def"
5292     visitConstrainedFPIntrinsic(cast<ConstrainedFPIntrinsic>(Call));
5293     break;
5294   case Intrinsic::dbg_declare: // llvm.dbg.declare
5295     Check(isa<MetadataAsValue>(Call.getArgOperand(0)),
5296           "invalid llvm.dbg.declare intrinsic call 1", Call);
5297     visitDbgIntrinsic("declare", cast<DbgVariableIntrinsic>(Call));
5298     break;
5299   case Intrinsic::dbg_value: // llvm.dbg.value
5300     visitDbgIntrinsic("value", cast<DbgVariableIntrinsic>(Call));
5301     break;
5302   case Intrinsic::dbg_assign: // llvm.dbg.assign
5303     visitDbgIntrinsic("assign", cast<DbgVariableIntrinsic>(Call));
5304     break;
5305   case Intrinsic::dbg_label: // llvm.dbg.label
5306     visitDbgLabelIntrinsic("label", cast<DbgLabelInst>(Call));
5307     break;
5308   case Intrinsic::memcpy:
5309   case Intrinsic::memcpy_inline:
5310   case Intrinsic::memmove:
5311   case Intrinsic::memset:
5312   case Intrinsic::memset_inline: {
5313     break;
5314   }
5315   case Intrinsic::memcpy_element_unordered_atomic:
5316   case Intrinsic::memmove_element_unordered_atomic:
5317   case Intrinsic::memset_element_unordered_atomic: {
5318     const auto *AMI = cast<AtomicMemIntrinsic>(&Call);
5319 
5320     ConstantInt *ElementSizeCI =
5321         cast<ConstantInt>(AMI->getRawElementSizeInBytes());
5322     const APInt &ElementSizeVal = ElementSizeCI->getValue();
5323     Check(ElementSizeVal.isPowerOf2(),
5324           "element size of the element-wise atomic memory intrinsic "
5325           "must be a power of 2",
5326           Call);
5327 
5328     auto IsValidAlignment = [&](MaybeAlign Alignment) {
5329       return Alignment && ElementSizeVal.ule(Alignment->value());
5330     };
5331     Check(IsValidAlignment(AMI->getDestAlign()),
5332           "incorrect alignment of the destination argument", Call);
5333     if (const auto *AMT = dyn_cast<AtomicMemTransferInst>(AMI)) {
5334       Check(IsValidAlignment(AMT->getSourceAlign()),
5335             "incorrect alignment of the source argument", Call);
5336     }
5337     break;
5338   }
5339   case Intrinsic::call_preallocated_setup: {
5340     auto *NumArgs = dyn_cast<ConstantInt>(Call.getArgOperand(0));
5341     Check(NumArgs != nullptr,
5342           "llvm.call.preallocated.setup argument must be a constant");
5343     bool FoundCall = false;
5344     for (User *U : Call.users()) {
5345       auto *UseCall = dyn_cast<CallBase>(U);
5346       Check(UseCall != nullptr,
5347             "Uses of llvm.call.preallocated.setup must be calls");
5348       const Function *Fn = UseCall->getCalledFunction();
5349       if (Fn && Fn->getIntrinsicID() == Intrinsic::call_preallocated_arg) {
5350         auto *AllocArgIndex = dyn_cast<ConstantInt>(UseCall->getArgOperand(1));
5351         Check(AllocArgIndex != nullptr,
5352               "llvm.call.preallocated.alloc arg index must be a constant");
5353         auto AllocArgIndexInt = AllocArgIndex->getValue();
5354         Check(AllocArgIndexInt.sge(0) &&
5355                   AllocArgIndexInt.slt(NumArgs->getValue()),
5356               "llvm.call.preallocated.alloc arg index must be between 0 and "
5357               "corresponding "
5358               "llvm.call.preallocated.setup's argument count");
5359       } else if (Fn && Fn->getIntrinsicID() ==
5360                            Intrinsic::call_preallocated_teardown) {
5361         // nothing to do
5362       } else {
5363         Check(!FoundCall, "Can have at most one call corresponding to a "
5364                           "llvm.call.preallocated.setup");
5365         FoundCall = true;
5366         size_t NumPreallocatedArgs = 0;
5367         for (unsigned i = 0; i < UseCall->arg_size(); i++) {
5368           if (UseCall->paramHasAttr(i, Attribute::Preallocated)) {
5369             ++NumPreallocatedArgs;
5370           }
5371         }
5372         Check(NumPreallocatedArgs != 0,
5373               "cannot use preallocated intrinsics on a call without "
5374               "preallocated arguments");
5375         Check(NumArgs->equalsInt(NumPreallocatedArgs),
5376               "llvm.call.preallocated.setup arg size must be equal to number "
5377               "of preallocated arguments "
5378               "at call site",
5379               Call, *UseCall);
5380         // getOperandBundle() cannot be called if more than one of the operand
5381         // bundle exists. There is already a check elsewhere for this, so skip
5382         // here if we see more than one.
5383         if (UseCall->countOperandBundlesOfType(LLVMContext::OB_preallocated) >
5384             1) {
5385           return;
5386         }
5387         auto PreallocatedBundle =
5388             UseCall->getOperandBundle(LLVMContext::OB_preallocated);
5389         Check(PreallocatedBundle,
5390               "Use of llvm.call.preallocated.setup outside intrinsics "
5391               "must be in \"preallocated\" operand bundle");
5392         Check(PreallocatedBundle->Inputs.front().get() == &Call,
5393               "preallocated bundle must have token from corresponding "
5394               "llvm.call.preallocated.setup");
5395       }
5396     }
5397     break;
5398   }
5399   case Intrinsic::call_preallocated_arg: {
5400     auto *Token = dyn_cast<CallBase>(Call.getArgOperand(0));
5401     Check(Token && Token->getCalledFunction()->getIntrinsicID() ==
5402                        Intrinsic::call_preallocated_setup,
5403           "llvm.call.preallocated.arg token argument must be a "
5404           "llvm.call.preallocated.setup");
5405     Check(Call.hasFnAttr(Attribute::Preallocated),
5406           "llvm.call.preallocated.arg must be called with a \"preallocated\" "
5407           "call site attribute");
5408     break;
5409   }
5410   case Intrinsic::call_preallocated_teardown: {
5411     auto *Token = dyn_cast<CallBase>(Call.getArgOperand(0));
5412     Check(Token && Token->getCalledFunction()->getIntrinsicID() ==
5413                        Intrinsic::call_preallocated_setup,
5414           "llvm.call.preallocated.teardown token argument must be a "
5415           "llvm.call.preallocated.setup");
5416     break;
5417   }
5418   case Intrinsic::gcroot:
5419   case Intrinsic::gcwrite:
5420   case Intrinsic::gcread:
5421     if (ID == Intrinsic::gcroot) {
5422       AllocaInst *AI =
5423           dyn_cast<AllocaInst>(Call.getArgOperand(0)->stripPointerCasts());
5424       Check(AI, "llvm.gcroot parameter #1 must be an alloca.", Call);
5425       Check(isa<Constant>(Call.getArgOperand(1)),
5426             "llvm.gcroot parameter #2 must be a constant.", Call);
5427       if (!AI->getAllocatedType()->isPointerTy()) {
5428         Check(!isa<ConstantPointerNull>(Call.getArgOperand(1)),
5429               "llvm.gcroot parameter #1 must either be a pointer alloca, "
5430               "or argument #2 must be a non-null constant.",
5431               Call);
5432       }
5433     }
5434 
5435     Check(Call.getParent()->getParent()->hasGC(),
5436           "Enclosing function does not use GC.", Call);
5437     break;
5438   case Intrinsic::init_trampoline:
5439     Check(isa<Function>(Call.getArgOperand(1)->stripPointerCasts()),
5440           "llvm.init_trampoline parameter #2 must resolve to a function.",
5441           Call);
5442     break;
5443   case Intrinsic::prefetch:
5444     Check(cast<ConstantInt>(Call.getArgOperand(1))->getZExtValue() < 2,
5445           "rw argument to llvm.prefetch must be 0-1", Call);
5446     Check(cast<ConstantInt>(Call.getArgOperand(2))->getZExtValue() < 4,
5447           "locality argument to llvm.prefetch must be 0-4", Call);
5448     Check(cast<ConstantInt>(Call.getArgOperand(3))->getZExtValue() < 2,
5449           "cache type argument to llvm.prefetch must be 0-1", Call);
5450     break;
5451   case Intrinsic::stackprotector:
5452     Check(isa<AllocaInst>(Call.getArgOperand(1)->stripPointerCasts()),
5453           "llvm.stackprotector parameter #2 must resolve to an alloca.", Call);
5454     break;
5455   case Intrinsic::localescape: {
5456     BasicBlock *BB = Call.getParent();
5457     Check(BB->isEntryBlock(), "llvm.localescape used outside of entry block",
5458           Call);
5459     Check(!SawFrameEscape, "multiple calls to llvm.localescape in one function",
5460           Call);
5461     for (Value *Arg : Call.args()) {
5462       if (isa<ConstantPointerNull>(Arg))
5463         continue; // Null values are allowed as placeholders.
5464       auto *AI = dyn_cast<AllocaInst>(Arg->stripPointerCasts());
5465       Check(AI && AI->isStaticAlloca(),
5466             "llvm.localescape only accepts static allocas", Call);
5467     }
5468     FrameEscapeInfo[BB->getParent()].first = Call.arg_size();
5469     SawFrameEscape = true;
5470     break;
5471   }
5472   case Intrinsic::localrecover: {
5473     Value *FnArg = Call.getArgOperand(0)->stripPointerCasts();
5474     Function *Fn = dyn_cast<Function>(FnArg);
5475     Check(Fn && !Fn->isDeclaration(),
5476           "llvm.localrecover first "
5477           "argument must be function defined in this module",
5478           Call);
5479     auto *IdxArg = cast<ConstantInt>(Call.getArgOperand(2));
5480     auto &Entry = FrameEscapeInfo[Fn];
5481     Entry.second = unsigned(
5482         std::max(uint64_t(Entry.second), IdxArg->getLimitedValue(~0U) + 1));
5483     break;
5484   }
5485 
5486   case Intrinsic::experimental_gc_statepoint:
5487     if (auto *CI = dyn_cast<CallInst>(&Call))
5488       Check(!CI->isInlineAsm(),
5489             "gc.statepoint support for inline assembly unimplemented", CI);
5490     Check(Call.getParent()->getParent()->hasGC(),
5491           "Enclosing function does not use GC.", Call);
5492 
5493     verifyStatepoint(Call);
5494     break;
5495   case Intrinsic::experimental_gc_result: {
5496     Check(Call.getParent()->getParent()->hasGC(),
5497           "Enclosing function does not use GC.", Call);
5498 
5499     auto *Statepoint = Call.getArgOperand(0);
5500     if (isa<UndefValue>(Statepoint))
5501       break;
5502 
5503     // Are we tied to a statepoint properly?
5504     const auto *StatepointCall = dyn_cast<CallBase>(Statepoint);
5505     const Function *StatepointFn =
5506         StatepointCall ? StatepointCall->getCalledFunction() : nullptr;
5507     Check(StatepointFn && StatepointFn->isDeclaration() &&
5508               StatepointFn->getIntrinsicID() ==
5509                   Intrinsic::experimental_gc_statepoint,
5510           "gc.result operand #1 must be from a statepoint", Call,
5511           Call.getArgOperand(0));
5512 
5513     // Check that result type matches wrapped callee.
5514     auto *TargetFuncType =
5515         cast<FunctionType>(StatepointCall->getParamElementType(2));
5516     Check(Call.getType() == TargetFuncType->getReturnType(),
5517           "gc.result result type does not match wrapped callee", Call);
5518     break;
5519   }
5520   case Intrinsic::experimental_gc_relocate: {
5521     Check(Call.arg_size() == 3, "wrong number of arguments", Call);
5522 
5523     Check(isa<PointerType>(Call.getType()->getScalarType()),
5524           "gc.relocate must return a pointer or a vector of pointers", Call);
5525 
5526     // Check that this relocate is correctly tied to the statepoint
5527 
5528     // This is case for relocate on the unwinding path of an invoke statepoint
5529     if (LandingPadInst *LandingPad =
5530             dyn_cast<LandingPadInst>(Call.getArgOperand(0))) {
5531 
5532       const BasicBlock *InvokeBB =
5533           LandingPad->getParent()->getUniquePredecessor();
5534 
5535       // Landingpad relocates should have only one predecessor with invoke
5536       // statepoint terminator
5537       Check(InvokeBB, "safepoints should have unique landingpads",
5538             LandingPad->getParent());
5539       Check(InvokeBB->getTerminator(), "safepoint block should be well formed",
5540             InvokeBB);
5541       Check(isa<GCStatepointInst>(InvokeBB->getTerminator()),
5542             "gc relocate should be linked to a statepoint", InvokeBB);
5543     } else {
5544       // In all other cases relocate should be tied to the statepoint directly.
5545       // This covers relocates on a normal return path of invoke statepoint and
5546       // relocates of a call statepoint.
5547       auto *Token = Call.getArgOperand(0);
5548       Check(isa<GCStatepointInst>(Token) || isa<UndefValue>(Token),
5549             "gc relocate is incorrectly tied to the statepoint", Call, Token);
5550     }
5551 
5552     // Verify rest of the relocate arguments.
5553     const Value &StatepointCall = *cast<GCRelocateInst>(Call).getStatepoint();
5554 
5555     // Both the base and derived must be piped through the safepoint.
5556     Value *Base = Call.getArgOperand(1);
5557     Check(isa<ConstantInt>(Base),
5558           "gc.relocate operand #2 must be integer offset", Call);
5559 
5560     Value *Derived = Call.getArgOperand(2);
5561     Check(isa<ConstantInt>(Derived),
5562           "gc.relocate operand #3 must be integer offset", Call);
5563 
5564     const uint64_t BaseIndex = cast<ConstantInt>(Base)->getZExtValue();
5565     const uint64_t DerivedIndex = cast<ConstantInt>(Derived)->getZExtValue();
5566 
5567     // Check the bounds
5568     if (isa<UndefValue>(StatepointCall))
5569       break;
5570     if (auto Opt = cast<GCStatepointInst>(StatepointCall)
5571                        .getOperandBundle(LLVMContext::OB_gc_live)) {
5572       Check(BaseIndex < Opt->Inputs.size(),
5573             "gc.relocate: statepoint base index out of bounds", Call);
5574       Check(DerivedIndex < Opt->Inputs.size(),
5575             "gc.relocate: statepoint derived index out of bounds", Call);
5576     }
5577 
5578     // Relocated value must be either a pointer type or vector-of-pointer type,
5579     // but gc_relocate does not need to return the same pointer type as the
5580     // relocated pointer. It can be casted to the correct type later if it's
5581     // desired. However, they must have the same address space and 'vectorness'
5582     GCRelocateInst &Relocate = cast<GCRelocateInst>(Call);
5583     auto *ResultType = Call.getType();
5584     auto *DerivedType = Relocate.getDerivedPtr()->getType();
5585     auto *BaseType = Relocate.getBasePtr()->getType();
5586 
5587     Check(BaseType->isPtrOrPtrVectorTy(),
5588           "gc.relocate: relocated value must be a pointer", Call);
5589     Check(DerivedType->isPtrOrPtrVectorTy(),
5590           "gc.relocate: relocated value must be a pointer", Call);
5591 
5592     Check(ResultType->isVectorTy() == DerivedType->isVectorTy(),
5593           "gc.relocate: vector relocates to vector and pointer to pointer",
5594           Call);
5595     Check(
5596         ResultType->getPointerAddressSpace() ==
5597             DerivedType->getPointerAddressSpace(),
5598         "gc.relocate: relocating a pointer shouldn't change its address space",
5599         Call);
5600 
5601     auto GC = llvm::getGCStrategy(Relocate.getFunction()->getGC());
5602     Check(GC, "gc.relocate: calling function must have GCStrategy",
5603           Call.getFunction());
5604     if (GC) {
5605       auto isGCPtr = [&GC](Type *PTy) {
5606         return GC->isGCManagedPointer(PTy->getScalarType()).value_or(true);
5607       };
5608       Check(isGCPtr(ResultType), "gc.relocate: must return gc pointer", Call);
5609       Check(isGCPtr(BaseType),
5610             "gc.relocate: relocated value must be a gc pointer", Call);
5611       Check(isGCPtr(DerivedType),
5612             "gc.relocate: relocated value must be a gc pointer", Call);
5613     }
5614     break;
5615   }
5616   case Intrinsic::eh_exceptioncode:
5617   case Intrinsic::eh_exceptionpointer: {
5618     Check(isa<CatchPadInst>(Call.getArgOperand(0)),
5619           "eh.exceptionpointer argument must be a catchpad", Call);
5620     break;
5621   }
5622   case Intrinsic::get_active_lane_mask: {
5623     Check(Call.getType()->isVectorTy(),
5624           "get_active_lane_mask: must return a "
5625           "vector",
5626           Call);
5627     auto *ElemTy = Call.getType()->getScalarType();
5628     Check(ElemTy->isIntegerTy(1),
5629           "get_active_lane_mask: element type is not "
5630           "i1",
5631           Call);
5632     break;
5633   }
5634   case Intrinsic::experimental_get_vector_length: {
5635     ConstantInt *VF = cast<ConstantInt>(Call.getArgOperand(1));
5636     Check(!VF->isNegative() && !VF->isZero(),
5637           "get_vector_length: VF must be positive", Call);
5638     break;
5639   }
5640   case Intrinsic::masked_load: {
5641     Check(Call.getType()->isVectorTy(), "masked_load: must return a vector",
5642           Call);
5643 
5644     ConstantInt *Alignment = cast<ConstantInt>(Call.getArgOperand(1));
5645     Value *Mask = Call.getArgOperand(2);
5646     Value *PassThru = Call.getArgOperand(3);
5647     Check(Mask->getType()->isVectorTy(), "masked_load: mask must be vector",
5648           Call);
5649     Check(Alignment->getValue().isPowerOf2(),
5650           "masked_load: alignment must be a power of 2", Call);
5651     Check(PassThru->getType() == Call.getType(),
5652           "masked_load: pass through and return type must match", Call);
5653     Check(cast<VectorType>(Mask->getType())->getElementCount() ==
5654               cast<VectorType>(Call.getType())->getElementCount(),
5655           "masked_load: vector mask must be same length as return", Call);
5656     break;
5657   }
5658   case Intrinsic::masked_store: {
5659     Value *Val = Call.getArgOperand(0);
5660     ConstantInt *Alignment = cast<ConstantInt>(Call.getArgOperand(2));
5661     Value *Mask = Call.getArgOperand(3);
5662     Check(Mask->getType()->isVectorTy(), "masked_store: mask must be vector",
5663           Call);
5664     Check(Alignment->getValue().isPowerOf2(),
5665           "masked_store: alignment must be a power of 2", Call);
5666     Check(cast<VectorType>(Mask->getType())->getElementCount() ==
5667               cast<VectorType>(Val->getType())->getElementCount(),
5668           "masked_store: vector mask must be same length as value", Call);
5669     break;
5670   }
5671 
5672   case Intrinsic::masked_gather: {
5673     const APInt &Alignment =
5674         cast<ConstantInt>(Call.getArgOperand(1))->getValue();
5675     Check(Alignment.isZero() || Alignment.isPowerOf2(),
5676           "masked_gather: alignment must be 0 or a power of 2", Call);
5677     break;
5678   }
5679   case Intrinsic::masked_scatter: {
5680     const APInt &Alignment =
5681         cast<ConstantInt>(Call.getArgOperand(2))->getValue();
5682     Check(Alignment.isZero() || Alignment.isPowerOf2(),
5683           "masked_scatter: alignment must be 0 or a power of 2", Call);
5684     break;
5685   }
5686 
5687   case Intrinsic::experimental_guard: {
5688     Check(isa<CallInst>(Call), "experimental_guard cannot be invoked", Call);
5689     Check(Call.countOperandBundlesOfType(LLVMContext::OB_deopt) == 1,
5690           "experimental_guard must have exactly one "
5691           "\"deopt\" operand bundle");
5692     break;
5693   }
5694 
5695   case Intrinsic::experimental_deoptimize: {
5696     Check(isa<CallInst>(Call), "experimental_deoptimize cannot be invoked",
5697           Call);
5698     Check(Call.countOperandBundlesOfType(LLVMContext::OB_deopt) == 1,
5699           "experimental_deoptimize must have exactly one "
5700           "\"deopt\" operand bundle");
5701     Check(Call.getType() == Call.getFunction()->getReturnType(),
5702           "experimental_deoptimize return type must match caller return type");
5703 
5704     if (isa<CallInst>(Call)) {
5705       auto *RI = dyn_cast<ReturnInst>(Call.getNextNode());
5706       Check(RI,
5707             "calls to experimental_deoptimize must be followed by a return");
5708 
5709       if (!Call.getType()->isVoidTy() && RI)
5710         Check(RI->getReturnValue() == &Call,
5711               "calls to experimental_deoptimize must be followed by a return "
5712               "of the value computed by experimental_deoptimize");
5713     }
5714 
5715     break;
5716   }
5717   case Intrinsic::vector_reduce_and:
5718   case Intrinsic::vector_reduce_or:
5719   case Intrinsic::vector_reduce_xor:
5720   case Intrinsic::vector_reduce_add:
5721   case Intrinsic::vector_reduce_mul:
5722   case Intrinsic::vector_reduce_smax:
5723   case Intrinsic::vector_reduce_smin:
5724   case Intrinsic::vector_reduce_umax:
5725   case Intrinsic::vector_reduce_umin: {
5726     Type *ArgTy = Call.getArgOperand(0)->getType();
5727     Check(ArgTy->isIntOrIntVectorTy() && ArgTy->isVectorTy(),
5728           "Intrinsic has incorrect argument type!");
5729     break;
5730   }
5731   case Intrinsic::vector_reduce_fmax:
5732   case Intrinsic::vector_reduce_fmin: {
5733     Type *ArgTy = Call.getArgOperand(0)->getType();
5734     Check(ArgTy->isFPOrFPVectorTy() && ArgTy->isVectorTy(),
5735           "Intrinsic has incorrect argument type!");
5736     break;
5737   }
5738   case Intrinsic::vector_reduce_fadd:
5739   case Intrinsic::vector_reduce_fmul: {
5740     // Unlike the other reductions, the first argument is a start value. The
5741     // second argument is the vector to be reduced.
5742     Type *ArgTy = Call.getArgOperand(1)->getType();
5743     Check(ArgTy->isFPOrFPVectorTy() && ArgTy->isVectorTy(),
5744           "Intrinsic has incorrect argument type!");
5745     break;
5746   }
5747   case Intrinsic::smul_fix:
5748   case Intrinsic::smul_fix_sat:
5749   case Intrinsic::umul_fix:
5750   case Intrinsic::umul_fix_sat:
5751   case Intrinsic::sdiv_fix:
5752   case Intrinsic::sdiv_fix_sat:
5753   case Intrinsic::udiv_fix:
5754   case Intrinsic::udiv_fix_sat: {
5755     Value *Op1 = Call.getArgOperand(0);
5756     Value *Op2 = Call.getArgOperand(1);
5757     Check(Op1->getType()->isIntOrIntVectorTy(),
5758           "first operand of [us][mul|div]_fix[_sat] must be an int type or "
5759           "vector of ints");
5760     Check(Op2->getType()->isIntOrIntVectorTy(),
5761           "second operand of [us][mul|div]_fix[_sat] must be an int type or "
5762           "vector of ints");
5763 
5764     auto *Op3 = cast<ConstantInt>(Call.getArgOperand(2));
5765     Check(Op3->getType()->getBitWidth() <= 32,
5766           "third argument of [us][mul|div]_fix[_sat] must fit within 32 bits");
5767 
5768     if (ID == Intrinsic::smul_fix || ID == Intrinsic::smul_fix_sat ||
5769         ID == Intrinsic::sdiv_fix || ID == Intrinsic::sdiv_fix_sat) {
5770       Check(Op3->getZExtValue() < Op1->getType()->getScalarSizeInBits(),
5771             "the scale of s[mul|div]_fix[_sat] must be less than the width of "
5772             "the operands");
5773     } else {
5774       Check(Op3->getZExtValue() <= Op1->getType()->getScalarSizeInBits(),
5775             "the scale of u[mul|div]_fix[_sat] must be less than or equal "
5776             "to the width of the operands");
5777     }
5778     break;
5779   }
5780   case Intrinsic::lround:
5781   case Intrinsic::llround:
5782   case Intrinsic::lrint:
5783   case Intrinsic::llrint: {
5784     Type *ValTy = Call.getArgOperand(0)->getType();
5785     Type *ResultTy = Call.getType();
5786     Check(!ValTy->isVectorTy() && !ResultTy->isVectorTy(),
5787           "Intrinsic does not support vectors", &Call);
5788     break;
5789   }
5790   case Intrinsic::bswap: {
5791     Type *Ty = Call.getType();
5792     unsigned Size = Ty->getScalarSizeInBits();
5793     Check(Size % 16 == 0, "bswap must be an even number of bytes", &Call);
5794     break;
5795   }
5796   case Intrinsic::invariant_start: {
5797     ConstantInt *InvariantSize = dyn_cast<ConstantInt>(Call.getArgOperand(0));
5798     Check(InvariantSize &&
5799               (!InvariantSize->isNegative() || InvariantSize->isMinusOne()),
5800           "invariant_start parameter must be -1, 0 or a positive number",
5801           &Call);
5802     break;
5803   }
5804   case Intrinsic::matrix_multiply:
5805   case Intrinsic::matrix_transpose:
5806   case Intrinsic::matrix_column_major_load:
5807   case Intrinsic::matrix_column_major_store: {
5808     Function *IF = Call.getCalledFunction();
5809     ConstantInt *Stride = nullptr;
5810     ConstantInt *NumRows;
5811     ConstantInt *NumColumns;
5812     VectorType *ResultTy;
5813     Type *Op0ElemTy = nullptr;
5814     Type *Op1ElemTy = nullptr;
5815     switch (ID) {
5816     case Intrinsic::matrix_multiply: {
5817       NumRows = cast<ConstantInt>(Call.getArgOperand(2));
5818       ConstantInt *N = cast<ConstantInt>(Call.getArgOperand(3));
5819       NumColumns = cast<ConstantInt>(Call.getArgOperand(4));
5820       Check(cast<FixedVectorType>(Call.getArgOperand(0)->getType())
5821                     ->getNumElements() ==
5822                 NumRows->getZExtValue() * N->getZExtValue(),
5823             "First argument of a matrix operation does not match specified "
5824             "shape!");
5825       Check(cast<FixedVectorType>(Call.getArgOperand(1)->getType())
5826                     ->getNumElements() ==
5827                 N->getZExtValue() * NumColumns->getZExtValue(),
5828             "Second argument of a matrix operation does not match specified "
5829             "shape!");
5830 
5831       ResultTy = cast<VectorType>(Call.getType());
5832       Op0ElemTy =
5833           cast<VectorType>(Call.getArgOperand(0)->getType())->getElementType();
5834       Op1ElemTy =
5835           cast<VectorType>(Call.getArgOperand(1)->getType())->getElementType();
5836       break;
5837     }
5838     case Intrinsic::matrix_transpose:
5839       NumRows = cast<ConstantInt>(Call.getArgOperand(1));
5840       NumColumns = cast<ConstantInt>(Call.getArgOperand(2));
5841       ResultTy = cast<VectorType>(Call.getType());
5842       Op0ElemTy =
5843           cast<VectorType>(Call.getArgOperand(0)->getType())->getElementType();
5844       break;
5845     case Intrinsic::matrix_column_major_load: {
5846       Stride = dyn_cast<ConstantInt>(Call.getArgOperand(1));
5847       NumRows = cast<ConstantInt>(Call.getArgOperand(3));
5848       NumColumns = cast<ConstantInt>(Call.getArgOperand(4));
5849       ResultTy = cast<VectorType>(Call.getType());
5850       break;
5851     }
5852     case Intrinsic::matrix_column_major_store: {
5853       Stride = dyn_cast<ConstantInt>(Call.getArgOperand(2));
5854       NumRows = cast<ConstantInt>(Call.getArgOperand(4));
5855       NumColumns = cast<ConstantInt>(Call.getArgOperand(5));
5856       ResultTy = cast<VectorType>(Call.getArgOperand(0)->getType());
5857       Op0ElemTy =
5858           cast<VectorType>(Call.getArgOperand(0)->getType())->getElementType();
5859       break;
5860     }
5861     default:
5862       llvm_unreachable("unexpected intrinsic");
5863     }
5864 
5865     Check(ResultTy->getElementType()->isIntegerTy() ||
5866               ResultTy->getElementType()->isFloatingPointTy(),
5867           "Result type must be an integer or floating-point type!", IF);
5868 
5869     if (Op0ElemTy)
5870       Check(ResultTy->getElementType() == Op0ElemTy,
5871             "Vector element type mismatch of the result and first operand "
5872             "vector!",
5873             IF);
5874 
5875     if (Op1ElemTy)
5876       Check(ResultTy->getElementType() == Op1ElemTy,
5877             "Vector element type mismatch of the result and second operand "
5878             "vector!",
5879             IF);
5880 
5881     Check(cast<FixedVectorType>(ResultTy)->getNumElements() ==
5882               NumRows->getZExtValue() * NumColumns->getZExtValue(),
5883           "Result of a matrix operation does not fit in the returned vector!");
5884 
5885     if (Stride)
5886       Check(Stride->getZExtValue() >= NumRows->getZExtValue(),
5887             "Stride must be greater or equal than the number of rows!", IF);
5888 
5889     break;
5890   }
5891   case Intrinsic::experimental_vector_splice: {
5892     VectorType *VecTy = cast<VectorType>(Call.getType());
5893     int64_t Idx = cast<ConstantInt>(Call.getArgOperand(2))->getSExtValue();
5894     int64_t KnownMinNumElements = VecTy->getElementCount().getKnownMinValue();
5895     if (Call.getParent() && Call.getParent()->getParent()) {
5896       AttributeList Attrs = Call.getParent()->getParent()->getAttributes();
5897       if (Attrs.hasFnAttr(Attribute::VScaleRange))
5898         KnownMinNumElements *= Attrs.getFnAttrs().getVScaleRangeMin();
5899     }
5900     Check((Idx < 0 && std::abs(Idx) <= KnownMinNumElements) ||
5901               (Idx >= 0 && Idx < KnownMinNumElements),
5902           "The splice index exceeds the range [-VL, VL-1] where VL is the "
5903           "known minimum number of elements in the vector. For scalable "
5904           "vectors the minimum number of elements is determined from "
5905           "vscale_range.",
5906           &Call);
5907     break;
5908   }
5909   case Intrinsic::experimental_stepvector: {
5910     VectorType *VecTy = dyn_cast<VectorType>(Call.getType());
5911     Check(VecTy && VecTy->getScalarType()->isIntegerTy() &&
5912               VecTy->getScalarSizeInBits() >= 8,
5913           "experimental_stepvector only supported for vectors of integers "
5914           "with a bitwidth of at least 8.",
5915           &Call);
5916     break;
5917   }
5918   case Intrinsic::vector_insert: {
5919     Value *Vec = Call.getArgOperand(0);
5920     Value *SubVec = Call.getArgOperand(1);
5921     Value *Idx = Call.getArgOperand(2);
5922     unsigned IdxN = cast<ConstantInt>(Idx)->getZExtValue();
5923 
5924     VectorType *VecTy = cast<VectorType>(Vec->getType());
5925     VectorType *SubVecTy = cast<VectorType>(SubVec->getType());
5926 
5927     ElementCount VecEC = VecTy->getElementCount();
5928     ElementCount SubVecEC = SubVecTy->getElementCount();
5929     Check(VecTy->getElementType() == SubVecTy->getElementType(),
5930           "vector_insert parameters must have the same element "
5931           "type.",
5932           &Call);
5933     Check(IdxN % SubVecEC.getKnownMinValue() == 0,
5934           "vector_insert index must be a constant multiple of "
5935           "the subvector's known minimum vector length.");
5936 
5937     // If this insertion is not the 'mixed' case where a fixed vector is
5938     // inserted into a scalable vector, ensure that the insertion of the
5939     // subvector does not overrun the parent vector.
5940     if (VecEC.isScalable() == SubVecEC.isScalable()) {
5941       Check(IdxN < VecEC.getKnownMinValue() &&
5942                 IdxN + SubVecEC.getKnownMinValue() <= VecEC.getKnownMinValue(),
5943             "subvector operand of vector_insert would overrun the "
5944             "vector being inserted into.");
5945     }
5946     break;
5947   }
5948   case Intrinsic::vector_extract: {
5949     Value *Vec = Call.getArgOperand(0);
5950     Value *Idx = Call.getArgOperand(1);
5951     unsigned IdxN = cast<ConstantInt>(Idx)->getZExtValue();
5952 
5953     VectorType *ResultTy = cast<VectorType>(Call.getType());
5954     VectorType *VecTy = cast<VectorType>(Vec->getType());
5955 
5956     ElementCount VecEC = VecTy->getElementCount();
5957     ElementCount ResultEC = ResultTy->getElementCount();
5958 
5959     Check(ResultTy->getElementType() == VecTy->getElementType(),
5960           "vector_extract result must have the same element "
5961           "type as the input vector.",
5962           &Call);
5963     Check(IdxN % ResultEC.getKnownMinValue() == 0,
5964           "vector_extract index must be a constant multiple of "
5965           "the result type's known minimum vector length.");
5966 
5967     // If this extraction is not the 'mixed' case where a fixed vector is is
5968     // extracted from a scalable vector, ensure that the extraction does not
5969     // overrun the parent vector.
5970     if (VecEC.isScalable() == ResultEC.isScalable()) {
5971       Check(IdxN < VecEC.getKnownMinValue() &&
5972                 IdxN + ResultEC.getKnownMinValue() <= VecEC.getKnownMinValue(),
5973             "vector_extract would overrun.");
5974     }
5975     break;
5976   }
5977   case Intrinsic::experimental_noalias_scope_decl: {
5978     NoAliasScopeDecls.push_back(cast<IntrinsicInst>(&Call));
5979     break;
5980   }
5981   case Intrinsic::preserve_array_access_index:
5982   case Intrinsic::preserve_struct_access_index:
5983   case Intrinsic::aarch64_ldaxr:
5984   case Intrinsic::aarch64_ldxr:
5985   case Intrinsic::arm_ldaex:
5986   case Intrinsic::arm_ldrex: {
5987     Type *ElemTy = Call.getParamElementType(0);
5988     Check(ElemTy, "Intrinsic requires elementtype attribute on first argument.",
5989           &Call);
5990     break;
5991   }
5992   case Intrinsic::aarch64_stlxr:
5993   case Intrinsic::aarch64_stxr:
5994   case Intrinsic::arm_stlex:
5995   case Intrinsic::arm_strex: {
5996     Type *ElemTy = Call.getAttributes().getParamElementType(1);
5997     Check(ElemTy,
5998           "Intrinsic requires elementtype attribute on second argument.",
5999           &Call);
6000     break;
6001   }
6002   case Intrinsic::aarch64_prefetch: {
6003     Check(cast<ConstantInt>(Call.getArgOperand(1))->getZExtValue() < 2,
6004           "write argument to llvm.aarch64.prefetch must be 0 or 1", Call);
6005     Check(cast<ConstantInt>(Call.getArgOperand(2))->getZExtValue() < 4,
6006           "target argument to llvm.aarch64.prefetch must be 0-3", Call);
6007     Check(cast<ConstantInt>(Call.getArgOperand(3))->getZExtValue() < 2,
6008           "stream argument to llvm.aarch64.prefetch must be 0 or 1", Call);
6009     Check(cast<ConstantInt>(Call.getArgOperand(4))->getZExtValue() < 2,
6010           "isdata argument to llvm.aarch64.prefetch must be 0 or 1", Call);
6011     break;
6012   }
6013   case Intrinsic::callbr_landingpad: {
6014     const auto *CBR = dyn_cast<CallBrInst>(Call.getOperand(0));
6015     Check(CBR, "intrinstic requires callbr operand", &Call);
6016     if (!CBR)
6017       break;
6018 
6019     const BasicBlock *LandingPadBB = Call.getParent();
6020     const BasicBlock *PredBB = LandingPadBB->getUniquePredecessor();
6021     if (!PredBB) {
6022       CheckFailed("Intrinsic in block must have 1 unique predecessor", &Call);
6023       break;
6024     }
6025     if (!isa<CallBrInst>(PredBB->getTerminator())) {
6026       CheckFailed("Intrinsic must have corresponding callbr in predecessor",
6027                   &Call);
6028       break;
6029     }
6030     Check(llvm::any_of(CBR->getIndirectDests(),
6031                        [LandingPadBB](const BasicBlock *IndDest) {
6032                          return IndDest == LandingPadBB;
6033                        }),
6034           "Intrinsic's corresponding callbr must have intrinsic's parent basic "
6035           "block in indirect destination list",
6036           &Call);
6037     const Instruction &First = *LandingPadBB->begin();
6038     Check(&First == &Call, "No other instructions may proceed intrinsic",
6039           &Call);
6040     break;
6041   }
6042   case Intrinsic::amdgcn_cs_chain: {
6043     auto CallerCC = Call.getCaller()->getCallingConv();
6044     switch (CallerCC) {
6045     case CallingConv::AMDGPU_CS:
6046     case CallingConv::AMDGPU_CS_Chain:
6047     case CallingConv::AMDGPU_CS_ChainPreserve:
6048       break;
6049     default:
6050       CheckFailed("Intrinsic can only be used from functions with the "
6051                   "amdgpu_cs, amdgpu_cs_chain or amdgpu_cs_chain_preserve "
6052                   "calling conventions",
6053                   &Call);
6054       break;
6055     }
6056     break;
6057   }
6058   case Intrinsic::experimental_convergence_entry:
6059     Check(Call.getFunction()->isConvergent(),
6060           "Entry intrinsic can occur only in a convergent function.", &Call);
6061     Check(Call.getParent()->isEntryBlock(),
6062           "Entry intrinsic must occur in the entry block.", &Call);
6063     Check(Call.getParent()->getFirstNonPHI() == &Call,
6064           "Entry intrinsic must occur at the start of the basic block.", &Call);
6065     LLVM_FALLTHROUGH;
6066   case Intrinsic::experimental_convergence_anchor:
6067     Check(!Call.getOperandBundle(LLVMContext::OB_convergencectrl),
6068           "Entry or anchor intrinsic must not have a convergencectrl bundle.",
6069           &Call);
6070     break;
6071   case Intrinsic::experimental_convergence_loop:
6072     Check(Call.getOperandBundle(LLVMContext::OB_convergencectrl),
6073           "Loop intrinsic must have a convergencectrl bundle.", &Call);
6074     Check(Call.getParent()->getFirstNonPHI() == &Call,
6075           "Loop intrinsic must occur at the start of the basic block.", &Call);
6076     break;
6077   };
6078 
6079   // Verify that there aren't any unmediated control transfers between funclets.
6080   if (IntrinsicInst::mayLowerToFunctionCall(ID)) {
6081     Function *F = Call.getParent()->getParent();
6082     if (F->hasPersonalityFn() &&
6083         isScopedEHPersonality(classifyEHPersonality(F->getPersonalityFn()))) {
6084       // Run EH funclet coloring on-demand and cache results for other intrinsic
6085       // calls in this function
6086       if (BlockEHFuncletColors.empty())
6087         BlockEHFuncletColors = colorEHFunclets(*F);
6088 
6089       // Check for catch-/cleanup-pad in first funclet block
6090       bool InEHFunclet = false;
6091       BasicBlock *CallBB = Call.getParent();
6092       const ColorVector &CV = BlockEHFuncletColors.find(CallBB)->second;
6093       assert(CV.size() > 0 && "Uncolored block");
6094       for (BasicBlock *ColorFirstBB : CV)
6095         if (dyn_cast_or_null<FuncletPadInst>(ColorFirstBB->getFirstNonPHI()))
6096           InEHFunclet = true;
6097 
6098       // Check for funclet operand bundle
6099       bool HasToken = false;
6100       for (unsigned I = 0, E = Call.getNumOperandBundles(); I != E; ++I)
6101         if (Call.getOperandBundleAt(I).getTagID() == LLVMContext::OB_funclet)
6102           HasToken = true;
6103 
6104       // This would cause silent code truncation in WinEHPrepare
6105       if (InEHFunclet)
6106         Check(HasToken, "Missing funclet token on intrinsic call", &Call);
6107     }
6108   }
6109 }
6110 
6111 /// Carefully grab the subprogram from a local scope.
6112 ///
6113 /// This carefully grabs the subprogram from a local scope, avoiding the
6114 /// built-in assertions that would typically fire.
6115 static DISubprogram *getSubprogram(Metadata *LocalScope) {
6116   if (!LocalScope)
6117     return nullptr;
6118 
6119   if (auto *SP = dyn_cast<DISubprogram>(LocalScope))
6120     return SP;
6121 
6122   if (auto *LB = dyn_cast<DILexicalBlockBase>(LocalScope))
6123     return getSubprogram(LB->getRawScope());
6124 
6125   // Just return null; broken scope chains are checked elsewhere.
6126   assert(!isa<DILocalScope>(LocalScope) && "Unknown type of local scope");
6127   return nullptr;
6128 }
6129 
6130 void Verifier::visitVPIntrinsic(VPIntrinsic &VPI) {
6131   if (auto *VPCast = dyn_cast<VPCastIntrinsic>(&VPI)) {
6132     auto *RetTy = cast<VectorType>(VPCast->getType());
6133     auto *ValTy = cast<VectorType>(VPCast->getOperand(0)->getType());
6134     Check(RetTy->getElementCount() == ValTy->getElementCount(),
6135           "VP cast intrinsic first argument and result vector lengths must be "
6136           "equal",
6137           *VPCast);
6138 
6139     switch (VPCast->getIntrinsicID()) {
6140     default:
6141       llvm_unreachable("Unknown VP cast intrinsic");
6142     case Intrinsic::vp_trunc:
6143       Check(RetTy->isIntOrIntVectorTy() && ValTy->isIntOrIntVectorTy(),
6144             "llvm.vp.trunc intrinsic first argument and result element type "
6145             "must be integer",
6146             *VPCast);
6147       Check(RetTy->getScalarSizeInBits() < ValTy->getScalarSizeInBits(),
6148             "llvm.vp.trunc intrinsic the bit size of first argument must be "
6149             "larger than the bit size of the return type",
6150             *VPCast);
6151       break;
6152     case Intrinsic::vp_zext:
6153     case Intrinsic::vp_sext:
6154       Check(RetTy->isIntOrIntVectorTy() && ValTy->isIntOrIntVectorTy(),
6155             "llvm.vp.zext or llvm.vp.sext intrinsic first argument and result "
6156             "element type must be integer",
6157             *VPCast);
6158       Check(RetTy->getScalarSizeInBits() > ValTy->getScalarSizeInBits(),
6159             "llvm.vp.zext or llvm.vp.sext intrinsic the bit size of first "
6160             "argument must be smaller than the bit size of the return type",
6161             *VPCast);
6162       break;
6163     case Intrinsic::vp_fptoui:
6164     case Intrinsic::vp_fptosi:
6165       Check(
6166           RetTy->isIntOrIntVectorTy() && ValTy->isFPOrFPVectorTy(),
6167           "llvm.vp.fptoui or llvm.vp.fptosi intrinsic first argument element "
6168           "type must be floating-point and result element type must be integer",
6169           *VPCast);
6170       break;
6171     case Intrinsic::vp_uitofp:
6172     case Intrinsic::vp_sitofp:
6173       Check(
6174           RetTy->isFPOrFPVectorTy() && ValTy->isIntOrIntVectorTy(),
6175           "llvm.vp.uitofp or llvm.vp.sitofp intrinsic first argument element "
6176           "type must be integer and result element type must be floating-point",
6177           *VPCast);
6178       break;
6179     case Intrinsic::vp_fptrunc:
6180       Check(RetTy->isFPOrFPVectorTy() && ValTy->isFPOrFPVectorTy(),
6181             "llvm.vp.fptrunc intrinsic first argument and result element type "
6182             "must be floating-point",
6183             *VPCast);
6184       Check(RetTy->getScalarSizeInBits() < ValTy->getScalarSizeInBits(),
6185             "llvm.vp.fptrunc intrinsic the bit size of first argument must be "
6186             "larger than the bit size of the return type",
6187             *VPCast);
6188       break;
6189     case Intrinsic::vp_fpext:
6190       Check(RetTy->isFPOrFPVectorTy() && ValTy->isFPOrFPVectorTy(),
6191             "llvm.vp.fpext intrinsic first argument and result element type "
6192             "must be floating-point",
6193             *VPCast);
6194       Check(RetTy->getScalarSizeInBits() > ValTy->getScalarSizeInBits(),
6195             "llvm.vp.fpext intrinsic the bit size of first argument must be "
6196             "smaller than the bit size of the return type",
6197             *VPCast);
6198       break;
6199     case Intrinsic::vp_ptrtoint:
6200       Check(RetTy->isIntOrIntVectorTy() && ValTy->isPtrOrPtrVectorTy(),
6201             "llvm.vp.ptrtoint intrinsic first argument element type must be "
6202             "pointer and result element type must be integer",
6203             *VPCast);
6204       break;
6205     case Intrinsic::vp_inttoptr:
6206       Check(RetTy->isPtrOrPtrVectorTy() && ValTy->isIntOrIntVectorTy(),
6207             "llvm.vp.inttoptr intrinsic first argument element type must be "
6208             "integer and result element type must be pointer",
6209             *VPCast);
6210       break;
6211     }
6212   }
6213   if (VPI.getIntrinsicID() == Intrinsic::vp_fcmp) {
6214     auto Pred = cast<VPCmpIntrinsic>(&VPI)->getPredicate();
6215     Check(CmpInst::isFPPredicate(Pred),
6216           "invalid predicate for VP FP comparison intrinsic", &VPI);
6217   }
6218   if (VPI.getIntrinsicID() == Intrinsic::vp_icmp) {
6219     auto Pred = cast<VPCmpIntrinsic>(&VPI)->getPredicate();
6220     Check(CmpInst::isIntPredicate(Pred),
6221           "invalid predicate for VP integer comparison intrinsic", &VPI);
6222   }
6223 }
6224 
6225 void Verifier::visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI) {
6226   unsigned NumOperands;
6227   bool HasRoundingMD;
6228   switch (FPI.getIntrinsicID()) {
6229 #define INSTRUCTION(NAME, NARG, ROUND_MODE, INTRINSIC)                         \
6230   case Intrinsic::INTRINSIC:                                                   \
6231     NumOperands = NARG;                                                        \
6232     HasRoundingMD = ROUND_MODE;                                                \
6233     break;
6234 #include "llvm/IR/ConstrainedOps.def"
6235   default:
6236     llvm_unreachable("Invalid constrained FP intrinsic!");
6237   }
6238   NumOperands += (1 + HasRoundingMD);
6239   // Compare intrinsics carry an extra predicate metadata operand.
6240   if (isa<ConstrainedFPCmpIntrinsic>(FPI))
6241     NumOperands += 1;
6242   Check((FPI.arg_size() == NumOperands),
6243         "invalid arguments for constrained FP intrinsic", &FPI);
6244 
6245   switch (FPI.getIntrinsicID()) {
6246   case Intrinsic::experimental_constrained_lrint:
6247   case Intrinsic::experimental_constrained_llrint: {
6248     Type *ValTy = FPI.getArgOperand(0)->getType();
6249     Type *ResultTy = FPI.getType();
6250     Check(!ValTy->isVectorTy() && !ResultTy->isVectorTy(),
6251           "Intrinsic does not support vectors", &FPI);
6252   }
6253     break;
6254 
6255   case Intrinsic::experimental_constrained_lround:
6256   case Intrinsic::experimental_constrained_llround: {
6257     Type *ValTy = FPI.getArgOperand(0)->getType();
6258     Type *ResultTy = FPI.getType();
6259     Check(!ValTy->isVectorTy() && !ResultTy->isVectorTy(),
6260           "Intrinsic does not support vectors", &FPI);
6261     break;
6262   }
6263 
6264   case Intrinsic::experimental_constrained_fcmp:
6265   case Intrinsic::experimental_constrained_fcmps: {
6266     auto Pred = cast<ConstrainedFPCmpIntrinsic>(&FPI)->getPredicate();
6267     Check(CmpInst::isFPPredicate(Pred),
6268           "invalid predicate for constrained FP comparison intrinsic", &FPI);
6269     break;
6270   }
6271 
6272   case Intrinsic::experimental_constrained_fptosi:
6273   case Intrinsic::experimental_constrained_fptoui: {
6274     Value *Operand = FPI.getArgOperand(0);
6275     ElementCount SrcEC;
6276     Check(Operand->getType()->isFPOrFPVectorTy(),
6277           "Intrinsic first argument must be floating point", &FPI);
6278     if (auto *OperandT = dyn_cast<VectorType>(Operand->getType())) {
6279       SrcEC = cast<VectorType>(OperandT)->getElementCount();
6280     }
6281 
6282     Operand = &FPI;
6283     Check(SrcEC.isNonZero() == Operand->getType()->isVectorTy(),
6284           "Intrinsic first argument and result disagree on vector use", &FPI);
6285     Check(Operand->getType()->isIntOrIntVectorTy(),
6286           "Intrinsic result must be an integer", &FPI);
6287     if (auto *OperandT = dyn_cast<VectorType>(Operand->getType())) {
6288       Check(SrcEC == cast<VectorType>(OperandT)->getElementCount(),
6289             "Intrinsic first argument and result vector lengths must be equal",
6290             &FPI);
6291     }
6292   }
6293     break;
6294 
6295   case Intrinsic::experimental_constrained_sitofp:
6296   case Intrinsic::experimental_constrained_uitofp: {
6297     Value *Operand = FPI.getArgOperand(0);
6298     ElementCount SrcEC;
6299     Check(Operand->getType()->isIntOrIntVectorTy(),
6300           "Intrinsic first argument must be integer", &FPI);
6301     if (auto *OperandT = dyn_cast<VectorType>(Operand->getType())) {
6302       SrcEC = cast<VectorType>(OperandT)->getElementCount();
6303     }
6304 
6305     Operand = &FPI;
6306     Check(SrcEC.isNonZero() == Operand->getType()->isVectorTy(),
6307           "Intrinsic first argument and result disagree on vector use", &FPI);
6308     Check(Operand->getType()->isFPOrFPVectorTy(),
6309           "Intrinsic result must be a floating point", &FPI);
6310     if (auto *OperandT = dyn_cast<VectorType>(Operand->getType())) {
6311       Check(SrcEC == cast<VectorType>(OperandT)->getElementCount(),
6312             "Intrinsic first argument and result vector lengths must be equal",
6313             &FPI);
6314     }
6315   } break;
6316 
6317   case Intrinsic::experimental_constrained_fptrunc:
6318   case Intrinsic::experimental_constrained_fpext: {
6319     Value *Operand = FPI.getArgOperand(0);
6320     Type *OperandTy = Operand->getType();
6321     Value *Result = &FPI;
6322     Type *ResultTy = Result->getType();
6323     Check(OperandTy->isFPOrFPVectorTy(),
6324           "Intrinsic first argument must be FP or FP vector", &FPI);
6325     Check(ResultTy->isFPOrFPVectorTy(),
6326           "Intrinsic result must be FP or FP vector", &FPI);
6327     Check(OperandTy->isVectorTy() == ResultTy->isVectorTy(),
6328           "Intrinsic first argument and result disagree on vector use", &FPI);
6329     if (OperandTy->isVectorTy()) {
6330       Check(cast<VectorType>(OperandTy)->getElementCount() ==
6331                 cast<VectorType>(ResultTy)->getElementCount(),
6332             "Intrinsic first argument and result vector lengths must be equal",
6333             &FPI);
6334     }
6335     if (FPI.getIntrinsicID() == Intrinsic::experimental_constrained_fptrunc) {
6336       Check(OperandTy->getScalarSizeInBits() > ResultTy->getScalarSizeInBits(),
6337             "Intrinsic first argument's type must be larger than result type",
6338             &FPI);
6339     } else {
6340       Check(OperandTy->getScalarSizeInBits() < ResultTy->getScalarSizeInBits(),
6341             "Intrinsic first argument's type must be smaller than result type",
6342             &FPI);
6343     }
6344   }
6345     break;
6346 
6347   default:
6348     break;
6349   }
6350 
6351   // If a non-metadata argument is passed in a metadata slot then the
6352   // error will be caught earlier when the incorrect argument doesn't
6353   // match the specification in the intrinsic call table. Thus, no
6354   // argument type check is needed here.
6355 
6356   Check(FPI.getExceptionBehavior().has_value(),
6357         "invalid exception behavior argument", &FPI);
6358   if (HasRoundingMD) {
6359     Check(FPI.getRoundingMode().has_value(), "invalid rounding mode argument",
6360           &FPI);
6361   }
6362 }
6363 
6364 void Verifier::visitDbgIntrinsic(StringRef Kind, DbgVariableIntrinsic &DII) {
6365   auto *MD = DII.getRawLocation();
6366   CheckDI(isa<ValueAsMetadata>(MD) || isa<DIArgList>(MD) ||
6367               (isa<MDNode>(MD) && !cast<MDNode>(MD)->getNumOperands()),
6368           "invalid llvm.dbg." + Kind + " intrinsic address/value", &DII, MD);
6369   CheckDI(isa<DILocalVariable>(DII.getRawVariable()),
6370           "invalid llvm.dbg." + Kind + " intrinsic variable", &DII,
6371           DII.getRawVariable());
6372   CheckDI(isa<DIExpression>(DII.getRawExpression()),
6373           "invalid llvm.dbg." + Kind + " intrinsic expression", &DII,
6374           DII.getRawExpression());
6375 
6376   if (auto *DAI = dyn_cast<DbgAssignIntrinsic>(&DII)) {
6377     CheckDI(isa<DIAssignID>(DAI->getRawAssignID()),
6378             "invalid llvm.dbg.assign intrinsic DIAssignID", &DII,
6379             DAI->getRawAssignID());
6380     const auto *RawAddr = DAI->getRawAddress();
6381     CheckDI(
6382         isa<ValueAsMetadata>(RawAddr) ||
6383             (isa<MDNode>(RawAddr) && !cast<MDNode>(RawAddr)->getNumOperands()),
6384         "invalid llvm.dbg.assign intrinsic address", &DII,
6385         DAI->getRawAddress());
6386     CheckDI(isa<DIExpression>(DAI->getRawAddressExpression()),
6387             "invalid llvm.dbg.assign intrinsic address expression", &DII,
6388             DAI->getRawAddressExpression());
6389     // All of the linked instructions should be in the same function as DII.
6390     for (Instruction *I : at::getAssignmentInsts(DAI))
6391       CheckDI(DAI->getFunction() == I->getFunction(),
6392               "inst not in same function as dbg.assign", I, DAI);
6393   }
6394 
6395   // Ignore broken !dbg attachments; they're checked elsewhere.
6396   if (MDNode *N = DII.getDebugLoc().getAsMDNode())
6397     if (!isa<DILocation>(N))
6398       return;
6399 
6400   BasicBlock *BB = DII.getParent();
6401   Function *F = BB ? BB->getParent() : nullptr;
6402 
6403   // The scopes for variables and !dbg attachments must agree.
6404   DILocalVariable *Var = DII.getVariable();
6405   DILocation *Loc = DII.getDebugLoc();
6406   CheckDI(Loc, "llvm.dbg." + Kind + " intrinsic requires a !dbg attachment",
6407           &DII, BB, F);
6408 
6409   DISubprogram *VarSP = getSubprogram(Var->getRawScope());
6410   DISubprogram *LocSP = getSubprogram(Loc->getRawScope());
6411   if (!VarSP || !LocSP)
6412     return; // Broken scope chains are checked elsewhere.
6413 
6414   CheckDI(VarSP == LocSP,
6415           "mismatched subprogram between llvm.dbg." + Kind +
6416               " variable and !dbg attachment",
6417           &DII, BB, F, Var, Var->getScope()->getSubprogram(), Loc,
6418           Loc->getScope()->getSubprogram());
6419 
6420   // This check is redundant with one in visitLocalVariable().
6421   CheckDI(isType(Var->getRawType()), "invalid type ref", Var,
6422           Var->getRawType());
6423   verifyFnArgs(DII);
6424 }
6425 
6426 void Verifier::visitDbgLabelIntrinsic(StringRef Kind, DbgLabelInst &DLI) {
6427   CheckDI(isa<DILabel>(DLI.getRawLabel()),
6428           "invalid llvm.dbg." + Kind + " intrinsic variable", &DLI,
6429           DLI.getRawLabel());
6430 
6431   // Ignore broken !dbg attachments; they're checked elsewhere.
6432   if (MDNode *N = DLI.getDebugLoc().getAsMDNode())
6433     if (!isa<DILocation>(N))
6434       return;
6435 
6436   BasicBlock *BB = DLI.getParent();
6437   Function *F = BB ? BB->getParent() : nullptr;
6438 
6439   // The scopes for variables and !dbg attachments must agree.
6440   DILabel *Label = DLI.getLabel();
6441   DILocation *Loc = DLI.getDebugLoc();
6442   Check(Loc, "llvm.dbg." + Kind + " intrinsic requires a !dbg attachment", &DLI,
6443         BB, F);
6444 
6445   DISubprogram *LabelSP = getSubprogram(Label->getRawScope());
6446   DISubprogram *LocSP = getSubprogram(Loc->getRawScope());
6447   if (!LabelSP || !LocSP)
6448     return;
6449 
6450   CheckDI(LabelSP == LocSP,
6451           "mismatched subprogram between llvm.dbg." + Kind +
6452               " label and !dbg attachment",
6453           &DLI, BB, F, Label, Label->getScope()->getSubprogram(), Loc,
6454           Loc->getScope()->getSubprogram());
6455 }
6456 
6457 void Verifier::verifyFragmentExpression(const DbgVariableIntrinsic &I) {
6458   DILocalVariable *V = dyn_cast_or_null<DILocalVariable>(I.getRawVariable());
6459   DIExpression *E = dyn_cast_or_null<DIExpression>(I.getRawExpression());
6460 
6461   // We don't know whether this intrinsic verified correctly.
6462   if (!V || !E || !E->isValid())
6463     return;
6464 
6465   // Nothing to do if this isn't a DW_OP_LLVM_fragment expression.
6466   auto Fragment = E->getFragmentInfo();
6467   if (!Fragment)
6468     return;
6469 
6470   // The frontend helps out GDB by emitting the members of local anonymous
6471   // unions as artificial local variables with shared storage. When SROA splits
6472   // the storage for artificial local variables that are smaller than the entire
6473   // union, the overhang piece will be outside of the allotted space for the
6474   // variable and this check fails.
6475   // FIXME: Remove this check as soon as clang stops doing this; it hides bugs.
6476   if (V->isArtificial())
6477     return;
6478 
6479   verifyFragmentExpression(*V, *Fragment, &I);
6480 }
6481 
6482 template <typename ValueOrMetadata>
6483 void Verifier::verifyFragmentExpression(const DIVariable &V,
6484                                         DIExpression::FragmentInfo Fragment,
6485                                         ValueOrMetadata *Desc) {
6486   // If there's no size, the type is broken, but that should be checked
6487   // elsewhere.
6488   auto VarSize = V.getSizeInBits();
6489   if (!VarSize)
6490     return;
6491 
6492   unsigned FragSize = Fragment.SizeInBits;
6493   unsigned FragOffset = Fragment.OffsetInBits;
6494   CheckDI(FragSize + FragOffset <= *VarSize,
6495           "fragment is larger than or outside of variable", Desc, &V);
6496   CheckDI(FragSize != *VarSize, "fragment covers entire variable", Desc, &V);
6497 }
6498 
6499 void Verifier::verifyFnArgs(const DbgVariableIntrinsic &I) {
6500   // This function does not take the scope of noninlined function arguments into
6501   // account. Don't run it if current function is nodebug, because it may
6502   // contain inlined debug intrinsics.
6503   if (!HasDebugInfo)
6504     return;
6505 
6506   // For performance reasons only check non-inlined ones.
6507   if (I.getDebugLoc()->getInlinedAt())
6508     return;
6509 
6510   DILocalVariable *Var = I.getVariable();
6511   CheckDI(Var, "dbg intrinsic without variable");
6512 
6513   unsigned ArgNo = Var->getArg();
6514   if (!ArgNo)
6515     return;
6516 
6517   // Verify there are no duplicate function argument debug info entries.
6518   // These will cause hard-to-debug assertions in the DWARF backend.
6519   if (DebugFnArgs.size() < ArgNo)
6520     DebugFnArgs.resize(ArgNo, nullptr);
6521 
6522   auto *Prev = DebugFnArgs[ArgNo - 1];
6523   DebugFnArgs[ArgNo - 1] = Var;
6524   CheckDI(!Prev || (Prev == Var), "conflicting debug info for argument", &I,
6525           Prev, Var);
6526 }
6527 
6528 void Verifier::verifyNotEntryValue(const DbgVariableIntrinsic &I) {
6529   DIExpression *E = dyn_cast_or_null<DIExpression>(I.getRawExpression());
6530 
6531   // We don't know whether this intrinsic verified correctly.
6532   if (!E || !E->isValid())
6533     return;
6534 
6535   // We allow EntryValues for swift async arguments, as they have an
6536   // ABI-guarantee to be turned into a specific register.
6537   if (isa<ValueAsMetadata>(I.getRawLocation()))
6538     if (auto *ArgLoc = dyn_cast_or_null<Argument>(I.getVariableLocationOp(0));
6539         ArgLoc && ArgLoc->hasAttribute(Attribute::SwiftAsync))
6540       return;
6541 
6542   CheckDI(!E->isEntryValue(),
6543           "Entry values are only allowed in MIR unless they target a "
6544           "swiftasync Argument",
6545           &I);
6546 }
6547 
6548 void Verifier::verifyCompileUnits() {
6549   // When more than one Module is imported into the same context, such as during
6550   // an LTO build before linking the modules, ODR type uniquing may cause types
6551   // to point to a different CU. This check does not make sense in this case.
6552   if (M.getContext().isODRUniquingDebugTypes())
6553     return;
6554   auto *CUs = M.getNamedMetadata("llvm.dbg.cu");
6555   SmallPtrSet<const Metadata *, 2> Listed;
6556   if (CUs)
6557     Listed.insert(CUs->op_begin(), CUs->op_end());
6558   for (const auto *CU : CUVisited)
6559     CheckDI(Listed.count(CU), "DICompileUnit not listed in llvm.dbg.cu", CU);
6560   CUVisited.clear();
6561 }
6562 
6563 void Verifier::verifyDeoptimizeCallingConvs() {
6564   if (DeoptimizeDeclarations.empty())
6565     return;
6566 
6567   const Function *First = DeoptimizeDeclarations[0];
6568   for (const auto *F : ArrayRef(DeoptimizeDeclarations).slice(1)) {
6569     Check(First->getCallingConv() == F->getCallingConv(),
6570           "All llvm.experimental.deoptimize declarations must have the same "
6571           "calling convention",
6572           First, F);
6573   }
6574 }
6575 
6576 void Verifier::verifyAttachedCallBundle(const CallBase &Call,
6577                                         const OperandBundleUse &BU) {
6578   FunctionType *FTy = Call.getFunctionType();
6579 
6580   Check((FTy->getReturnType()->isPointerTy() ||
6581          (Call.doesNotReturn() && FTy->getReturnType()->isVoidTy())),
6582         "a call with operand bundle \"clang.arc.attachedcall\" must call a "
6583         "function returning a pointer or a non-returning function that has a "
6584         "void return type",
6585         Call);
6586 
6587   Check(BU.Inputs.size() == 1 && isa<Function>(BU.Inputs.front()),
6588         "operand bundle \"clang.arc.attachedcall\" requires one function as "
6589         "an argument",
6590         Call);
6591 
6592   auto *Fn = cast<Function>(BU.Inputs.front());
6593   Intrinsic::ID IID = Fn->getIntrinsicID();
6594 
6595   if (IID) {
6596     Check((IID == Intrinsic::objc_retainAutoreleasedReturnValue ||
6597            IID == Intrinsic::objc_unsafeClaimAutoreleasedReturnValue),
6598           "invalid function argument", Call);
6599   } else {
6600     StringRef FnName = Fn->getName();
6601     Check((FnName == "objc_retainAutoreleasedReturnValue" ||
6602            FnName == "objc_unsafeClaimAutoreleasedReturnValue"),
6603           "invalid function argument", Call);
6604   }
6605 }
6606 
6607 void Verifier::verifySourceDebugInfo(const DICompileUnit &U, const DIFile &F) {
6608   bool HasSource = F.getSource().has_value();
6609   if (!HasSourceDebugInfo.count(&U))
6610     HasSourceDebugInfo[&U] = HasSource;
6611   CheckDI(HasSource == HasSourceDebugInfo[&U],
6612           "inconsistent use of embedded source");
6613 }
6614 
6615 void Verifier::verifyNoAliasScopeDecl() {
6616   if (NoAliasScopeDecls.empty())
6617     return;
6618 
6619   // only a single scope must be declared at a time.
6620   for (auto *II : NoAliasScopeDecls) {
6621     assert(II->getIntrinsicID() == Intrinsic::experimental_noalias_scope_decl &&
6622            "Not a llvm.experimental.noalias.scope.decl ?");
6623     const auto *ScopeListMV = dyn_cast<MetadataAsValue>(
6624         II->getOperand(Intrinsic::NoAliasScopeDeclScopeArg));
6625     Check(ScopeListMV != nullptr,
6626           "llvm.experimental.noalias.scope.decl must have a MetadataAsValue "
6627           "argument",
6628           II);
6629 
6630     const auto *ScopeListMD = dyn_cast<MDNode>(ScopeListMV->getMetadata());
6631     Check(ScopeListMD != nullptr, "!id.scope.list must point to an MDNode", II);
6632     Check(ScopeListMD->getNumOperands() == 1,
6633           "!id.scope.list must point to a list with a single scope", II);
6634     visitAliasScopeListMetadata(ScopeListMD);
6635   }
6636 
6637   // Only check the domination rule when requested. Once all passes have been
6638   // adapted this option can go away.
6639   if (!VerifyNoAliasScopeDomination)
6640     return;
6641 
6642   // Now sort the intrinsics based on the scope MDNode so that declarations of
6643   // the same scopes are next to each other.
6644   auto GetScope = [](IntrinsicInst *II) {
6645     const auto *ScopeListMV = cast<MetadataAsValue>(
6646         II->getOperand(Intrinsic::NoAliasScopeDeclScopeArg));
6647     return &cast<MDNode>(ScopeListMV->getMetadata())->getOperand(0);
6648   };
6649 
6650   // We are sorting on MDNode pointers here. For valid input IR this is ok.
6651   // TODO: Sort on Metadata ID to avoid non-deterministic error messages.
6652   auto Compare = [GetScope](IntrinsicInst *Lhs, IntrinsicInst *Rhs) {
6653     return GetScope(Lhs) < GetScope(Rhs);
6654   };
6655 
6656   llvm::sort(NoAliasScopeDecls, Compare);
6657 
6658   // Go over the intrinsics and check that for the same scope, they are not
6659   // dominating each other.
6660   auto ItCurrent = NoAliasScopeDecls.begin();
6661   while (ItCurrent != NoAliasScopeDecls.end()) {
6662     auto CurScope = GetScope(*ItCurrent);
6663     auto ItNext = ItCurrent;
6664     do {
6665       ++ItNext;
6666     } while (ItNext != NoAliasScopeDecls.end() &&
6667              GetScope(*ItNext) == CurScope);
6668 
6669     // [ItCurrent, ItNext) represents the declarations for the same scope.
6670     // Ensure they are not dominating each other.. but only if it is not too
6671     // expensive.
6672     if (ItNext - ItCurrent < 32)
6673       for (auto *I : llvm::make_range(ItCurrent, ItNext))
6674         for (auto *J : llvm::make_range(ItCurrent, ItNext))
6675           if (I != J)
6676             Check(!DT.dominates(I, J),
6677                   "llvm.experimental.noalias.scope.decl dominates another one "
6678                   "with the same scope",
6679                   I);
6680     ItCurrent = ItNext;
6681   }
6682 }
6683 
6684 //===----------------------------------------------------------------------===//
6685 //  Implement the public interfaces to this file...
6686 //===----------------------------------------------------------------------===//
6687 
6688 bool llvm::verifyFunction(const Function &f, raw_ostream *OS) {
6689   Function &F = const_cast<Function &>(f);
6690 
6691   // Don't use a raw_null_ostream.  Printing IR is expensive.
6692   Verifier V(OS, /*ShouldTreatBrokenDebugInfoAsError=*/true, *f.getParent());
6693 
6694   // Note that this function's return value is inverted from what you would
6695   // expect of a function called "verify".
6696   return !V.verify(F);
6697 }
6698 
6699 bool llvm::verifyModule(const Module &M, raw_ostream *OS,
6700                         bool *BrokenDebugInfo) {
6701   // Don't use a raw_null_ostream.  Printing IR is expensive.
6702   Verifier V(OS, /*ShouldTreatBrokenDebugInfoAsError=*/!BrokenDebugInfo, M);
6703 
6704   bool Broken = false;
6705   for (const Function &F : M)
6706     Broken |= !V.verify(F);
6707 
6708   Broken |= !V.verify();
6709   if (BrokenDebugInfo)
6710     *BrokenDebugInfo = V.hasBrokenDebugInfo();
6711   // Note that this function's return value is inverted from what you would
6712   // expect of a function called "verify".
6713   return Broken;
6714 }
6715 
6716 namespace {
6717 
6718 struct VerifierLegacyPass : public FunctionPass {
6719   static char ID;
6720 
6721   std::unique_ptr<Verifier> V;
6722   bool FatalErrors = true;
6723 
6724   VerifierLegacyPass() : FunctionPass(ID) {
6725     initializeVerifierLegacyPassPass(*PassRegistry::getPassRegistry());
6726   }
6727   explicit VerifierLegacyPass(bool FatalErrors)
6728       : FunctionPass(ID),
6729         FatalErrors(FatalErrors) {
6730     initializeVerifierLegacyPassPass(*PassRegistry::getPassRegistry());
6731   }
6732 
6733   bool doInitialization(Module &M) override {
6734     V = std::make_unique<Verifier>(
6735         &dbgs(), /*ShouldTreatBrokenDebugInfoAsError=*/false, M);
6736     return false;
6737   }
6738 
6739   bool runOnFunction(Function &F) override {
6740     if (!V->verify(F) && FatalErrors) {
6741       errs() << "in function " << F.getName() << '\n';
6742       report_fatal_error("Broken function found, compilation aborted!");
6743     }
6744     return false;
6745   }
6746 
6747   bool doFinalization(Module &M) override {
6748     bool HasErrors = false;
6749     for (Function &F : M)
6750       if (F.isDeclaration())
6751         HasErrors |= !V->verify(F);
6752 
6753     HasErrors |= !V->verify();
6754     if (FatalErrors && (HasErrors || V->hasBrokenDebugInfo()))
6755       report_fatal_error("Broken module found, compilation aborted!");
6756     return false;
6757   }
6758 
6759   void getAnalysisUsage(AnalysisUsage &AU) const override {
6760     AU.setPreservesAll();
6761   }
6762 };
6763 
6764 } // end anonymous namespace
6765 
6766 /// Helper to issue failure from the TBAA verification
6767 template <typename... Tys> void TBAAVerifier::CheckFailed(Tys &&... Args) {
6768   if (Diagnostic)
6769     return Diagnostic->CheckFailed(Args...);
6770 }
6771 
6772 #define CheckTBAA(C, ...)                                                      \
6773   do {                                                                         \
6774     if (!(C)) {                                                                \
6775       CheckFailed(__VA_ARGS__);                                                \
6776       return false;                                                            \
6777     }                                                                          \
6778   } while (false)
6779 
6780 /// Verify that \p BaseNode can be used as the "base type" in the struct-path
6781 /// TBAA scheme.  This means \p BaseNode is either a scalar node, or a
6782 /// struct-type node describing an aggregate data structure (like a struct).
6783 TBAAVerifier::TBAABaseNodeSummary
6784 TBAAVerifier::verifyTBAABaseNode(Instruction &I, const MDNode *BaseNode,
6785                                  bool IsNewFormat) {
6786   if (BaseNode->getNumOperands() < 2) {
6787     CheckFailed("Base nodes must have at least two operands", &I, BaseNode);
6788     return {true, ~0u};
6789   }
6790 
6791   auto Itr = TBAABaseNodes.find(BaseNode);
6792   if (Itr != TBAABaseNodes.end())
6793     return Itr->second;
6794 
6795   auto Result = verifyTBAABaseNodeImpl(I, BaseNode, IsNewFormat);
6796   auto InsertResult = TBAABaseNodes.insert({BaseNode, Result});
6797   (void)InsertResult;
6798   assert(InsertResult.second && "We just checked!");
6799   return Result;
6800 }
6801 
6802 TBAAVerifier::TBAABaseNodeSummary
6803 TBAAVerifier::verifyTBAABaseNodeImpl(Instruction &I, const MDNode *BaseNode,
6804                                      bool IsNewFormat) {
6805   const TBAAVerifier::TBAABaseNodeSummary InvalidNode = {true, ~0u};
6806 
6807   if (BaseNode->getNumOperands() == 2) {
6808     // Scalar nodes can only be accessed at offset 0.
6809     return isValidScalarTBAANode(BaseNode)
6810                ? TBAAVerifier::TBAABaseNodeSummary({false, 0})
6811                : InvalidNode;
6812   }
6813 
6814   if (IsNewFormat) {
6815     if (BaseNode->getNumOperands() % 3 != 0) {
6816       CheckFailed("Access tag nodes must have the number of operands that is a "
6817                   "multiple of 3!", BaseNode);
6818       return InvalidNode;
6819     }
6820   } else {
6821     if (BaseNode->getNumOperands() % 2 != 1) {
6822       CheckFailed("Struct tag nodes must have an odd number of operands!",
6823                   BaseNode);
6824       return InvalidNode;
6825     }
6826   }
6827 
6828   // Check the type size field.
6829   if (IsNewFormat) {
6830     auto *TypeSizeNode = mdconst::dyn_extract_or_null<ConstantInt>(
6831         BaseNode->getOperand(1));
6832     if (!TypeSizeNode) {
6833       CheckFailed("Type size nodes must be constants!", &I, BaseNode);
6834       return InvalidNode;
6835     }
6836   }
6837 
6838   // Check the type name field. In the new format it can be anything.
6839   if (!IsNewFormat && !isa<MDString>(BaseNode->getOperand(0))) {
6840     CheckFailed("Struct tag nodes have a string as their first operand",
6841                 BaseNode);
6842     return InvalidNode;
6843   }
6844 
6845   bool Failed = false;
6846 
6847   std::optional<APInt> PrevOffset;
6848   unsigned BitWidth = ~0u;
6849 
6850   // We've already checked that BaseNode is not a degenerate root node with one
6851   // operand in \c verifyTBAABaseNode, so this loop should run at least once.
6852   unsigned FirstFieldOpNo = IsNewFormat ? 3 : 1;
6853   unsigned NumOpsPerField = IsNewFormat ? 3 : 2;
6854   for (unsigned Idx = FirstFieldOpNo; Idx < BaseNode->getNumOperands();
6855            Idx += NumOpsPerField) {
6856     const MDOperand &FieldTy = BaseNode->getOperand(Idx);
6857     const MDOperand &FieldOffset = BaseNode->getOperand(Idx + 1);
6858     if (!isa<MDNode>(FieldTy)) {
6859       CheckFailed("Incorrect field entry in struct type node!", &I, BaseNode);
6860       Failed = true;
6861       continue;
6862     }
6863 
6864     auto *OffsetEntryCI =
6865         mdconst::dyn_extract_or_null<ConstantInt>(FieldOffset);
6866     if (!OffsetEntryCI) {
6867       CheckFailed("Offset entries must be constants!", &I, BaseNode);
6868       Failed = true;
6869       continue;
6870     }
6871 
6872     if (BitWidth == ~0u)
6873       BitWidth = OffsetEntryCI->getBitWidth();
6874 
6875     if (OffsetEntryCI->getBitWidth() != BitWidth) {
6876       CheckFailed(
6877           "Bitwidth between the offsets and struct type entries must match", &I,
6878           BaseNode);
6879       Failed = true;
6880       continue;
6881     }
6882 
6883     // NB! As far as I can tell, we generate a non-strictly increasing offset
6884     // sequence only from structs that have zero size bit fields.  When
6885     // recursing into a contained struct in \c getFieldNodeFromTBAABaseNode we
6886     // pick the field lexically the latest in struct type metadata node.  This
6887     // mirrors the actual behavior of the alias analysis implementation.
6888     bool IsAscending =
6889         !PrevOffset || PrevOffset->ule(OffsetEntryCI->getValue());
6890 
6891     if (!IsAscending) {
6892       CheckFailed("Offsets must be increasing!", &I, BaseNode);
6893       Failed = true;
6894     }
6895 
6896     PrevOffset = OffsetEntryCI->getValue();
6897 
6898     if (IsNewFormat) {
6899       auto *MemberSizeNode = mdconst::dyn_extract_or_null<ConstantInt>(
6900           BaseNode->getOperand(Idx + 2));
6901       if (!MemberSizeNode) {
6902         CheckFailed("Member size entries must be constants!", &I, BaseNode);
6903         Failed = true;
6904         continue;
6905       }
6906     }
6907   }
6908 
6909   return Failed ? InvalidNode
6910                 : TBAAVerifier::TBAABaseNodeSummary(false, BitWidth);
6911 }
6912 
6913 static bool IsRootTBAANode(const MDNode *MD) {
6914   return MD->getNumOperands() < 2;
6915 }
6916 
6917 static bool IsScalarTBAANodeImpl(const MDNode *MD,
6918                                  SmallPtrSetImpl<const MDNode *> &Visited) {
6919   if (MD->getNumOperands() != 2 && MD->getNumOperands() != 3)
6920     return false;
6921 
6922   if (!isa<MDString>(MD->getOperand(0)))
6923     return false;
6924 
6925   if (MD->getNumOperands() == 3) {
6926     auto *Offset = mdconst::dyn_extract<ConstantInt>(MD->getOperand(2));
6927     if (!(Offset && Offset->isZero() && isa<MDString>(MD->getOperand(0))))
6928       return false;
6929   }
6930 
6931   auto *Parent = dyn_cast_or_null<MDNode>(MD->getOperand(1));
6932   return Parent && Visited.insert(Parent).second &&
6933          (IsRootTBAANode(Parent) || IsScalarTBAANodeImpl(Parent, Visited));
6934 }
6935 
6936 bool TBAAVerifier::isValidScalarTBAANode(const MDNode *MD) {
6937   auto ResultIt = TBAAScalarNodes.find(MD);
6938   if (ResultIt != TBAAScalarNodes.end())
6939     return ResultIt->second;
6940 
6941   SmallPtrSet<const MDNode *, 4> Visited;
6942   bool Result = IsScalarTBAANodeImpl(MD, Visited);
6943   auto InsertResult = TBAAScalarNodes.insert({MD, Result});
6944   (void)InsertResult;
6945   assert(InsertResult.second && "Just checked!");
6946 
6947   return Result;
6948 }
6949 
6950 /// Returns the field node at the offset \p Offset in \p BaseNode.  Update \p
6951 /// Offset in place to be the offset within the field node returned.
6952 ///
6953 /// We assume we've okayed \p BaseNode via \c verifyTBAABaseNode.
6954 MDNode *TBAAVerifier::getFieldNodeFromTBAABaseNode(Instruction &I,
6955                                                    const MDNode *BaseNode,
6956                                                    APInt &Offset,
6957                                                    bool IsNewFormat) {
6958   assert(BaseNode->getNumOperands() >= 2 && "Invalid base node!");
6959 
6960   // Scalar nodes have only one possible "field" -- their parent in the access
6961   // hierarchy.  Offset must be zero at this point, but our caller is supposed
6962   // to check that.
6963   if (BaseNode->getNumOperands() == 2)
6964     return cast<MDNode>(BaseNode->getOperand(1));
6965 
6966   unsigned FirstFieldOpNo = IsNewFormat ? 3 : 1;
6967   unsigned NumOpsPerField = IsNewFormat ? 3 : 2;
6968   for (unsigned Idx = FirstFieldOpNo; Idx < BaseNode->getNumOperands();
6969            Idx += NumOpsPerField) {
6970     auto *OffsetEntryCI =
6971         mdconst::extract<ConstantInt>(BaseNode->getOperand(Idx + 1));
6972     if (OffsetEntryCI->getValue().ugt(Offset)) {
6973       if (Idx == FirstFieldOpNo) {
6974         CheckFailed("Could not find TBAA parent in struct type node", &I,
6975                     BaseNode, &Offset);
6976         return nullptr;
6977       }
6978 
6979       unsigned PrevIdx = Idx - NumOpsPerField;
6980       auto *PrevOffsetEntryCI =
6981           mdconst::extract<ConstantInt>(BaseNode->getOperand(PrevIdx + 1));
6982       Offset -= PrevOffsetEntryCI->getValue();
6983       return cast<MDNode>(BaseNode->getOperand(PrevIdx));
6984     }
6985   }
6986 
6987   unsigned LastIdx = BaseNode->getNumOperands() - NumOpsPerField;
6988   auto *LastOffsetEntryCI = mdconst::extract<ConstantInt>(
6989       BaseNode->getOperand(LastIdx + 1));
6990   Offset -= LastOffsetEntryCI->getValue();
6991   return cast<MDNode>(BaseNode->getOperand(LastIdx));
6992 }
6993 
6994 static bool isNewFormatTBAATypeNode(llvm::MDNode *Type) {
6995   if (!Type || Type->getNumOperands() < 3)
6996     return false;
6997 
6998   // In the new format type nodes shall have a reference to the parent type as
6999   // its first operand.
7000   return isa_and_nonnull<MDNode>(Type->getOperand(0));
7001 }
7002 
7003 bool TBAAVerifier::visitTBAAMetadata(Instruction &I, const MDNode *MD) {
7004   CheckTBAA(MD->getNumOperands() > 0, "TBAA metadata cannot have 0 operands",
7005             &I, MD);
7006 
7007   CheckTBAA(isa<LoadInst>(I) || isa<StoreInst>(I) || isa<CallInst>(I) ||
7008                 isa<VAArgInst>(I) || isa<AtomicRMWInst>(I) ||
7009                 isa<AtomicCmpXchgInst>(I),
7010             "This instruction shall not have a TBAA access tag!", &I);
7011 
7012   bool IsStructPathTBAA =
7013       isa<MDNode>(MD->getOperand(0)) && MD->getNumOperands() >= 3;
7014 
7015   CheckTBAA(IsStructPathTBAA,
7016             "Old-style TBAA is no longer allowed, use struct-path TBAA instead",
7017             &I);
7018 
7019   MDNode *BaseNode = dyn_cast_or_null<MDNode>(MD->getOperand(0));
7020   MDNode *AccessType = dyn_cast_or_null<MDNode>(MD->getOperand(1));
7021 
7022   bool IsNewFormat = isNewFormatTBAATypeNode(AccessType);
7023 
7024   if (IsNewFormat) {
7025     CheckTBAA(MD->getNumOperands() == 4 || MD->getNumOperands() == 5,
7026               "Access tag metadata must have either 4 or 5 operands", &I, MD);
7027   } else {
7028     CheckTBAA(MD->getNumOperands() < 5,
7029               "Struct tag metadata must have either 3 or 4 operands", &I, MD);
7030   }
7031 
7032   // Check the access size field.
7033   if (IsNewFormat) {
7034     auto *AccessSizeNode = mdconst::dyn_extract_or_null<ConstantInt>(
7035         MD->getOperand(3));
7036     CheckTBAA(AccessSizeNode, "Access size field must be a constant", &I, MD);
7037   }
7038 
7039   // Check the immutability flag.
7040   unsigned ImmutabilityFlagOpNo = IsNewFormat ? 4 : 3;
7041   if (MD->getNumOperands() == ImmutabilityFlagOpNo + 1) {
7042     auto *IsImmutableCI = mdconst::dyn_extract_or_null<ConstantInt>(
7043         MD->getOperand(ImmutabilityFlagOpNo));
7044     CheckTBAA(IsImmutableCI,
7045               "Immutability tag on struct tag metadata must be a constant", &I,
7046               MD);
7047     CheckTBAA(
7048         IsImmutableCI->isZero() || IsImmutableCI->isOne(),
7049         "Immutability part of the struct tag metadata must be either 0 or 1",
7050         &I, MD);
7051   }
7052 
7053   CheckTBAA(BaseNode && AccessType,
7054             "Malformed struct tag metadata: base and access-type "
7055             "should be non-null and point to Metadata nodes",
7056             &I, MD, BaseNode, AccessType);
7057 
7058   if (!IsNewFormat) {
7059     CheckTBAA(isValidScalarTBAANode(AccessType),
7060               "Access type node must be a valid scalar type", &I, MD,
7061               AccessType);
7062   }
7063 
7064   auto *OffsetCI = mdconst::dyn_extract_or_null<ConstantInt>(MD->getOperand(2));
7065   CheckTBAA(OffsetCI, "Offset must be constant integer", &I, MD);
7066 
7067   APInt Offset = OffsetCI->getValue();
7068   bool SeenAccessTypeInPath = false;
7069 
7070   SmallPtrSet<MDNode *, 4> StructPath;
7071 
7072   for (/* empty */; BaseNode && !IsRootTBAANode(BaseNode);
7073        BaseNode = getFieldNodeFromTBAABaseNode(I, BaseNode, Offset,
7074                                                IsNewFormat)) {
7075     if (!StructPath.insert(BaseNode).second) {
7076       CheckFailed("Cycle detected in struct path", &I, MD);
7077       return false;
7078     }
7079 
7080     bool Invalid;
7081     unsigned BaseNodeBitWidth;
7082     std::tie(Invalid, BaseNodeBitWidth) = verifyTBAABaseNode(I, BaseNode,
7083                                                              IsNewFormat);
7084 
7085     // If the base node is invalid in itself, then we've already printed all the
7086     // errors we wanted to print.
7087     if (Invalid)
7088       return false;
7089 
7090     SeenAccessTypeInPath |= BaseNode == AccessType;
7091 
7092     if (isValidScalarTBAANode(BaseNode) || BaseNode == AccessType)
7093       CheckTBAA(Offset == 0, "Offset not zero at the point of scalar access",
7094                 &I, MD, &Offset);
7095 
7096     CheckTBAA(BaseNodeBitWidth == Offset.getBitWidth() ||
7097                   (BaseNodeBitWidth == 0 && Offset == 0) ||
7098                   (IsNewFormat && BaseNodeBitWidth == ~0u),
7099               "Access bit-width not the same as description bit-width", &I, MD,
7100               BaseNodeBitWidth, Offset.getBitWidth());
7101 
7102     if (IsNewFormat && SeenAccessTypeInPath)
7103       break;
7104   }
7105 
7106   CheckTBAA(SeenAccessTypeInPath, "Did not see access type in access path!", &I,
7107             MD);
7108   return true;
7109 }
7110 
7111 char VerifierLegacyPass::ID = 0;
7112 INITIALIZE_PASS(VerifierLegacyPass, "verify", "Module Verifier", false, false)
7113 
7114 FunctionPass *llvm::createVerifierPass(bool FatalErrors) {
7115   return new VerifierLegacyPass(FatalErrors);
7116 }
7117 
7118 AnalysisKey VerifierAnalysis::Key;
7119 VerifierAnalysis::Result VerifierAnalysis::run(Module &M,
7120                                                ModuleAnalysisManager &) {
7121   Result Res;
7122   Res.IRBroken = llvm::verifyModule(M, &dbgs(), &Res.DebugInfoBroken);
7123   return Res;
7124 }
7125 
7126 VerifierAnalysis::Result VerifierAnalysis::run(Function &F,
7127                                                FunctionAnalysisManager &) {
7128   return { llvm::verifyFunction(F, &dbgs()), false };
7129 }
7130 
7131 PreservedAnalyses VerifierPass::run(Module &M, ModuleAnalysisManager &AM) {
7132   auto Res = AM.getResult<VerifierAnalysis>(M);
7133   if (FatalErrors && (Res.IRBroken || Res.DebugInfoBroken))
7134     report_fatal_error("Broken module found, compilation aborted!");
7135 
7136   return PreservedAnalyses::all();
7137 }
7138 
7139 PreservedAnalyses VerifierPass::run(Function &F, FunctionAnalysisManager &AM) {
7140   auto res = AM.getResult<VerifierAnalysis>(F);
7141   if (res.IRBroken && FatalErrors)
7142     report_fatal_error("Broken function found, compilation aborted!");
7143 
7144   return PreservedAnalyses::all();
7145 }
7146