LLVM 24.0.0git
Verifier.cpp
Go to the documentation of this file.
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 "VerifierInternal.h"
52#include "llvm/ADT/APFloat.h"
53#include "llvm/ADT/APInt.h"
54#include "llvm/ADT/ArrayRef.h"
55#include "llvm/ADT/DenseMap.h"
56#include "llvm/ADT/MapVector.h"
57#include "llvm/ADT/STLExtras.h"
61#include "llvm/ADT/StringRef.h"
62#include "llvm/ADT/Twine.h"
64#include "llvm/IR/Argument.h"
66#include "llvm/IR/Attributes.h"
67#include "llvm/IR/AutoUpgrade.h"
68#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"
76#include "llvm/IR/Constants.h"
78#include "llvm/IR/DataLayout.h"
79#include "llvm/IR/DebugInfo.h"
81#include "llvm/IR/DebugLoc.h"
83#include "llvm/IR/Dominators.h"
85#include "llvm/IR/FPEnv.h"
86#include "llvm/IR/Function.h"
87#include "llvm/IR/GCStrategy.h"
89#include "llvm/IR/GlobalAlias.h"
90#include "llvm/IR/GlobalValue.h"
92#include "llvm/IR/InlineAsm.h"
93#include "llvm/IR/InstVisitor.h"
94#include "llvm/IR/InstrTypes.h"
95#include "llvm/IR/Instruction.h"
98#include "llvm/IR/Intrinsics.h"
99#include "llvm/IR/IntrinsicsAArch64.h"
100#include "llvm/IR/IntrinsicsARM.h"
101#include "llvm/IR/IntrinsicsNVPTX.h"
102#include "llvm/IR/IntrinsicsRISCV.h"
103#include "llvm/IR/IntrinsicsWebAssembly.h"
104#include "llvm/IR/LLVMContext.h"
106#include "llvm/IR/Metadata.h"
107#include "llvm/IR/Module.h"
109#include "llvm/IR/PassManager.h"
111#include "llvm/IR/Statepoint.h"
112#include "llvm/IR/Type.h"
113#include "llvm/IR/Use.h"
114#include "llvm/IR/User.h"
116#include "llvm/IR/Value.h"
118#include "llvm/Pass.h"
121#include "llvm/Support/Casting.h"
122#include "llvm/Support/CodeGen.h"
127#include "llvm/Support/ModRef.h"
133#include <algorithm>
134#include <cassert>
135#include <cstdint>
136#include <limits>
137#include <memory>
138#include <optional>
139#include <queue>
140#include <string>
141#include <utility>
142
143using namespace llvm;
144
146 "verify-noalias-scope-decl-dom", cl::Hidden, cl::init(false),
147 cl::desc("Ensure that llvm.experimental.noalias.scope.decl for identical "
148 "scopes are not dominating"));
149
150namespace {
151
152class Verifier : public InstVisitor<Verifier>, VerifierSupport {
153 friend class InstVisitor<Verifier>;
154 DominatorTree DT;
155
156 /// When verifying a basic block, keep track of all of the
157 /// instructions we have seen so far.
158 ///
159 /// This allows us to do efficient dominance checks for the case when an
160 /// instruction has an operand that is an instruction in the same block.
161 SmallPtrSet<Instruction *, 16> InstsInThisBlock;
162
163 /// Keep track of the metadata nodes that have been checked already.
165
166 /// Keep track which DISubprogram is attached to which function.
168
169 /// For each visited DIScope, whether walking its scope chain reaches a
170 /// repeated node.
171 DenseMap<const Metadata *, bool> DIScopeChainReachesCycle;
172
173 /// Track all DICompileUnits visited.
175
176 /// The result type for a landingpad.
177 Type *LandingPadResultTy;
178
179 /// Whether we've seen a call to @llvm.localescape in this function
180 /// already.
181 bool SawFrameEscape;
182
183 /// Whether the current function has a DISubprogram attached to it.
184 bool HasDebugInfo = false;
185
186 /// Stores the count of how many objects were passed to llvm.localescape for a
187 /// given function and the largest index passed to llvm.localrecover.
189
190 // Maps catchswitches and cleanuppads that unwind to siblings to the
191 // terminators that indicate the unwind, used to detect cycles therein.
193
194 /// Cache which blocks are in which funclet, if an EH funclet personality is
195 /// in use. Otherwise empty.
196 DenseMap<BasicBlock *, ColorVector> BlockEHFuncletColors;
197
198 /// Cache of constants visited in search of ConstantExprs.
199 SmallPtrSet<const Constant *, 32> ConstantExprVisited;
200
201 /// Cache of declarations of the llvm.experimental.deoptimize.<ty> intrinsic.
202 SmallVector<const Function *, 4> DeoptimizeDeclarations;
203
204 /// Cache of attribute lists verified.
205 SmallPtrSet<const void *, 32> AttributeListsVisited;
206
207 // Verify that this GlobalValue is only used in this module.
208 // This map is used to avoid visiting uses twice. We can arrive at a user
209 // twice, if they have multiple operands. In particular for very large
210 // constant expressions, we can arrive at a particular user many times.
211 SmallPtrSet<const Value *, 32> GlobalValueVisited;
212
213 // Keeps track of duplicate function argument debug info.
215
216 TBAAVerifier TBAAVerifyHelper;
217 ConvergenceVerifier ConvergenceVerifyHelper;
218
219 SmallVector<IntrinsicInst *, 4> NoAliasScopeDecls;
220
221 void checkAtomicMemAccessSize(Type *Ty, const Instruction *I);
222
223public:
224 explicit Verifier(raw_ostream *OS, bool ShouldTreatBrokenDebugInfoAsError,
225 const Module &M)
226 : VerifierSupport(OS, M), LandingPadResultTy(nullptr),
227 SawFrameEscape(false), TBAAVerifyHelper(this) {
228 TreatBrokenDebugInfoAsError = ShouldTreatBrokenDebugInfoAsError;
229 }
230
231 bool hasBrokenDebugInfo() const { return BrokenDebugInfo; }
232
233 bool verify(const Function &F) {
234 llvm::TimeTraceScope timeScope("Verifier");
235 assert(F.getParent() == &M &&
236 "An instance of this class only works with a specific module!");
237
238 // First ensure the function is well-enough formed to compute dominance
239 // information, and directly compute a dominance tree. We don't rely on the
240 // pass manager to provide this as it isolates us from a potentially
241 // out-of-date dominator tree and makes it significantly more complex to run
242 // this code outside of a pass manager.
243
244 // First check that every basic block has a terminator, otherwise we can't
245 // even inspect the CFG.
246 for (const BasicBlock &BB : F) {
247 if (!BB.empty() && BB.back().isTerminator())
248 continue;
249
250 if (OS) {
251 *OS << "Basic Block in function '" << F.getName()
252 << "' does not have terminator!\n";
253 BB.printAsOperand(*OS, true, MST);
254 *OS << "\n";
255 }
256 return false;
257 }
258
259 // FIXME: It's really gross that we have to cast away constness here.
260 if (!F.empty())
261 DT.recalculate(const_cast<Function &>(F));
262
263 auto FailureCB = [this](const Twine &Message) {
264 this->CheckFailed(Message);
265 };
266 ConvergenceVerifyHelper.initialize(OS, FailureCB, F);
267
268 Broken = false;
269 // FIXME: We strip const here because the inst visitor strips const.
270 visit(const_cast<Function &>(F));
271 verifySiblingFuncletUnwinds();
272
273 if (ConvergenceVerifyHelper.sawTokens())
274 ConvergenceVerifyHelper.verify(DT);
275
276 InstsInThisBlock.clear();
277 DebugFnArgs.clear();
278 DIScopeChainReachesCycle.clear();
279 LandingPadResultTy = nullptr;
280 SawFrameEscape = false;
281 SiblingFuncletInfo.clear();
282 verifyNoAliasScopeDecl();
283 NoAliasScopeDecls.clear();
284
285 return !Broken;
286 }
287
288 /// Verify the module that this instance of \c Verifier was initialized with.
289 bool verify() {
290 Broken = false;
291
292 // Collect all declarations of the llvm.experimental.deoptimize intrinsic.
293 for (const Function &F : M)
294 if (F.getIntrinsicID() == Intrinsic::experimental_deoptimize)
295 DeoptimizeDeclarations.push_back(&F);
296
297 // Now that we've visited every function, verify that we never asked to
298 // recover a frame index that wasn't escaped.
299 verifyFrameRecoverIndices();
300 for (const GlobalVariable &GV : M.globals())
301 visitGlobalVariable(GV);
302
303 for (const GlobalAlias &GA : M.aliases())
304 visitGlobalAlias(GA);
305
306 for (const GlobalIFunc &GI : M.ifuncs())
307 visitGlobalIFunc(GI);
308
309 for (const NamedMDNode &NMD : M.named_metadata())
310 visitNamedMDNode(NMD);
311
312 for (const StringMapEntry<Comdat> &SMEC : M.getComdatSymbolTable())
313 visitComdat(SMEC.getValue());
314
315 visitModuleFlags();
316 visitModuleIdents();
317 visitModuleCommandLines();
318 visitModuleErrnoTBAA();
319
320 verifyCompileUnits();
321
322 verifyDeoptimizeCallingConvs();
323 DISubprogramAttachments.clear();
324 DIScopeChainReachesCycle.clear();
325 return !Broken;
326 }
327
328private:
329 /// Whether a metadata node is allowed to be, or contain, a DILocation.
330 enum class AreDebugLocsAllowed { No, Yes };
331
332 /// Metadata that should be treated as a range, with slightly different
333 /// requirements.
334 enum class RangeLikeMetadataKind {
335 Range, // MD_range
336 AbsoluteSymbol, // MD_absolute_symbol
337 NoaliasAddrspace // MD_noalias_addrspace
338 };
339
340 // Verification methods...
341 void visitGlobalValue(const GlobalValue &GV);
342 void visitGlobalVariable(const GlobalVariable &GV);
343 void visitGlobalAlias(const GlobalAlias &GA);
344 void visitGlobalIFunc(const GlobalIFunc &GI);
345 void visitAliaseeSubExpr(const GlobalAlias &A, const Constant &C);
346 void visitAliaseeSubExpr(SmallPtrSetImpl<const GlobalAlias *> &Visited,
347 const GlobalAlias &A, const Constant &C);
348 void visitNamedMDNode(const NamedMDNode &NMD);
349 void visitMDNode(const MDNode &MD, AreDebugLocsAllowed AllowLocs);
350 void visitMetadataAsValue(const MetadataAsValue &MD, Function *F);
351 void visitValueAsMetadata(const ValueAsMetadata &MD, Function *F);
352 void visitDIArgList(const DIArgList &AL, Function *F);
353 void visitComdat(const Comdat &C);
354 void visitModuleIdents();
355 void visitModuleCommandLines();
356 void visitModuleErrnoTBAA();
357 void visitModuleFlags();
358 void visitModuleFlag(const MDNode *Op,
359 DenseMap<const MDString *, const MDNode *> &SeenIDs,
360 SmallVectorImpl<const MDNode *> &Requirements);
361 void visitModuleFlagCGProfileEntry(const MDOperand &MDO);
362 void visitFunction(const Function &F);
363 void visitBasicBlock(BasicBlock &BB);
364 void verifyRangeLikeMetadata(const Value &V, const MDNode *Range, Type *Ty,
365 RangeLikeMetadataKind Kind);
366 void visitRangeMetadata(Instruction &I, MDNode *Range, Type *Ty);
367 void visitNoFPClassMetadata(Instruction &I, MDNode *Range, Type *Ty);
368 void visitNoaliasAddrspaceMetadata(Instruction &I, MDNode *Range, Type *Ty);
369 void visitDereferenceableMetadata(Instruction &I, MDNode *MD);
370 void visitNoFreeObjMetadata(Instruction &I, MDNode *MD);
371 void visitProfMetadata(Instruction &I, MDNode *MD);
372 void visitCallStackMetadata(MDNode *MD);
373 void visitMemProfMetadata(Instruction &I, MDNode *MD);
374 void visitCallsiteMetadata(Instruction &I, MDNode *MD);
375 void visitCalleeTypeMetadata(Instruction &I, MDNode *MD);
376 void visitDIAssignIDMetadata(Instruction &I, MDNode *MD);
377 void visitMMRAMetadata(Instruction &I, MDNode *MD);
378 void visitAnnotationMetadata(MDNode *Annotation);
379 void visitAliasScopeMetadata(const MDNode *MD);
380 void visitAliasScopeListMetadata(const MDNode *MD);
381 void visitAccessGroupMetadata(const MDNode *MD);
382 void visitCapturesMetadata(Instruction &I, const MDNode *Captures);
383 void visitAllocTokenMetadata(Instruction &I, MDNode *MD);
384 void visitInlineHistoryMetadata(Instruction &I, MDNode *MD);
385 void visitMemCacheHintMetadata(Instruction &I, MDNode *MD);
386
387#define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) void visit##CLASS(const CLASS &N);
388#include "llvm/IR/Metadata.def"
389 void visitDIType(const DIType &N);
390 void visitDIScope(const DIScope &N);
391 void visitDIScopeChain(const DIScope &N);
392 bool hasDIScopeCycle(const Metadata *S);
393 DISubprogram *getSubprogram(Metadata *LocalScope);
394 void visitDIVariable(const DIVariable &N);
395 void visitDILexicalBlockBase(const DILexicalBlockBase &N);
396 void visitDITemplateParameter(const DITemplateParameter &N);
397
398 void visitTemplateParams(const MDNode &N, const Metadata &RawParams);
399
400 void visit(DbgLabelRecord &DLR);
401 void visit(DbgVariableRecord &DVR);
402 // InstVisitor overrides...
403 using InstVisitor<Verifier>::visit;
404 void visitDbgRecords(Instruction &I);
405 void visit(Instruction &I);
406
407 void visitTruncInst(TruncInst &I);
408 void visitZExtInst(ZExtInst &I);
409 void visitSExtInst(SExtInst &I);
410 void visitFPTruncInst(FPTruncInst &I);
411 void visitFPExtInst(FPExtInst &I);
412 void visitFPToUIInst(FPToUIInst &I);
413 void visitFPToSIInst(FPToSIInst &I);
414 void visitUIToFPInst(UIToFPInst &I);
415 void visitSIToFPInst(SIToFPInst &I);
416 void visitIntToPtrInst(IntToPtrInst &I);
417 void checkPtrToAddr(Type *SrcTy, Type *DestTy, const Value &V);
418 void visitPtrToAddrInst(PtrToAddrInst &I);
419 void visitPtrToIntInst(PtrToIntInst &I);
420 void visitBitCastInst(BitCastInst &I);
421 void visitAddrSpaceCastInst(AddrSpaceCastInst &I);
422 void visitPHINode(PHINode &PN);
423 void visitCallBase(CallBase &Call);
424 void visitUnaryOperator(UnaryOperator &U);
425 void visitBinaryOperator(BinaryOperator &B);
426 void visitICmpInst(ICmpInst &IC);
427 void visitFCmpInst(FCmpInst &FC);
428 void visitExtractElementInst(ExtractElementInst &EI);
429 void visitInsertElementInst(InsertElementInst &EI);
430 void visitShuffleVectorInst(ShuffleVectorInst &EI);
431 void visitVAArgInst(VAArgInst &VAA) { visitInstruction(VAA); }
432 void visitCallInst(CallInst &CI);
433 void visitInvokeInst(InvokeInst &II);
434 void visitGetElementPtrInst(GetElementPtrInst &GEP);
435 void visitLoadInst(LoadInst &LI);
436 void visitStoreInst(StoreInst &SI);
437 void verifyDominatesUse(Instruction &I, unsigned i);
438 void visitInstruction(Instruction &I);
439 void visitTerminator(Instruction &I);
440 void visitCondBrInst(CondBrInst &BI);
441 void visitReturnInst(ReturnInst &RI);
442 void visitSwitchInst(SwitchInst &SI);
443 void visitIndirectBrInst(IndirectBrInst &BI);
444 void visitCallBrInst(CallBrInst &CBI);
445 void visitSelectInst(SelectInst &SI);
446 void visitUserOp1(Instruction &I);
447 void visitUserOp2(Instruction &I) { visitUserOp1(I); }
448 void visitIntrinsicCall(Intrinsic::ID ID, CallBase &Call);
449 void visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI);
450 void visitVPIntrinsic(VPIntrinsic &VPI);
451 void visitDbgLabelIntrinsic(StringRef Kind, DbgLabelInst &DLI);
452 void visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI);
453 void visitAtomicRMWInst(AtomicRMWInst &RMWI);
454 void visitFenceInst(FenceInst &FI);
455 void visitAllocaInst(AllocaInst &AI);
456 void visitExtractValueInst(ExtractValueInst &EVI);
457 void visitInsertValueInst(InsertValueInst &IVI);
458 void visitEHPadPredecessors(Instruction &I);
459 void visitLandingPadInst(LandingPadInst &LPI);
460 void visitResumeInst(ResumeInst &RI);
461 void visitCatchPadInst(CatchPadInst &CPI);
462 void visitCatchReturnInst(CatchReturnInst &CatchReturn);
463 void visitCleanupPadInst(CleanupPadInst &CPI);
464 void visitFuncletPadInst(FuncletPadInst &FPI);
465 void visitCatchSwitchInst(CatchSwitchInst &CatchSwitch);
466 void visitCleanupReturnInst(CleanupReturnInst &CRI);
467
468 void verifySwiftErrorCall(CallBase &Call, const Value *SwiftErrorVal);
469 void verifySwiftErrorValue(const Value *SwiftErrorVal);
470 void verifyTailCCMustTailAttrs(const AttrBuilder &Attrs, StringRef Context);
471 void verifyMustTailCall(CallInst &CI);
472 bool verifyAttributeCount(AttributeList Attrs, unsigned Params);
473 void verifyAttributeTypes(AttributeSet Attrs, const Value *V);
474 void verifyParameterAttrs(AttributeSet Attrs, Type *Ty, const Value *V);
475 void checkUnsignedBaseTenFuncAttr(AttributeList Attrs, StringRef Attr,
476 const Value *V);
477 void verifyFunctionAttrs(FunctionType *FT, AttributeList Attrs,
478 const Value *V, bool IsIntrinsic, bool IsInlineAsm);
479 void verifyFunctionMetadata(ArrayRef<std::pair<unsigned, MDNode *>> MDs);
480 void verifyUnknownProfileMetadata(MDNode *MD);
481 void visitConstantExprsRecursively(const Constant *EntryC);
482 void visitConstantExpr(const ConstantExpr *CE);
483 void visitConstantPtrAuth(const ConstantPtrAuth *CPA);
484 void verifyInlineAsmCall(const CallBase &Call);
485 void verifyStatepoint(const CallBase &Call);
486 void verifyFrameRecoverIndices();
487 void verifySiblingFuncletUnwinds();
488
489 void verifyFragmentExpression(const DbgVariableRecord &I);
490 template <typename ValueOrMetadata>
491 void verifyFragmentExpression(const DIVariable &V,
493 ValueOrMetadata *Desc);
494 void verifyFnArgs(const DbgVariableRecord &DVR);
495 void verifyNotEntryValue(const DbgVariableRecord &I);
496
497 /// Module-level debug info verification...
498 void verifyCompileUnits();
499
500 /// Module-level verification that all @llvm.experimental.deoptimize
501 /// declarations share the same calling convention.
502 void verifyDeoptimizeCallingConvs();
503
504 void verifyAttachedCallBundle(const CallBase &Call,
505 const OperandBundleUse &BU);
506
507 /// Verify the llvm.experimental.noalias.scope.decl declarations
508 void verifyNoAliasScopeDecl();
509};
510
511} // end anonymous namespace
512
513/// We know that cond should be true, if not print an error message.
514#define Check(C, ...) \
515 do { \
516 if (!(C)) { \
517 CheckFailed(__VA_ARGS__); \
518 return; \
519 } \
520 } while (false)
521
522/// We know that a debug info condition should be true, if not print
523/// an error message.
524#define CheckDI(C, ...) \
525 do { \
526 if (!(C)) { \
527 DebugInfoCheckFailed(__VA_ARGS__); \
528 return; \
529 } \
530 } while (false)
531
532void Verifier::visitDbgRecords(Instruction &I) {
533 if (!I.DebugMarker)
534 return;
535 CheckDI(I.DebugMarker->MarkedInstr == &I,
536 "Instruction has invalid DebugMarker", &I);
537 CheckDI(!isa<PHINode>(&I) || !I.hasDbgRecords(),
538 "PHI Node must not have any attached DbgRecords", &I);
539 for (DbgRecord &DR : I.getDbgRecordRange()) {
540 CheckDI(DR.getMarker() == I.DebugMarker,
541 "DbgRecord had invalid DebugMarker", &I, &DR);
542 if (auto *Loc =
543 dyn_cast_or_null<DILocation>(DR.getDebugLoc().getAsMDNode()))
544 visitMDNode(*Loc, AreDebugLocsAllowed::Yes);
545 if (auto *DVR = dyn_cast<DbgVariableRecord>(&DR)) {
546 visit(*DVR);
547 // These have to appear after `visit` for consistency with existing
548 // intrinsic behaviour.
549 verifyFragmentExpression(*DVR);
550 verifyNotEntryValue(*DVR);
551 } else if (auto *DLR = dyn_cast<DbgLabelRecord>(&DR)) {
552 visit(*DLR);
553 }
554 }
555}
556
557void Verifier::visit(Instruction &I) {
558 visitDbgRecords(I);
559 for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
560 Check(I.getOperand(i) != nullptr, "Operand is null", &I);
562}
563
564// Helper to iterate over indirect users. By returning false, the callback can ask to stop traversing further.
565static void forEachUser(const Value *User,
567 llvm::function_ref<bool(const Value *)> Callback) {
568 if (!Visited.insert(User).second)
569 return;
570
572 while (!WorkList.empty()) {
573 const Value *Cur = WorkList.pop_back_val();
574 if (!Visited.insert(Cur).second)
575 continue;
576 if (Callback(Cur))
577 append_range(WorkList, Cur->materialized_users());
578 }
579}
580
581void Verifier::visitGlobalValue(const GlobalValue &GV) {
583 "Global is external, but doesn't have external or weak linkage!", &GV);
584
585 if (const auto *GO = dyn_cast<GlobalObject>(&GV)) {
586 if (const MDNode *Associated =
587 GO->getMetadata(LLVMContext::MD_associated)) {
588 Check(Associated->getNumOperands() == 1,
589 "associated metadata must have one operand", &GV, Associated);
590 const Metadata *Op = Associated->getOperand(0).get();
591 Check(Op, "associated metadata must have a global value", GO, Associated);
592
593 const auto *VM = dyn_cast_or_null<ValueAsMetadata>(Op);
594 Check(VM, "associated metadata must be ValueAsMetadata", GO, Associated);
595 if (VM) {
596 Check(isa<PointerType>(VM->getValue()->getType()),
597 "associated value must be pointer typed", GV, Associated);
598
599 const Value *Stripped = VM->getValue()->stripPointerCastsAndAliases();
600 Check(isa<GlobalObject>(Stripped) || isa<Constant>(Stripped),
601 "associated metadata must point to a GlobalObject", GO, Stripped);
602 Check(Stripped != GO,
603 "global values should not associate to themselves", GO,
604 Associated);
605 }
606 }
607
608 // FIXME: Why is getMetadata on GlobalValue protected?
609 if (const MDNode *AbsoluteSymbol =
610 GO->getMetadata(LLVMContext::MD_absolute_symbol)) {
611 verifyRangeLikeMetadata(*GO, AbsoluteSymbol,
612 DL.getIntPtrType(GO->getType()),
613 RangeLikeMetadataKind::AbsoluteSymbol);
614 }
615
616 if (GO->hasMetadata(LLVMContext::MD_implicit_ref)) {
617 Check(!GO->isDeclaration(),
618 "ref metadata must not be placed on a declaration", GO);
619
621 GO->getMetadata(LLVMContext::MD_implicit_ref, MDs);
622 for (const MDNode *MD : MDs) {
623 Check(MD->getNumOperands() == 1, "ref metadata must have one operand",
624 &GV, MD);
625 const Metadata *Op = MD->getOperand(0).get();
626 const auto *VM = dyn_cast_or_null<ValueAsMetadata>(Op);
627 Check(VM, "ref metadata must be ValueAsMetadata", GO, MD);
628 if (VM) {
629 Check(isa<PointerType>(VM->getValue()->getType()),
630 "ref value must be pointer typed", GV, MD);
631
632 const Value *Stripped = VM->getValue()->stripPointerCastsAndAliases();
633 Check(isa<GlobalObject>(Stripped) || isa<Constant>(Stripped),
634 "ref metadata must point to a GlobalObject", GO, Stripped);
635 Check(Stripped != GO, "values should not reference themselves", GO,
636 MD);
637 }
638 }
639 }
640
641 if (auto *Props = GO->getMetadata(LLVMContext::MD_elf_section_properties)) {
642 Check(Props->getNumOperands() == 2,
643 "elf_section_properties metadata must have two operands", GO,
644 Props);
645 if (Props->getNumOperands() == 2) {
646 auto *Type = dyn_cast<ConstantAsMetadata>(Props->getOperand(0));
647 Check(Type, "type field must be ConstantAsMetadata", GO, Props);
648 auto *TypeInt = dyn_cast<ConstantInt>(Type->getValue());
649 Check(TypeInt, "type field must be ConstantInt", GO, Props);
650
651 auto *Entsize = dyn_cast<ConstantAsMetadata>(Props->getOperand(1));
652 Check(Entsize, "entsize field must be ConstantAsMetadata", GO, Props);
653 auto *EntsizeInt = dyn_cast<ConstantInt>(Entsize->getValue());
654 Check(EntsizeInt, "entsize field must be ConstantInt", GO, Props);
655 }
656 }
657 }
658
660 "Only global variables can have appending linkage!", &GV);
661
662 if (GV.hasAppendingLinkage()) {
663 const auto *GVar = dyn_cast<GlobalVariable>(&GV);
664 Check(GVar && GVar->getValueType()->isArrayTy(),
665 "Only global arrays can have appending linkage!", GVar);
666 }
667
668 if (GV.isDeclarationForLinker())
669 Check(!GV.hasComdat(), "Declaration may not be in a Comdat!", &GV);
670
671 if (GV.hasDLLExportStorageClass()) {
673 "dllexport GlobalValue must have default or protected visibility",
674 &GV);
675 }
676 if (GV.hasDLLImportStorageClass()) {
678 "dllimport GlobalValue must have default visibility", &GV);
679 Check(!GV.isDSOLocal(), "GlobalValue with DLLImport Storage is dso_local!",
680 &GV);
681
682 Check((GV.isDeclaration() &&
685 "Global is marked as dllimport, but not external", &GV);
686 }
687
688 if (GV.isImplicitDSOLocal())
689 Check(GV.isDSOLocal(),
690 "GlobalValue with local linkage or non-default "
691 "visibility must be dso_local!",
692 &GV);
693
694 forEachUser(&GV, GlobalValueVisited, [&](const Value *V) -> bool {
695 if (const auto *I = dyn_cast<Instruction>(V)) {
696 if (!I->getParent() || !I->getParent()->getParent())
697 CheckFailed("Global is referenced by parentless instruction!", &GV, &M,
698 I);
699 else if (I->getParent()->getParent()->getParent() != &M)
700 CheckFailed("Global is referenced in a different module!", &GV, &M, I,
701 I->getParent()->getParent(),
702 I->getParent()->getParent()->getParent());
703 return false;
704 } else if (const auto *F = dyn_cast<Function>(V)) {
705 if (F->getParent() != &M)
706 CheckFailed("Global is used by function in a different module", &GV, &M,
707 F, F->getParent());
708 return false;
709 }
710 return true;
711 });
712}
713
714void Verifier::visitGlobalVariable(const GlobalVariable &GV) {
715 // Target-specific global variable checks. Done first because this function
716 // returns early for a global without an initializer.
718
719 Type *GVType = GV.getValueType();
720
721 if (MaybeAlign A = GV.getAlign()) {
722 Check(A->value() <= Value::MaximumAlignment,
723 "huge alignment values are unsupported", &GV);
724 }
725
726 if (GV.hasInitializer()) {
727 Check(GV.getInitializer()->getType() == GVType,
728 "Global variable initializer type does not match global "
729 "variable type!",
730 &GV);
732 "Global variable initializer must be sized", &GV);
733 visitConstantExprsRecursively(GV.getInitializer());
734 // If the global has common linkage, it must have a zero initializer and
735 // cannot be constant.
736 if (GV.hasCommonLinkage()) {
738 "'common' global must have a zero initializer!", &GV);
739 Check(!GV.isConstant(), "'common' global may not be marked constant!",
740 &GV);
741 Check(!GV.hasComdat(), "'common' global may not be in a Comdat!", &GV);
742 }
743 }
744
745 if (GV.hasName() && (GV.getName() == "llvm.global_ctors" ||
746 GV.getName() == "llvm.global_dtors")) {
748 "invalid linkage for intrinsic global variable", &GV);
750 "invalid uses of intrinsic global variable", &GV);
751
752 // Don't worry about emitting an error for it not being an array,
753 // visitGlobalValue will complain on appending non-array.
754 if (const auto *ATy = dyn_cast<ArrayType>(GVType)) {
755 const auto *STy = dyn_cast<StructType>(ATy->getElementType());
756 PointerType *FuncPtrTy =
757 PointerType::get(Context, DL.getProgramAddressSpace());
758 Check(STy && (STy->getNumElements() == 2 || STy->getNumElements() == 3) &&
759 STy->getTypeAtIndex(0u)->isIntegerTy(32) &&
760 STy->getTypeAtIndex(1) == FuncPtrTy,
761 "wrong type for intrinsic global variable", &GV);
762 Check(STy->getNumElements() == 3,
763 "the third field of the element type is mandatory, "
764 "specify ptr null to migrate from the obsoleted 2-field form");
765 Type *ETy = STy->getTypeAtIndex(2);
766 Check(ETy->isPointerTy(), "wrong type for intrinsic global variable",
767 &GV);
768 }
769
770 auto *Init = GV.hasInitializer()
772 : nullptr;
773 if (Init) {
774 for (const Use &U : Init->operands()) {
775 auto *Structor = dyn_cast<ConstantStruct>(U);
776 if (!Structor || Structor->getNumOperands() != 3)
777 continue;
778 Check(!isa<ConstantPtrAuth>(Structor->getOperand(1)),
779 "signing of ctors/dtors should be requested via module flags");
780 }
781 }
782 }
783
784 if (GV.hasName() && (GV.getName() == "llvm.used" ||
785 GV.getName() == "llvm.compiler.used")) {
787 "invalid linkage for intrinsic global variable", &GV);
789 "invalid uses of intrinsic global variable", &GV);
790
791 if (const auto *ATy = dyn_cast<ArrayType>(GVType)) {
792 const auto *PTy = dyn_cast<PointerType>(ATy->getElementType());
793 Check(PTy, "wrong type for intrinsic global variable", &GV);
794 if (GV.hasInitializer()) {
795 const Constant *Init = GV.getInitializer();
796 const auto *InitArray = dyn_cast<ConstantArray>(Init);
797 Check(InitArray, "wrong initializer for intrinsic global variable",
798 Init);
799 for (Value *Op : InitArray->operands()) {
800 Value *V = Op->stripPointerCasts();
803 Twine("invalid ") + GV.getName() + " member", V);
804 Check(V->hasName(),
805 Twine("members of ") + GV.getName() + " must be named", V);
806 }
807 }
808 }
809 }
810
811 // Visit any debug info attachments.
813 GV.getMetadata(LLVMContext::MD_dbg, MDs);
814 for (MDNode *MD : MDs) {
815 if (auto *GVE = dyn_cast<DIGlobalVariableExpression>(MD))
816 visitDIGlobalVariableExpression(*GVE);
817 else
818 CheckDI(false, "!dbg attachment of global variable must be a "
819 "DIGlobalVariableExpression");
820 }
821
822 // Scalable vectors cannot be global variables, since we don't know
823 // the runtime size.
824 Check(!GVType->isScalableTy(), "Globals cannot contain scalable types", &GV);
825
826 // Check if it is or contains a target extension type that disallows being
827 // used as a global.
829 "Global @" + GV.getName() + " has illegal target extension type",
830 GVType);
831
832 // Check that the the address space can hold all bits of the type, recognized
833 // by an access in the address space being able to reach all bytes of the
834 // type.
835 Check(!GVType->isSized() ||
836 isUIntN(DL.getAddressSizeInBits(GV.getAddressSpace()),
837 GV.getGlobalSize(DL)),
838 "Global variable is too large to fit into the address space", &GV,
839 GVType);
840
841 if (!GV.hasInitializer()) {
842 visitGlobalValue(GV);
843 return;
844 }
845
846 // Walk any aggregate initializers looking for bitcasts between address spaces
847 visitConstantExprsRecursively(GV.getInitializer());
848
849 visitGlobalValue(GV);
850}
851
852void Verifier::visitAliaseeSubExpr(const GlobalAlias &GA, const Constant &C) {
853 SmallPtrSet<const GlobalAlias*, 4> Visited;
854 Visited.insert(&GA);
855 visitAliaseeSubExpr(Visited, GA, C);
856}
857
858void Verifier::visitAliaseeSubExpr(SmallPtrSetImpl<const GlobalAlias*> &Visited,
859 const GlobalAlias &GA, const Constant &C) {
862 cast<GlobalValue>(C).hasAvailableExternallyLinkage(),
863 "available_externally alias must point to available_externally "
864 "global value",
865 &GA);
866 }
867 if (const auto *GV = dyn_cast<GlobalValue>(&C)) {
869 Check(!GV->isDeclarationForLinker(), "Alias must point to a definition",
870 &GA);
871 }
872
873 if (const auto *GA2 = dyn_cast<GlobalAlias>(GV)) {
874 Check(Visited.insert(GA2).second, "Aliases cannot form a cycle", &GA);
875
876 Check(!GA2->isInterposable(),
877 "Alias cannot point to an interposable alias", &GA);
878 } else {
879 // Only continue verifying subexpressions of GlobalAliases.
880 // Do not recurse into global initializers.
881 return;
882 }
883 }
884
885 if (const auto *CE = dyn_cast<ConstantExpr>(&C))
886 visitConstantExprsRecursively(CE);
887
888 for (const Use &U : C.operands()) {
889 Value *V = &*U;
890 if (const auto *GA2 = dyn_cast<GlobalAlias>(V))
891 visitAliaseeSubExpr(Visited, GA, *GA2->getAliasee());
892 else if (const auto *C2 = dyn_cast<Constant>(V))
893 visitAliaseeSubExpr(Visited, GA, *C2);
894 }
895}
896
897void Verifier::visitGlobalAlias(const GlobalAlias &GA) {
899 "Alias should have private, internal, linkonce, weak, linkonce_odr, "
900 "weak_odr, external, or available_externally linkage!",
901 &GA);
902 const Constant *Aliasee = GA.getAliasee();
903 Check(Aliasee, "Aliasee cannot be NULL!", &GA);
904 Check(GA.getType() == Aliasee->getType(),
905 "Alias and aliasee types should match!", &GA);
906
907 Check(isa<GlobalValue>(Aliasee) || isa<ConstantExpr>(Aliasee),
908 "Aliasee should be either GlobalValue or ConstantExpr", &GA);
909
910 visitAliaseeSubExpr(GA, *Aliasee);
911
912 visitGlobalValue(GA);
913}
914
915void Verifier::visitGlobalIFunc(const GlobalIFunc &GI) {
916 visitGlobalValue(GI);
917
919 GI.getAllMetadata(MDs);
920 for (const auto &I : MDs) {
921 CheckDI(I.first != LLVMContext::MD_dbg,
922 "an ifunc may not have a !dbg attachment", &GI);
923 Check(I.first != LLVMContext::MD_prof,
924 "an ifunc may not have a !prof attachment", &GI);
925 visitMDNode(*I.second, AreDebugLocsAllowed::No);
926 }
927
929 "IFunc should have private, internal, linkonce, weak, linkonce_odr, "
930 "weak_odr, or external linkage!",
931 &GI);
932 // Pierce through ConstantExprs and GlobalAliases and check that the resolver
933 // is a Function definition.
934 const Function *Resolver = GI.getResolverFunction();
935 Check(Resolver, "IFunc must have a Function resolver", &GI);
936 Check(!Resolver->isDeclarationForLinker(),
937 "IFunc resolver must be a definition", &GI);
938
939 // Check that the immediate resolver operand (prior to any bitcasts) has the
940 // correct type.
941 const Type *ResolverTy = GI.getResolver()->getType();
942
944 "IFunc resolver must return a pointer", &GI);
945
946 Check(ResolverTy == PointerType::get(Context, GI.getAddressSpace()),
947 "IFunc resolver has incorrect type", &GI);
948}
949
950void Verifier::visitNamedMDNode(const NamedMDNode &NMD) {
951 // There used to be various other llvm.dbg.* nodes, but we don't support
952 // upgrading them and we want to reserve the namespace for future uses.
953 if (NMD.getName().starts_with("llvm.dbg."))
954 CheckDI(NMD.getName() == "llvm.dbg.cu",
955 "unrecognized named metadata node in the llvm.dbg namespace", &NMD);
956 for (const MDNode *MD : NMD.operands()) {
957 if (NMD.getName() == "llvm.dbg.cu")
958 CheckDI(MD && isa<DICompileUnit>(MD), "invalid compile unit", &NMD, MD);
959
960 if (!MD)
961 continue;
962
963 visitMDNode(*MD, AreDebugLocsAllowed::Yes);
964 }
965}
966
967/// Parent scope operand of \p S, or null if \p S has no parent (a \c DIFile,
968/// \c DICompileUnit, or non-scope). Mirrors \c DIScope::getScope() without
969/// asserting on unexpected metadata kinds.
970static const Metadata *getRawDIScopeParent(const Metadata *S) {
971 if (!S)
972 return nullptr;
973 if (auto *T = dyn_cast<DIType>(S))
974 return T->getRawScope();
975 if (auto *SP = dyn_cast<DISubprogram>(S))
976 return SP->getRawScope();
977 if (auto *LB = dyn_cast<DILexicalBlockBase>(S))
978 return LB->getRawScope();
979 if (auto *NS = dyn_cast<DINamespace>(S))
980 return NS->getRawScope();
981 if (auto *CB = dyn_cast<DICommonBlock>(S))
982 return CB->getRawScope();
983 if (auto *M = dyn_cast<DIModule>(S))
984 return M->getRawScope();
985 return nullptr;
986}
987
988/// True if following the scope operand from \p S repeats a node.
989bool Verifier::hasDIScopeCycle(const Metadata *S) {
990 SmallPtrSet<const Metadata *, 8> Seen;
991 auto CacheSeen = [&](bool HasCycle) {
992 for (const Metadata *M : Seen)
993 DIScopeChainReachesCycle[M] = HasCycle;
994 return HasCycle;
995 };
996
997 while (auto *Scope = dyn_cast_or_null<DIScope>(S)) {
998 auto It = DIScopeChainReachesCycle.find(Scope);
999 bool IsInCache = It != DIScopeChainReachesCycle.end();
1000 if (IsInCache)
1001 return CacheSeen(It->second);
1002 bool AlreadySeen = !Seen.insert(Scope).second;
1003 if (AlreadySeen) // New cycle detected
1004 return CacheSeen(true);
1005 // No new cycle detected
1006 S = getRawDIScopeParent(Scope);
1007 }
1008
1009 // Finished walking node chain without detecting any cycles
1010 return CacheSeen(false);
1011}
1012
1013void Verifier::visitDIScopeChain(const DIScope &N) {
1014 CheckDI(!hasDIScopeCycle(&N), "DIScope scope chain must not contain a cycle",
1015 &N);
1016}
1017
1018void Verifier::visitMDNode(const MDNode &BaseMD,
1019 AreDebugLocsAllowed AllowLocs) {
1020 // Only visit each node once. Metadata can be mutually recursive, so this
1021 // avoids infinite recursion here, as well as being an optimization.
1022 if (!MDNodes.insert(&BaseMD).second)
1023 return;
1024
1025 std::queue<const MDNode *> Worklist;
1026 Worklist.push(&BaseMD);
1027
1028 while (!Worklist.empty()) {
1029 const MDNode *CurrentMD = Worklist.front();
1030 Worklist.pop();
1031 Check(&CurrentMD->getContext() == &Context,
1032 "MDNode context does not match Module context!", CurrentMD);
1033
1034 switch (CurrentMD->getMetadataID()) {
1035 default:
1036 llvm_unreachable("Invalid MDNode subclass");
1037 case Metadata::MDTupleKind:
1038 break;
1039#define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) \
1040 case Metadata::CLASS##Kind: \
1041 visit##CLASS(cast<CLASS>(*CurrentMD)); \
1042 break;
1043#include "llvm/IR/Metadata.def"
1044 }
1045
1046 // A scope chain must terminate.
1047 if (const auto *S = dyn_cast<DIScope>(CurrentMD))
1048 visitDIScopeChain(*S);
1049
1050 for (const Metadata *Op : CurrentMD->operands()) {
1051 if (!Op)
1052 continue;
1053 Check(!isa<LocalAsMetadata>(Op), "Invalid operand for global metadata!",
1054 CurrentMD, Op);
1055 CheckDI(!isa<DILocation>(Op) || AllowLocs == AreDebugLocsAllowed::Yes,
1056 "DILocation not allowed within this metadata node", CurrentMD,
1057 Op);
1058 if (auto *N = dyn_cast<MDNode>(Op)) {
1059 if (MDNodes.insert(N).second)
1060 Worklist.push(N);
1061 continue;
1062 }
1063 if (auto *V = dyn_cast<ValueAsMetadata>(Op)) {
1064 visitValueAsMetadata(*V, nullptr);
1065 continue;
1066 }
1067 }
1068
1069 // FIXME: The nested llvm.loop.* property tags (llvm.loop.align,
1070 // llvm.loop.estimated_trip_count, the boolean enable/disable tags below)
1071 // are only meaningful as operands of an llvm.loop node. Neither llvm.loop's
1072 // structure nor the requirement that these tags appear only within it is
1073 // validated here; the checks below fire on any matching tuple regardless of
1074 // where it appears.
1075
1076 // Check llvm.loop.estimated_trip_count.
1077 if (CurrentMD->getNumOperands() > 0 &&
1079 Check(CurrentMD->getNumOperands() == 2, "Expected two operands",
1080 CurrentMD);
1081 auto *Count =
1083 Check(Count && Count->getType()->isIntegerTy() &&
1084 cast<IntegerType>(Count->getType())->getBitWidth() <= 32,
1085 "Expected second operand to be an integer constant of type i32 or "
1086 "smaller",
1087 CurrentMD);
1088 }
1089
1090 // Check llvm.loop.align.
1091 if (CurrentMD->getNumOperands() > 0 &&
1092 CurrentMD->getOperand(0).equalsStr("llvm.loop.align")) {
1093 Check(CurrentMD->getNumOperands() == 2, "Expected two operands",
1094 CurrentMD);
1095 auto *AlignMD =
1097 Check(AlignMD && AlignMD->getType()->isIntegerTy(32),
1098 "Expected the alignment to be an integer constant of type i32",
1099 CurrentMD);
1100 if (AlignMD) {
1101 uint64_t Align = AlignMD->getValue().getZExtValue();
1102 Check(isPowerOf2_64(Align),
1103 "Expected the alignment to be a power of two", CurrentMD);
1104 Check(Align <= Value::MaximumAlignment,
1105 "Alignment is larger than the implementation defined limit",
1106 CurrentMD);
1107 }
1108 }
1109
1110 // Enforce the single-operand form of the loop enable/disable pairs.
1111 if (CurrentMD->getNumOperands() > 0 &&
1112 any_of(OldBooleanLoopTags, [CurrentMD](const BooleanLoopTags &Tags) {
1113 return CurrentMD->getOperand(0).equalsStr(Tags.Enable) ||
1114 CurrentMD->getOperand(0).equalsStr(Tags.Disable);
1115 }))
1116 Check(CurrentMD->getNumOperands() == 1,
1117 "Expecting only the metadata name", CurrentMD);
1118
1119 // Check these last, so we diagnose problems in operands first.
1120 Check(!CurrentMD->isTemporary(), "Expected no forward declarations!",
1121 CurrentMD);
1122 Check(CurrentMD->isResolved(), "All nodes should be resolved!", CurrentMD);
1123 }
1124}
1125
1126void Verifier::visitValueAsMetadata(const ValueAsMetadata &MD, Function *F) {
1127 Check(MD.getValue(), "Expected valid value", &MD);
1128 Check(!MD.getValue()->getType()->isMetadataTy(),
1129 "Unexpected metadata round-trip through values", &MD, MD.getValue());
1130
1131 auto *L = dyn_cast<LocalAsMetadata>(&MD);
1132 if (!L)
1133 return;
1134
1135 Check(F, "function-local metadata used outside a function", L);
1136
1137 // If this was an instruction, bb, or argument, verify that it is in the
1138 // function that we expect.
1139 Function *ActualF = nullptr;
1140 if (auto *I = dyn_cast<Instruction>(L->getValue())) {
1141 Check(I->getParent(), "function-local metadata not in basic block", L, I);
1142 ActualF = I->getParent()->getParent();
1143 } else if (auto *BB = dyn_cast<BasicBlock>(L->getValue())) {
1144 ActualF = BB->getParent();
1145 } else if (auto *A = dyn_cast<Argument>(L->getValue())) {
1146 ActualF = A->getParent();
1147 }
1148 assert(ActualF && "Unimplemented function local metadata case!");
1149
1150 Check(ActualF == F, "function-local metadata used in wrong function", L);
1151}
1152
1153void Verifier::visitDIArgList(const DIArgList &AL, Function *F) {
1154 for (const ValueAsMetadata *VAM : AL.getArgs())
1155 visitValueAsMetadata(*VAM, F);
1156}
1157
1158void Verifier::visitMetadataAsValue(const MetadataAsValue &MDV, Function *F) {
1159 Metadata *MD = MDV.getMetadata();
1160 if (auto *N = dyn_cast<MDNode>(MD)) {
1161 visitMDNode(*N, AreDebugLocsAllowed::No);
1162 return;
1163 }
1164
1165 // Only visit each node once. Metadata can be mutually recursive, so this
1166 // avoids infinite recursion here, as well as being an optimization.
1167 if (!MDNodes.insert(MD).second)
1168 return;
1169
1170 if (auto *V = dyn_cast<ValueAsMetadata>(MD))
1171 visitValueAsMetadata(*V, F);
1172
1173 if (auto *AL = dyn_cast<DIArgList>(MD))
1174 visitDIArgList(*AL, F);
1175}
1176
1177static bool isType(const Metadata *MD) { return !MD || isa<DIType>(MD); }
1178static bool isScope(const Metadata *MD) { return !MD || isa<DIScope>(MD); }
1179static bool isDINode(const Metadata *MD) { return !MD || isa<DINode>(MD); }
1180static bool isMDTuple(const Metadata *MD) { return !MD || isa<MDTuple>(MD); }
1181
1182void Verifier::visitDILocation(const DILocation &N) {
1183 CheckDI(N.getRawScope() && isa<DILocalScope>(N.getRawScope()),
1184 "location requires a valid scope", &N, N.getRawScope());
1185 if (auto *IA = N.getRawInlinedAt())
1186 CheckDI(isa<DILocation>(IA), "inlined-at should be a location", &N, IA);
1187 if (auto *SP = dyn_cast<DISubprogram>(N.getRawScope()))
1188 CheckDI(SP->isDefinition(), "scope points into the type hierarchy", &N);
1189}
1190
1191void Verifier::visitGenericDINode(const GenericDINode &N) {
1192 CheckDI(N.getTag(), "invalid tag", &N);
1193}
1194
1195void Verifier::visitDIScope(const DIScope &N) {
1196 if (auto *F = N.getRawFile())
1197 CheckDI(isa<DIFile>(F), "invalid file", &N, F);
1198}
1199
1200void Verifier::visitDIType(const DIType &N) {
1201 CheckDI(isScope(N.getRawScope()), "invalid scope", &N, N.getRawScope());
1202 visitDIScope(N);
1203 CheckDI(N.getRawFile() || N.getLine() == 0, "line specified with no file", &N,
1204 N.getLine());
1205}
1206
1207void Verifier::visitDISubrangeType(const DISubrangeType &N) {
1208 visitDIType(N);
1209
1210 CheckDI(N.getTag() == dwarf::DW_TAG_subrange_type, "invalid tag", &N);
1211 auto *BaseType = N.getRawBaseType();
1212 CheckDI(!BaseType || isType(BaseType), "BaseType must be a type");
1213 auto *LBound = N.getRawLowerBound();
1214 CheckDI(!LBound || isa<ConstantAsMetadata>(LBound) ||
1215 isa<DIVariable>(LBound) || isa<DIExpression>(LBound) ||
1216 isa<DIDerivedType>(LBound),
1217 "LowerBound must be signed constant or DIVariable or DIExpression or "
1218 "DIDerivedType",
1219 &N);
1220 auto *UBound = N.getRawUpperBound();
1221 CheckDI(!UBound || isa<ConstantAsMetadata>(UBound) ||
1222 isa<DIVariable>(UBound) || isa<DIExpression>(UBound) ||
1223 isa<DIDerivedType>(UBound),
1224 "UpperBound must be signed constant or DIVariable or DIExpression or "
1225 "DIDerivedType",
1226 &N);
1227 auto *Stride = N.getRawStride();
1228 CheckDI(!Stride || isa<ConstantAsMetadata>(Stride) ||
1229 isa<DIVariable>(Stride) || isa<DIExpression>(Stride),
1230 "Stride must be signed constant or DIVariable or DIExpression", &N);
1231 auto *Bias = N.getRawBias();
1232 CheckDI(!Bias || isa<ConstantAsMetadata>(Bias) || isa<DIVariable>(Bias) ||
1233 isa<DIExpression>(Bias),
1234 "Bias must be signed constant or DIVariable or DIExpression", &N);
1235 // Subrange types currently only support constant size.
1236 auto *Size = N.getRawSizeInBits();
1238 "SizeInBits must be a constant");
1239}
1240
1241void Verifier::visitDISubrange(const DISubrange &N) {
1242 CheckDI(N.getTag() == dwarf::DW_TAG_subrange_type, "invalid tag", &N);
1243 CheckDI(!N.getRawCountNode() || !N.getRawUpperBound(),
1244 "Subrange can have any one of count or upperBound", &N);
1245 auto *CBound = N.getRawCountNode();
1246 CheckDI(!CBound || isa<ConstantAsMetadata>(CBound) ||
1247 isa<DIVariable>(CBound) || isa<DIExpression>(CBound),
1248 "Count must be signed constant or DIVariable or DIExpression", &N);
1249 auto Count = N.getCount();
1251 cast<ConstantInt *>(Count)->getSExtValue() >= -1,
1252 "invalid subrange count", &N);
1253 auto *LBound = N.getRawLowerBound();
1254 CheckDI(!LBound || isa<ConstantAsMetadata>(LBound) ||
1255 isa<DIVariable>(LBound) || isa<DIExpression>(LBound),
1256 "LowerBound must be signed constant or DIVariable or DIExpression",
1257 &N);
1258 auto *UBound = N.getRawUpperBound();
1259 CheckDI(!UBound || isa<ConstantAsMetadata>(UBound) ||
1260 isa<DIVariable>(UBound) || isa<DIExpression>(UBound),
1261 "UpperBound must be signed constant or DIVariable or DIExpression",
1262 &N);
1263 auto *Stride = N.getRawStride();
1264 CheckDI(!Stride || isa<ConstantAsMetadata>(Stride) ||
1265 isa<DIVariable>(Stride) || isa<DIExpression>(Stride),
1266 "Stride must be signed constant or DIVariable or DIExpression", &N);
1267}
1268
1269void Verifier::visitDIGenericSubrange(const DIGenericSubrange &N) {
1270 CheckDI(N.getTag() == dwarf::DW_TAG_generic_subrange, "invalid tag", &N);
1271 CheckDI(!N.getRawCountNode() || !N.getRawUpperBound(),
1272 "GenericSubrange can have any one of count or upperBound", &N);
1273 auto *CBound = N.getRawCountNode();
1274 CheckDI(!CBound || isa<DIVariable>(CBound) || isa<DIExpression>(CBound),
1275 "Count must be signed constant or DIVariable or DIExpression", &N);
1276 auto *LBound = N.getRawLowerBound();
1277 CheckDI(LBound, "GenericSubrange must contain lowerBound", &N);
1278 CheckDI(isa<DIVariable>(LBound) || isa<DIExpression>(LBound),
1279 "LowerBound must be signed constant or DIVariable or DIExpression",
1280 &N);
1281 auto *UBound = N.getRawUpperBound();
1282 CheckDI(!UBound || isa<DIVariable>(UBound) || isa<DIExpression>(UBound),
1283 "UpperBound must be signed constant or DIVariable or DIExpression",
1284 &N);
1285 auto *Stride = N.getRawStride();
1286 CheckDI(Stride, "GenericSubrange must contain stride", &N);
1287 CheckDI(isa<DIVariable>(Stride) || isa<DIExpression>(Stride),
1288 "Stride must be signed constant or DIVariable or DIExpression", &N);
1289}
1290
1291void Verifier::visitDIEnumerator(const DIEnumerator &N) {
1292 CheckDI(N.getTag() == dwarf::DW_TAG_enumerator, "invalid tag", &N);
1293}
1294
1295void Verifier::visitDIBasicType(const DIBasicType &N) {
1296 visitDIType(N);
1297
1298 CheckDI(N.getTag() == dwarf::DW_TAG_base_type ||
1299 N.getTag() == dwarf::DW_TAG_unspecified_type ||
1300 N.getTag() == dwarf::DW_TAG_string_type,
1301 "invalid tag", &N);
1302 // Basic types currently only support constant size.
1303 auto *Size = N.getRawSizeInBits();
1305 "SizeInBits must be a constant");
1306}
1307
1308void Verifier::visitDIFixedPointType(const DIFixedPointType &N) {
1309 visitDIBasicType(N);
1310
1311 CheckDI(N.getTag() == dwarf::DW_TAG_base_type, "invalid tag", &N);
1312 CheckDI(N.getEncoding() == dwarf::DW_ATE_signed_fixed ||
1313 N.getEncoding() == dwarf::DW_ATE_unsigned_fixed,
1314 "invalid encoding", &N);
1318 "invalid kind", &N);
1320 N.getFactorRaw() == 0,
1321 "factor should be 0 for rationals", &N);
1323 (N.getNumeratorRaw() == 0 && N.getDenominatorRaw() == 0),
1324 "numerator and denominator should be 0 for non-rationals", &N);
1325}
1326
1327void Verifier::visitDIStringType(const DIStringType &N) {
1328 visitDIType(N);
1329
1330 CheckDI(N.getTag() == dwarf::DW_TAG_string_type, "invalid tag", &N);
1331 CheckDI(!(N.isBigEndian() && N.isLittleEndian()), "has conflicting flags",
1332 &N);
1333}
1334
1335void Verifier::visitDIDerivedType(const DIDerivedType &N) {
1336 // Common type checks.
1337 visitDIType(N);
1338
1339 CheckDI(N.getTag() == dwarf::DW_TAG_typedef ||
1340 N.getTag() == dwarf::DW_TAG_pointer_type ||
1341 N.getTag() == dwarf::DW_TAG_ptr_to_member_type ||
1342 N.getTag() == dwarf::DW_TAG_reference_type ||
1343 N.getTag() == dwarf::DW_TAG_rvalue_reference_type ||
1344 N.getTag() == dwarf::DW_TAG_const_type ||
1345 N.getTag() == dwarf::DW_TAG_immutable_type ||
1346 N.getTag() == dwarf::DW_TAG_volatile_type ||
1347 N.getTag() == dwarf::DW_TAG_restrict_type ||
1348 N.getTag() == dwarf::DW_TAG_atomic_type ||
1349 N.getTag() == dwarf::DW_TAG_LLVM_ptrauth_type ||
1350 N.getTag() == dwarf::DW_TAG_member ||
1351 (N.getTag() == dwarf::DW_TAG_variable && N.isStaticMember()) ||
1352 N.getTag() == dwarf::DW_TAG_inheritance ||
1353 N.getTag() == dwarf::DW_TAG_friend ||
1354 N.getTag() == dwarf::DW_TAG_set_type ||
1355 N.getTag() == dwarf::DW_TAG_template_alias,
1356 "invalid tag", &N);
1357 if (N.getTag() == dwarf::DW_TAG_ptr_to_member_type) {
1358 CheckDI(isType(N.getRawExtraData()), "invalid pointer to member type", &N,
1359 N.getRawExtraData());
1360 } else if (N.getTag() == dwarf::DW_TAG_template_alias) {
1361 CheckDI(isMDTuple(N.getRawExtraData()), "invalid template parameters", &N,
1362 N.getRawExtraData());
1363 } else if (N.getTag() == dwarf::DW_TAG_inheritance ||
1364 N.getTag() == dwarf::DW_TAG_member ||
1365 N.getTag() == dwarf::DW_TAG_variable) {
1366 auto *ExtraData = N.getRawExtraData();
1367 auto IsValidExtraData = [&]() {
1368 if (ExtraData == nullptr)
1369 return true;
1370 if (isa<ConstantAsMetadata>(ExtraData) || isa<MDString>(ExtraData) ||
1371 isa<DIObjCProperty>(ExtraData))
1372 return true;
1373 if (auto *Tuple = dyn_cast<MDTuple>(ExtraData)) {
1374 if (Tuple->getNumOperands() != 1)
1375 return false;
1376 return isa_and_nonnull<ConstantAsMetadata>(Tuple->getOperand(0).get());
1377 }
1378 return false;
1379 };
1380 CheckDI(IsValidExtraData(),
1381 "extraData must be ConstantAsMetadata, MDString, DIObjCProperty, "
1382 "or MDTuple with single ConstantAsMetadata operand",
1383 &N, ExtraData);
1384 }
1385
1386 if (N.getTag() == dwarf::DW_TAG_set_type) {
1387 if (auto *T = N.getRawBaseType()) {
1391 CheckDI(
1392 (Enum && Enum->getTag() == dwarf::DW_TAG_enumeration_type) ||
1393 (Subrange && Subrange->getTag() == dwarf::DW_TAG_subrange_type) ||
1394 (Basic && (Basic->getEncoding() == dwarf::DW_ATE_unsigned ||
1395 Basic->getEncoding() == dwarf::DW_ATE_signed ||
1396 Basic->getEncoding() == dwarf::DW_ATE_unsigned_char ||
1397 Basic->getEncoding() == dwarf::DW_ATE_signed_char ||
1398 Basic->getEncoding() == dwarf::DW_ATE_boolean)),
1399 "invalid set base type", &N, T);
1400 }
1401 }
1402
1403 CheckDI(isType(N.getRawBaseType()), "invalid base type", &N,
1404 N.getRawBaseType());
1405
1406 if (N.getDWARFAddressSpace()) {
1407 CheckDI(N.getTag() == dwarf::DW_TAG_pointer_type ||
1408 N.getTag() == dwarf::DW_TAG_reference_type ||
1409 N.getTag() == dwarf::DW_TAG_rvalue_reference_type,
1410 "DWARF address space only applies to pointer or reference types",
1411 &N);
1412 }
1413
1414 auto *Size = N.getRawSizeInBits();
1417 "SizeInBits must be a constant or DIVariable or DIExpression");
1418}
1419
1420/// Detect mutually exclusive flags.
1421static bool hasConflictingReferenceFlags(unsigned Flags) {
1422 return ((Flags & DINode::FlagLValueReference) &&
1423 (Flags & DINode::FlagRValueReference)) ||
1424 ((Flags & DINode::FlagTypePassByValue) &&
1425 (Flags & DINode::FlagTypePassByReference));
1426}
1427
1428void Verifier::visitTemplateParams(const MDNode &N, const Metadata &RawParams) {
1429 auto *Params = dyn_cast<MDTuple>(&RawParams);
1430 CheckDI(Params, "invalid template params", &N, &RawParams);
1431 for (Metadata *Op : Params->operands()) {
1432 CheckDI(Op && isa<DITemplateParameter>(Op), "invalid template parameter",
1433 &N, Params, Op);
1434 }
1435}
1436
1437void Verifier::visitDICompositeType(const DICompositeType &N) {
1438 // Common type checks.
1439 visitDIType(N);
1440
1441 CheckDI(N.getTag() == dwarf::DW_TAG_array_type ||
1442 N.getTag() == dwarf::DW_TAG_structure_type ||
1443 N.getTag() == dwarf::DW_TAG_union_type ||
1444 N.getTag() == dwarf::DW_TAG_enumeration_type ||
1445 N.getTag() == dwarf::DW_TAG_class_type ||
1446 N.getTag() == dwarf::DW_TAG_variant_part ||
1447 N.getTag() == dwarf::DW_TAG_variant ||
1448 N.getTag() == dwarf::DW_TAG_namelist,
1449 "invalid tag", &N);
1450
1451 CheckDI(isType(N.getRawBaseType()), "invalid base type", &N,
1452 N.getRawBaseType());
1453
1454 CheckDI(!N.getRawElements() || isa<MDTuple>(N.getRawElements()),
1455 "invalid composite elements", &N, N.getRawElements());
1456 CheckDI(isType(N.getRawVTableHolder()), "invalid vtable holder", &N,
1457 N.getRawVTableHolder());
1459 "invalid reference flags", &N);
1460 unsigned DIBlockByRefStruct = 1 << 4;
1461 CheckDI((N.getFlags() & DIBlockByRefStruct) == 0,
1462 "DIBlockByRefStruct on DICompositeType is no longer supported", &N);
1463 CheckDI(llvm::all_of(N.getElements(), [](const DINode *N) { return N; }),
1464 "DISubprogram contains null entry in `elements` field", &N);
1465
1466 if (N.isVector()) {
1467 const DINodeArray Elements = N.getElements();
1468 CheckDI(Elements.size() == 1 &&
1469 Elements[0]->getTag() == dwarf::DW_TAG_subrange_type,
1470 "invalid vector, expected one element of type subrange", &N);
1471 }
1472
1473 if (auto *Params = N.getRawTemplateParams())
1474 visitTemplateParams(N, *Params);
1475
1476 if (auto *D = N.getRawDiscriminator()) {
1477 CheckDI(isa<DIDerivedType>(D) && N.getTag() == dwarf::DW_TAG_variant_part,
1478 "discriminator can only appear on variant part");
1479 }
1480
1481 if (N.getRawDataLocation()) {
1482 CheckDI(N.getTag() == dwarf::DW_TAG_array_type,
1483 "dataLocation can only appear in array type");
1484 }
1485
1486 if (N.getRawAssociated()) {
1487 CheckDI(N.getTag() == dwarf::DW_TAG_array_type,
1488 "associated can only appear in array type");
1489 }
1490
1491 if (N.getRawAllocated()) {
1492 CheckDI(N.getTag() == dwarf::DW_TAG_array_type,
1493 "allocated can only appear in array type");
1494 }
1495
1496 if (N.getRawRank()) {
1497 CheckDI(N.getTag() == dwarf::DW_TAG_array_type,
1498 "rank can only appear in array type");
1499 }
1500
1501 if (N.getTag() == dwarf::DW_TAG_array_type) {
1502 CheckDI(N.getRawBaseType(), "array types must have a base type", &N);
1503 }
1504
1505 auto *Size = N.getRawSizeInBits();
1508 "SizeInBits must be a constant or DIVariable or DIExpression");
1509}
1510
1511void Verifier::visitDISubroutineType(const DISubroutineType &N) {
1512 visitDIType(N);
1513 CheckDI(N.getTag() == dwarf::DW_TAG_subroutine_type, "invalid tag", &N);
1514 if (auto *Types = N.getRawTypeArray()) {
1515 CheckDI(isa<MDTuple>(Types), "invalid composite elements", &N, Types);
1516 for (Metadata *Ty : N.getTypeArray()->operands()) {
1517 CheckDI(isType(Ty), "invalid subroutine type ref", &N, Types, Ty);
1518 }
1519 }
1521 "invalid reference flags", &N);
1522}
1523
1524void Verifier::visitDIFile(const DIFile &N) {
1525 CheckDI(N.getTag() == dwarf::DW_TAG_file_type, "invalid tag", &N);
1526 std::optional<DIFile::ChecksumInfo<StringRef>> Checksum = N.getChecksum();
1527 if (Checksum) {
1528 CheckDI(Checksum->Kind <= DIFile::ChecksumKind::CSK_Last,
1529 "invalid checksum kind", &N);
1530 size_t Size;
1531 switch (Checksum->Kind) {
1532 case DIFile::CSK_MD5:
1533 Size = 32;
1534 break;
1535 case DIFile::CSK_SHA1:
1536 Size = 40;
1537 break;
1538 case DIFile::CSK_SHA256:
1539 Size = 64;
1540 break;
1541 }
1542 CheckDI(Checksum->Value.size() == Size, "invalid checksum length", &N);
1543 CheckDI(Checksum->Value.find_if_not(llvm::isHexDigit) == StringRef::npos,
1544 "invalid checksum", &N);
1545 }
1546}
1547
1548void Verifier::visitDICompileUnit(const DICompileUnit &N) {
1549 CheckDI(N.isDistinct(), "compile units must be distinct", &N);
1550 CheckDI(N.getTag() == dwarf::DW_TAG_compile_unit, "invalid tag", &N);
1551
1552 // Don't bother verifying the compilation directory or producer string
1553 // as those could be empty.
1554 CheckDI(N.getRawFile() && isa<DIFile>(N.getRawFile()), "invalid file", &N,
1555 N.getRawFile());
1556 CheckDI(!N.getFile()->getFilename().empty(), "invalid filename", &N,
1557 N.getFile());
1558
1559 CheckDI((N.getEmissionKind() <= DICompileUnit::LastEmissionKind),
1560 "invalid emission kind", &N);
1561
1562 CheckDI(N.getSourceLanguage().getDialect() <= dwarf::DW_LLVM_LANG_DIALECT_max,
1563 "invalid language dialect", &N);
1564
1565 if (auto *Array = N.getRawEnumTypes()) {
1566 CheckDI(isa<MDTuple>(Array), "invalid enum list", &N, Array);
1567 for (Metadata *Op : N.getEnumTypes()->operands()) {
1569 CheckDI(Enum && Enum->getTag() == dwarf::DW_TAG_enumeration_type,
1570 "invalid enum type", &N, N.getEnumTypes(), Op);
1571 CheckDI(!Enum->getScope() || !isa<DILocalScope>(Enum->getScope()),
1572 "function-local enum in a DICompileUnit's enum list", &N,
1573 N.getEnumTypes(), Op);
1574 }
1575 }
1576 if (auto *Array = N.getRawRetainedTypes()) {
1577 CheckDI(isa<MDTuple>(Array), "invalid retained type list", &N, Array);
1578 for (Metadata *Op : N.getRetainedTypes()->operands()) {
1579 CheckDI(
1580 Op && (isa<DIType>(Op) || (isa<DISubprogram>(Op) &&
1581 !cast<DISubprogram>(Op)->isDefinition())),
1582 "invalid retained type", &N, Op);
1583 }
1584 }
1585 if (auto *Array = N.getRawGlobalVariables()) {
1586 CheckDI(isa<MDTuple>(Array), "invalid global variable list", &N, Array);
1587 for (Metadata *Op : N.getGlobalVariables()->operands()) {
1589 CheckDI(GVE, "invalid global variable ref", &N, Op);
1590 CheckDI(!isa_and_nonnull<DILocalScope>(GVE->getVariable()->getScope()),
1591 "function-local variables are not allowed in a DICompileUnit's "
1592 "global variables list",
1593 &N, Op);
1594 }
1595 }
1596 if (auto *Array = N.getRawImportedEntities()) {
1597 CheckDI(isa<MDTuple>(Array), "invalid imported entity list", &N, Array);
1598 for (Metadata *Op : N.getImportedEntities()->operands()) {
1600 CheckDI(IE, "invalid imported entity ref", &N, Op);
1602 "function-local imports are not allowed in a DICompileUnit's "
1603 "imported entities list",
1604 &N, Op);
1605 }
1606 }
1607 if (auto *Array = N.getRawMacros()) {
1608 CheckDI(isa<MDTuple>(Array), "invalid macro list", &N, Array);
1609 for (Metadata *Op : N.getMacros()->operands()) {
1610 CheckDI(Op && isa<DIMacroNode>(Op), "invalid macro ref", &N, Op);
1611 }
1612 }
1613 CUVisited.insert(&N);
1614}
1615
1616void Verifier::visitDISubprogram(const DISubprogram &N) {
1617 CheckDI(N.getTag() == dwarf::DW_TAG_subprogram, "invalid tag", &N);
1618 CheckDI(isScope(N.getRawScope()), "invalid scope", &N, N.getRawScope());
1619 if (auto *F = N.getRawFile())
1620 CheckDI(isa<DIFile>(F), "invalid file", &N, F);
1621 else
1622 CheckDI(N.getLine() == 0, "line specified with no file", &N, N.getLine());
1623 auto *T = N.getRawType();
1624 CheckDI(T, "DISubprogram requires a non-null type", &N);
1625 CheckDI(isa<DISubroutineType>(T), "invalid subroutine type", &N, T);
1626 CheckDI(isType(N.getRawContainingType()), "invalid containing type", &N,
1627 N.getRawContainingType());
1628 if (auto *Params = N.getRawTemplateParams())
1629 visitTemplateParams(N, *Params);
1630 if (auto *S = N.getRawDeclaration())
1631 CheckDI(isa<DISubprogram>(S) && !cast<DISubprogram>(S)->isDefinition(),
1632 "invalid subprogram declaration", &N, S);
1633 if (auto *RawNode = N.getRawRetainedNodes()) {
1634 auto *Node = dyn_cast<MDTuple>(RawNode);
1635 CheckDI(Node, "invalid retained nodes list", &N, RawNode);
1636
1637 DenseMap<unsigned, DILocalVariable *> Args;
1638 for (Metadata *Op : Node->operands()) {
1639 CheckDI(Op, "nullptr in retained nodes", &N, Node);
1640
1641 auto True = [](const Metadata *) { return true; };
1642 auto False = [](const Metadata *) { return false; };
1643 bool IsTypeCorrect = DISubprogram::visitRetainedNode<bool>(
1644 Op, True, True, True, True, True, False);
1645 CheckDI(IsTypeCorrect,
1646 "invalid retained nodes, expected DILocalVariable, DILabel, "
1647 "DIImportedEntity, DIType or DIGlobalVariableExpression",
1648 &N, Node, Op);
1649
1650 auto *RetainedNode = cast<MDNode>(Op);
1651 auto *RetainedNodeScope = dyn_cast_or_null<DILocalScope>(
1653 CheckDI(RetainedNodeScope,
1654 "invalid retained nodes, retained node is not local", &N, Node,
1655 RetainedNode);
1656
1657 DISubprogram *RetainedNodeSP = getSubprogram(RetainedNodeScope);
1658 DICompileUnit *RetainedNodeUnit =
1659 RetainedNodeSP ? RetainedNodeSP->getUnit() : nullptr;
1660 CheckDI(
1661 RetainedNodeSP == &N,
1662 "invalid retained nodes, retained node does not belong to subprogram",
1663 &N, Node, RetainedNode, RetainedNodeScope, RetainedNodeSP,
1664 RetainedNodeUnit);
1665
1666 auto *DV = dyn_cast<DILocalVariable>(RetainedNode);
1667 if (!DV)
1668 continue;
1669 if (unsigned ArgNum = DV->getArg()) {
1670 auto [ArgI, Inserted] = Args.insert({ArgNum, DV});
1671 CheckDI(Inserted || DV == ArgI->second,
1672 "invalid retained nodes, more than one local variable with the "
1673 "same argument index",
1674 &N, N.getUnit(), Node, RetainedNode, Args[ArgNum]);
1675 }
1676 }
1677 }
1679 "invalid reference flags", &N);
1680
1681 auto *Unit = N.getRawUnit();
1682 if (N.isDefinition()) {
1683 // Subprogram definitions (not part of the type hierarchy).
1684 CheckDI(N.isDistinct(), "subprogram definitions must be distinct", &N);
1685 CheckDI(Unit, "subprogram definitions must have a compile unit", &N);
1686 CheckDI(isa<DICompileUnit>(Unit), "invalid unit type", &N, Unit);
1687 // There's no good way to cross the CU boundary to insert a nested
1688 // DISubprogram definition in one CU into a type defined in another CU.
1689 auto *CT = dyn_cast_or_null<DICompositeType>(N.getRawScope());
1690 if (CT && CT->getRawIdentifier() &&
1691 M.getContext().isODRUniquingDebugTypes())
1692 CheckDI(N.getDeclaration(),
1693 "definition subprograms cannot be nested within DICompositeType "
1694 "when enabling ODR",
1695 &N);
1696 } else {
1697 // Subprogram declarations (part of the type hierarchy).
1698 CheckDI(!Unit, "subprogram declarations must not have a compile unit", &N);
1699 CheckDI(!N.getRawDeclaration(),
1700 "subprogram declaration must not have a declaration field");
1701 }
1702
1703 if (auto *RawThrownTypes = N.getRawThrownTypes()) {
1704 auto *ThrownTypes = dyn_cast<MDTuple>(RawThrownTypes);
1705 CheckDI(ThrownTypes, "invalid thrown types list", &N, RawThrownTypes);
1706 for (Metadata *Op : ThrownTypes->operands())
1707 CheckDI(Op && isa<DIType>(Op), "invalid thrown type", &N, ThrownTypes,
1708 Op);
1709 }
1710
1711 if (N.areAllCallsDescribed())
1712 CheckDI(N.isDefinition(),
1713 "DIFlagAllCallsDescribed must be attached to a definition");
1714}
1715
1716void Verifier::visitDILexicalBlockBase(const DILexicalBlockBase &N) {
1717 CheckDI(N.getTag() == dwarf::DW_TAG_lexical_block, "invalid tag", &N);
1718 CheckDI(N.getRawScope() && isa<DILocalScope>(N.getRawScope()),
1719 "invalid local scope", &N, N.getRawScope());
1720 if (auto *SP = dyn_cast<DISubprogram>(N.getRawScope()))
1721 CheckDI(SP->isDefinition(), "scope points into the type hierarchy", &N);
1722}
1723
1724void Verifier::visitDILexicalBlock(const DILexicalBlock &N) {
1725 visitDILexicalBlockBase(N);
1726
1727 CheckDI(N.getLine() || !N.getColumn(),
1728 "cannot have column info without line info", &N);
1729}
1730
1731void Verifier::visitDILexicalBlockFile(const DILexicalBlockFile &N) {
1732 visitDILexicalBlockBase(N);
1733}
1734
1735void Verifier::visitDICommonBlock(const DICommonBlock &N) {
1736 CheckDI(N.getTag() == dwarf::DW_TAG_common_block, "invalid tag", &N);
1737 if (auto *S = N.getRawScope())
1738 CheckDI(isa<DIScope>(S), "invalid scope ref", &N, S);
1739 if (auto *S = N.getRawDecl())
1740 CheckDI(isa<DIGlobalVariable>(S), "invalid declaration", &N, S);
1741}
1742
1743void Verifier::visitDINamespace(const DINamespace &N) {
1744 CheckDI(N.getTag() == dwarf::DW_TAG_namespace, "invalid tag", &N);
1745 if (auto *S = N.getRawScope())
1746 CheckDI(isa<DIScope>(S), "invalid scope ref", &N, S);
1747}
1748
1749void Verifier::visitDIMacro(const DIMacro &N) {
1750 CheckDI(N.getMacinfoType() == dwarf::DW_MACINFO_define ||
1751 N.getMacinfoType() == dwarf::DW_MACINFO_undef,
1752 "invalid macinfo type", &N);
1753 CheckDI(!N.getName().empty(), "anonymous macro", &N);
1754 if (!N.getValue().empty()) {
1755 assert(N.getValue().data()[0] != ' ' && "Macro value has a space prefix");
1756 }
1757}
1758
1759void Verifier::visitDIMacroFile(const DIMacroFile &N) {
1760 CheckDI(N.getMacinfoType() == dwarf::DW_MACINFO_start_file,
1761 "invalid macinfo type", &N);
1762 if (auto *F = N.getRawFile())
1763 CheckDI(isa<DIFile>(F), "invalid file", &N, F);
1764
1765 if (auto *Array = N.getRawElements()) {
1766 CheckDI(isa<MDTuple>(Array), "invalid macro list", &N, Array);
1767 for (Metadata *Op : N.getElements()->operands()) {
1768 CheckDI(Op && isa<DIMacroNode>(Op), "invalid macro ref", &N, Op);
1769 }
1770 }
1771}
1772
1773void Verifier::visitDIModule(const DIModule &N) {
1774 CheckDI(N.getTag() == dwarf::DW_TAG_module, "invalid tag", &N);
1775 CheckDI(!N.getName().empty(), "anonymous module", &N);
1776}
1777
1778void Verifier::visitDITemplateParameter(const DITemplateParameter &N) {
1779 CheckDI(isType(N.getRawType()), "invalid type ref", &N, N.getRawType());
1780}
1781
1782void Verifier::visitDITemplateTypeParameter(const DITemplateTypeParameter &N) {
1783 visitDITemplateParameter(N);
1784
1785 CheckDI(N.getTag() == dwarf::DW_TAG_template_type_parameter, "invalid tag",
1786 &N);
1787}
1788
1789void Verifier::visitDITemplateValueParameter(
1790 const DITemplateValueParameter &N) {
1791 visitDITemplateParameter(N);
1792
1793 CheckDI(N.getTag() == dwarf::DW_TAG_template_value_parameter ||
1794 N.getTag() == dwarf::DW_TAG_GNU_template_template_param ||
1795 N.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack,
1796 "invalid tag", &N);
1797}
1798
1799void Verifier::visitDIVariable(const DIVariable &N) {
1800 if (auto *S = N.getRawScope())
1801 CheckDI(isa<DIScope>(S), "invalid scope", &N, S);
1802 if (auto *F = N.getRawFile())
1803 CheckDI(isa<DIFile>(F), "invalid file", &N, F);
1804}
1805
1806void Verifier::visitDIGlobalVariable(const DIGlobalVariable &N) {
1807 // Checks common to all variables.
1808 visitDIVariable(N);
1809
1810 CheckDI(N.getTag() == dwarf::DW_TAG_variable, "invalid tag", &N);
1811 CheckDI(isType(N.getRawType()), "invalid type ref", &N, N.getRawType());
1812 // Check only if the global variable is not an extern
1813 if (N.isDefinition())
1814 CheckDI(N.getType(), "missing global variable type", &N);
1815 if (auto *Member = N.getRawStaticDataMemberDeclaration()) {
1817 "invalid static data member declaration", &N, Member);
1818 }
1819}
1820
1821void Verifier::visitDILocalVariable(const DILocalVariable &N) {
1822 // Checks common to all variables.
1823 visitDIVariable(N);
1824
1825 CheckDI(isType(N.getRawType()), "invalid type ref", &N, N.getRawType());
1826 CheckDI(N.getTag() == dwarf::DW_TAG_variable, "invalid tag", &N);
1827 CheckDI(N.getRawScope() && isa<DILocalScope>(N.getRawScope()),
1828 "local variable requires a valid scope", &N, N.getRawScope());
1829 if (auto Ty = N.getType())
1830 CheckDI(!isa<DISubroutineType>(Ty), "invalid type", &N, N.getType());
1831}
1832
1833void Verifier::visitDIAssignID(const DIAssignID &N) {
1834 CheckDI(!N.getNumOperands(), "DIAssignID has no arguments", &N);
1835 CheckDI(N.isDistinct(), "DIAssignID must be distinct", &N);
1836}
1837
1838void Verifier::visitDILabel(const DILabel &N) {
1839 if (auto *S = N.getRawScope())
1840 CheckDI(isa<DIScope>(S), "invalid scope", &N, S);
1841 if (auto *F = N.getRawFile())
1842 CheckDI(isa<DIFile>(F), "invalid file", &N, F);
1843
1844 CheckDI(N.getTag() == dwarf::DW_TAG_label, "invalid tag", &N);
1845 CheckDI(N.getRawScope() && isa<DILocalScope>(N.getRawScope()),
1846 "label requires a valid scope", &N, N.getRawScope());
1847}
1848
1849void Verifier::visitDIExpression(const DIExpression &N) {
1850 CheckDI(N.isValid(), "invalid expression", &N);
1851}
1852
1853void Verifier::visitDIGlobalVariableExpression(
1854 const DIGlobalVariableExpression &GVE) {
1855 CheckDI(GVE.getVariable(), "missing variable");
1856 if (auto *Var = GVE.getVariable())
1857 visitDIGlobalVariable(*Var);
1858 if (auto *Expr = GVE.getExpression()) {
1859 visitDIExpression(*Expr);
1860 if (auto Fragment = Expr->getFragmentInfo())
1861 verifyFragmentExpression(*GVE.getVariable(), *Fragment, &GVE);
1862 }
1863}
1864
1865void Verifier::visitDIObjCProperty(const DIObjCProperty &N) {
1866 CheckDI(N.getTag() == dwarf::DW_TAG_APPLE_property, "invalid tag", &N);
1867 if (auto *T = N.getRawType())
1868 CheckDI(isType(T), "invalid type ref", &N, T);
1869 if (auto *F = N.getRawFile())
1870 CheckDI(isa<DIFile>(F), "invalid file", &N, F);
1871}
1872
1873void Verifier::visitDIProperty(const DIProperty &N) {
1874 CheckDI(N.getTag() == dwarf::DW_TAG_property, "invalid tag", &N);
1875 if (auto *T = N.getRawType())
1876 CheckDI(isType(T), "invalid type ref", &N, T);
1877 if (auto *F = N.getRawFile())
1878 CheckDI(isa<DIFile>(F), "invalid file", &N, F);
1879 // DWARF allows a property getter to forward to a subprogram, variable, or
1880 // constant too, but the backend only knows how to forward to a member.
1881 if (DINode *BackingStorage = N.getBackingStorage()) {
1882 auto *DT = dyn_cast<DIDerivedType>(BackingStorage);
1883 CheckDI(DT && DT->getTag() == dwarf::DW_TAG_member,
1884 "property backing storage must be a member", &N, BackingStorage);
1885 }
1886}
1887
1888void Verifier::visitDIImportedEntity(const DIImportedEntity &N) {
1889 CheckDI(N.getTag() == dwarf::DW_TAG_imported_module ||
1890 N.getTag() == dwarf::DW_TAG_imported_declaration,
1891 "invalid tag", &N);
1892 if (auto *S = N.getRawScope())
1893 CheckDI(isa<DIScope>(S), "invalid scope for imported entity", &N, S);
1894 CheckDI(isDINode(N.getRawEntity()), "invalid imported entity", &N,
1895 N.getRawEntity());
1896}
1897
1898void Verifier::visitComdat(const Comdat &C) {
1899 // In COFF the Module is invalid if the GlobalValue has private linkage.
1900 // Entities with private linkage don't have entries in the symbol table.
1901 if (TT.isOSBinFormatCOFF())
1902 if (const GlobalValue *GV = M.getNamedValue(C.getName()))
1903 Check(!GV->hasPrivateLinkage(), "comdat global value has private linkage",
1904 GV);
1905}
1906
1907void Verifier::visitModuleIdents() {
1908 const NamedMDNode *Idents = M.getNamedMetadata("llvm.ident");
1909 if (!Idents)
1910 return;
1911
1912 // llvm.ident takes a list of metadata entry. Each entry has only one string.
1913 // Scan each llvm.ident entry and make sure that this requirement is met.
1914 for (const MDNode *N : Idents->operands()) {
1915 Check(N->getNumOperands() == 1,
1916 "incorrect number of operands in llvm.ident metadata", N);
1917 Check(dyn_cast_or_null<MDString>(N->getOperand(0)),
1918 ("invalid value for llvm.ident metadata entry operand"
1919 "(the operand should be a string)"),
1920 N->getOperand(0));
1921 }
1922}
1923
1924void Verifier::visitModuleCommandLines() {
1925 const NamedMDNode *CommandLines = M.getNamedMetadata("llvm.commandline");
1926 if (!CommandLines)
1927 return;
1928
1929 // llvm.commandline takes a list of metadata entry. Each entry has only one
1930 // string. Scan each llvm.commandline entry and make sure that this
1931 // requirement is met.
1932 for (const MDNode *N : CommandLines->operands()) {
1933 Check(N->getNumOperands() == 1,
1934 "incorrect number of operands in llvm.commandline metadata", N);
1935 Check(dyn_cast_or_null<MDString>(N->getOperand(0)),
1936 ("invalid value for llvm.commandline metadata entry operand"
1937 "(the operand should be a string)"),
1938 N->getOperand(0));
1939 }
1940}
1941
1942void Verifier::visitModuleErrnoTBAA() {
1943 const NamedMDNode *ErrnoTBAA = M.getNamedMetadata("llvm.errno.tbaa");
1944 if (!ErrnoTBAA)
1945 return;
1946
1947 Check(ErrnoTBAA->getNumOperands() >= 1,
1948 "llvm.errno.tbaa must have at least one operand", ErrnoTBAA);
1949
1950 for (const MDNode *N : ErrnoTBAA->operands())
1951 TBAAVerifyHelper.visitTBAAMetadata(nullptr, N);
1952}
1953
1954void Verifier::visitModuleFlags() {
1955 const NamedMDNode *Flags = M.getModuleFlagsMetadata();
1956 if (!Flags) return;
1957
1958 // Scan each flag, and track the flags and requirements.
1959 DenseMap<const MDString*, const MDNode*> SeenIDs;
1960 SmallVector<const MDNode*, 16> Requirements;
1961
1962 // Either both aarch64-elf-pauthabi-* flags should be set or none at all.
1963 std::optional<uint64_t> PAuthABIPlatform;
1964 std::optional<uint64_t> PAuthABIVersion;
1965 // Signing of init/fini pointers: address diversity implies basic signing.
1966 uint64_t HasPtrauthInitFini = 0;
1967 uint64_t HasPtrauthInitFiniAddr = 0;
1968
1969 for (const MDNode *MDN : Flags->operands()) {
1970 visitModuleFlag(MDN, SeenIDs, Requirements);
1971 if (MDN->getNumOperands() != 3)
1972 continue;
1973
1974 if (const auto *FlagName = dyn_cast_or_null<MDString>(MDN->getOperand(1))) {
1975 auto GetFlagNamed = [&](StringRef Name) -> std::optional<uint64_t> {
1976 if (FlagName->getString() != Name)
1977 return std::nullopt;
1978 if (const auto *FlagValue =
1980 return FlagValue->getZExtValue();
1981
1982 CheckFailed(Name + ": module flag expects integer value");
1983 return std::nullopt;
1984 };
1985
1986 if (auto Value = GetFlagNamed("aarch64-elf-pauthabi-platform"))
1987 PAuthABIPlatform = *Value;
1988 else if (auto Value = GetFlagNamed("aarch64-elf-pauthabi-version"))
1989 PAuthABIVersion = *Value;
1990 else if (auto Value = GetFlagNamed("ptrauth-init-fini"))
1991 HasPtrauthInitFini = *Value;
1992 else if (auto Value =
1993 GetFlagNamed("ptrauth-init-fini-address-discrimination"))
1994 HasPtrauthInitFiniAddr = *Value;
1995 }
1996 }
1997
1998 Check(llvm::is_contained({0u, 1u}, HasPtrauthInitFini),
1999 "ptrauth-init-fini must be 0 or 1");
2000 Check(llvm::is_contained({0u, 1u}, HasPtrauthInitFiniAddr),
2001 "ptrauth-init-fini-address-discrimination must be 0 or 1, if set");
2002 if (HasPtrauthInitFiniAddr)
2003 Check(HasPtrauthInitFini, "ptrauth-init-fini-address-discrimination module "
2004 "flag requires ptrauth-init-fini");
2005
2006 if (PAuthABIPlatform.has_value() != PAuthABIVersion.has_value())
2007 CheckFailed("either both or no 'aarch64-elf-pauthabi-platform' and "
2008 "'aarch64-elf-pauthabi-version' module flags must be present");
2009
2010 // Validate that the requirements in the module are valid.
2011 for (const MDNode *Requirement : Requirements) {
2012 const MDString *Flag = cast<MDString>(Requirement->getOperand(0));
2013 const Metadata *ReqValue = Requirement->getOperand(1);
2014
2015 const MDNode *Op = SeenIDs.lookup(Flag);
2016 if (!Op) {
2017 CheckFailed("invalid requirement on flag, flag is not present in module",
2018 Flag);
2019 continue;
2020 }
2021
2022 if (Op->getOperand(2) != ReqValue) {
2023 CheckFailed(("invalid requirement on flag, "
2024 "flag does not have the required value"),
2025 Flag);
2026 continue;
2027 }
2028 }
2029}
2030
2031void
2032Verifier::visitModuleFlag(const MDNode *Op,
2033 DenseMap<const MDString *, const MDNode *> &SeenIDs,
2034 SmallVectorImpl<const MDNode *> &Requirements) {
2035 // Each module flag should have three arguments, the merge behavior (a
2036 // constant int), the flag ID (an MDString), and the value.
2037 Check(Op->getNumOperands() == 3,
2038 "incorrect number of operands in module flag", Op);
2039 Module::ModFlagBehavior MFB;
2040 if (!Module::isValidModFlagBehavior(Op->getOperand(0), MFB)) {
2042 "invalid behavior operand in module flag (expected constant integer)",
2043 Op->getOperand(0));
2044 Check(false,
2045 "invalid behavior operand in module flag (unexpected constant)",
2046 Op->getOperand(0));
2047 }
2048 MDString *ID = dyn_cast_or_null<MDString>(Op->getOperand(1));
2049 Check(ID, "invalid ID operand in module flag (expected metadata string)",
2050 Op->getOperand(1));
2051
2052 // Check the values for behaviors with additional requirements.
2053 switch (MFB) {
2054 case Module::Error:
2055 case Module::Warning:
2056 case Module::Override:
2057 // These behavior types accept any value.
2058 break;
2059
2060 case Module::Min: {
2061 auto *V = mdconst::dyn_extract_or_null<ConstantInt>(Op->getOperand(2));
2062 Check(V && V->getValue().isNonNegative(),
2063 "invalid value for 'min' module flag (expected constant non-negative "
2064 "integer)",
2065 Op->getOperand(2));
2066 break;
2067 }
2068
2069 case Module::Max: {
2071 "invalid value for 'max' module flag (expected constant integer)",
2072 Op->getOperand(2));
2073 break;
2074 }
2075
2076 case Module::Require: {
2077 // The value should itself be an MDNode with two operands, a flag ID (an
2078 // MDString), and a value.
2079 auto *Value = dyn_cast<MDNode>(Op->getOperand(2));
2080 Check(Value && Value->getNumOperands() == 2,
2081 "invalid value for 'require' module flag (expected metadata pair)",
2082 Op->getOperand(2));
2083 Check(isa<MDString>(Value->getOperand(0)),
2084 ("invalid value for 'require' module flag "
2085 "(first value operand should be a string)"),
2086 Value->getOperand(0));
2087
2088 // Append it to the list of requirements, to check once all module flags are
2089 // scanned.
2090 Requirements.push_back(Value);
2091 break;
2092 }
2093
2094 case Module::Append:
2095 case Module::AppendUnique: {
2096 // These behavior types require the operand be an MDNode.
2097 Check(isa<MDNode>(Op->getOperand(2)),
2098 "invalid value for 'append'-type module flag "
2099 "(expected a metadata node)",
2100 Op->getOperand(2));
2101 break;
2102 }
2103 }
2104
2105 // Unless this is a "requires" flag, check the ID is unique.
2106 if (MFB != Module::Require) {
2107 bool Inserted = SeenIDs.insert(std::make_pair(ID, Op)).second;
2108 Check(Inserted,
2109 "module flag identifiers must be unique (or of 'require' type)", ID);
2110 }
2111
2112 StringRef Name = ID->getString();
2113 if (Name == "wchar_size") {
2114 ConstantInt *Value
2116 Check(Value, "wchar_size metadata requires constant integer argument");
2117 return;
2118 }
2119
2120 if (Name == "long-double-type") {
2121 Check(MFB == Module::Error,
2122 "long-double-type module flag must use 'error' merge behavior", Op);
2123 const MDString *Value = dyn_cast_or_null<MDString>(Op->getOperand(2));
2124 Check(Value, "long-double-type metadata requires a string argument");
2125 if (Value)
2126 Check(parseLongDoubleFormat(Value->getString()).has_value(),
2127 "invalid long-double-type metadata value", Op);
2128 return;
2129 }
2130
2131 if (Name == "float-abi") {
2132 Check(MFB == Module::Error,
2133 "float-abi module flag must use 'error' merge behavior", Op);
2134 const MDString *Value = dyn_cast_or_null<MDString>(Op->getOperand(2));
2135 Check(Value, "float-abi metadata requires a string argument");
2136 if (Value)
2137 Check(FloatABI::parseABIType(Value->getString()).has_value(),
2138 "invalid float-abi metadata value", Op);
2139 return;
2140 }
2141
2142 if (Name == "thread-model") {
2143 Check(MFB == Module::Error,
2144 "thread-model module flag must use 'error' merge behavior", Op);
2145 const MDString *Value = dyn_cast_or_null<MDString>(Op->getOperand(2));
2146 Check(Value, "thread-model metadata requires a string argument");
2147 if (Value)
2148 Check(parseThreadModel(Value->getString()).has_value(),
2149 "invalid thread-model metadata value", Op);
2150 return;
2151 }
2152
2153 if (Name == "target-abi") {
2154 const MDString *Value = dyn_cast_or_null<MDString>(Op->getOperand(2));
2155 Check(Value && !Value->getString().empty(),
2156 "target-abi metadata requires a non-empty string argument", Op);
2157 return;
2158 }
2159
2160 if (Name == "Linker Options") {
2161 // If the llvm.linker.options named metadata exists, we assume that the
2162 // bitcode reader has upgraded the module flag. Otherwise the flag might
2163 // have been created by a client directly.
2164 Check(M.getNamedMetadata("llvm.linker.options"),
2165 "'Linker Options' named metadata no longer supported");
2166 return;
2167 }
2168
2169 if (Name == "SemanticInterposition") {
2170 ConstantInt *Value =
2172 Check(Value,
2173 "SemanticInterposition metadata requires constant integer argument");
2174 return;
2175 }
2176
2177 if (Name == "CG Profile") {
2178 for (const MDOperand &MDO : cast<MDNode>(Op->getOperand(2))->operands())
2179 visitModuleFlagCGProfileEntry(MDO);
2180 return;
2181 }
2182
2183 // Target-specific module flag checks.
2184 verifyAMDGPUModuleFlag(*this, ID, MFB, Op);
2185}
2186
2187void Verifier::visitModuleFlagCGProfileEntry(const MDOperand &MDO) {
2188 auto CheckFunction = [&](const MDOperand &FuncMDO) {
2189 if (!FuncMDO)
2190 return;
2191 auto F = dyn_cast<ValueAsMetadata>(FuncMDO);
2192 Check(F && isa<Function>(F->getValue()->stripPointerCasts()),
2193 "expected a Function or null", FuncMDO);
2194 };
2195 auto Node = dyn_cast_or_null<MDNode>(MDO);
2196 Check(Node && Node->getNumOperands() == 3, "expected a MDNode triple", MDO);
2197 CheckFunction(Node->getOperand(0));
2198 CheckFunction(Node->getOperand(1));
2199 auto Count = dyn_cast_or_null<ConstantAsMetadata>(Node->getOperand(2));
2200 Check(Count && Count->getType()->isIntegerTy(),
2201 "expected an integer constant", Node->getOperand(2));
2202}
2203
2204void Verifier::verifyAttributeTypes(AttributeSet Attrs, const Value *V) {
2205 for (Attribute A : Attrs) {
2206
2207 if (A.isStringAttribute()) {
2208#define GET_ATTR_NAMES
2209#define ATTRIBUTE_ENUM(ENUM_NAME, DISPLAY_NAME)
2210#define ATTRIBUTE_STRBOOL(ENUM_NAME, DISPLAY_NAME) \
2211 if (A.getKindAsString() == #DISPLAY_NAME) { \
2212 auto V = A.getValueAsString(); \
2213 if (!(V.empty() || V == "true" || V == "false")) \
2214 CheckFailed("invalid value for '" #DISPLAY_NAME "' attribute: " + V + \
2215 ""); \
2216 }
2217
2218#include "llvm/IR/Attributes.inc"
2219 continue;
2220 }
2221
2222 if (A.isIntAttribute() != Attribute::isIntAttrKind(A.getKindAsEnum())) {
2223 CheckFailed("Attribute '" + A.getAsString() + "' should have an Argument",
2224 V);
2225 return;
2226 }
2227 }
2228}
2229
2230// VerifyParameterAttrs - Check the given attributes for an argument or return
2231// value of the specified type. The value V is printed in error messages.
2232void Verifier::verifyParameterAttrs(AttributeSet Attrs, Type *Ty,
2233 const Value *V) {
2234 if (!Attrs.hasAttributes())
2235 return;
2236
2237 verifyAttributeTypes(Attrs, V);
2238
2239 for (Attribute Attr : Attrs)
2240 Check(Attr.isStringAttribute() ||
2241 Attribute::canUseAsParamAttr(Attr.getKindAsEnum()),
2242 "Attribute '" + Attr.getAsString() + "' does not apply to parameters",
2243 V);
2244
2245 if (Attrs.hasAttribute(Attribute::ImmArg)) {
2246 unsigned AttrCount =
2247 Attrs.getNumAttributes() - Attrs.hasAttribute(Attribute::Range);
2248 Check(AttrCount == 1,
2249 "Attribute 'immarg' is incompatible with other attributes except the "
2250 "'range' attribute",
2251 V);
2252 }
2253
2254 // Check for mutually incompatible attributes. Only inreg is compatible with
2255 // sret.
2256 unsigned AttrCount = 0;
2257 AttrCount += Attrs.hasAttribute(Attribute::ByVal);
2258 AttrCount += Attrs.hasAttribute(Attribute::InAlloca);
2259 AttrCount += Attrs.hasAttribute(Attribute::Preallocated);
2260 AttrCount += Attrs.hasAttribute(Attribute::StructRet) ||
2261 Attrs.hasAttribute(Attribute::InReg);
2262 AttrCount += Attrs.hasAttribute(Attribute::Nest);
2263 AttrCount += Attrs.hasAttribute(Attribute::ByRef);
2264 Check(AttrCount <= 1,
2265 "Attributes 'byval', 'inalloca', 'preallocated', 'inreg', 'nest', "
2266 "'byref', and 'sret' are incompatible!",
2267 V);
2268
2269 Check(!(Attrs.hasAttribute(Attribute::InAlloca) &&
2270 Attrs.hasAttribute(Attribute::ReadOnly)),
2271 "Attributes "
2272 "'inalloca and readonly' are incompatible!",
2273 V);
2274
2275 Check(!(Attrs.hasAttribute(Attribute::StructRet) &&
2276 Attrs.hasAttribute(Attribute::Returned)),
2277 "Attributes "
2278 "'sret and returned' are incompatible!",
2279 V);
2280
2281 Check(!(Attrs.hasAttribute(Attribute::ZExt) &&
2282 Attrs.hasAttribute(Attribute::SExt)),
2283 "Attributes "
2284 "'zeroext and signext' are incompatible!",
2285 V);
2286
2287 Check(!(Attrs.hasAttribute(Attribute::ReadNone) &&
2288 Attrs.hasAttribute(Attribute::ReadOnly)),
2289 "Attributes "
2290 "'readnone and readonly' are incompatible!",
2291 V);
2292
2293 Check(!(Attrs.hasAttribute(Attribute::ReadNone) &&
2294 Attrs.hasAttribute(Attribute::WriteOnly)),
2295 "Attributes "
2296 "'readnone and writeonly' are incompatible!",
2297 V);
2298
2299 Check(!(Attrs.hasAttribute(Attribute::ReadOnly) &&
2300 Attrs.hasAttribute(Attribute::WriteOnly)),
2301 "Attributes "
2302 "'readonly and writeonly' are incompatible!",
2303 V);
2304
2305 Check(!(Attrs.hasAttribute(Attribute::NoInline) &&
2306 Attrs.hasAttribute(Attribute::AlwaysInline)),
2307 "Attributes "
2308 "'noinline and alwaysinline' are incompatible!",
2309 V);
2310
2311 Check(!(Attrs.hasAttribute(Attribute::Writable) &&
2312 Attrs.hasAttribute(Attribute::ReadNone)),
2313 "Attributes writable and readnone are incompatible!", V);
2314
2315 Check(!(Attrs.hasAttribute(Attribute::Writable) &&
2316 Attrs.hasAttribute(Attribute::ReadOnly)),
2317 "Attributes writable and readonly are incompatible!", V);
2318
2319 AttributeMask IncompatibleAttrs = AttributeFuncs::typeIncompatible(Ty, Attrs);
2320 for (Attribute Attr : Attrs) {
2321 if (!Attr.isStringAttribute() &&
2322 IncompatibleAttrs.contains(Attr.getKindAsEnum())) {
2323 CheckFailed("Attribute '" + Attr.getAsString() +
2324 "' applied to incompatible type!", V);
2325 return;
2326 }
2327 }
2328
2329 if (isa<PointerType>(Ty)) {
2330 if (Attrs.hasAttribute(Attribute::Alignment)) {
2331 Align AttrAlign = Attrs.getAlignment().valueOrOne();
2332 Check(AttrAlign.value() <= Value::MaximumAlignment,
2333 "huge alignment values are unsupported", V);
2334 }
2335 if (Attrs.hasAttribute(Attribute::ByVal)) {
2336 Type *ByValTy = Attrs.getByValType();
2337 Check(ByValTy->isSized(),
2338 "Attribute 'byval' does not support unsized types!", V);
2339 // Check if it is or contains a target extension type that disallows being
2340 // used on the stack.
2342 "'byval' argument has illegal target extension type", V);
2343 Check(DL.getTypeAllocSize(ByValTy).getKnownMinValue() < (1ULL << 32),
2344 "huge 'byval' arguments are unsupported", V);
2345 }
2346 if (Attrs.hasAttribute(Attribute::ByRef)) {
2347 Check(Attrs.getByRefType()->isSized(),
2348 "Attribute 'byref' does not support unsized types!", V);
2349 Check(DL.getTypeAllocSize(Attrs.getByRefType()).getKnownMinValue() <
2350 (1ULL << 32),
2351 "huge 'byref' arguments are unsupported", V);
2352 }
2353 if (Attrs.hasAttribute(Attribute::InAlloca)) {
2354 Check(Attrs.getInAllocaType()->isSized(),
2355 "Attribute 'inalloca' does not support unsized types!", V);
2356 Check(DL.getTypeAllocSize(Attrs.getInAllocaType()).getKnownMinValue() <
2357 (1ULL << 32),
2358 "huge 'inalloca' arguments are unsupported", V);
2359 }
2360 if (Attrs.hasAttribute(Attribute::Preallocated)) {
2361 Check(Attrs.getPreallocatedType()->isSized(),
2362 "Attribute 'preallocated' does not support unsized types!", V);
2363 Check(
2364 DL.getTypeAllocSize(Attrs.getPreallocatedType()).getKnownMinValue() <
2365 (1ULL << 32),
2366 "huge 'preallocated' arguments are unsupported", V);
2367 }
2368 }
2369
2370 if (Attrs.hasAttribute(Attribute::Initializes)) {
2371 auto Inits = Attrs.getAttribute(Attribute::Initializes).getInitializes();
2372 Check(!Inits.empty(), "Attribute 'initializes' does not support empty list",
2373 V);
2375 "Attribute 'initializes' does not support unordered ranges", V);
2376 }
2377
2378 if (Attrs.hasAttribute(Attribute::NoFPClass)) {
2379 uint64_t Val = Attrs.getAttribute(Attribute::NoFPClass).getValueAsInt();
2380 Check(Val != 0, "Attribute 'nofpclass' must have at least one test bit set",
2381 V);
2382 Check((Val & ~static_cast<unsigned>(fcAllFlags)) == 0,
2383 "Invalid value for 'nofpclass' test mask", V);
2384 }
2385 if (Attrs.hasAttribute(Attribute::Range)) {
2386 const ConstantRange &CR =
2387 Attrs.getAttribute(Attribute::Range).getValueAsConstantRange();
2389 "Range bit width must match type bit width!", V);
2390 }
2391}
2392
2393void Verifier::checkUnsignedBaseTenFuncAttr(AttributeList Attrs, StringRef Attr,
2394 const Value *V) {
2395 if (Attrs.hasFnAttr(Attr)) {
2396 StringRef S = Attrs.getFnAttr(Attr).getValueAsString();
2397 unsigned N;
2398 if (S.getAsInteger(10, N))
2399 CheckFailed("\"" + Attr + "\" takes an unsigned integer: " + S, V);
2400 }
2401}
2402
2403// Check parameter attributes against a function type.
2404// The value V is printed in error messages.
2405void Verifier::verifyFunctionAttrs(FunctionType *FT, AttributeList Attrs,
2406 const Value *V, bool IsIntrinsic,
2407 bool IsInlineAsm) {
2408 if (Attrs.isEmpty())
2409 return;
2410
2411 if (AttributeListsVisited.insert(Attrs.getRawPointer()).second) {
2412 Check(Attrs.hasParentContext(Context),
2413 "Attribute list does not match Module context!", &Attrs, V);
2414 for (const auto &AttrSet : Attrs) {
2415 Check(!AttrSet.hasAttributes() || AttrSet.hasParentContext(Context),
2416 "Attribute set does not match Module context!", &AttrSet, V);
2417 for (const auto &A : AttrSet) {
2418 Check(A.hasParentContext(Context),
2419 "Attribute does not match Module context!", &A, V);
2420 }
2421 }
2422 }
2423
2424 bool SawNest = false;
2425 bool SawReturned = false;
2426 bool SawSRet = false;
2427 bool SawSwiftSelf = false;
2428 bool SawSwiftAsync = false;
2429 bool SawSwiftError = false;
2430
2431 // Verify return value attributes.
2432 AttributeSet RetAttrs = Attrs.getRetAttrs();
2433 for (Attribute RetAttr : RetAttrs)
2434 Check(RetAttr.isStringAttribute() ||
2435 Attribute::canUseAsRetAttr(RetAttr.getKindAsEnum()),
2436 "Attribute '" + RetAttr.getAsString() +
2437 "' does not apply to function return values",
2438 V);
2439
2440 unsigned MaxParameterWidth = 0;
2441 auto GetMaxParameterWidth = [&MaxParameterWidth](Type *Ty) {
2442 if (Ty->isVectorTy()) {
2443 if (auto *VT = dyn_cast<FixedVectorType>(Ty)) {
2444 unsigned Size = VT->getPrimitiveSizeInBits().getFixedValue();
2445 if (Size > MaxParameterWidth)
2446 MaxParameterWidth = Size;
2447 }
2448 }
2449 };
2450 GetMaxParameterWidth(FT->getReturnType());
2451 verifyParameterAttrs(RetAttrs, FT->getReturnType(), V);
2452
2453 // Verify parameter attributes.
2454 for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i) {
2455 Type *Ty = FT->getParamType(i);
2456 AttributeSet ArgAttrs = Attrs.getParamAttrs(i);
2457
2458 if (!IsIntrinsic) {
2459 Check(!ArgAttrs.hasAttribute(Attribute::ImmArg),
2460 "immarg attribute only applies to intrinsics", V);
2461 if (!IsInlineAsm)
2462 Check(!ArgAttrs.hasAttribute(Attribute::ElementType),
2463 "Attribute 'elementtype' can only be applied to intrinsics"
2464 " and inline asm.",
2465 V);
2466 }
2467
2468 verifyParameterAttrs(ArgAttrs, Ty, V);
2469 GetMaxParameterWidth(Ty);
2470
2471 if (ArgAttrs.hasAttribute(Attribute::Nest)) {
2472 Check(!SawNest, "More than one parameter has attribute nest!", V);
2473 SawNest = true;
2474 }
2475
2476 if (ArgAttrs.hasAttribute(Attribute::Returned)) {
2477 Check(!SawReturned, "More than one parameter has attribute returned!", V);
2478 Check(Ty->canLosslesslyBitCastTo(FT->getReturnType()),
2479 "Incompatible argument and return types for 'returned' attribute",
2480 V);
2481 SawReturned = true;
2482 }
2483
2484 if (ArgAttrs.hasAttribute(Attribute::StructRet)) {
2485 Check(!SawSRet, "Cannot have multiple 'sret' parameters!", V);
2486 Check(i == 0 || i == 1,
2487 "Attribute 'sret' is not on first or second parameter!", V);
2488 SawSRet = true;
2489 }
2490
2491 if (ArgAttrs.hasAttribute(Attribute::SwiftSelf)) {
2492 Check(!SawSwiftSelf, "Cannot have multiple 'swiftself' parameters!", V);
2493 SawSwiftSelf = true;
2494 }
2495
2496 if (ArgAttrs.hasAttribute(Attribute::SwiftAsync)) {
2497 Check(!SawSwiftAsync, "Cannot have multiple 'swiftasync' parameters!", V);
2498 SawSwiftAsync = true;
2499 }
2500
2501 if (ArgAttrs.hasAttribute(Attribute::SwiftError)) {
2502 Check(!SawSwiftError, "Cannot have multiple 'swifterror' parameters!", V);
2503 SawSwiftError = true;
2504 }
2505
2506 if (ArgAttrs.hasAttribute(Attribute::InAlloca)) {
2507 Check(i == FT->getNumParams() - 1,
2508 "inalloca isn't on the last parameter!", V);
2509 }
2510 }
2511
2512 if (!Attrs.hasFnAttrs())
2513 return;
2514
2515 verifyAttributeTypes(Attrs.getFnAttrs(), V);
2516 for (Attribute FnAttr : Attrs.getFnAttrs())
2517 Check(FnAttr.isStringAttribute() ||
2518 Attribute::canUseAsFnAttr(FnAttr.getKindAsEnum()),
2519 "Attribute '" + FnAttr.getAsString() +
2520 "' does not apply to functions!",
2521 V);
2522
2523 Check(!(Attrs.hasFnAttr(Attribute::NoInline) &&
2524 Attrs.hasFnAttr(Attribute::AlwaysInline)),
2525 "Attributes 'noinline and alwaysinline' are incompatible!", V);
2526
2527 if (Attrs.hasFnAttr(Attribute::OptimizeNone)) {
2528 Check(Attrs.hasFnAttr(Attribute::NoInline),
2529 "Attribute 'optnone' requires 'noinline'!", V);
2530
2531 Check(!Attrs.hasFnAttr(Attribute::OptimizeForSize),
2532 "Attributes 'optsize and optnone' are incompatible!", V);
2533
2534 Check(!Attrs.hasFnAttr(Attribute::MinSize),
2535 "Attributes 'minsize and optnone' are incompatible!", V);
2536
2537 Check(!Attrs.hasFnAttr(Attribute::OptimizeForDebugging),
2538 "Attributes 'optdebug and optnone' are incompatible!", V);
2539 }
2540
2541 Check(!(Attrs.hasFnAttr(Attribute::SanitizeRealtime) &&
2542 Attrs.hasFnAttr(Attribute::SanitizeRealtimeBlocking)),
2543 "Attributes "
2544 "'sanitize_realtime and sanitize_realtime_blocking' are incompatible!",
2545 V);
2546
2547 if (Attrs.hasFnAttr(Attribute::OptimizeForDebugging)) {
2548 Check(!Attrs.hasFnAttr(Attribute::OptimizeForSize),
2549 "Attributes 'optsize and optdebug' are incompatible!", V);
2550
2551 Check(!Attrs.hasFnAttr(Attribute::MinSize),
2552 "Attributes 'minsize and optdebug' are incompatible!", V);
2553 }
2554
2555 Check(!Attrs.hasAttrSomewhere(Attribute::Writable) ||
2556 isModSet(Attrs.getMemoryEffects().getModRef(IRMemLocation::ArgMem)),
2557 "Attribute writable and memory without argmem: write are incompatible!",
2558 V);
2559
2560 if (Attrs.hasFnAttr("aarch64_pstate_sm_enabled")) {
2561 Check(!Attrs.hasFnAttr("aarch64_pstate_sm_compatible"),
2562 "Attributes 'aarch64_pstate_sm_enabled and "
2563 "aarch64_pstate_sm_compatible' are incompatible!",
2564 V);
2565 }
2566
2567 Check((Attrs.hasFnAttr("aarch64_new_za") + Attrs.hasFnAttr("aarch64_in_za") +
2568 Attrs.hasFnAttr("aarch64_inout_za") +
2569 Attrs.hasFnAttr("aarch64_out_za") +
2570 Attrs.hasFnAttr("aarch64_preserves_za") +
2571 Attrs.hasFnAttr("aarch64_za_state_agnostic")) <= 1,
2572 "Attributes 'aarch64_new_za', 'aarch64_in_za', 'aarch64_out_za', "
2573 "'aarch64_inout_za', 'aarch64_preserves_za' and "
2574 "'aarch64_za_state_agnostic' are mutually exclusive",
2575 V);
2576
2577 Check((Attrs.hasFnAttr("aarch64_new_zt0") +
2578 Attrs.hasFnAttr("aarch64_in_zt0") +
2579 Attrs.hasFnAttr("aarch64_inout_zt0") +
2580 Attrs.hasFnAttr("aarch64_out_zt0") +
2581 Attrs.hasFnAttr("aarch64_preserves_zt0") +
2582 Attrs.hasFnAttr("aarch64_za_state_agnostic")) <= 1,
2583 "Attributes 'aarch64_new_zt0', 'aarch64_in_zt0', 'aarch64_out_zt0', "
2584 "'aarch64_inout_zt0', 'aarch64_preserves_zt0' and "
2585 "'aarch64_za_state_agnostic' are mutually exclusive",
2586 V);
2587
2588 if (Attrs.hasFnAttr(Attribute::JumpTable)) {
2589 const GlobalValue *GV = cast<GlobalValue>(V);
2591 "Attribute 'jumptable' requires 'unnamed_addr'", V);
2592 }
2593
2594 if (auto Args = Attrs.getFnAttrs().getAllocSizeArgs()) {
2595 auto CheckParam = [&](StringRef Name, unsigned ParamNo) {
2596 if (ParamNo >= FT->getNumParams()) {
2597 CheckFailed("'allocsize' " + Name + " argument is out of bounds", V);
2598 return false;
2599 }
2600
2601 if (!FT->getParamType(ParamNo)->isIntegerTy()) {
2602 CheckFailed("'allocsize' " + Name +
2603 " argument must refer to an integer parameter",
2604 V);
2605 return false;
2606 }
2607
2608 return true;
2609 };
2610
2611 if (!CheckParam("element size", Args->first))
2612 return;
2613
2614 if (Args->second && !CheckParam("number of elements", *Args->second))
2615 return;
2616 }
2617
2618 if (Attrs.hasFnAttr(Attribute::AllocKind)) {
2619 AllocFnKind K = Attrs.getAllocKind();
2621 K & (AllocFnKind::Alloc | AllocFnKind::Realloc | AllocFnKind::Free);
2622 if (!is_contained(
2623 {AllocFnKind::Alloc, AllocFnKind::Realloc, AllocFnKind::Free},
2624 Type))
2625 CheckFailed(
2626 "'allockind()' requires exactly one of alloc, realloc, and free");
2627 if ((Type == AllocFnKind::Free) &&
2628 ((K & (AllocFnKind::Uninitialized | AllocFnKind::Zeroed |
2629 AllocFnKind::Aligned)) != AllocFnKind::Unknown))
2630 CheckFailed("'allockind(\"free\")' doesn't allow uninitialized, zeroed, "
2631 "or aligned modifiers.");
2632 AllocFnKind ZeroedUninit = AllocFnKind::Uninitialized | AllocFnKind::Zeroed;
2633 if ((K & ZeroedUninit) == ZeroedUninit)
2634 CheckFailed("'allockind()' can't be both zeroed and uninitialized");
2635 }
2636
2637 if (Attribute A = Attrs.getFnAttr("alloc-variant-zeroed"); A.isValid()) {
2638 StringRef S = A.getValueAsString();
2639 Check(!S.empty(), "'alloc-variant-zeroed' must not be empty");
2640 Function *Variant = M.getFunction(S);
2641 if (Variant) {
2642 Attribute Family = Attrs.getFnAttr("alloc-family");
2643 Attribute VariantFamily = Variant->getFnAttribute("alloc-family");
2644 if (Family.isValid())
2645 Check(VariantFamily.isValid() &&
2646 VariantFamily.getValueAsString() == Family.getValueAsString(),
2647 "'alloc-variant-zeroed' must name a function belonging to the "
2648 "same 'alloc-family'");
2649
2650 Check(Variant->hasFnAttribute(Attribute::AllocKind) &&
2651 (Variant->getFnAttribute(Attribute::AllocKind).getAllocKind() &
2652 AllocFnKind::Zeroed) != AllocFnKind::Unknown,
2653 "'alloc-variant-zeroed' must name a function with "
2654 "'allockind(\"zeroed\")'");
2655
2656 Check(FT == Variant->getFunctionType(),
2657 "'alloc-variant-zeroed' must name a function with the same "
2658 "signature");
2659
2660 if (const auto *F = dyn_cast<Function>(V))
2661 Check(F->getCallingConv() == Variant->getCallingConv(),
2662 "'alloc-variant-zeroed' must name a function with the same "
2663 "calling convention");
2664 }
2665 }
2666
2667 if (Attrs.hasFnAttr(Attribute::VScaleRange)) {
2668 unsigned VScaleMin = Attrs.getFnAttrs().getVScaleRangeMin();
2669 if (VScaleMin == 0)
2670 CheckFailed("'vscale_range' minimum must be greater than 0", V);
2671 else if (!isPowerOf2_32(VScaleMin))
2672 CheckFailed("'vscale_range' minimum must be power-of-two value", V);
2673 std::optional<unsigned> VScaleMax = Attrs.getFnAttrs().getVScaleRangeMax();
2674 if (VScaleMax && VScaleMin > VScaleMax)
2675 CheckFailed("'vscale_range' minimum cannot be greater than maximum", V);
2676 else if (VScaleMax && !isPowerOf2_32(*VScaleMax))
2677 CheckFailed("'vscale_range' maximum must be power-of-two value", V);
2678 }
2679
2680 if (Attribute FPAttr = Attrs.getFnAttr("frame-pointer"); FPAttr.isValid()) {
2681 StringRef FP = FPAttr.getValueAsString();
2682 if (FP != "all" && FP != "non-leaf" && FP != "none" && FP != "reserved" &&
2683 FP != "non-leaf-no-reserve")
2684 CheckFailed("invalid value for 'frame-pointer' attribute: " + FP, V);
2685 }
2686
2687 checkUnsignedBaseTenFuncAttr(Attrs, "tail-pad-to-size", V);
2688 checkUnsignedBaseTenFuncAttr(Attrs, "tail-pad-value", V);
2689 checkUnsignedBaseTenFuncAttr(Attrs, "patchable-function-prefix", V);
2690 checkUnsignedBaseTenFuncAttr(Attrs, "patchable-function-entry", V);
2691 if (Attrs.hasFnAttr("patchable-function-entry-section"))
2692 Check(!Attrs.getFnAttr("patchable-function-entry-section")
2693 .getValueAsString()
2694 .empty(),
2695 "\"patchable-function-entry-section\" must not be empty");
2696 checkUnsignedBaseTenFuncAttr(Attrs, "warn-stack-size", V);
2697
2698 if (auto A = Attrs.getFnAttr("sign-return-address"); A.isValid()) {
2699 StringRef S = A.getValueAsString();
2700 if (S != "none" && S != "all" && S != "non-leaf")
2701 CheckFailed("invalid value for 'sign-return-address' attribute: " + S, V);
2702 }
2703
2704 if (auto A = Attrs.getFnAttr("sign-return-address-key"); A.isValid()) {
2705 StringRef S = A.getValueAsString();
2706 if (S != "a_key" && S != "b_key")
2707 CheckFailed("invalid value for 'sign-return-address-key' attribute: " + S,
2708 V);
2709 if (auto AA = Attrs.getFnAttr("sign-return-address"); !AA.isValid()) {
2710 CheckFailed(
2711 "'sign-return-address-key' present without `sign-return-address`");
2712 }
2713 }
2714
2715 if (auto A = Attrs.getFnAttr("branch-target-enforcement"); A.isValid()) {
2716 StringRef S = A.getValueAsString();
2717 if (S != "" && S != "true" && S != "false")
2718 CheckFailed(
2719 "invalid value for 'branch-target-enforcement' attribute: " + S, V);
2720 }
2721
2722 if (auto A = Attrs.getFnAttr("branch-protection-pauth-lr"); A.isValid()) {
2723 StringRef S = A.getValueAsString();
2724 if (S != "" && S != "true" && S != "false")
2725 CheckFailed(
2726 "invalid value for 'branch-protection-pauth-lr' attribute: " + S, V);
2727 }
2728
2729 if (auto A = Attrs.getFnAttr("guarded-control-stack"); A.isValid()) {
2730 StringRef S = A.getValueAsString();
2731 if (S != "" && S != "true" && S != "false")
2732 CheckFailed("invalid value for 'guarded-control-stack' attribute: " + S,
2733 V);
2734 }
2735
2736 if (auto A = Attrs.getFnAttr("vector-function-abi-variant"); A.isValid()) {
2737 StringRef S = A.getValueAsString();
2738 const std::optional<VFInfo> Info = VFABI::tryDemangleForVFABI(S, FT);
2739 if (!Info)
2740 CheckFailed("invalid name for a VFABI variant: " + S, V);
2741 }
2742
2743 if (auto A = Attrs.getFnAttr("modular-format"); A.isValid()) {
2744 StringRef S = A.getValueAsString();
2746 S.split(Args, ',');
2747 Check(Args.size() >= 5,
2748 "modular-format attribute requires at least 5 arguments", V);
2749 unsigned UpperBound = FT->getNumParams() + (FT->isVarArg() ? 1 : 0);
2750 unsigned FormatIdx;
2751 Check(!Args[1].getAsInteger(10, FormatIdx),
2752 "modular-format attribute format string index is not an integer", V);
2753 Check(FormatIdx > 0,
2754 "modular-format attribute format string index must be greater than 0",
2755 V);
2756 Check(FormatIdx <= UpperBound,
2757 "modular-format attribute format string index is out of bounds", V);
2758 unsigned FirstArgIdx;
2759 Check(!Args[2].getAsInteger(10, FirstArgIdx),
2760 "modular-format attribute first arg index is not an integer", V);
2761 Check(FirstArgIdx <= UpperBound,
2762 "modular-format attribute first arg index is out of bounds", V);
2763 Check(!Args[3].empty(),
2764 "modular-format attribute modular implementation function name "
2765 "cannot be empty",
2766 V);
2767 Check(!Args[4].empty(),
2768 "modular-format attribute implementation name cannot be empty", V);
2769 }
2770
2771 if (auto A = Attrs.getFnAttr("target-features"); A.isValid()) {
2772 StringRef S = A.getValueAsString();
2773 if (!S.empty()) {
2774 for (auto FeatureFlag : split(S, ',')) {
2775 if (FeatureFlag.empty())
2776 CheckFailed(
2777 "target-features attribute should not contain an empty string");
2778 else
2779 Check(FeatureFlag[0] == '+' || FeatureFlag[0] == '-',
2780 "target feature '" + FeatureFlag +
2781 "' must start with a '+' or '-'",
2782 V);
2783 }
2784 }
2785 }
2786}
2787void Verifier::verifyUnknownProfileMetadata(MDNode *MD) {
2788 Check(MD->getNumOperands() == 2,
2789 "'unknown' !prof should have a single additional operand", MD);
2790 auto *PassName = dyn_cast<MDString>(MD->getOperand(1));
2791 Check(PassName != nullptr,
2792 "'unknown' !prof should have an additional operand of type "
2793 "string");
2794 Check(!PassName->getString().empty(),
2795 "the 'unknown' !prof operand should not be an empty string");
2796}
2797
2798void Verifier::verifyFunctionMetadata(
2799 ArrayRef<std::pair<unsigned, MDNode *>> MDs) {
2800 for (const auto &Pair : MDs) {
2801 if (Pair.first == LLVMContext::MD_prof) {
2802 MDNode *MD = Pair.second;
2803 Check(MD->getNumOperands() >= 2,
2804 "!prof annotations should have no less than 2 operands", MD);
2805 // We may have functions that are synthesized by the compiler, e.g. in
2806 // WPD, that we can't currently determine the entry count.
2807 if (MD->getOperand(0).equalsStr(
2809 verifyUnknownProfileMetadata(MD);
2810 continue;
2811 }
2812
2813 // Check first operand.
2814 Check(MD->getOperand(0) != nullptr, "first operand should not be null",
2815 MD);
2817 "expected string with name of the !prof annotation", MD);
2818 MDString *MDS = cast<MDString>(MD->getOperand(0));
2819 StringRef ProfName = MDS->getString();
2822 "first operand should be 'function_entry_count'"
2823 " or 'synthetic_function_entry_count'",
2824 MD);
2825
2826 // Check second operand.
2827 Check(MD->getOperand(1) != nullptr, "second operand should not be null",
2828 MD);
2830 "expected integer argument to function_entry_count", MD);
2831 } else if (Pair.first == LLVMContext::MD_kcfi_type) {
2832 MDNode *MD = Pair.second;
2833 Check(MD->getNumOperands() == 1,
2834 "!kcfi_type must have exactly one operand", MD);
2835 Check(MD->getOperand(0) != nullptr, "!kcfi_type operand must not be null",
2836 MD);
2838 "expected a constant operand for !kcfi_type", MD);
2839 Constant *C = cast<ConstantAsMetadata>(MD->getOperand(0))->getValue();
2840 Check(isa<ConstantInt>(C) && isa<IntegerType>(C->getType()),
2841 "expected a constant integer operand for !kcfi_type", MD);
2843 "expected a 32-bit integer constant operand for !kcfi_type", MD);
2844 } else if (Pair.first == Context.getMDKindID("reqd_work_group_size")) {
2845 MDNode *MD = Pair.second;
2846 Check(MD->getNumOperands() == 3,
2847 "reqd_work_group_size must have exactly three operands", MD);
2848 if (MD->getNumOperands() != 3)
2849 continue;
2850
2851 uint64_t Product = 1;
2852 for (unsigned I = 0; I != 3; ++I) {
2853 ConstantInt *C = mdconst::dyn_extract<ConstantInt>(MD->getOperand(I));
2854 Check(C, "reqd_work_group_size operands must be integer constants", MD);
2855 if (!C)
2856 break;
2857
2858 const APInt &Value = C->getValue();
2859 Check(Value.getActiveBits() <= 64,
2860 "reqd_work_group_size operands must fit in 64 bits", MD);
2861 if (Value.getActiveBits() > 64)
2862 break;
2863
2864 uint64_t Dim = Value.getZExtValue();
2865 Check(Dim == 0 || Product <= std::numeric_limits<uint64_t>::max() / Dim,
2866 "reqd_work_group_size product must fit in 64 bits", MD);
2867 if (Dim != 0 && Product > std::numeric_limits<uint64_t>::max() / Dim)
2868 break;
2869 Product *= Dim;
2870 }
2871 }
2872 }
2873}
2874
2875void Verifier::visitConstantExprsRecursively(const Constant *EntryC) {
2876 if (EntryC->getNumOperands() == 0)
2877 return;
2878
2879 if (!ConstantExprVisited.insert(EntryC).second)
2880 return;
2881
2883 Stack.push_back(EntryC);
2884
2885 while (!Stack.empty()) {
2886 const Constant *C = Stack.pop_back_val();
2887
2888 // Check this constant expression.
2889 if (const auto *CE = dyn_cast<ConstantExpr>(C))
2890 visitConstantExpr(CE);
2891
2892 if (const auto *CPA = dyn_cast<ConstantPtrAuth>(C))
2893 visitConstantPtrAuth(CPA);
2894
2895 if (const auto *GV = dyn_cast<GlobalValue>(C)) {
2896 // Global Values get visited separately, but we do need to make sure
2897 // that the global value is in the correct module
2898 Check(GV->getParent() == &M, "Referencing global in another module!",
2899 EntryC, &M, GV, GV->getParent());
2900 continue;
2901 }
2902
2903 // Visit all sub-expressions.
2904 for (const Use &U : C->operands()) {
2905 const auto *OpC = dyn_cast<Constant>(U);
2906 if (!OpC)
2907 continue;
2908 if (!ConstantExprVisited.insert(OpC).second)
2909 continue;
2910 Stack.push_back(OpC);
2911 }
2912 }
2913}
2914
2915void Verifier::visitConstantExpr(const ConstantExpr *CE) {
2916 if (CE->getOpcode() == Instruction::BitCast)
2917 Check(CastInst::castIsValid(Instruction::BitCast, CE->getOperand(0),
2918 CE->getType()),
2919 "Invalid bitcast", CE);
2920 else if (CE->getOpcode() == Instruction::PtrToAddr)
2921 checkPtrToAddr(CE->getOperand(0)->getType(), CE->getType(), *CE);
2922}
2923
2924void Verifier::visitConstantPtrAuth(const ConstantPtrAuth *CPA) {
2925 Check(CPA->getPointer()->getType()->isPointerTy(),
2926 "signed ptrauth constant base pointer must have pointer type");
2927
2928 Check(CPA->getType() == CPA->getPointer()->getType(),
2929 "signed ptrauth constant must have same type as its base pointer");
2930
2931 Check(CPA->getKey()->getBitWidth() == 32,
2932 "signed ptrauth constant key must be i32 constant integer");
2933
2935 "signed ptrauth constant address discriminator must be a pointer");
2936
2937 Check(CPA->getDiscriminator()->getBitWidth() == 64,
2938 "signed ptrauth constant discriminator must be i64 constant integer");
2939
2941 "signed ptrauth constant deactivation symbol must be a pointer");
2942
2945 "signed ptrauth constant deactivation symbol must be a global value "
2946 "or null");
2947}
2948
2949bool Verifier::verifyAttributeCount(AttributeList Attrs, unsigned Params) {
2950 // There shouldn't be more attribute sets than there are parameters plus the
2951 // function and return value.
2952 return Attrs.getNumAttrSets() <= Params + 2;
2953}
2954
2955void Verifier::verifyInlineAsmCall(const CallBase &Call) {
2956 const InlineAsm *IA = cast<InlineAsm>(Call.getCalledOperand());
2957 unsigned ArgNo = 0;
2958 unsigned LabelNo = 0;
2959 for (const InlineAsm::ConstraintInfo &CI : IA->ParseConstraints()) {
2960 if (CI.Type == InlineAsm::isLabel) {
2961 ++LabelNo;
2962 continue;
2963 }
2964
2965 // Only deal with constraints that correspond to call arguments.
2966 if (!CI.hasArg())
2967 continue;
2968
2969 if (CI.isIndirect) {
2970 const Value *Arg = Call.getArgOperand(ArgNo);
2971 Check(Arg->getType()->isPointerTy(),
2972 "Operand for indirect constraint must have pointer type", &Call);
2973
2975 "Operand for indirect constraint must have elementtype attribute",
2976 &Call);
2977 } else {
2978 Check(!Call.paramHasAttr(ArgNo, Attribute::ElementType),
2979 "Elementtype attribute can only be applied for indirect "
2980 "constraints",
2981 &Call);
2982 }
2983
2984 ArgNo++;
2985 }
2986
2987 if (auto *CallBr = dyn_cast<CallBrInst>(&Call)) {
2988 Check(LabelNo == CallBr->getNumIndirectDests(),
2989 "Number of label constraints does not match number of callbr dests",
2990 &Call);
2991 } else {
2992 Check(LabelNo == 0, "Label constraints can only be used with callbr",
2993 &Call);
2994 }
2995}
2996
2997/// Verify that statepoint intrinsic is well formed.
2998void Verifier::verifyStatepoint(const CallBase &Call) {
2999 assert(Call.getIntrinsicID() == Intrinsic::experimental_gc_statepoint);
3000
3003 "gc.statepoint must read and write all memory to preserve "
3004 "reordering restrictions required by safepoint semantics",
3005 Call);
3006
3007 const int64_t NumPatchBytes =
3008 cast<ConstantInt>(Call.getArgOperand(1))->getSExtValue();
3009 assert(isInt<32>(NumPatchBytes) && "NumPatchBytesV is an i32!");
3010 Check(NumPatchBytes >= 0,
3011 "gc.statepoint number of patchable bytes must be "
3012 "positive",
3013 Call);
3014
3015 Type *TargetElemType = Call.getParamElementType(2);
3016 Check(TargetElemType,
3017 "gc.statepoint callee argument must have elementtype attribute", Call);
3018 auto *TargetFuncType = dyn_cast<FunctionType>(TargetElemType);
3019 Check(TargetFuncType,
3020 "gc.statepoint callee elementtype must be function type", Call);
3021
3022 const int NumCallArgs = cast<ConstantInt>(Call.getArgOperand(3))->getZExtValue();
3023 Check(NumCallArgs >= 0,
3024 "gc.statepoint number of arguments to underlying call "
3025 "must be positive",
3026 Call);
3027 const int NumParams = (int)TargetFuncType->getNumParams();
3028 if (TargetFuncType->isVarArg()) {
3029 Check(NumCallArgs >= NumParams,
3030 "gc.statepoint mismatch in number of vararg call args", Call);
3031
3032 // TODO: Remove this limitation
3033 Check(TargetFuncType->getReturnType()->isVoidTy(),
3034 "gc.statepoint doesn't support wrapping non-void "
3035 "vararg functions yet",
3036 Call);
3037 } else
3038 Check(NumCallArgs == NumParams,
3039 "gc.statepoint mismatch in number of call args", Call);
3040
3041 const uint64_t Flags
3042 = cast<ConstantInt>(Call.getArgOperand(4))->getZExtValue();
3043 Check((Flags & ~(uint64_t)StatepointFlags::MaskAll) == 0,
3044 "unknown flag used in gc.statepoint flags argument", Call);
3045
3046 // Verify that the types of the call parameter arguments match
3047 // the type of the wrapped callee.
3048 AttributeList Attrs = Call.getAttributes();
3049 for (int i = 0; i < NumParams; i++) {
3050 Type *ParamType = TargetFuncType->getParamType(i);
3051 Type *ArgType = Call.getArgOperand(5 + i)->getType();
3052 Check(ArgType == ParamType,
3053 "gc.statepoint call argument does not match wrapped "
3054 "function type",
3055 Call);
3056
3057 if (TargetFuncType->isVarArg()) {
3058 AttributeSet ArgAttrs = Attrs.getParamAttrs(5 + i);
3059 Check(!ArgAttrs.hasAttribute(Attribute::StructRet),
3060 "Attribute 'sret' cannot be used for vararg call arguments!", Call);
3061 }
3062 }
3063
3064 const int EndCallArgsInx = 4 + NumCallArgs;
3065
3066 const Value *NumTransitionArgsV = Call.getArgOperand(EndCallArgsInx + 1);
3067 Check(isa<ConstantInt>(NumTransitionArgsV),
3068 "gc.statepoint number of transition arguments "
3069 "must be constant integer",
3070 Call);
3071 const int NumTransitionArgs =
3072 cast<ConstantInt>(NumTransitionArgsV)->getZExtValue();
3073 Check(NumTransitionArgs == 0,
3074 "gc.statepoint w/inline transition bundle is deprecated", Call);
3075 const int EndTransitionArgsInx = EndCallArgsInx + 1 + NumTransitionArgs;
3076
3077 const Value *NumDeoptArgsV = Call.getArgOperand(EndTransitionArgsInx + 1);
3078 Check(isa<ConstantInt>(NumDeoptArgsV),
3079 "gc.statepoint number of deoptimization arguments "
3080 "must be constant integer",
3081 Call);
3082 const int NumDeoptArgs = cast<ConstantInt>(NumDeoptArgsV)->getZExtValue();
3083 Check(NumDeoptArgs == 0,
3084 "gc.statepoint w/inline deopt operands is deprecated", Call);
3085
3086 const int ExpectedNumArgs = 7 + NumCallArgs;
3087 Check(ExpectedNumArgs == (int)Call.arg_size(),
3088 "gc.statepoint too many arguments", Call);
3089
3090 // Check that the only uses of this gc.statepoint are gc.result or
3091 // gc.relocate calls which are tied to this statepoint and thus part
3092 // of the same statepoint sequence
3093 for (const User *U : Call.users()) {
3094 const auto *UserCall = dyn_cast<const CallInst>(U);
3095 Check(UserCall, "illegal use of statepoint token", Call, U);
3096 if (!UserCall)
3097 continue;
3098 Check(isa<GCRelocateInst>(UserCall) || isa<GCResultInst>(UserCall),
3099 "gc.result or gc.relocate are the only value uses "
3100 "of a gc.statepoint",
3101 Call, U);
3102 if (isa<GCResultInst>(UserCall)) {
3103 Check(UserCall->getArgOperand(0) == &Call,
3104 "gc.result connected to wrong gc.statepoint", Call, UserCall);
3105 } else if (isa<GCRelocateInst>(Call)) {
3106 Check(UserCall->getArgOperand(0) == &Call,
3107 "gc.relocate connected to wrong gc.statepoint", Call, UserCall);
3108 }
3109 }
3110
3111 // Note: It is legal for a single derived pointer to be listed multiple
3112 // times. It's non-optimal, but it is legal. It can also happen after
3113 // insertion if we strip a bitcast away.
3114 // Note: It is really tempting to check that each base is relocated and
3115 // that a derived pointer is never reused as a base pointer. This turns
3116 // out to be problematic since optimizations run after safepoint insertion
3117 // can recognize equality properties that the insertion logic doesn't know
3118 // about. See example statepoint.ll in the verifier subdirectory
3119}
3120
3121void Verifier::verifyFrameRecoverIndices() {
3122 for (auto &Counts : FrameEscapeInfo) {
3123 Function *F = Counts.first;
3124 unsigned EscapedObjectCount = Counts.second.first;
3125 unsigned MaxRecoveredIndex = Counts.second.second;
3126 Check(MaxRecoveredIndex <= EscapedObjectCount,
3127 "all indices passed to llvm.localrecover must be less than the "
3128 "number of arguments passed to llvm.localescape in the parent "
3129 "function",
3130 F);
3131 }
3132}
3133
3134static Instruction *getSuccPad(Instruction *Terminator) {
3135 BasicBlock *UnwindDest;
3136 if (auto *II = dyn_cast<InvokeInst>(Terminator))
3137 UnwindDest = II->getUnwindDest();
3138 else if (auto *CSI = dyn_cast<CatchSwitchInst>(Terminator))
3139 UnwindDest = CSI->getUnwindDest();
3140 else
3141 UnwindDest = cast<CleanupReturnInst>(Terminator)->getUnwindDest();
3142 return &*UnwindDest->getFirstNonPHIIt();
3143}
3144
3145void Verifier::verifySiblingFuncletUnwinds() {
3146 llvm::TimeTraceScope timeScope("Verifier verify sibling funclet unwinds");
3147 SmallPtrSet<Instruction *, 8> Visited;
3148 SmallPtrSet<Instruction *, 8> Active;
3149 for (const auto &Pair : SiblingFuncletInfo) {
3150 Instruction *PredPad = Pair.first;
3151 if (Visited.count(PredPad))
3152 continue;
3153 Active.insert(PredPad);
3154 Instruction *Terminator = Pair.second;
3155 do {
3156 Instruction *SuccPad = getSuccPad(Terminator);
3157 if (Active.count(SuccPad)) {
3158 // Found a cycle; report error
3159 Instruction *CyclePad = SuccPad;
3160 SmallVector<Instruction *, 8> CycleNodes;
3161 do {
3162 CycleNodes.push_back(CyclePad);
3163 Instruction *CycleTerminator = SiblingFuncletInfo[CyclePad];
3164 if (CycleTerminator != CyclePad)
3165 CycleNodes.push_back(CycleTerminator);
3166 CyclePad = getSuccPad(CycleTerminator);
3167 } while (CyclePad != SuccPad);
3168 Check(false, "EH pads can't handle each other's exceptions",
3169 ArrayRef<Instruction *>(CycleNodes));
3170 }
3171 // Don't re-walk a node we've already checked
3172 if (!Visited.insert(SuccPad).second)
3173 break;
3174 // Walk to this successor if it has a map entry.
3175 PredPad = SuccPad;
3176 auto TermI = SiblingFuncletInfo.find(PredPad);
3177 if (TermI == SiblingFuncletInfo.end())
3178 break;
3179 Terminator = TermI->second;
3180 Active.insert(PredPad);
3181 } while (true);
3182 // Each node only has one successor, so we've walked all the active
3183 // nodes' successors.
3184 Active.clear();
3185 }
3186}
3187
3188// visitFunction - Verify that a function is ok.
3189//
3190void Verifier::visitFunction(const Function &F) {
3191 visitGlobalValue(F);
3192
3193 // Check function arguments.
3194 FunctionType *FT = F.getFunctionType();
3195 unsigned NumArgs = F.arg_size();
3196
3197 Check(&Context == &F.getContext(),
3198 "Function context does not match Module context!", &F);
3199
3200 Check(!F.hasCommonLinkage(), "Functions may not have common linkage", &F);
3201 Check(FT->getNumParams() == NumArgs,
3202 "# formal arguments must match # of arguments for function type!", &F,
3203 FT);
3204 Check(F.getReturnType()->isFirstClassType() ||
3205 F.getReturnType()->isVoidTy() || F.getReturnType()->isStructTy(),
3206 "Functions cannot return aggregate values!", &F);
3207
3208 Check(!F.hasStructRetAttr() || F.getReturnType()->isVoidTy(),
3209 "Invalid struct return type!", &F);
3210
3211 if (MaybeAlign A = F.getAlign()) {
3212 Check(A->value() <= Value::MaximumAlignment,
3213 "huge alignment values are unsupported", &F);
3214 }
3215
3216 AttributeList Attrs = F.getAttributes();
3217
3218 Check(verifyAttributeCount(Attrs, FT->getNumParams()),
3219 "Attribute after last parameter!", &F);
3220
3221 bool IsIntrinsic = F.isIntrinsic();
3222
3223 // Check function attributes.
3224 verifyFunctionAttrs(FT, Attrs, &F, IsIntrinsic, /* IsInlineAsm */ false);
3225
3226 // On function declarations/definitions, we do not support the builtin
3227 // attribute. We do not check this in VerifyFunctionAttrs since that is
3228 // checking for Attributes that can/can not ever be on functions.
3229 Check(!Attrs.hasFnAttr(Attribute::Builtin),
3230 "Attribute 'builtin' can only be applied to a callsite.", &F);
3231
3232 Check(!Attrs.hasAttrSomewhere(Attribute::ElementType),
3233 "Attribute 'elementtype' can only be applied to a callsite.", &F);
3234
3235 if (Attrs.hasFnAttr(Attribute::Naked))
3236 for (const Argument &Arg : F.args())
3237 Check(Arg.use_empty(), "cannot use argument of naked function", &Arg);
3238
3239 // Check that this function meets the restrictions on this calling convention.
3240 // Sometimes varargs is used for perfectly forwarding thunks, so some of these
3241 // restrictions can be lifted.
3242 switch (F.getCallingConv()) {
3243 default:
3244 case CallingConv::C:
3245 break;
3246 case CallingConv::X86_INTR: {
3247 Check(F.arg_empty() || Attrs.hasParamAttr(0, Attribute::ByVal),
3248 "Calling convention parameter requires byval", &F);
3249 break;
3250 }
3251 case CallingConv::AMDGPU_KERNEL:
3252 case CallingConv::SPIR_KERNEL:
3253 case CallingConv::AMDGPU_CS_Chain:
3254 case CallingConv::AMDGPU_CS_ChainPreserve:
3255 Check(F.getReturnType()->isVoidTy(),
3256 "Calling convention requires void return type", &F);
3257 [[fallthrough]];
3258 case CallingConv::AMDGPU_VS:
3259 case CallingConv::AMDGPU_HS:
3260 case CallingConv::AMDGPU_GS:
3261 case CallingConv::AMDGPU_PS:
3262 case CallingConv::AMDGPU_CS:
3263 Check(!F.hasStructRetAttr(), "Calling convention does not allow sret", &F);
3264 if (F.getCallingConv() != CallingConv::SPIR_KERNEL) {
3265 const unsigned StackAS = DL.getAllocaAddrSpace();
3266 unsigned i = 0;
3267 for (const Argument &Arg : F.args()) {
3268 Check(!Attrs.hasParamAttr(i, Attribute::ByVal),
3269 "Calling convention disallows byval", &F);
3270 Check(!Attrs.hasParamAttr(i, Attribute::Preallocated),
3271 "Calling convention disallows preallocated", &F);
3272 Check(!Attrs.hasParamAttr(i, Attribute::InAlloca),
3273 "Calling convention disallows inalloca", &F);
3274
3275 if (Attrs.hasParamAttr(i, Attribute::ByRef)) {
3276 // FIXME: Should also disallow LDS and GDS, but we don't have the enum
3277 // value here.
3278 Check(Arg.getType()->getPointerAddressSpace() != StackAS,
3279 "Calling convention disallows stack byref", &F);
3280 }
3281
3282 ++i;
3283 }
3284 }
3285
3286 [[fallthrough]];
3287 case CallingConv::Fast:
3288 case CallingConv::Cold:
3289 case CallingConv::Intel_OCL_BI:
3290 case CallingConv::PTX_Kernel:
3291 case CallingConv::PTX_Device:
3292 Check(!F.isVarArg(),
3293 "Calling convention does not support varargs or "
3294 "perfect forwarding!",
3295 &F);
3296 break;
3297 case CallingConv::AMDGPU_Gfx_WholeWave:
3298 Check(!F.arg_empty() && F.arg_begin()->getType()->isIntegerTy(1),
3299 "Calling convention requires first argument to be i1", &F);
3300 Check(!F.arg_begin()->hasInRegAttr(),
3301 "Calling convention requires first argument to not be inreg", &F);
3302 Check(!F.isVarArg(),
3303 "Calling convention does not support varargs or "
3304 "perfect forwarding!",
3305 &F);
3306 break;
3307 }
3308
3309 // Check that the argument values match the function type for this function...
3310 unsigned i = 0;
3311 for (const Argument &Arg : F.args()) {
3312 Check(Arg.getType() == FT->getParamType(i),
3313 "Argument value does not match function argument type!", &Arg,
3314 FT->getParamType(i));
3315 Check(Arg.getType()->isFirstClassType(),
3316 "Function arguments must have first-class types!", &Arg);
3317 if (!IsIntrinsic) {
3318 Check(!Arg.getType()->isMetadataTy(),
3319 "Function takes metadata but isn't an intrinsic", &Arg, &F);
3320 Check(!Arg.getType()->isTokenLikeTy(),
3321 "Function takes token but isn't an intrinsic", &Arg, &F);
3322 Check(!Arg.getType()->isX86_AMXTy(),
3323 "Function takes x86_amx but isn't an intrinsic", &Arg, &F);
3324 }
3325
3326 // Check that swifterror argument is only used by loads and stores.
3327 if (Attrs.hasParamAttr(i, Attribute::SwiftError)) {
3328 verifySwiftErrorValue(&Arg);
3329 }
3330 ++i;
3331 }
3332
3333 if (!IsIntrinsic) {
3334 Check(!F.getReturnType()->isTokenLikeTy(),
3335 "Function returns a token but isn't an intrinsic", &F);
3336 Check(!F.getReturnType()->isX86_AMXTy(),
3337 "Function returns a x86_amx but isn't an intrinsic", &F);
3338 }
3339
3340 // Get the function metadata attachments.
3342 F.getAllMetadata(MDs);
3343 assert(F.hasMetadata() != MDs.empty() && "Bit out-of-sync");
3344 verifyFunctionMetadata(MDs);
3345
3346 // Target-specific function metadata checks.
3348
3349 // Check validity of the personality function
3350 if (F.hasPersonalityFn()) {
3351 auto *Per = dyn_cast<Function>(F.getPersonalityFn()->stripPointerCasts());
3352 if (Per)
3353 Check(Per->getParent() == F.getParent(),
3354 "Referencing personality function in another module!", &F,
3355 F.getParent(), Per, Per->getParent());
3356 }
3357
3358 // EH funclet coloring can be expensive, recompute on-demand
3359 BlockEHFuncletColors.clear();
3360
3361 if (F.isMaterializable()) {
3362 // Function has a body somewhere we can't see.
3363 Check(MDs.empty(), "unmaterialized function cannot have metadata", &F,
3364 MDs.empty() ? nullptr : MDs.front().second);
3365 } else if (F.isDeclaration()) {
3366 for (const auto &I : MDs) {
3367 // This is used for call site debug information.
3368 CheckDI(I.first != LLVMContext::MD_dbg ||
3369 !cast<DISubprogram>(I.second)->isDistinct(),
3370 "function declaration may only have a unique !dbg attachment",
3371 &F);
3372 Check(I.first != LLVMContext::MD_prof,
3373 "function declaration may not have a !prof attachment", &F);
3374
3375 // Verify the metadata itself.
3376 visitMDNode(*I.second, AreDebugLocsAllowed::Yes);
3377 }
3378 Check(!F.hasPersonalityFn(),
3379 "Function declaration shouldn't have a personality routine", &F);
3380 } else {
3381 // Verify that this function (which has a body) is not named "llvm.*". It
3382 // is not legal to define intrinsics.
3383 Check(!IsIntrinsic, "llvm intrinsics cannot be defined!", &F);
3384
3385 // Check the entry node
3386 const BasicBlock *Entry = &F.getEntryBlock();
3387 Check(pred_empty(Entry),
3388 "Entry block to function must not have predecessors!", Entry);
3389
3390 // The address of the entry block cannot be taken, unless it is dead.
3391 if (Entry->hasAddressTaken()) {
3392 Check(!BlockAddress::lookup(Entry)->isConstantUsed(),
3393 "blockaddress may not be used with the entry block!", Entry);
3394 }
3395
3396 unsigned NumDebugAttachments = 0, NumProfAttachments = 0,
3397 NumKCFIAttachments = 0;
3398 // Visit metadata attachments.
3399 for (const auto &I : MDs) {
3400 // Verify that the attachment is legal.
3401 auto AllowLocs = AreDebugLocsAllowed::No;
3402 switch (I.first) {
3403 default:
3404 break;
3405 case LLVMContext::MD_dbg: {
3406 ++NumDebugAttachments;
3407 CheckDI(NumDebugAttachments == 1,
3408 "function must have a single !dbg attachment", &F, I.second);
3409 CheckDI(isa<DISubprogram>(I.second),
3410 "function !dbg attachment must be a subprogram", &F, I.second);
3411 CheckDI(cast<DISubprogram>(I.second)->isDistinct(),
3412 "function definition may only have a distinct !dbg attachment",
3413 &F);
3414
3415 auto *SP = cast<DISubprogram>(I.second);
3416 const Function *&AttachedTo = DISubprogramAttachments[SP];
3417 CheckDI(!AttachedTo || AttachedTo == &F,
3418 "DISubprogram attached to more than one function", SP, &F);
3419 AttachedTo = &F;
3420 AllowLocs = AreDebugLocsAllowed::Yes;
3421 break;
3422 }
3423 case LLVMContext::MD_prof:
3424 ++NumProfAttachments;
3425 Check(NumProfAttachments == 1,
3426 "function must have a single !prof attachment", &F, I.second);
3427 break;
3428 case LLVMContext::MD_kcfi_type:
3429 ++NumKCFIAttachments;
3430 Check(NumKCFIAttachments == 1,
3431 "function must have a single !kcfi_type attachment", &F,
3432 I.second);
3433 break;
3434 }
3435
3436 // Verify the metadata itself.
3437 visitMDNode(*I.second, AllowLocs);
3438 }
3439 }
3440
3441 // If this function is actually an intrinsic, verify that it is only used in
3442 // direct call/invokes, never having its "address taken".
3443 // Only do this if the module is materialized, otherwise we don't have all the
3444 // uses.
3445 bool isMaterialized = F.getParent()->isMaterialized();
3446 if (F.isIntrinsic() && isMaterialized) {
3447 const User *U;
3448 if (F.hasAddressTaken(&U, false, true, false,
3449 /*IgnoreARCAttachedCall=*/true))
3450 Check(false, "Invalid user of intrinsic instruction!", U);
3451 }
3452
3453 // Verify if the intrinsic's signature and name are valid. We do this if
3454 // the intrinsic has at least one materialized use, or if the module is fully
3455 // materialized.
3456 Intrinsic::ID IID = F.getIntrinsicID();
3457 if (IID && (isMaterialized || !F.materialized_use_empty())) {
3458 // Verify that the intrinsic prototype lines up with what the .td files
3459 // describe.
3460 std::string ErrMsg;
3461 raw_string_ostream ErrOS(ErrMsg);
3462 SmallVector<Type *, 4> OverloadTys;
3463 bool IsValid = Intrinsic::isSignatureValid(IID, FT, OverloadTys, ErrOS);
3464 Printable PrintDecl([&F](raw_ostream &OS) { F.print(OS); });
3465 Check(IsValid, ErrMsg, PrintDecl);
3466
3467 // Now that we have the intrinsic ID and the actual argument types (and we
3468 // know they are legal for the intrinsic!) get the intrinsic name through
3469 // the usual means. This allows us to verify the mangling of argument types
3470 // into the name.
3471 const std::string ExpectedName = Intrinsic::getName(
3472 IID, OverloadTys, const_cast<Module *>(F.getParent()), FT);
3473 Check(ExpectedName == F.getName(),
3474 "Intrinsic name not mangled correctly for type arguments! "
3475 "Should be: " +
3476 ExpectedName,
3477 PrintDecl);
3478 }
3479
3480 auto *N = F.getSubprogram();
3481 HasDebugInfo = (N != nullptr);
3482 if (!HasDebugInfo)
3483 return;
3484
3485 // Check that all !dbg attachments lead to back to N.
3486 //
3487 // FIXME: Check this incrementally while visiting !dbg attachments.
3488 // FIXME: Only check when N is the canonical subprogram for F.
3489 SmallPtrSet<const MDNode *, 32> Seen;
3490 auto VisitDebugLoc = [&](const Instruction &I, const MDNode *Node) {
3491 // Be careful about using DILocation here since we might be dealing with
3492 // broken code (this is the Verifier after all).
3493 const DILocation *DL = dyn_cast_or_null<DILocation>(Node);
3494 if (!DL)
3495 return;
3496 if (!Seen.insert(DL).second)
3497 return;
3498
3499 Metadata *Parent = DL->getRawScope();
3500 CheckDI(Parent && isa<DILocalScope>(Parent),
3501 "DILocation's scope must be a DILocalScope", N, &F, &I, DL, Parent);
3502
3503 DILocalScope *Scope = DL->getInlinedAtScope();
3504 Check(Scope, "Failed to find DILocalScope", DL);
3505
3506 if (!Seen.insert(Scope).second)
3507 return;
3508
3509 // Cycles are diagnosed when the DIScope nodes themselves are visited.
3510 if (hasDIScopeCycle(Scope))
3511 return;
3512
3513 DISubprogram *SP = Scope->getSubprogram();
3514
3515 // Scope and SP could be the same MDNode and we don't want to skip
3516 // validation in that case
3517 if ((Scope != SP) && !Seen.insert(SP).second)
3518 return;
3519
3520 CheckDI(SP->describes(&F),
3521 "!dbg attachment points at wrong subprogram for function", N, &F,
3522 &I, DL, Scope, SP);
3523 };
3524 for (auto &BB : F)
3525 for (auto &I : BB) {
3526 VisitDebugLoc(I, I.getDebugLoc().getAsMDNode());
3527 // The llvm.loop annotations also contain two DILocations.
3528 if (auto MD = I.getMetadata(LLVMContext::MD_loop))
3529 for (unsigned i = 1; i < MD->getNumOperands(); ++i)
3530 VisitDebugLoc(I, dyn_cast_or_null<MDNode>(MD->getOperand(i)));
3531 if (BrokenDebugInfo)
3532 return;
3533 }
3534}
3535
3536// verifyBasicBlock - Verify that a basic block is well formed...
3537//
3538void Verifier::visitBasicBlock(BasicBlock &BB) {
3539 InstsInThisBlock.clear();
3540 ConvergenceVerifyHelper.visit(BB);
3541
3542 // Ensure that basic blocks have terminators!
3543 Check(BB.getTerminator(), "Basic Block does not have terminator!", &BB);
3544
3545 // Check constraints that this basic block imposes on all of the PHI nodes in
3546 // it.
3547 if (isa<PHINode>(BB.front())) {
3548 SmallVector<BasicBlock *, 8> Preds(predecessors(&BB));
3550 llvm::sort(Preds);
3551 for (const PHINode &PN : BB.phis()) {
3552 Check(PN.getNumIncomingValues() == Preds.size(),
3553 "PHINode should have one entry for each predecessor of its "
3554 "parent basic block!",
3555 &PN);
3556
3557 // Get and sort all incoming values in the PHI node...
3558 Values.clear();
3559 Values.reserve(PN.getNumIncomingValues());
3560 for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i)
3561 Values.push_back(
3562 std::make_pair(PN.getIncomingBlock(i), PN.getIncomingValue(i)));
3564
3565 for (unsigned i = 0, e = Values.size(); i != e; ++i) {
3566 // Check to make sure that if there is more than one entry for a
3567 // particular basic block in this PHI node, that the incoming values are
3568 // all identical.
3569 //
3570 Check(i == 0 || Values[i].first != Values[i - 1].first ||
3571 Values[i].second == Values[i - 1].second,
3572 "PHI node has multiple entries for the same basic block with "
3573 "different incoming values!",
3574 &PN, Values[i].first, Values[i].second, Values[i - 1].second);
3575
3576 // Check to make sure that the predecessors and PHI node entries are
3577 // matched up.
3578 Check(Values[i].first == Preds[i],
3579 "PHI node entries do not match predecessors!", &PN,
3580 Values[i].first, Preds[i]);
3581 }
3582 }
3583 }
3584
3585 // Check that all instructions have their parent pointers set up correctly.
3586 for (auto &I : BB)
3587 {
3588 Check(I.getParent() == &BB, "Instruction has bogus parent pointer!");
3589 }
3590
3591 // Confirm that no issues arise from the debug program.
3592 CheckDI(!BB.getTrailingDbgRecords(), "Basic Block has trailing DbgRecords!",
3593 &BB);
3594}
3595
3596void Verifier::visitTerminator(Instruction &I) {
3597 // Ensure that terminators only exist at the end of the basic block.
3598 Check(&I == I.getParent()->getTerminator(),
3599 "Terminator found in the middle of a basic block!", I.getParent());
3600 visitInstruction(I);
3601}
3602
3603void Verifier::visitCondBrInst(CondBrInst &BI) {
3605 "Branch condition is not 'i1' type!", &BI, BI.getCondition());
3606 visitTerminator(BI);
3607}
3608
3609void Verifier::visitReturnInst(ReturnInst &RI) {
3610 Function *F = RI.getParent()->getParent();
3611 unsigned N = RI.getNumOperands();
3612 if (F->getReturnType()->isVoidTy())
3613 Check(N == 0,
3614 "Found return instr that returns non-void in Function of void "
3615 "return type!",
3616 &RI, F->getReturnType());
3617 else
3618 Check(N == 1 && F->getReturnType() == RI.getOperand(0)->getType(),
3619 "Function return type does not match operand "
3620 "type of return inst!",
3621 &RI, F->getReturnType());
3622
3623 // Check to make sure that the return value has necessary properties for
3624 // terminators...
3625 visitTerminator(RI);
3626}
3627
3628void Verifier::visitSwitchInst(SwitchInst &SI) {
3629 Check(SI.getType()->isVoidTy(), "Switch must have void result type!", &SI);
3630 // Check to make sure that all of the constants in the switch instruction
3631 // have the same type as the switched-on value.
3632 Type *SwitchTy = SI.getCondition()->getType();
3633 SmallPtrSet<ConstantInt*, 32> Constants;
3634 for (auto &Case : SI.cases()) {
3635 Check(isa<ConstantInt>(Case.getCaseValue()),
3636 "Case value is not a constant integer.", &SI);
3637 Check(Case.getCaseValue()->getType() == SwitchTy,
3638 "Switch constants must all be same type as switch value!", &SI);
3639 Check(Constants.insert(Case.getCaseValue()).second,
3640 "Duplicate integer as switch case", &SI, Case.getCaseValue());
3641 }
3642
3643 visitTerminator(SI);
3644}
3645
3646void Verifier::visitIndirectBrInst(IndirectBrInst &BI) {
3648 "Indirectbr operand must have pointer type!", &BI);
3649 for (unsigned i = 0, e = BI.getNumDestinations(); i != e; ++i)
3651 "Indirectbr destinations must all have pointer type!", &BI);
3652
3653 visitTerminator(BI);
3654}
3655
3657 // Currently we only support callbr for amdgcn.kill. Add more checks here as
3658 // needed.
3659 return isAMDGPUCallBrIntrinsic(ID);
3660}
3661
3662void Verifier::visitCallBrInst(CallBrInst &CBI) {
3663 if (!CBI.isInlineAsm()) {
3665 "callbr: indirect function / invalid signature");
3666 Check(!CBI.hasOperandBundles(),
3667 "callbr for intrinsics currently doesn't support operand bundles");
3668
3670 CheckFailed(
3671 "callbr currently only supports asm-goto and selected intrinsics");
3672 }
3673 visitIntrinsicCall(CBI.getIntrinsicID(), CBI);
3674 } else {
3675 const InlineAsm *IA = cast<InlineAsm>(CBI.getCalledOperand());
3676 Check(!IA->canThrow(), "Unwinding from Callbr is not allowed");
3677
3678 verifyInlineAsmCall(CBI);
3679 }
3680 visitTerminator(CBI);
3681}
3682
3683void Verifier::visitSelectInst(SelectInst &SI) {
3684 Check(!SelectInst::areInvalidOperands(SI.getOperand(0), SI.getOperand(1),
3685 SI.getOperand(2)),
3686 "Invalid operands for select instruction!", &SI);
3687
3688 Check(SI.getTrueValue()->getType() == SI.getType(),
3689 "Select values must have same type as select instruction!", &SI);
3690 visitInstruction(SI);
3691}
3692
3693/// visitUserOp1 - User defined operators shouldn't live beyond the lifetime of
3694/// a pass, if any exist, it's an error.
3695///
3696void Verifier::visitUserOp1(Instruction &I) {
3697 Check(false, "User-defined operators should not live outside of a pass!", &I);
3698}
3699
3700void Verifier::visitTruncInst(TruncInst &I) {
3701 // Get the source and destination types
3702 Type *SrcTy = I.getOperand(0)->getType();
3703 Type *DestTy = I.getType();
3704
3705 // Get the size of the types in bits, we'll need this later
3706 unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
3707 unsigned DestBitSize = DestTy->getScalarSizeInBits();
3708
3709 Check(SrcTy->isIntOrIntVectorTy(), "Trunc only operates on integer", &I);
3710 Check(DestTy->isIntOrIntVectorTy(), "Trunc only produces integer", &I);
3711 Check(SrcTy->isVectorTy() == DestTy->isVectorTy(),
3712 "trunc source and destination must both be a vector or neither", &I);
3713 Check(SrcBitSize > DestBitSize, "DestTy too big for Trunc", &I);
3714
3715 visitInstruction(I);
3716}
3717
3718void Verifier::visitZExtInst(ZExtInst &I) {
3719 // Get the source and destination types
3720 Type *SrcTy = I.getOperand(0)->getType();
3721 Type *DestTy = I.getType();
3722
3723 // Get the size of the types in bits, we'll need this later
3724 Check(SrcTy->isIntOrIntVectorTy(), "ZExt only operates on integer", &I);
3725 Check(DestTy->isIntOrIntVectorTy(), "ZExt only produces an integer", &I);
3726 Check(SrcTy->isVectorTy() == DestTy->isVectorTy(),
3727 "zext source and destination must both be a vector or neither", &I);
3728 unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
3729 unsigned DestBitSize = DestTy->getScalarSizeInBits();
3730
3731 Check(SrcBitSize < DestBitSize, "Type too small for ZExt", &I);
3732
3733 visitInstruction(I);
3734}
3735
3736void Verifier::visitSExtInst(SExtInst &I) {
3737 // Get the source and destination types
3738 Type *SrcTy = I.getOperand(0)->getType();
3739 Type *DestTy = I.getType();
3740
3741 // Get the size of the types in bits, we'll need this later
3742 unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
3743 unsigned DestBitSize = DestTy->getScalarSizeInBits();
3744
3745 Check(SrcTy->isIntOrIntVectorTy(), "SExt only operates on integer", &I);
3746 Check(DestTy->isIntOrIntVectorTy(), "SExt only produces an integer", &I);
3747 Check(SrcTy->isVectorTy() == DestTy->isVectorTy(),
3748 "sext source and destination must both be a vector or neither", &I);
3749 Check(SrcBitSize < DestBitSize, "Type too small for SExt", &I);
3750
3751 visitInstruction(I);
3752}
3753
3754void Verifier::visitFPTruncInst(FPTruncInst &I) {
3755 // Get the source and destination types
3756 Type *SrcTy = I.getOperand(0)->getType();
3757 Type *DestTy = I.getType();
3758 // Get the size of the types in bits, we'll need this later
3759 unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
3760 unsigned DestBitSize = DestTy->getScalarSizeInBits();
3761
3762 Check(SrcTy->isFPOrFPVectorTy(), "FPTrunc only operates on FP", &I);
3763 Check(DestTy->isFPOrFPVectorTy(), "FPTrunc only produces an FP", &I);
3764 Check(SrcTy->isVectorTy() == DestTy->isVectorTy(),
3765 "fptrunc source and destination must both be a vector or neither", &I);
3766 Check(SrcBitSize > DestBitSize, "DestTy too big for FPTrunc", &I);
3767
3768 visitInstruction(I);
3769}
3770
3771void Verifier::visitFPExtInst(FPExtInst &I) {
3772 // Get the source and destination types
3773 Type *SrcTy = I.getOperand(0)->getType();
3774 Type *DestTy = I.getType();
3775
3776 // Get the size of the types in bits, we'll need this later
3777 unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
3778 unsigned DestBitSize = DestTy->getScalarSizeInBits();
3779
3780 Check(SrcTy->isFPOrFPVectorTy(), "FPExt only operates on FP", &I);
3781 Check(DestTy->isFPOrFPVectorTy(), "FPExt only produces an FP", &I);
3782 Check(SrcTy->isVectorTy() == DestTy->isVectorTy(),
3783 "fpext source and destination must both be a vector or neither", &I);
3784 Check(SrcBitSize < DestBitSize, "DestTy too small for FPExt", &I);
3785
3786 visitInstruction(I);
3787}
3788
3789void Verifier::visitUIToFPInst(UIToFPInst &I) {
3790 // Get the source and destination types
3791 Type *SrcTy = I.getOperand(0)->getType();
3792 Type *DestTy = I.getType();
3793
3794 bool SrcVec = SrcTy->isVectorTy();
3795 bool DstVec = DestTy->isVectorTy();
3796
3797 Check(SrcVec == DstVec,
3798 "UIToFP source and dest must both be vector or scalar", &I);
3799 Check(SrcTy->isIntOrIntVectorTy(),
3800 "UIToFP source must be integer or integer vector", &I);
3801 Check(DestTy->isFPOrFPVectorTy(), "UIToFP result must be FP or FP vector",
3802 &I);
3803
3804 if (SrcVec && DstVec)
3805 Check(cast<VectorType>(SrcTy)->getElementCount() ==
3806 cast<VectorType>(DestTy)->getElementCount(),
3807 "UIToFP source and dest vector length mismatch", &I);
3808
3809 visitInstruction(I);
3810}
3811
3812void Verifier::visitSIToFPInst(SIToFPInst &I) {
3813 // Get the source and destination types
3814 Type *SrcTy = I.getOperand(0)->getType();
3815 Type *DestTy = I.getType();
3816
3817 bool SrcVec = SrcTy->isVectorTy();
3818 bool DstVec = DestTy->isVectorTy();
3819
3820 Check(SrcVec == DstVec,
3821 "SIToFP source and dest must both be vector or scalar", &I);
3822 Check(SrcTy->isIntOrIntVectorTy(),
3823 "SIToFP source must be integer or integer vector", &I);
3824 Check(DestTy->isFPOrFPVectorTy(), "SIToFP result must be FP or FP vector",
3825 &I);
3826
3827 if (SrcVec && DstVec)
3828 Check(cast<VectorType>(SrcTy)->getElementCount() ==
3829 cast<VectorType>(DestTy)->getElementCount(),
3830 "SIToFP source and dest vector length mismatch", &I);
3831
3832 visitInstruction(I);
3833}
3834
3835void Verifier::visitFPToUIInst(FPToUIInst &I) {
3836 // Get the source and destination types
3837 Type *SrcTy = I.getOperand(0)->getType();
3838 Type *DestTy = I.getType();
3839
3840 bool SrcVec = SrcTy->isVectorTy();
3841 bool DstVec = DestTy->isVectorTy();
3842
3843 Check(SrcVec == DstVec,
3844 "FPToUI source and dest must both be vector or scalar", &I);
3845 Check(SrcTy->isFPOrFPVectorTy(), "FPToUI source must be FP or FP vector", &I);
3846 Check(DestTy->isIntOrIntVectorTy(),
3847 "FPToUI result must be integer or integer vector", &I);
3848
3849 if (SrcVec && DstVec)
3850 Check(cast<VectorType>(SrcTy)->getElementCount() ==
3851 cast<VectorType>(DestTy)->getElementCount(),
3852 "FPToUI source and dest vector length mismatch", &I);
3853
3854 visitInstruction(I);
3855}
3856
3857void Verifier::visitFPToSIInst(FPToSIInst &I) {
3858 // Get the source and destination types
3859 Type *SrcTy = I.getOperand(0)->getType();
3860 Type *DestTy = I.getType();
3861
3862 bool SrcVec = SrcTy->isVectorTy();
3863 bool DstVec = DestTy->isVectorTy();
3864
3865 Check(SrcVec == DstVec,
3866 "FPToSI source and dest must both be vector or scalar", &I);
3867 Check(SrcTy->isFPOrFPVectorTy(), "FPToSI source must be FP or FP vector", &I);
3868 Check(DestTy->isIntOrIntVectorTy(),
3869 "FPToSI result must be integer or integer vector", &I);
3870
3871 if (SrcVec && DstVec)
3872 Check(cast<VectorType>(SrcTy)->getElementCount() ==
3873 cast<VectorType>(DestTy)->getElementCount(),
3874 "FPToSI source and dest vector length mismatch", &I);
3875
3876 visitInstruction(I);
3877}
3878
3879void Verifier::checkPtrToAddr(Type *SrcTy, Type *DestTy, const Value &V) {
3880 Check(SrcTy->isPtrOrPtrVectorTy(), "PtrToAddr source must be pointer", V);
3881 Check(DestTy->isIntOrIntVectorTy(), "PtrToAddr result must be integral", V);
3882 Check(SrcTy->isVectorTy() == DestTy->isVectorTy(), "PtrToAddr type mismatch",
3883 V);
3884
3885 if (SrcTy->isVectorTy()) {
3886 auto *VSrc = cast<VectorType>(SrcTy);
3887 auto *VDest = cast<VectorType>(DestTy);
3888 Check(VSrc->getElementCount() == VDest->getElementCount(),
3889 "PtrToAddr vector length mismatch", V);
3890 }
3891
3892 Type *AddrTy = DL.getAddressType(SrcTy);
3893 Check(AddrTy == DestTy, "PtrToAddr result must be address width", V);
3894}
3895
3896void Verifier::visitPtrToAddrInst(PtrToAddrInst &I) {
3897 checkPtrToAddr(I.getOperand(0)->getType(), I.getType(), I);
3898 visitInstruction(I);
3899}
3900
3901void Verifier::visitPtrToIntInst(PtrToIntInst &I) {
3902 // Get the source and destination types
3903 Type *SrcTy = I.getOperand(0)->getType();
3904 Type *DestTy = I.getType();
3905
3906 Check(SrcTy->isPtrOrPtrVectorTy(), "PtrToInt source must be pointer", &I);
3907
3908 Check(DestTy->isIntOrIntVectorTy(), "PtrToInt result must be integral", &I);
3909 Check(SrcTy->isVectorTy() == DestTy->isVectorTy(), "PtrToInt type mismatch",
3910 &I);
3911
3912 if (SrcTy->isVectorTy()) {
3913 auto *VSrc = cast<VectorType>(SrcTy);
3914 auto *VDest = cast<VectorType>(DestTy);
3915 Check(VSrc->getElementCount() == VDest->getElementCount(),
3916 "PtrToInt Vector length mismatch", &I);
3917 }
3918
3919 visitInstruction(I);
3920}
3921
3922void Verifier::visitIntToPtrInst(IntToPtrInst &I) {
3923 // Get the source and destination types
3924 Type *SrcTy = I.getOperand(0)->getType();
3925 Type *DestTy = I.getType();
3926
3927 Check(SrcTy->isIntOrIntVectorTy(), "IntToPtr source must be an integral", &I);
3928 Check(DestTy->isPtrOrPtrVectorTy(), "IntToPtr result must be a pointer", &I);
3929
3930 Check(SrcTy->isVectorTy() == DestTy->isVectorTy(), "IntToPtr type mismatch",
3931 &I);
3932 if (SrcTy->isVectorTy()) {
3933 auto *VSrc = cast<VectorType>(SrcTy);
3934 auto *VDest = cast<VectorType>(DestTy);
3935 Check(VSrc->getElementCount() == VDest->getElementCount(),
3936 "IntToPtr Vector length mismatch", &I);
3937 }
3938 visitInstruction(I);
3939}
3940
3941void Verifier::visitBitCastInst(BitCastInst &I) {
3942 Check(
3943 CastInst::castIsValid(Instruction::BitCast, I.getOperand(0), I.getType()),
3944 "Invalid bitcast", &I);
3945 visitInstruction(I);
3946}
3947
3948void Verifier::visitAddrSpaceCastInst(AddrSpaceCastInst &I) {
3949 Type *SrcTy = I.getOperand(0)->getType();
3950 Type *DestTy = I.getType();
3951
3952 Check(SrcTy->isPtrOrPtrVectorTy(), "AddrSpaceCast source must be a pointer",
3953 &I);
3954 Check(DestTy->isPtrOrPtrVectorTy(), "AddrSpaceCast result must be a pointer",
3955 &I);
3957 "AddrSpaceCast must be between different address spaces", &I);
3958 if (auto *SrcVTy = dyn_cast<VectorType>(SrcTy))
3959 Check(SrcVTy->getElementCount() ==
3960 cast<VectorType>(DestTy)->getElementCount(),
3961 "AddrSpaceCast vector pointer number of elements mismatch", &I);
3962 visitInstruction(I);
3963}
3964
3965/// visitPHINode - Ensure that a PHI node is well formed.
3966///
3967void Verifier::visitPHINode(PHINode &PN) {
3968 // Ensure that the PHI nodes are all grouped together at the top of the block.
3969 // This can be tested by checking whether the instruction before this is
3970 // either nonexistent (because this is begin()) or is a PHI node. If not,
3971 // then there is some other instruction before a PHI.
3972 Check(&PN == &PN.getParent()->front() ||
3974 "PHI nodes not grouped at top of basic block!", &PN, PN.getParent());
3975
3976 // Check that a PHI doesn't yield a Token.
3977 Check(!PN.getType()->isTokenLikeTy(), "PHI nodes cannot have token type!");
3978
3979 // Check that all of the values of the PHI node have the same type as the
3980 // result.
3981 for (Value *IncValue : PN.incoming_values()) {
3982 Check(PN.getType() == IncValue->getType(),
3983 "PHI node operands are not the same type as the result!", &PN);
3984 }
3985
3986 // All other PHI node constraints are checked in the visitBasicBlock method.
3987
3988 visitInstruction(PN);
3989}
3990
3991void Verifier::visitCallBase(CallBase &Call) {
3993 "Called function must be a pointer!", Call);
3994 FunctionType *FTy = Call.getFunctionType();
3995
3996 // Verify that the correct number of arguments are being passed
3997 if (FTy->isVarArg())
3998 Check(Call.arg_size() >= FTy->getNumParams(),
3999 "Called function requires more parameters than were provided!", Call);
4000 else
4001 Check(Call.arg_size() == FTy->getNumParams(),
4002 "Incorrect number of arguments passed to called function!", Call);
4003
4004 // Verify that all arguments to the call match the function type.
4005 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
4006 Check(Call.getArgOperand(i)->getType() == FTy->getParamType(i),
4007 "Call parameter type does not match function signature!",
4008 Call.getArgOperand(i), FTy->getParamType(i), Call);
4009
4010 AttributeList Attrs = Call.getAttributes();
4011
4012 Check(verifyAttributeCount(Attrs, Call.arg_size()),
4013 "Attribute after last parameter!", Call);
4014
4015 auto *Callee =
4017 bool IsIntrinsic = Callee && Callee->isIntrinsic();
4018 if (IsIntrinsic)
4019 Check(Callee->getFunctionType() == FTy,
4020 "Intrinsic called with incompatible signature", Call);
4021
4022 // Verify if the calling convention of the callee is callable.
4024 "calling convention does not permit calls", Call);
4025
4026 // Disallow passing/returning values with alignment higher than we can
4027 // represent.
4028 // FIXME: Consider making DataLayout cap the alignment, so this isn't
4029 // necessary.
4030 auto VerifyTypeAlign = [&](Type *Ty, const Twine &Message) {
4031 if (!Ty->isSized())
4032 return;
4033 Align ABIAlign = DL.getABITypeAlign(Ty);
4034 Check(ABIAlign.value() <= Value::MaximumAlignment,
4035 "Incorrect alignment of " + Message + " to called function!", Call);
4036 };
4037
4038 if (!IsIntrinsic) {
4039 VerifyTypeAlign(FTy->getReturnType(), "return type");
4040 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) {
4041 Type *Ty = FTy->getParamType(i);
4042 VerifyTypeAlign(Ty, "argument passed");
4043 }
4044 }
4045
4046 if (Attrs.hasFnAttr(Attribute::Speculatable)) {
4047 // Don't allow speculatable on call sites, unless the underlying function
4048 // declaration is also speculatable.
4049 Check(Callee && Callee->isSpeculatable(),
4050 "speculatable attribute may not apply to call sites", Call);
4051 }
4052
4053 if (Attrs.hasFnAttr(Attribute::Preallocated)) {
4054 Check(Call.getIntrinsicID() == Intrinsic::call_preallocated_arg,
4055 "preallocated as a call site attribute can only be on "
4056 "llvm.call.preallocated.arg");
4057 }
4058
4059 Check(!Attrs.hasFnAttr(Attribute::DenormalFPEnv),
4060 "denormal_fpenv attribute may not apply to call sites", Call);
4061
4062 // Verify call attributes.
4063 verifyFunctionAttrs(FTy, Attrs, &Call, IsIntrinsic, Call.isInlineAsm());
4064
4065 // Conservatively check the inalloca argument.
4066 // We have a bug if we can find that there is an underlying alloca without
4067 // inalloca.
4068 if (Call.hasInAllocaArgument()) {
4069 Value *InAllocaArg = Call.getArgOperand(FTy->getNumParams() - 1);
4070 if (auto AI = dyn_cast<AllocaInst>(InAllocaArg->stripInBoundsOffsets()))
4071 Check(AI->isUsedWithInAlloca(),
4072 "inalloca argument for call has mismatched alloca", AI, Call);
4073 }
4074
4075 // For each argument of the callsite, if it has the swifterror argument,
4076 // make sure the underlying alloca/parameter it comes from has a swifterror as
4077 // well.
4078 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) {
4079 if (Call.paramHasAttr(i, Attribute::SwiftError)) {
4080 Value *SwiftErrorArg = Call.getArgOperand(i);
4081 if (auto AI = dyn_cast<AllocaInst>(SwiftErrorArg->stripInBoundsOffsets())) {
4082 Check(AI->isSwiftError(),
4083 "swifterror argument for call has mismatched alloca", AI, Call);
4084 continue;
4085 }
4086 auto ArgI = dyn_cast<Argument>(SwiftErrorArg);
4087 Check(ArgI, "swifterror argument should come from an alloca or parameter",
4088 SwiftErrorArg, Call);
4089 Check(ArgI->hasSwiftErrorAttr(),
4090 "swifterror argument for call has mismatched parameter", ArgI,
4091 Call);
4092 }
4093
4094 if (Attrs.hasParamAttr(i, Attribute::ImmArg)) {
4095 // Don't allow immarg on call sites, unless the underlying declaration
4096 // also has the matching immarg.
4097 Check(Callee && Callee->hasParamAttribute(i, Attribute::ImmArg),
4098 "immarg may not apply only to call sites", Call.getArgOperand(i),
4099 Call);
4100 }
4101
4102 if (Call.paramHasAttr(i, Attribute::ImmArg)) {
4103 Value *ArgVal = Call.getArgOperand(i);
4104 Check((isa<ConstantInt>(ArgVal) || isa<ConstantFP>(ArgVal)) &&
4105 !isa<VectorType>(ArgVal->getType()),
4106 "immarg operand has non-immediate parameter", ArgVal, Call);
4107
4108 // If the imm-arg is an integer and also has a range attached,
4109 // check if the given value is within the range.
4110 if (Call.paramHasAttr(i, Attribute::Range)) {
4111 if (auto *CI = dyn_cast<ConstantInt>(ArgVal)) {
4112 const ConstantRange &CR =
4113 Call.getParamAttr(i, Attribute::Range).getValueAsConstantRange();
4114 Check(CR.contains(CI->getValue()),
4115 formatv("immarg value {} for arg {} out of range {}",
4116 CI->getValue(), i, CR),
4117 Call);
4118 }
4119 }
4120 if (auto *CI = dyn_cast<ConstantInt>(ArgVal))
4122 CI->getValue()),
4123 formatv("immarg value {} for arg {} out of range set",
4124 CI->getValue(), i),
4125 Call);
4126 }
4127
4128 if (Call.paramHasAttr(i, Attribute::Preallocated)) {
4129 Value *ArgVal = Call.getArgOperand(i);
4130 bool hasOB =
4132 bool isMustTail = Call.isMustTailCall();
4133 Check(hasOB != isMustTail,
4134 "preallocated operand either requires a preallocated bundle or "
4135 "the call to be musttail (but not both)",
4136 ArgVal, Call);
4137 }
4138 }
4139
4140 if (FTy->isVarArg()) {
4141 // FIXME? is 'nest' even legal here?
4142 bool SawNest = false;
4143 bool SawReturned = false;
4144
4145 for (unsigned Idx = 0; Idx < FTy->getNumParams(); ++Idx) {
4146 if (Attrs.hasParamAttr(Idx, Attribute::Nest))
4147 SawNest = true;
4148 if (Attrs.hasParamAttr(Idx, Attribute::Returned))
4149 SawReturned = true;
4150 }
4151
4152 // Check attributes on the varargs part.
4153 for (unsigned Idx = FTy->getNumParams(); Idx < Call.arg_size(); ++Idx) {
4154 Type *Ty = Call.getArgOperand(Idx)->getType();
4155 AttributeSet ArgAttrs = Attrs.getParamAttrs(Idx);
4156 verifyParameterAttrs(ArgAttrs, Ty, &Call);
4157
4158 if (ArgAttrs.hasAttribute(Attribute::Nest)) {
4159 Check(!SawNest, "More than one parameter has attribute nest!", Call);
4160 SawNest = true;
4161 }
4162
4163 if (ArgAttrs.hasAttribute(Attribute::Returned)) {
4164 Check(!SawReturned, "More than one parameter has attribute returned!",
4165 Call);
4166 Check(Ty->canLosslesslyBitCastTo(FTy->getReturnType()),
4167 "Incompatible argument and return types for 'returned' "
4168 "attribute",
4169 Call);
4170 SawReturned = true;
4171 }
4172
4173 // Statepoint intrinsic is vararg but the wrapped function may be not.
4174 // Allow sret here and check the wrapped function in verifyStatepoint.
4175 if (Call.getIntrinsicID() != Intrinsic::experimental_gc_statepoint)
4176 Check(!ArgAttrs.hasAttribute(Attribute::StructRet),
4177 "Attribute 'sret' cannot be used for vararg call arguments!",
4178 Call);
4179
4180 if (ArgAttrs.hasAttribute(Attribute::InAlloca))
4181 Check(Idx == Call.arg_size() - 1,
4182 "inalloca isn't on the last argument!", Call);
4183 }
4184 }
4185
4186 // Verify that there's no metadata unless it's a direct call to an intrinsic.
4187 if (!IsIntrinsic) {
4188 for (Type *ParamTy : FTy->params()) {
4189 Check(!ParamTy->isMetadataTy(),
4190 "Function has metadata parameter but isn't an intrinsic", Call);
4191 Check(!ParamTy->isTokenLikeTy(),
4192 "Function has token parameter but isn't an intrinsic", Call);
4193 }
4194 }
4195
4196 // Verify that indirect calls don't return tokens.
4197 if (!Call.getCalledFunction()) {
4198 Check(!FTy->getReturnType()->isTokenLikeTy(),
4199 "Return type cannot be token for indirect call!");
4200 Check(!FTy->getReturnType()->isX86_AMXTy(),
4201 "Return type cannot be x86_amx for indirect call!");
4202 }
4203
4205 visitIntrinsicCall(ID, Call);
4206
4207 // Verify that a callsite has at most one "deopt", at most one "funclet", at
4208 // most one "gc-transition", at most one "cfguardtarget", at most one
4209 // "preallocated" operand bundle, and at most one "ptrauth" operand bundle.
4210 bool FoundDeoptBundle = false, FoundFuncletBundle = false,
4211 FoundGCTransitionBundle = false, FoundCFGuardTargetBundle = false,
4212 FoundPreallocatedBundle = false, FoundGCLiveBundle = false,
4213 FoundPtrauthBundle = false, FoundKCFIBundle = false,
4214 FoundAttachedCallBundle = false;
4215 for (unsigned i = 0, e = Call.getNumOperandBundles(); i < e; ++i) {
4216 OperandBundleUse BU = Call.getOperandBundleAt(i);
4217 for (const Value *Input : BU.Inputs)
4218 Check(!Input->getType()->isLabelTy(),
4219 "Operand bundle operands cannot be labels", Call);
4220 uint32_t Tag = BU.getTagID();
4221 if (Tag == LLVMContext::OB_deopt) {
4222 Check(!FoundDeoptBundle, "Multiple deopt operand bundles", Call);
4223 FoundDeoptBundle = true;
4224 } else if (Tag == LLVMContext::OB_gc_transition) {
4225 Check(!FoundGCTransitionBundle, "Multiple gc-transition operand bundles",
4226 Call);
4227 FoundGCTransitionBundle = true;
4228 } else if (Tag == LLVMContext::OB_funclet) {
4229 Check(!FoundFuncletBundle, "Multiple funclet operand bundles", Call);
4230 FoundFuncletBundle = true;
4231 Check(BU.Inputs.size() == 1,
4232 "Expected exactly one funclet bundle operand", Call);
4233 Check(isa<FuncletPadInst>(BU.Inputs.front()),
4234 "Funclet bundle operands should correspond to a FuncletPadInst",
4235 Call);
4236 } else if (Tag == LLVMContext::OB_cfguardtarget) {
4237 Check(!FoundCFGuardTargetBundle, "Multiple CFGuardTarget operand bundles",
4238 Call);
4239 FoundCFGuardTargetBundle = true;
4240 Check(BU.Inputs.size() == 1,
4241 "Expected exactly one cfguardtarget bundle operand", Call);
4242 } else if (Tag == LLVMContext::OB_ptrauth) {
4243 Check(!FoundPtrauthBundle, "Multiple ptrauth operand bundles", Call);
4244 FoundPtrauthBundle = true;
4245 Check(BU.Inputs.size() == 2,
4246 "Expected exactly two ptrauth bundle operands", Call);
4247 Check(isa<ConstantInt>(BU.Inputs[0]) &&
4248 BU.Inputs[0]->getType()->isIntegerTy(32),
4249 "Ptrauth bundle key operand must be an i32 constant", Call);
4250 Check(BU.Inputs[1]->getType()->isIntegerTy(64),
4251 "Ptrauth bundle discriminator operand must be an i64", Call);
4252 } else if (Tag == LLVMContext::OB_kcfi) {
4253 Check(!FoundKCFIBundle, "Multiple kcfi operand bundles", Call);
4254 FoundKCFIBundle = true;
4255 Check(BU.Inputs.size() == 1, "Expected exactly one kcfi bundle operand",
4256 Call);
4257 Check(isa<ConstantInt>(BU.Inputs[0]) &&
4258 BU.Inputs[0]->getType()->isIntegerTy(32),
4259 "Kcfi bundle operand must be an i32 constant", Call);
4260 } else if (Tag == LLVMContext::OB_preallocated) {
4261 Check(!FoundPreallocatedBundle, "Multiple preallocated operand bundles",
4262 Call);
4263 FoundPreallocatedBundle = true;
4264 Check(BU.Inputs.size() == 1,
4265 "Expected exactly one preallocated bundle operand", Call);
4266 auto Input = dyn_cast<IntrinsicInst>(BU.Inputs.front());
4267 Check(Input &&
4268 Input->getIntrinsicID() == Intrinsic::call_preallocated_setup,
4269 "\"preallocated\" argument must be a token from "
4270 "llvm.call.preallocated.setup",
4271 Call);
4272 } else if (Tag == LLVMContext::OB_gc_live) {
4273 Check(!FoundGCLiveBundle, "Multiple gc-live operand bundles", Call);
4274 FoundGCLiveBundle = true;
4276 Check(!FoundAttachedCallBundle,
4277 "Multiple \"clang.arc.attachedcall\" operand bundles", Call);
4278 FoundAttachedCallBundle = true;
4279 verifyAttachedCallBundle(Call, BU);
4280 }
4281 }
4282
4283 // Verify that callee and callsite agree on whether to use pointer auth.
4284 Check(!(Call.getCalledFunction() && FoundPtrauthBundle),
4285 "Direct call cannot have a ptrauth bundle", Call);
4286
4287 // Verify that each inlinable callsite of a debug-info-bearing function in a
4288 // debug-info-bearing function has a debug location attached to it. Failure to
4289 // do so causes assertion failures when the inliner sets up inline scope info
4290 // (Interposable functions are not inlinable, neither are functions without
4291 // definitions.)
4297 "inlinable function call in a function with "
4298 "debug info must have a !dbg location",
4299 Call);
4300
4301 if (Call.isInlineAsm())
4302 verifyInlineAsmCall(Call);
4303
4304 ConvergenceVerifyHelper.visit(Call);
4305
4306 visitInstruction(Call);
4307}
4308
4309void Verifier::verifyTailCCMustTailAttrs(const AttrBuilder &Attrs,
4310 StringRef Context) {
4311 Check(!Attrs.contains(Attribute::InAlloca),
4312 Twine("inalloca attribute not allowed in ") + Context);
4313 Check(!Attrs.contains(Attribute::InReg),
4314 Twine("inreg attribute not allowed in ") + Context);
4315 Check(!Attrs.contains(Attribute::SwiftError),
4316 Twine("swifterror attribute not allowed in ") + Context);
4317 Check(!Attrs.contains(Attribute::Preallocated),
4318 Twine("preallocated attribute not allowed in ") + Context);
4319 Check(!Attrs.contains(Attribute::ByRef),
4320 Twine("byref attribute not allowed in ") + Context);
4321}
4322
4323static AttrBuilder getParameterABIAttributes(LLVMContext& C, unsigned I, AttributeList Attrs) {
4324 static const Attribute::AttrKind ABIAttrs[] = {
4325 Attribute::StructRet, Attribute::ByVal, Attribute::InAlloca,
4326 Attribute::InReg, Attribute::StackAlignment, Attribute::SwiftSelf,
4327 Attribute::SwiftAsync, Attribute::SwiftError, Attribute::Preallocated,
4328 Attribute::ByRef};
4329 AttrBuilder Copy(C);
4330 for (auto AK : ABIAttrs) {
4331 Attribute Attr = Attrs.getParamAttrs(I).getAttribute(AK);
4332 if (Attr.isValid())
4333 Copy.addAttribute(Attr);
4334 }
4335
4336 // `align` is ABI-affecting only in combination with `byval` or `byref`.
4337 if (Attrs.hasParamAttr(I, Attribute::Alignment) &&
4338 (Attrs.hasParamAttr(I, Attribute::ByVal) ||
4339 Attrs.hasParamAttr(I, Attribute::ByRef)))
4340 Copy.addAlignmentAttr(Attrs.getParamAlignment(I));
4341 return Copy;
4342}
4343
4344void Verifier::verifyMustTailCall(CallInst &CI) {
4345 Check(!CI.isInlineAsm(), "cannot use musttail call with inline asm", &CI);
4346
4347 Function *F = CI.getParent()->getParent();
4348 FunctionType *CallerTy = F->getFunctionType();
4349 FunctionType *CalleeTy = CI.getFunctionType();
4350 Check(CallerTy->isVarArg() == CalleeTy->isVarArg(),
4351 "cannot guarantee tail call due to mismatched varargs", &CI);
4352 Check(CallerTy->getReturnType() == CalleeTy->getReturnType(),
4353 "cannot guarantee tail call due to mismatched return types", &CI);
4354
4355 // - The calling conventions of the caller and callee must match.
4356 Check(F->getCallingConv() == CI.getCallingConv(),
4357 "cannot guarantee tail call due to mismatched calling conv", &CI);
4358
4359 // - The call must immediately precede a :ref:`ret <i_ret>` instruction.
4360 // - The ret instruction must return the value produced by the call or void.
4362
4363 // Check the return.
4364 ReturnInst *Ret = dyn_cast_or_null<ReturnInst>(Next);
4365 Check(Ret, "musttail call must precede a ret", &CI);
4366 Check(!Ret->getReturnValue() || Ret->getReturnValue() == &CI ||
4368 "musttail call result must be returned", Ret);
4369
4370 AttributeList CallerAttrs = F->getAttributes();
4371 AttributeList CalleeAttrs = CI.getAttributes();
4372 if (CI.getCallingConv() == CallingConv::SwiftTail ||
4373 CI.getCallingConv() == CallingConv::Tail) {
4374 StringRef CCName =
4375 CI.getCallingConv() == CallingConv::Tail ? "tailcc" : "swifttailcc";
4376
4377 // - Only sret, byval, swiftself, and swiftasync ABI-impacting attributes
4378 // are allowed in swifttailcc call
4379 for (unsigned I = 0, E = CallerTy->getNumParams(); I != E; ++I) {
4380 AttrBuilder ABIAttrs = getParameterABIAttributes(F->getContext(), I, CallerAttrs);
4381 SmallString<32> Context{CCName, StringRef(" musttail caller")};
4382 verifyTailCCMustTailAttrs(ABIAttrs, Context);
4383 }
4384 for (unsigned I = 0, E = CalleeTy->getNumParams(); I != E; ++I) {
4385 AttrBuilder ABIAttrs = getParameterABIAttributes(F->getContext(), I, CalleeAttrs);
4386 SmallString<32> Context{CCName, StringRef(" musttail callee")};
4387 verifyTailCCMustTailAttrs(ABIAttrs, Context);
4388 }
4389 // - Varargs functions are not allowed
4390 Check(!CallerTy->isVarArg(), Twine("cannot guarantee ") + CCName +
4391 " tail call for varargs function");
4392 return;
4393 }
4394
4395 // - The caller and callee prototypes must match.
4396 if (!CI.getIntrinsicID()) {
4397 Check(CallerTy->getNumParams() == CalleeTy->getNumParams(),
4398 "cannot guarantee tail call due to mismatched parameter counts", &CI);
4399 for (unsigned I = 0, E = CallerTy->getNumParams(); I != E; ++I) {
4400 Check(CallerTy->getParamType(I) == CalleeTy->getParamType(I),
4401 "cannot guarantee tail call due to mismatched parameter types",
4402 &CI);
4403 }
4404 }
4405
4406 // - All ABI-impacting function attributes, such as sret, byval, inreg,
4407 // returned, preallocated, and inalloca, must match.
4408 for (unsigned I = 0, E = CallerTy->getNumParams(); I != E; ++I) {
4409 AttrBuilder CallerABIAttrs = getParameterABIAttributes(F->getContext(), I, CallerAttrs);
4410 AttrBuilder CalleeABIAttrs = getParameterABIAttributes(F->getContext(), I, CalleeAttrs);
4411 Check(CallerABIAttrs == CalleeABIAttrs,
4412 "cannot guarantee tail call due to mismatched ABI impacting "
4413 "function attributes",
4414 &CI, CI.getOperand(I));
4415 }
4416}
4417
4418void Verifier::visitCallInst(CallInst &CI) {
4419 visitCallBase(CI);
4420
4421 if (CI.isMustTailCall())
4422 verifyMustTailCall(CI);
4423}
4424
4425void Verifier::visitInvokeInst(InvokeInst &II) {
4426 visitCallBase(II);
4427
4428 // Verify that the first non-PHI instruction of the unwind destination is an
4429 // exception handling instruction.
4430 Check(
4431 II.getUnwindDest()->isEHPad(),
4432 "The unwind destination does not have an exception handling instruction!",
4433 &II);
4434
4435 visitTerminator(II);
4436}
4437
4438/// visitUnaryOperator - Check the argument to the unary operator.
4439///
4440void Verifier::visitUnaryOperator(UnaryOperator &U) {
4441 Check(U.getType() == U.getOperand(0)->getType(),
4442 "Unary operators must have same type for"
4443 "operands and result!",
4444 &U);
4445
4446 switch (U.getOpcode()) {
4447 // Check that floating-point arithmetic operators are only used with
4448 // floating-point operands.
4449 case Instruction::FNeg:
4450 Check(U.getType()->isFPOrFPVectorTy(),
4451 "FNeg operator only works with float types!", &U);
4452 break;
4453 default:
4454 llvm_unreachable("Unknown UnaryOperator opcode!");
4455 }
4456
4457 visitInstruction(U);
4458}
4459
4460/// visitBinaryOperator - Check that both arguments to the binary operator are
4461/// of the same type!
4462///
4463void Verifier::visitBinaryOperator(BinaryOperator &B) {
4464 Check(B.getOperand(0)->getType() == B.getOperand(1)->getType(),
4465 "Both operands to a binary operator are not of the same type!", &B);
4466
4467 switch (B.getOpcode()) {
4468 // Check that integer arithmetic operators are only used with
4469 // integral operands.
4470 case Instruction::Add:
4471 case Instruction::Sub:
4472 case Instruction::Mul:
4473 case Instruction::SDiv:
4474 case Instruction::UDiv:
4475 case Instruction::SRem:
4476 case Instruction::URem:
4477 Check(B.getType()->isIntOrIntVectorTy(),
4478 "Integer arithmetic operators only work with integral types!", &B);
4479 Check(B.getType() == B.getOperand(0)->getType(),
4480 "Integer arithmetic operators must have same type "
4481 "for operands and result!",
4482 &B);
4483 break;
4484 // Check that floating-point arithmetic operators are only used with
4485 // floating-point operands.
4486 case Instruction::FAdd:
4487 case Instruction::FSub:
4488 case Instruction::FMul:
4489 case Instruction::FDiv:
4490 case Instruction::FRem:
4491 Check(B.getType()->isFPOrFPVectorTy(),
4492 "Floating-point arithmetic operators only work with "
4493 "floating-point types!",
4494 &B);
4495 Check(B.getType() == B.getOperand(0)->getType(),
4496 "Floating-point arithmetic operators must have same type "
4497 "for operands and result!",
4498 &B);
4499 break;
4500 // Check that logical operators are only used with integral operands.
4501 case Instruction::And:
4502 case Instruction::Or:
4503 case Instruction::Xor:
4504 Check(B.getType()->isIntOrIntVectorTy(),
4505 "Logical operators only work with integral types!", &B);
4506 Check(B.getType() == B.getOperand(0)->getType(),
4507 "Logical operators must have same type for operands and result!", &B);
4508 break;
4509 case Instruction::Shl:
4510 case Instruction::LShr:
4511 case Instruction::AShr:
4512 Check(B.getType()->isIntOrIntVectorTy(),
4513 "Shifts only work with integral types!", &B);
4514 Check(B.getType() == B.getOperand(0)->getType(),
4515 "Shift return type must be same as operands!", &B);
4516 break;
4517 default:
4518 llvm_unreachable("Unknown BinaryOperator opcode!");
4519 }
4520
4521 visitInstruction(B);
4522}
4523
4524void Verifier::visitICmpInst(ICmpInst &IC) {
4525 // Check that the operands are the same type
4526 Type *Op0Ty = IC.getOperand(0)->getType();
4527 Type *Op1Ty = IC.getOperand(1)->getType();
4528 Check(Op0Ty == Op1Ty,
4529 "Both operands to ICmp instruction are not of the same type!", &IC);
4530 // Check that the operands are the right type
4531 Check(Op0Ty->isIntOrIntVectorTy() || Op0Ty->isPtrOrPtrVectorTy(),
4532 "Invalid operand types for ICmp instruction", &IC);
4533 // Check that the predicate is valid.
4534 Check(IC.isIntPredicate(), "Invalid predicate in ICmp instruction!", &IC);
4535
4536 visitInstruction(IC);
4537}
4538
4539void Verifier::visitFCmpInst(FCmpInst &FC) {
4540 // Check that the operands are the same type
4541 Type *Op0Ty = FC.getOperand(0)->getType();
4542 Type *Op1Ty = FC.getOperand(1)->getType();
4543 Check(Op0Ty == Op1Ty,
4544 "Both operands to FCmp instruction are not of the same type!", &FC);
4545 // Check that the operands are the right type
4546 Check(Op0Ty->isFPOrFPVectorTy(), "Invalid operand types for FCmp instruction",
4547 &FC);
4548 // Check that the predicate is valid.
4549 Check(FC.isFPPredicate(), "Invalid predicate in FCmp instruction!", &FC);
4550
4551 visitInstruction(FC);
4552}
4553
4554void Verifier::visitExtractElementInst(ExtractElementInst &EI) {
4556 "Invalid extractelement operands!", &EI);
4557 visitInstruction(EI);
4558}
4559
4560void Verifier::visitInsertElementInst(InsertElementInst &IE) {
4561 Check(InsertElementInst::isValidOperands(IE.getOperand(0), IE.getOperand(1),
4562 IE.getOperand(2)),
4563 "Invalid insertelement operands!", &IE);
4564 visitInstruction(IE);
4565}
4566
4567void Verifier::visitShuffleVectorInst(ShuffleVectorInst &SV) {
4568 Check(ShuffleVectorInst::isValidOperands(SV.getOperand(0), SV.getOperand(1),
4569 SV.getShuffleMask()),
4570 "Invalid shufflevector operands!", &SV);
4571 visitInstruction(SV);
4572}
4573
4574void Verifier::visitGetElementPtrInst(GetElementPtrInst &GEP) {
4576 GEP.getModule()->getModuleFlag("require-logical-pointer")))
4577 Check(!MD->getZExtValue(),
4578 "Non-logical getelementptr disallowed for this module.");
4579
4580 Type *TargetTy = GEP.getPointerOperandType()->getScalarType();
4581
4582 Check(isa<PointerType>(TargetTy),
4583 "GEP base pointer is not a vector or a vector of pointers", &GEP);
4584 Check(GEP.getSourceElementType()->isSized(), "GEP into unsized type!", &GEP);
4585
4586 if (auto *STy = dyn_cast<StructType>(GEP.getSourceElementType())) {
4587 Check(!STy->isScalableTy(),
4588 "getelementptr cannot target structure that contains scalable vector"
4589 "type",
4590 &GEP);
4591 }
4592
4593 SmallVector<Value *, 16> Idxs(GEP.indices());
4594 Check(
4595 all_of(Idxs, [](Value *V) { return V->getType()->isIntOrIntVectorTy(); }),
4596 "GEP indexes must be integers", &GEP);
4597 Type *ElTy =
4598 GetElementPtrInst::getIndexedType(GEP.getSourceElementType(), Idxs);
4599 Check(ElTy, "Invalid indices for GEP pointer type!", &GEP);
4600
4601 auto *PtrTy = dyn_cast<PointerType>(GEP.getType()->getScalarType());
4602
4603 Check(PtrTy && GEP.getResultElementType() == ElTy,
4604 "GEP is not of right type for indices!", &GEP, ElTy);
4605
4606 if (auto *GEPVTy = dyn_cast<VectorType>(GEP.getType())) {
4607 // Additional checks for vector GEPs.
4608 ElementCount GEPWidth = GEPVTy->getElementCount();
4609 if (GEP.getPointerOperandType()->isVectorTy())
4610 Check(
4611 GEPWidth ==
4612 cast<VectorType>(GEP.getPointerOperandType())->getElementCount(),
4613 "Vector GEP result width doesn't match operand's", &GEP);
4614 for (Value *Idx : Idxs) {
4615 Type *IndexTy = Idx->getType();
4616 if (auto *IndexVTy = dyn_cast<VectorType>(IndexTy)) {
4617 ElementCount IndexWidth = IndexVTy->getElementCount();
4618 Check(IndexWidth == GEPWidth, "Invalid GEP index vector width", &GEP);
4619 }
4620 Check(IndexTy->isIntOrIntVectorTy(),
4621 "All GEP indices should be of integer type");
4622 }
4623 }
4624
4625 // Check that GEP does not index into a vector with non-byte-addressable
4626 // elements.
4628 GTI != GTE; ++GTI) {
4629 if (GTI.isVector()) {
4630 Type *ElemTy = GTI.getIndexedType();
4631 Check(DL.typeSizeEqualsStoreSize(ElemTy),
4632 "GEP into vector with non-byte-addressable element type", &GEP);
4633 }
4634 }
4635
4636 Check(GEP.getAddressSpace() == PtrTy->getAddressSpace(),
4637 "GEP address space doesn't match type", &GEP);
4638
4639 visitInstruction(GEP);
4640}
4641
4642static bool isContiguous(const ConstantRange &A, const ConstantRange &B) {
4643 return A.getUpper() == B.getLower() || A.getLower() == B.getUpper();
4644}
4645
4646/// Verify !range and !absolute_symbol metadata. These have the same
4647/// restrictions, except !absolute_symbol allows the full set.
4648void Verifier::verifyRangeLikeMetadata(const Value &I, const MDNode *Range,
4649 Type *Ty, RangeLikeMetadataKind Kind) {
4650 unsigned NumOperands = Range->getNumOperands();
4651 Check(NumOperands % 2 == 0, "Unfinished range!", Range);
4652 unsigned NumRanges = NumOperands / 2;
4653 Check(NumRanges >= 1, "It should have at least one range!", Range);
4654
4655 ConstantRange LastRange(1, true); // Dummy initial value
4656 for (unsigned i = 0; i < NumRanges; ++i) {
4657 ConstantInt *Low =
4658 mdconst::dyn_extract<ConstantInt>(Range->getOperand(2 * i));
4659 Check(Low, "The lower limit must be an integer!", Low);
4660 ConstantInt *High =
4661 mdconst::dyn_extract<ConstantInt>(Range->getOperand(2 * i + 1));
4662 Check(High, "The upper limit must be an integer!", High);
4663
4664 Check(High->getType() == Low->getType(), "Range pair types must match!",
4665 &I);
4666
4667 if (Kind == RangeLikeMetadataKind::NoaliasAddrspace) {
4668 Check(High->getType()->isIntegerTy(32),
4669 "noalias.addrspace type must be i32!", &I);
4670 } else {
4671 Check(High->getType() == Ty->getScalarType(),
4672 "Range types must match instruction type!", &I);
4673 }
4674
4675 APInt HighV = High->getValue();
4676 APInt LowV = Low->getValue();
4677
4678 // ConstantRange asserts if the ranges are the same except for the min/max
4679 // value. Leave the cases it tolerates for the empty range error below.
4680 Check(LowV != HighV || LowV.isMaxValue() || LowV.isMinValue(),
4681 "The upper and lower limits cannot be the same value", &I);
4682
4683 ConstantRange CurRange(LowV, HighV);
4684 Check(!CurRange.isEmptySet() &&
4685 (Kind == RangeLikeMetadataKind::AbsoluteSymbol ||
4686 !CurRange.isFullSet()),
4687 "Range must not be empty!", Range);
4688 if (i != 0) {
4689 Check(CurRange.intersectWith(LastRange).isEmptySet(),
4690 "Intervals are overlapping", Range);
4691 Check(LowV.sgt(LastRange.getLower()), "Intervals are not in order",
4692 Range);
4693 Check(!isContiguous(CurRange, LastRange), "Intervals are contiguous",
4694 Range);
4695 }
4696 LastRange = ConstantRange(LowV, HighV);
4697 }
4698 if (NumRanges > 2) {
4699 APInt FirstLow =
4700 mdconst::dyn_extract<ConstantInt>(Range->getOperand(0))->getValue();
4701 APInt FirstHigh =
4702 mdconst::dyn_extract<ConstantInt>(Range->getOperand(1))->getValue();
4703 ConstantRange FirstRange(FirstLow, FirstHigh);
4704 Check(FirstRange.intersectWith(LastRange).isEmptySet(),
4705 "Intervals are overlapping", Range);
4706 Check(!isContiguous(FirstRange, LastRange), "Intervals are contiguous",
4707 Range);
4708 }
4709}
4710
4711void Verifier::visitRangeMetadata(Instruction &I, MDNode *Range, Type *Ty) {
4712 assert(Range && Range == I.getMetadata(LLVMContext::MD_range) &&
4713 "precondition violation");
4714 verifyRangeLikeMetadata(I, Range, Ty, RangeLikeMetadataKind::Range);
4715}
4716
4717void Verifier::visitNoFPClassMetadata(Instruction &I, MDNode *NoFPClass,
4718 Type *Ty) {
4719 Check(AttributeFuncs::isNoFPClassCompatibleType(Ty),
4720 "nofpclass only applies to floating-point typed loads", I);
4721
4722 Check(NoFPClass->getNumOperands() == 1,
4723 "nofpclass must have exactly one entry", NoFPClass);
4724 ConstantInt *MaskVal =
4726 Check(MaskVal && MaskVal->getType()->isIntegerTy(32),
4727 "nofpclass entry must be a constant i32", NoFPClass);
4728 uint32_t Val = MaskVal->getZExtValue();
4729 Check(Val != 0, "'nofpclass' must have at least one test bit set", NoFPClass,
4730 I);
4731
4732 Check((Val & ~static_cast<unsigned>(fcAllFlags)) == 0,
4733 "Invalid value for 'nofpclass' test mask", NoFPClass, I);
4734}
4735
4736void Verifier::visitNoaliasAddrspaceMetadata(Instruction &I, MDNode *Range,
4737 Type *Ty) {
4738 assert(Range && Range == I.getMetadata(LLVMContext::MD_noalias_addrspace) &&
4739 "precondition violation");
4740 verifyRangeLikeMetadata(I, Range, Ty,
4741 RangeLikeMetadataKind::NoaliasAddrspace);
4742}
4743
4744void Verifier::checkAtomicMemAccessSize(Type *Ty, const Instruction *I) {
4745 unsigned Size = DL.getTypeSizeInBits(Ty).getFixedValue();
4746 Check(Size >= 8, "atomic memory access' size must be byte-sized", Ty, I);
4747 Check(!(Size & (Size - 1)),
4748 "atomic memory access' operand must have a power-of-two size", Ty, I);
4749}
4750
4751void Verifier::visitLoadInst(LoadInst &LI) {
4752 auto *PTy = dyn_cast<PointerType>(LI.getOperand(0)->getType());
4753 Check(PTy, "Load operand must be a pointer.", &LI);
4754 Type *ElTy = LI.getType();
4755 if (MaybeAlign A = LI.getAlign()) {
4756 Check(A->value() <= Value::MaximumAlignment,
4757 "huge alignment values are unsupported", &LI);
4758 }
4759 Check(ElTy->isSized(), "loading unsized types is not allowed", &LI);
4760 if (LI.isAtomic()) {
4761 Check(LI.getOrdering() != AtomicOrdering::Release &&
4762 LI.getOrdering() != AtomicOrdering::AcquireRelease,
4763 "Load cannot have Release ordering", &LI);
4764
4765 if (LI.isElementwise()) {
4766 Check(LI.getOrdering() != AtomicOrdering::SequentiallyConsistent,
4767 "atomic elementwise load cannot be sequentially consistent.", &LI);
4768 auto *VecTy = dyn_cast<FixedVectorType>(ElTy);
4769 Check(VecTy,
4770 "atomic elementwise load operand must have fixed vector type!", &LI,
4771 ElTy);
4772 if (VecTy)
4773 checkAtomicMemAccessSize(VecTy->getElementType(), &LI);
4774 }
4775
4776 Check(ElTy->getScalarType()->isIntOrPtrTy() ||
4777 ElTy->getScalarType()->isByteTy() ||
4779 "atomic load operand must have integer, byte, pointer, floating "
4780 "point, or vector type!",
4781 ElTy, &LI);
4782
4783 checkAtomicMemAccessSize(ElTy, &LI);
4784 } else {
4785 Check(!LI.isElementwise(), "non-atomic load cannot be elementwise", &LI);
4787 "Non-atomic load cannot have SynchronizationScope specified", &LI);
4788 }
4789
4790 visitInstruction(LI);
4791}
4792
4793void Verifier::visitStoreInst(StoreInst &SI) {
4794 auto *PTy = dyn_cast<PointerType>(SI.getOperand(1)->getType());
4795 Check(PTy, "Store operand must be a pointer.", &SI);
4796 Type *ElTy = SI.getOperand(0)->getType();
4797 if (MaybeAlign A = SI.getAlign()) {
4798 Check(A->value() <= Value::MaximumAlignment,
4799 "huge alignment values are unsupported", &SI);
4800 }
4801 Check(ElTy->isSized(), "storing unsized types is not allowed", &SI);
4802 if (SI.isAtomic()) {
4803 Check(SI.getOrdering() != AtomicOrdering::Acquire &&
4804 SI.getOrdering() != AtomicOrdering::AcquireRelease,
4805 "Store cannot have Acquire ordering", &SI);
4806
4807 if (SI.isElementwise()) {
4808 Check(SI.getOrdering() != AtomicOrdering::SequentiallyConsistent,
4809 "atomic elementwise store cannot be sequentially consistent.", &SI);
4810
4811 auto *VecTy = dyn_cast<FixedVectorType>(ElTy);
4812 Check(VecTy,
4813 "atomic elementwise store operand must have fixed vector type!",
4814 &SI, ElTy);
4815 if (VecTy)
4816 checkAtomicMemAccessSize(VecTy->getElementType(), &SI);
4817 }
4818
4819 Check(ElTy->getScalarType()->isIntOrPtrTy() ||
4820 ElTy->getScalarType()->isByteTy() ||
4822 "atomic store operand must have integer, byte, pointer, floating "
4823 "point, or vector type!",
4824 ElTy, &SI);
4825 checkAtomicMemAccessSize(ElTy, &SI);
4826 } else {
4827 Check(!SI.isElementwise(), "non-atomic store cannot be elementwise", &SI);
4828 Check(SI.getSyncScopeID() == SyncScope::System,
4829 "Non-atomic store cannot have SynchronizationScope specified", &SI);
4830 }
4831 visitInstruction(SI);
4832}
4833
4834/// Check that SwiftErrorVal is used as a swifterror argument in CS.
4835void Verifier::verifySwiftErrorCall(CallBase &Call,
4836 const Value *SwiftErrorVal) {
4837 for (const auto &I : llvm::enumerate(Call.args())) {
4838 if (I.value() == SwiftErrorVal) {
4839 Check(Call.paramHasAttr(I.index(), Attribute::SwiftError),
4840 "swifterror value when used in a callsite should be marked "
4841 "with swifterror attribute",
4842 SwiftErrorVal, Call);
4843 }
4844 }
4845}
4846
4847void Verifier::verifySwiftErrorValue(const Value *SwiftErrorVal) {
4848 // Check that swifterror value is only used by loads, stores, or as
4849 // a swifterror argument.
4850 for (const User *U : SwiftErrorVal->users()) {
4852 isa<InvokeInst>(U),
4853 "swifterror value can only be loaded and stored from, or "
4854 "as a swifterror argument!",
4855 SwiftErrorVal, U);
4856 // If it is used by a store, check it is the second operand.
4857 if (auto StoreI = dyn_cast<StoreInst>(U))
4858 Check(StoreI->getOperand(1) == SwiftErrorVal,
4859 "swifterror value should be the second operand when used "
4860 "by stores",
4861 SwiftErrorVal, U);
4862 if (auto *Call = dyn_cast<CallBase>(U))
4863 verifySwiftErrorCall(*const_cast<CallBase *>(Call), SwiftErrorVal);
4864 }
4865}
4866
4867void Verifier::visitAllocaInst(AllocaInst &AI) {
4869 AI.getModule()->getModuleFlag("require-logical-pointer")))
4870 Check(!MD->getZExtValue(),
4871 "Non-logical alloca disallowed for this module.");
4872
4873 Type *Ty = AI.getAllocatedType();
4874 Check(Ty->isSized(), "Cannot allocate unsized type", &AI);
4875 // Check if it's a target extension type that disallows being used on the
4876 // stack.
4878 "Alloca has illegal target extension type", &AI);
4880 "Alloca array size must have integer type", &AI);
4881 if (MaybeAlign A = AI.getAlign()) {
4882 Check(A->value() <= Value::MaximumAlignment,
4883 "huge alignment values are unsupported", &AI);
4884 }
4885
4886 if (AI.isSwiftError()) {
4887 Check(Ty->isPointerTy(), "swifterror alloca must have pointer type", &AI);
4889 "swifterror alloca must not be array allocation", &AI);
4890 verifySwiftErrorValue(&AI);
4891 }
4892
4893 visitInstruction(AI);
4894
4895 // Target-specific alloca checks.
4896 verifyAMDGPUAlloca(*this, AI);
4897}
4898
4899void Verifier::visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI) {
4900 Type *ElTy = CXI.getOperand(1)->getType();
4901 Check(ElTy->isIntOrPtrTy(),
4902 "cmpxchg operand must have integer or pointer type", ElTy, &CXI);
4903 checkAtomicMemAccessSize(ElTy, &CXI);
4904 visitInstruction(CXI);
4905}
4906
4907void Verifier::visitAtomicRMWInst(AtomicRMWInst &RMWI) {
4908 Check(RMWI.getOrdering() != AtomicOrdering::Unordered,
4909 "atomicrmw instructions cannot be unordered.", &RMWI);
4910 auto Op = RMWI.getOperation();
4911 Type *ElTy = RMWI.getOperand(1)->getType();
4912 Check(!ElTy->isScalableTy(), "atomicrmw operand may not be scalable", &RMWI);
4913 if (RMWI.isElementwise()) {
4914 Check(RMWI.getOrdering() != AtomicOrdering::SequentiallyConsistent,
4915 "atomicrmw elementwise cannot be sequentially consistent.", &RMWI);
4916 auto *VecTy = dyn_cast<FixedVectorType>(ElTy);
4917 Check(VecTy, "atomicrmw elementwise operand must have fixed vector type!",
4918 &RMWI, ElTy);
4919 if (VecTy)
4920 checkAtomicMemAccessSize(VecTy->getElementType(), &RMWI);
4921 }
4922
4923 if (Op == AtomicRMWInst::Xchg) {
4924 Check((ElTy->isIntOrIntVectorTy() || ElTy->isFPOrFPVectorTy() ||
4925 ElTy->isPtrOrPtrVectorTy()),
4926 "atomicrmw " + AtomicRMWInst::getOperationName(Op) +
4927 " operand must be an integer type, a floating-point type, a "
4928 "pointer type, or a fixed vector of any of these types!",
4929 &RMWI, ElTy);
4930 } else if (AtomicRMWInst::isFPOperation(Op)) {
4931 Check(ElTy->isFPOrFPVectorTy(),
4932 "atomicrmw " + AtomicRMWInst::getOperationName(Op) +
4933 " operand must have floating-point or fixed vector of "
4934 "floating-point "
4935 "type!",
4936 &RMWI, ElTy);
4937 } else {
4938 Check(ElTy->isIntOrIntVectorTy(),
4939 "atomicrmw " + AtomicRMWInst::getOperationName(Op) +
4940 " operand must have integer or fixed vector of integer type!",
4941 &RMWI, ElTy);
4942 }
4943 checkAtomicMemAccessSize(ElTy, &RMWI);
4945 "Invalid binary operation!", &RMWI);
4946 visitInstruction(RMWI);
4947}
4948
4949void Verifier::visitFenceInst(FenceInst &FI) {
4950 const AtomicOrdering Ordering = FI.getOrdering();
4951 Check(Ordering == AtomicOrdering::Acquire ||
4952 Ordering == AtomicOrdering::Release ||
4953 Ordering == AtomicOrdering::AcquireRelease ||
4954 Ordering == AtomicOrdering::SequentiallyConsistent,
4955 "fence instructions may only have acquire, release, acq_rel, or "
4956 "seq_cst ordering.",
4957 &FI);
4958 visitInstruction(FI);
4959}
4960
4961void Verifier::visitExtractValueInst(ExtractValueInst &EVI) {
4963 EVI.getIndices()) == EVI.getType(),
4964 "Invalid ExtractValueInst operands!", &EVI);
4965
4966 visitInstruction(EVI);
4967}
4968
4969void Verifier::visitInsertValueInst(InsertValueInst &IVI) {
4971 IVI.getIndices()) ==
4972 IVI.getOperand(1)->getType(),
4973 "Invalid InsertValueInst operands!", &IVI);
4974
4975 visitInstruction(IVI);
4976}
4977
4978static Value *getParentPad(Value *EHPad) {
4979 if (auto *FPI = dyn_cast<FuncletPadInst>(EHPad))
4980 return FPI->getParentPad();
4981
4982 return cast<CatchSwitchInst>(EHPad)->getParentPad();
4983}
4984
4985void Verifier::visitEHPadPredecessors(Instruction &I) {
4986 assert(I.isEHPad());
4987
4988 BasicBlock *BB = I.getParent();
4989 Function *F = BB->getParent();
4990
4991 Check(BB != &F->getEntryBlock(), "EH pad cannot be in entry block.", &I);
4992
4993 if (auto *LPI = dyn_cast<LandingPadInst>(&I)) {
4994 // The landingpad instruction defines its parent as a landing pad block. The
4995 // landing pad block may be branched to only by the unwind edge of an
4996 // invoke.
4997 for (BasicBlock *PredBB : predecessors(BB)) {
4998 const auto *II = dyn_cast<InvokeInst>(PredBB->getTerminator());
4999 Check(II && II->getUnwindDest() == BB && II->getNormalDest() != BB,
5000 "Block containing LandingPadInst must be jumped to "
5001 "only by the unwind edge of an invoke.",
5002 LPI);
5003 }
5004 return;
5005 }
5006 if (auto *CPI = dyn_cast<CatchPadInst>(&I)) {
5007 if (!pred_empty(BB))
5008 Check(BB->getUniquePredecessor() == CPI->getCatchSwitch()->getParent(),
5009 "Block containg CatchPadInst must be jumped to "
5010 "only by its catchswitch.",
5011 CPI);
5012 Check(BB != CPI->getCatchSwitch()->getUnwindDest(),
5013 "Catchswitch cannot unwind to one of its catchpads",
5014 CPI->getCatchSwitch(), CPI);
5015 return;
5016 }
5017
5018 // Verify that each pred has a legal terminator with a legal to/from EH
5019 // pad relationship.
5020 Instruction *ToPad = &I;
5021 Value *ToPadParent = getParentPad(ToPad);
5022 for (BasicBlock *PredBB : predecessors(BB)) {
5023 Instruction *TI = PredBB->getTerminator();
5024 Value *FromPad;
5025 if (auto *II = dyn_cast<InvokeInst>(TI)) {
5026 Check(II->getUnwindDest() == BB && II->getNormalDest() != BB,
5027 "EH pad must be jumped to via an unwind edge", ToPad, II);
5028 auto *CalledFn =
5029 dyn_cast<Function>(II->getCalledOperand()->stripPointerCasts());
5030 if (CalledFn && CalledFn->isIntrinsic() && II->doesNotThrow() &&
5031 !IntrinsicInst::mayLowerToFunctionCall(CalledFn->getIntrinsicID()))
5032 continue;
5033 if (auto Bundle = II->getOperandBundle(LLVMContext::OB_funclet))
5034 FromPad = Bundle->Inputs[0];
5035 else
5036 FromPad = ConstantTokenNone::get(II->getContext());
5037 } else if (auto *CRI = dyn_cast<CleanupReturnInst>(TI)) {
5038 FromPad = CRI->getOperand(0);
5039 Check(FromPad != ToPadParent, "A cleanupret must exit its cleanup", CRI);
5040 } else if (auto *CSI = dyn_cast<CatchSwitchInst>(TI)) {
5041 FromPad = CSI;
5042 } else {
5043 Check(false, "EH pad must be jumped to via an unwind edge", ToPad, TI);
5044 }
5045
5046 // The edge may exit from zero or more nested pads.
5047 SmallPtrSet<Value *, 8> Seen;
5048 for (;; FromPad = getParentPad(FromPad)) {
5049 Check(FromPad != ToPad,
5050 "EH pad cannot handle exceptions raised within it", FromPad, TI);
5051 if (FromPad == ToPadParent) {
5052 // This is a legal unwind edge.
5053 break;
5054 }
5055 Check(!isa<ConstantTokenNone>(FromPad),
5056 "A single unwind edge may only enter one EH pad", TI);
5057 Check(Seen.insert(FromPad).second, "EH pad jumps through a cycle of pads",
5058 FromPad);
5059
5060 // This will be diagnosed on the corresponding instruction already. We
5061 // need the extra check here to make sure getParentPad() works.
5062 Check(isa<FuncletPadInst>(FromPad) || isa<CatchSwitchInst>(FromPad),
5063 "Parent pad must be catchpad/cleanuppad/catchswitch", TI);
5064 }
5065 }
5066}
5067
5068void Verifier::visitLandingPadInst(LandingPadInst &LPI) {
5069 // The landingpad instruction is ill-formed if it doesn't have any clauses and
5070 // isn't a cleanup.
5071 Check(LPI.getNumClauses() > 0 || LPI.isCleanup(),
5072 "LandingPadInst needs at least one clause or to be a cleanup.", &LPI);
5073
5074 visitEHPadPredecessors(LPI);
5075
5076 if (!LandingPadResultTy)
5077 LandingPadResultTy = LPI.getType();
5078 else
5079 Check(LandingPadResultTy == LPI.getType(),
5080 "The landingpad instruction should have a consistent result type "
5081 "inside a function.",
5082 &LPI);
5083
5084 Function *F = LPI.getParent()->getParent();
5085 Check(F->hasPersonalityFn(),
5086 "LandingPadInst needs to be in a function with a personality.", &LPI);
5087
5088 // The landingpad instruction must be the first non-PHI instruction in the
5089 // block.
5090 Check(LPI.getParent()->getLandingPadInst() == &LPI,
5091 "LandingPadInst not the first non-PHI instruction in the block.", &LPI);
5092
5093 for (unsigned i = 0, e = LPI.getNumClauses(); i < e; ++i) {
5094 Constant *Clause = LPI.getClause(i);
5095 if (LPI.isCatch(i)) {
5096 Check(isa<PointerType>(Clause->getType()),
5097 "Catch operand does not have pointer type!", &LPI);
5098 } else {
5099 Check(LPI.isFilter(i), "Clause is neither catch nor filter!", &LPI);
5101 "Filter operand is not an array of constants!", &LPI);
5102 }
5103 }
5104
5105 visitInstruction(LPI);
5106}
5107
5108void Verifier::visitResumeInst(ResumeInst &RI) {
5110 "ResumeInst needs to be in a function with a personality.", &RI);
5111
5112 if (!LandingPadResultTy)
5113 LandingPadResultTy = RI.getValue()->getType();
5114 else
5115 Check(LandingPadResultTy == RI.getValue()->getType(),
5116 "The resume instruction should have a consistent result type "
5117 "inside a function.",
5118 &RI);
5119
5120 visitTerminator(RI);
5121}
5122
5123void Verifier::visitCatchPadInst(CatchPadInst &CPI) {
5124 BasicBlock *BB = CPI.getParent();
5125
5126 Function *F = BB->getParent();
5127 Check(F->hasPersonalityFn(),
5128 "CatchPadInst needs to be in a function with a personality.", &CPI);
5129
5131 "CatchPadInst needs to be directly nested in a CatchSwitchInst.",
5132 CPI.getParentPad());
5133
5134 // The catchpad instruction must be the first non-PHI instruction in the
5135 // block.
5136 Check(&*BB->getFirstNonPHIIt() == &CPI,
5137 "CatchPadInst not the first non-PHI instruction in the block.", &CPI);
5138
5140 [](Use &U) {
5141 auto *V = U.get();
5142 return isa<Constant>(V) || isa<AllocaInst>(V);
5143 }),
5144 "Argument operand must be alloca or constant.", &CPI);
5145
5146 visitEHPadPredecessors(CPI);
5147 visitFuncletPadInst(CPI);
5148}
5149
5150void Verifier::visitCatchReturnInst(CatchReturnInst &CatchReturn) {
5151 Check(isa<CatchPadInst>(CatchReturn.getOperand(0)),
5152 "CatchReturnInst needs to be provided a CatchPad", &CatchReturn,
5153 CatchReturn.getOperand(0));
5154
5155 visitTerminator(CatchReturn);
5156}
5157
5158void Verifier::visitCleanupPadInst(CleanupPadInst &CPI) {
5159 BasicBlock *BB = CPI.getParent();
5160
5161 Function *F = BB->getParent();
5162 Check(F->hasPersonalityFn(),
5163 "CleanupPadInst needs to be in a function with a personality.", &CPI);
5164
5165 // The cleanuppad instruction must be the first non-PHI instruction in the
5166 // block.
5167 Check(&*BB->getFirstNonPHIIt() == &CPI,
5168 "CleanupPadInst not the first non-PHI instruction in the block.", &CPI);
5169
5170 auto *ParentPad = CPI.getParentPad();
5171 Check(isa<ConstantTokenNone>(ParentPad) || isa<FuncletPadInst>(ParentPad),
5172 "CleanupPadInst has an invalid parent.", &CPI);
5173
5174 visitEHPadPredecessors(CPI);
5175 visitFuncletPadInst(CPI);
5176}
5177
5178void Verifier::visitFuncletPadInst(FuncletPadInst &FPI) {
5179 User *FirstUser = nullptr;
5180 Value *FirstUnwindPad = nullptr;
5181 SmallVector<FuncletPadInst *, 8> Worklist({&FPI});
5182 SmallPtrSet<FuncletPadInst *, 8> Seen;
5183
5184 while (!Worklist.empty()) {
5185 FuncletPadInst *CurrentPad = Worklist.pop_back_val();
5186 Check(Seen.insert(CurrentPad).second,
5187 "FuncletPadInst must not be nested within itself", CurrentPad);
5188 Value *UnresolvedAncestorPad = nullptr;
5189 for (User *U : CurrentPad->users()) {
5190 BasicBlock *UnwindDest;
5191 if (auto *CRI = dyn_cast<CleanupReturnInst>(U)) {
5192 UnwindDest = CRI->getUnwindDest();
5193 } else if (auto *CSI = dyn_cast<CatchSwitchInst>(U)) {
5194 // We allow catchswitch unwind to caller to nest
5195 // within an outer pad that unwinds somewhere else,
5196 // because catchswitch doesn't have a nounwind variant.
5197 // See e.g. SimplifyCFGOpt::SimplifyUnreachable.
5198 if (CSI->unwindsToCaller())
5199 continue;
5200 UnwindDest = CSI->getUnwindDest();
5201 } else if (auto *II = dyn_cast<InvokeInst>(U)) {
5202 UnwindDest = II->getUnwindDest();
5203 } else if (isa<CallInst>(U)) {
5204 // Calls which don't unwind may be found inside funclet
5205 // pads that unwind somewhere else. We don't *require*
5206 // such calls to be annotated nounwind.
5207 continue;
5208 } else if (auto *CPI = dyn_cast<CleanupPadInst>(U)) {
5209 // The unwind dest for a cleanup can only be found by
5210 // recursive search. Add it to the worklist, and we'll
5211 // search for its first use that determines where it unwinds.
5212 Worklist.push_back(CPI);
5213 continue;
5214 } else {
5215 Check(isa<CatchReturnInst>(U), "Bogus funclet pad use", U);
5216 continue;
5217 }
5218
5219 Value *UnwindPad;
5220 bool ExitsFPI;
5221 if (UnwindDest) {
5222 UnwindPad = &*UnwindDest->getFirstNonPHIIt();
5223 if (!cast<Instruction>(UnwindPad)->isEHPad())
5224 continue;
5225 Value *UnwindParent = getParentPad(UnwindPad);
5226 // Ignore unwind edges that don't exit CurrentPad.
5227 if (UnwindParent == CurrentPad)
5228 continue;
5229 // Determine whether the original funclet pad is exited,
5230 // and if we are scanning nested pads determine how many
5231 // of them are exited so we can stop searching their
5232 // children.
5233 Value *ExitedPad = CurrentPad;
5234 ExitsFPI = false;
5235 do {
5236 if (ExitedPad == &FPI) {
5237 ExitsFPI = true;
5238 // Now we can resolve any ancestors of CurrentPad up to
5239 // FPI, but not including FPI since we need to make sure
5240 // to check all direct users of FPI for consistency.
5241 UnresolvedAncestorPad = &FPI;
5242 break;
5243 }
5244 Value *ExitedParent = getParentPad(ExitedPad);
5245 if (ExitedParent == UnwindParent) {
5246 // ExitedPad is the ancestor-most pad which this unwind
5247 // edge exits, so we can resolve up to it, meaning that
5248 // ExitedParent is the first ancestor still unresolved.
5249 UnresolvedAncestorPad = ExitedParent;
5250 break;
5251 }
5252 ExitedPad = ExitedParent;
5253 } while (!isa<ConstantTokenNone>(ExitedPad));
5254 } else {
5255 // Unwinding to caller exits all pads.
5256 UnwindPad = ConstantTokenNone::get(FPI.getContext());
5257 ExitsFPI = true;
5258 UnresolvedAncestorPad = &FPI;
5259 }
5260
5261 if (ExitsFPI) {
5262 // This unwind edge exits FPI. Make sure it agrees with other
5263 // such edges.
5264 if (FirstUser) {
5265 Check(UnwindPad == FirstUnwindPad,
5266 "Unwind edges out of a funclet "
5267 "pad must have the same unwind "
5268 "dest",
5269 &FPI, U, FirstUser);
5270 } else {
5271 FirstUser = U;
5272 FirstUnwindPad = UnwindPad;
5273 // Record cleanup sibling unwinds for verifySiblingFuncletUnwinds
5274 if (isa<CleanupPadInst>(&FPI) && !isa<ConstantTokenNone>(UnwindPad) &&
5275 getParentPad(UnwindPad) == getParentPad(&FPI))
5276 SiblingFuncletInfo[&FPI] = cast<Instruction>(U);
5277 }
5278 }
5279 // Make sure we visit all uses of FPI, but for nested pads stop as
5280 // soon as we know where they unwind to.
5281 if (CurrentPad != &FPI)
5282 break;
5283 }
5284 if (UnresolvedAncestorPad) {
5285 if (CurrentPad == UnresolvedAncestorPad) {
5286 // When CurrentPad is FPI itself, we don't mark it as resolved even if
5287 // we've found an unwind edge that exits it, because we need to verify
5288 // all direct uses of FPI.
5289 assert(CurrentPad == &FPI);
5290 continue;
5291 }
5292 // Pop off the worklist any nested pads that we've found an unwind
5293 // destination for. The pads on the worklist are the uncles,
5294 // great-uncles, etc. of CurrentPad. We've found an unwind destination
5295 // for all ancestors of CurrentPad up to but not including
5296 // UnresolvedAncestorPad.
5297 Value *ResolvedPad = CurrentPad;
5298 while (!Worklist.empty()) {
5299 Value *UnclePad = Worklist.back();
5300 Value *AncestorPad = getParentPad(UnclePad);
5301 // Walk ResolvedPad up the ancestor list until we either find the
5302 // uncle's parent or the last resolved ancestor.
5303 while (ResolvedPad != AncestorPad) {
5304 Value *ResolvedParent = getParentPad(ResolvedPad);
5305 if (ResolvedParent == UnresolvedAncestorPad) {
5306 break;
5307 }
5308 ResolvedPad = ResolvedParent;
5309 }
5310 // If the resolved ancestor search didn't find the uncle's parent,
5311 // then the uncle is not yet resolved.
5312 if (ResolvedPad != AncestorPad)
5313 break;
5314 // This uncle is resolved, so pop it from the worklist.
5315 Worklist.pop_back();
5316 }
5317 }
5318 }
5319
5320 if (FirstUnwindPad) {
5321 if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(FPI.getParentPad())) {
5322 BasicBlock *SwitchUnwindDest = CatchSwitch->getUnwindDest();
5323 Value *SwitchUnwindPad;
5324 if (SwitchUnwindDest)
5325 SwitchUnwindPad = &*SwitchUnwindDest->getFirstNonPHIIt();
5326 else
5327 SwitchUnwindPad = ConstantTokenNone::get(FPI.getContext());
5328 Check(SwitchUnwindPad == FirstUnwindPad,
5329 "Unwind edges out of a catch must have the same unwind dest as "
5330 "the parent catchswitch",
5331 &FPI, FirstUser, CatchSwitch);
5332 }
5333 }
5334
5335 visitInstruction(FPI);
5336}
5337
5338void Verifier::visitCatchSwitchInst(CatchSwitchInst &CatchSwitch) {
5339 BasicBlock *BB = CatchSwitch.getParent();
5340
5341 Function *F = BB->getParent();
5342 Check(F->hasPersonalityFn(),
5343 "CatchSwitchInst needs to be in a function with a personality.",
5344 &CatchSwitch);
5345
5346 // The catchswitch instruction must be the first non-PHI instruction in the
5347 // block.
5348 Check(&*BB->getFirstNonPHIIt() == &CatchSwitch,
5349 "CatchSwitchInst not the first non-PHI instruction in the block.",
5350 &CatchSwitch);
5351
5352 auto *ParentPad = CatchSwitch.getParentPad();
5353 Check(isa<ConstantTokenNone>(ParentPad) || isa<FuncletPadInst>(ParentPad),
5354 "CatchSwitchInst has an invalid parent.", ParentPad);
5355
5356 if (BasicBlock *UnwindDest = CatchSwitch.getUnwindDest()) {
5357 BasicBlock::iterator I = UnwindDest->getFirstNonPHIIt();
5358 Check(I->isEHPad() && !isa<LandingPadInst>(I),
5359 "CatchSwitchInst must unwind to an EH block which is not a "
5360 "landingpad.",
5361 &CatchSwitch);
5362
5363 // Record catchswitch sibling unwinds for verifySiblingFuncletUnwinds
5364 if (getParentPad(&*I) == ParentPad)
5365 SiblingFuncletInfo[&CatchSwitch] = &CatchSwitch;
5366 }
5367
5368 Check(CatchSwitch.getNumHandlers() != 0,
5369 "CatchSwitchInst cannot have empty handler list", &CatchSwitch);
5370
5371 for (BasicBlock *Handler : CatchSwitch.handlers()) {
5372 Check(isa<CatchPadInst>(Handler->getFirstNonPHIIt()),
5373 "CatchSwitchInst handlers must be catchpads", &CatchSwitch, Handler);
5374 }
5375
5376 visitEHPadPredecessors(CatchSwitch);
5377 visitTerminator(CatchSwitch);
5378}
5379
5380void Verifier::visitCleanupReturnInst(CleanupReturnInst &CRI) {
5382 "CleanupReturnInst needs to be provided a CleanupPad", &CRI,
5383 CRI.getOperand(0));
5384
5385 if (BasicBlock *UnwindDest = CRI.getUnwindDest()) {
5386 BasicBlock::iterator I = UnwindDest->getFirstNonPHIIt();
5387 Check(I->isEHPad() && !isa<LandingPadInst>(I),
5388 "CleanupReturnInst must unwind to an EH block which is not a "
5389 "landingpad.",
5390 &CRI);
5391 }
5392
5393 visitTerminator(CRI);
5394}
5395
5396void Verifier::verifyDominatesUse(Instruction &I, unsigned i) {
5397 Instruction *Op = cast<Instruction>(I.getOperand(i));
5398 // If the we have an invalid invoke, don't try to compute the dominance.
5399 // We already reject it in the invoke specific checks and the dominance
5400 // computation doesn't handle multiple edges.
5401 if (auto *II = dyn_cast<InvokeInst>(Op)) {
5402 if (II->getNormalDest() == II->getUnwindDest())
5403 return;
5404 }
5405
5406 // Quick check whether the def has already been encountered in the same block.
5407 // PHI nodes are not checked to prevent accepting preceding PHIs, because PHI
5408 // uses are defined to happen on the incoming edge, not at the instruction.
5409 //
5410 // FIXME: If this operand is a MetadataAsValue (wrapping a LocalAsMetadata)
5411 // wrapping an SSA value, assert that we've already encountered it. See
5412 // related FIXME in Mapper::mapLocalAsMetadata in ValueMapper.cpp.
5413 if (!isa<PHINode>(I) && InstsInThisBlock.count(Op))
5414 return;
5415
5416 const Use &U = I.getOperandUse(i);
5417 Check(DT.dominates(Op, U), "Instruction does not dominate all uses!", Op, &I);
5418}
5419
5420void Verifier::visitDereferenceableMetadata(Instruction& I, MDNode* MD) {
5421 Check(I.getType()->isPointerTy(),
5422 "dereferenceable, dereferenceable_or_null "
5423 "apply only to pointer types",
5424 &I);
5426 "dereferenceable, dereferenceable_or_null apply only to load"
5427 " and inttoptr instructions, use attributes for calls or invokes",
5428 &I);
5429 Check(MD->getNumOperands() == 1,
5430 "dereferenceable, dereferenceable_or_null "
5431 "take one operand!",
5432 &I);
5433 ConstantInt *CI = mdconst::dyn_extract<ConstantInt>(MD->getOperand(0));
5434 Check(CI && CI->getType()->isIntegerTy(64),
5435 "dereferenceable, "
5436 "dereferenceable_or_null metadata value must be an i64!",
5437 &I);
5438}
5439
5440void Verifier::visitNoFreeObjMetadata(Instruction &I, MDNode *MD) {
5441 Check(I.getType()->isPointerTy(), "nofreeobj applies only to pointer types",
5442 &I);
5444 "nofreeobj applies only to inttoptr instruction", &I);
5445 Check(MD->getNumOperands() == 0, "nofreeobj metadata must be empty", &I);
5446}
5447
5448void Verifier::visitProfMetadata(Instruction &I, MDNode *MD) {
5449 auto GetBranchingTerminatorNumOperands = [&]() {
5450 unsigned ExpectedNumOperands = 0;
5451 if (auto *BI = dyn_cast<CondBrInst>(&I))
5452 ExpectedNumOperands = BI->getNumSuccessors();
5453 else if (auto *SI = dyn_cast<SwitchInst>(&I))
5454 ExpectedNumOperands = SI->getNumSuccessors();
5455 else if (isa<CallInst>(&I))
5456 ExpectedNumOperands = 1;
5457 else if (auto *IBI = dyn_cast<IndirectBrInst>(&I))
5458 ExpectedNumOperands = IBI->getNumDestinations();
5459 else if (isa<SelectInst>(&I))
5460 ExpectedNumOperands = 2;
5461 else if (auto *CI = dyn_cast<CallBrInst>(&I))
5462 ExpectedNumOperands = CI->getNumSuccessors();
5463 return ExpectedNumOperands;
5464 };
5465 Check(MD->getNumOperands() >= 1,
5466 "!prof annotations should have at least 1 operand", MD);
5467 // Check first operand.
5468 Check(MD->getOperand(0) != nullptr, "first operand should not be null", MD);
5470 "expected string with name of the !prof annotation", MD);
5471 MDString *MDS = cast<MDString>(MD->getOperand(0));
5472 StringRef ProfName = MDS->getString();
5473
5475 Check(GetBranchingTerminatorNumOperands() != 0 || isa<InvokeInst>(I),
5476 "'unknown' !prof should only appear on instructions on which "
5477 "'branch_weights' would",
5478 MD);
5479 verifyUnknownProfileMetadata(MD);
5480 return;
5481 }
5482
5483 Check(MD->getNumOperands() >= 2,
5484 "!prof annotations should have no less than 2 operands", MD);
5485
5486 // Check consistency of !prof branch_weights metadata.
5487 if (ProfName == MDProfLabels::BranchWeights) {
5488 unsigned NumBranchWeights = getNumBranchWeights(*MD);
5489 if (isa<InvokeInst>(&I)) {
5490 Check(NumBranchWeights == 1 || NumBranchWeights == 2,
5491 "Wrong number of InvokeInst branch_weights operands", MD);
5492 } else {
5493 const unsigned ExpectedNumOperands = GetBranchingTerminatorNumOperands();
5494 if (ExpectedNumOperands == 0)
5495 CheckFailed("!prof branch_weights are not allowed for this instruction",
5496 MD);
5497
5498 Check(NumBranchWeights == ExpectedNumOperands, "Wrong number of operands",
5499 MD);
5500 }
5501 for (unsigned i = getBranchWeightOffset(MD); i < MD->getNumOperands();
5502 ++i) {
5503 auto &MDO = MD->getOperand(i);
5504 Check(MDO, "second operand should not be null", MD);
5506 "!prof brunch_weights operand is not a const int");
5507 }
5508 } else if (ProfName == MDProfLabels::ValueProfile) {
5509 Check(isValueProfileMD(MD), "invalid value profiling metadata", MD);
5510 ConstantInt *KindInt = mdconst::dyn_extract<ConstantInt>(MD->getOperand(1));
5511 Check(KindInt, "VP !prof missing kind argument", MD);
5512
5513 auto Kind = KindInt->getZExtValue();
5514 Check(Kind >= InstrProfValueKind::IPVK_First &&
5515 Kind <= InstrProfValueKind::IPVK_Last,
5516 "Invalid VP !prof kind", MD);
5517 Check(MD->getNumOperands() % 2 == 1,
5518 "VP !prof should have an even number "
5519 "of arguments after 'VP'",
5520 MD);
5521 if (Kind == InstrProfValueKind::IPVK_IndirectCallTarget ||
5522 Kind == InstrProfValueKind::IPVK_MemOPSize)
5524 "VP !prof indirect call or memop size expected to be applied to "
5525 "CallBase instructions only",
5526 MD);
5527
5528 DenseSet<uint64_t> ProfileValues;
5529 for (unsigned I = 3; I < MD->getNumOperands(); I += 2) {
5530 ConstantInt *ProfileValue =
5532 Check(ProfileValue, "VP !prof value operand is not a const int", MD);
5533 uint64_t ProfileValueInt = ProfileValue->getZExtValue();
5534 auto [ValueIt, Inserted] = ProfileValues.insert(ProfileValueInt);
5535 Check(Inserted, "VP !prof should not have duplicate profile values", MD);
5536 }
5537 } else {
5538 CheckFailed("expected either branch_weights or VP profile name", MD);
5539 }
5540}
5541
5542void Verifier::visitDIAssignIDMetadata(Instruction &I, MDNode *MD) {
5543 assert(I.hasMetadata(LLVMContext::MD_DIAssignID));
5544 // DIAssignID metadata must be attached to either an alloca or some form of
5545 // store/memory-writing instruction.
5546 // FIXME: We allow all intrinsic insts here to avoid trying to enumerate all
5547 // possible store intrinsics.
5548 bool ExpectedInstTy =
5550 CheckDI(ExpectedInstTy, "!DIAssignID attached to unexpected instruction kind",
5551 I, MD);
5552 // Iterate over the MetadataAsValue uses of the DIAssignID - these should
5553 // only be found as DbgAssignIntrinsic operands.
5554 if (auto *AsValue = MetadataAsValue::getIfExists(Context, MD)) {
5555 for (auto *User : AsValue->users()) {
5557 "!DIAssignID should only be used by llvm.dbg.assign intrinsics",
5558 MD, User);
5559 // All of the dbg.assign intrinsics should be in the same function as I.
5560 if (auto *DAI = dyn_cast<DbgAssignIntrinsic>(User))
5561 CheckDI(DAI->getFunction() == I.getFunction(),
5562 "dbg.assign not in same function as inst", DAI, &I);
5563 }
5564 }
5565 for (DbgVariableRecord *DVR :
5566 cast<DIAssignID>(MD)->getAllDbgVariableRecordUsers()) {
5567 CheckDI(DVR->isDbgAssign(),
5568 "!DIAssignID should only be used by Assign DVRs.", MD, DVR);
5569 CheckDI(DVR->getFunction() == I.getFunction(),
5570 "DVRAssign not in same function as inst", DVR, &I);
5571 }
5572}
5573
5574void Verifier::visitMMRAMetadata(Instruction &I, MDNode *MD) {
5576 "!mmra metadata attached to unexpected instruction kind", I, MD);
5577
5578 // MMRA Metadata should either be a tag, e.g. !{!"foo", !"bar"}, or a
5579 // list of tags such as !2 in the following example:
5580 // !0 = !{!"a", !"b"}
5581 // !1 = !{!"c", !"d"}
5582 // !2 = !{!0, !1}
5583 if (MMRAMetadata::isTagMD(MD))
5584 return;
5585
5586 Check(isa<MDTuple>(MD), "!mmra expected to be a metadata tuple", I, MD);
5587 for (const MDOperand &MDOp : MD->operands())
5588 Check(MMRAMetadata::isTagMD(MDOp.get()),
5589 "!mmra metadata tuple operand is not an MMRA tag", I, MDOp.get());
5590}
5591
5592void Verifier::visitCallStackMetadata(MDNode *MD) {
5593 // Call stack metadata should consist of a list of at least 1 constant int
5594 // (representing a hash of the location).
5595 Check(MD->getNumOperands() >= 1,
5596 "call stack metadata should have at least 1 operand", MD);
5597
5598 for (const auto &Op : MD->operands())
5600 "call stack metadata operand should be constant integer", Op);
5601}
5602
5603void Verifier::visitMemProfMetadata(Instruction &I, MDNode *MD) {
5604 Check(isa<CallBase>(I), "!memprof metadata should only exist on calls", &I);
5605 if (isa<CallBase>(I))
5606 Check(I.hasMetadata(LLVMContext::MD_callsite),
5607 "!memprof metadata requires !callsite metadata", &I, MD);
5608 Check(MD->getNumOperands() >= 1,
5609 "!memprof annotations should have at least 1 metadata operand "
5610 "(MemInfoBlock)",
5611 MD);
5612
5613 // Check each MIB
5614 for (auto &MIBOp : MD->operands()) {
5615 auto *MIB = dyn_cast<MDNode>(MIBOp);
5616 // The first operand of an MIB should be the call stack metadata.
5617 // There rest of the operands should be MDString tags, and there should be
5618 // at least one.
5619 Check(MIB->getNumOperands() >= 2,
5620 "Each !memprof MemInfoBlock should have at least 2 operands", MIB);
5621
5622 // Check call stack metadata (first operand).
5623 Check(MIB->getOperand(0) != nullptr,
5624 "!memprof MemInfoBlock first operand should not be null", MIB);
5625 Check(isa<MDNode>(MIB->getOperand(0)),
5626 "!memprof MemInfoBlock first operand should be an MDNode", MIB);
5627 auto *StackMD = dyn_cast<MDNode>(MIB->getOperand(0));
5628 visitCallStackMetadata(StackMD);
5629
5630 // The second MIB operand should be MDString.
5631 Check(isa<MDString>(MIB->getOperand(1)),
5632 "!memprof MemInfoBlock second operand should be an MDString", MIB);
5633
5634 // Any remaining should be MDNode that are pairs of integers
5635 for (unsigned I = 2; I < MIB->getNumOperands(); ++I) {
5636 auto *OpNode = dyn_cast<MDNode>(MIB->getOperand(I));
5637 Check(OpNode, "Not all !memprof MemInfoBlock operands 2 to N are MDNode",
5638 MIB);
5639 Check(OpNode->getNumOperands() == 2,
5640 "Not all !memprof MemInfoBlock operands 2 to N are MDNode with 2 "
5641 "operands",
5642 MIB);
5643 // Check that all of Op's operands are ConstantInt.
5644 Check(llvm::all_of(OpNode->operands(),
5645 [](const MDOperand &Op) {
5646 return mdconst::hasa<ConstantInt>(Op);
5647 }),
5648 "Not all !memprof MemInfoBlock operands 2 to N are MDNode with "
5649 "ConstantInt operands",
5650 MIB);
5651 }
5652 }
5653}
5654
5655void Verifier::visitCallsiteMetadata(Instruction &I, MDNode *MD) {
5656 Check(isa<CallBase>(I), "!callsite metadata should only exist on calls", &I);
5657 // Verify the partial callstack annotated from memprof profiles. This callsite
5658 // is a part of a profiled allocation callstack.
5659 visitCallStackMetadata(MD);
5660}
5661
5662void Verifier::visitCalleeTypeMetadata(Instruction &I, MDNode *MD) {
5663 Check(isa<CallBase>(I), "!callee_type metadata should only exist on calls",
5664 &I);
5665 for (Metadata *Op : MD->operands()) {
5667 "The callee_type metadata must be a list of callgraph metadata nodes",
5668 Op);
5669 auto *CallgraphMD = cast<MDNode>(Op);
5670 Check(CallgraphMD->getNumOperands() == 1,
5671 "Well-formed callgraph metadata must contain exactly one "
5672 "operand",
5673 Op);
5674 Check(isa<MDString>(CallgraphMD->getOperand(0)),
5675 "The operand of callgraph metadata for functions must be an MDString",
5676 Op);
5677 }
5678}
5679
5680void Verifier::visitAnnotationMetadata(MDNode *Annotation) {
5681 Check(isa<MDTuple>(Annotation), "annotation must be a tuple");
5682 Check(Annotation->getNumOperands() >= 1,
5683 "annotation must have at least one operand");
5684 for (const MDOperand &Op : Annotation->operands()) {
5685 bool TupleOfStrings =
5686 isa<MDTuple>(Op.get()) &&
5687 all_of(cast<MDTuple>(Op)->operands(), [](auto &Annotation) {
5688 return isa<MDString>(Annotation.get());
5689 });
5690 Check(isa<MDString>(Op.get()) || TupleOfStrings,
5691 "operands must be a string or a tuple of strings");
5692 }
5693}
5694
5695void Verifier::visitAliasScopeMetadata(const MDNode *MD) {
5696 unsigned NumOps = MD->getNumOperands();
5697 Check(NumOps >= 2 && NumOps <= 3, "scope must have two or three operands",
5698 MD);
5699 Check(MD->getOperand(0).get() == MD || isa<MDString>(MD->getOperand(0)),
5700 "first scope operand must be self-referential or string", MD);
5701 if (NumOps == 3)
5703 "third scope operand must be string (if used)", MD);
5704
5705 auto *Domain = dyn_cast<MDNode>(MD->getOperand(1));
5706 Check(Domain != nullptr, "second scope operand must be MDNode", MD);
5707
5708 unsigned NumDomainOps = Domain->getNumOperands();
5709 Check(NumDomainOps >= 1 && NumDomainOps <= 2,
5710 "domain must have one or two operands", Domain);
5711 Check(Domain->getOperand(0).get() == Domain ||
5712 isa<MDString>(Domain->getOperand(0)),
5713 "first domain operand must be self-referential or string", Domain);
5714 if (NumDomainOps == 2)
5715 Check(isa<MDString>(Domain->getOperand(1)),
5716 "second domain operand must be string (if used)", Domain);
5717}
5718
5719void Verifier::visitAliasScopeListMetadata(const MDNode *MD) {
5720 for (const MDOperand &Op : MD->operands()) {
5721 const auto *OpMD = dyn_cast<MDNode>(Op);
5722 Check(OpMD != nullptr, "scope list must consist of MDNodes", MD);
5723 visitAliasScopeMetadata(OpMD);
5724 }
5725}
5726
5727void Verifier::visitAccessGroupMetadata(const MDNode *MD) {
5728 auto IsValidAccessScope = [](const MDNode *MD) {
5729 return MD->getNumOperands() == 0 && MD->isDistinct();
5730 };
5731
5732 // An empty node is an access scope, and it must be 'distinct'. It is never a
5733 // list, because an empty list is not allowed: it would look the same as an
5734 // access scope.
5735 if (MD->getNumOperands() == 0) {
5736 Check(MD->isDistinct(), "Access scope must be 'distinct'", MD);
5737 return;
5738 }
5739
5740 // A non-empty node is a list of access scopes.
5741 for (const MDOperand &Op : MD->operands()) {
5742 const auto *OpMD = dyn_cast<MDNode>(Op);
5743 Check(OpMD != nullptr, "Access scope list must consist of MDNodes", MD);
5744 Check(IsValidAccessScope(OpMD),
5745 "Access scope list contains invalid access scope", MD);
5746 }
5747}
5748
5749void Verifier::visitCapturesMetadata(Instruction &I, const MDNode *Captures) {
5750 static const char *ValidArgs[] = {"address_is_null", "address",
5751 "read_provenance", "provenance"};
5752
5753 auto *SI = dyn_cast<StoreInst>(&I);
5754 Check(SI, "!captures metadata can only be applied to store instructions", &I);
5755 Check(SI->getValueOperand()->getType()->isPointerTy(),
5756 "!captures metadata can only be applied to store with value operand of "
5757 "pointer type",
5758 &I);
5759 Check(Captures->getNumOperands() != 0, "!captures metadata cannot be empty",
5760 &I);
5761
5762 for (Metadata *Op : Captures->operands()) {
5763 auto *Str = dyn_cast<MDString>(Op);
5764 Check(Str, "!captures metadata must be a list of strings", &I);
5765 Check(is_contained(ValidArgs, Str->getString()),
5766 "invalid entry in !captures metadata", &I, Str);
5767 }
5768}
5769
5770void Verifier::visitAllocTokenMetadata(Instruction &I, MDNode *MD) {
5771 Check(isa<CallBase>(I), "!alloc_token should only exist on calls", &I);
5772 Check(MD->getNumOperands() == 2, "!alloc_token must have 2 operands", MD);
5773 Check(isa<MDString>(MD->getOperand(0)), "expected string", MD);
5775 "expected integer constant", MD);
5776}
5777
5778void Verifier::visitInlineHistoryMetadata(Instruction &I, MDNode *MD) {
5779 Check(isa<CallBase>(I), "!inline_history should only exist on calls", &I);
5780 for (Metadata *Op : MD->operands()) {
5781 // Can be null when a function is erased.
5782 if (!Op)
5783 continue;
5786 ->getValue()
5787 ->stripPointerCastsAndAliases()),
5788 "!inline_history operands must be functions or null", MD);
5789 }
5790}
5791
5792void Verifier::visitMemCacheHintMetadata(Instruction &I, MDNode *MD) {
5793 Check(I.mayReadOrWriteMemory(),
5794 "!mem.cache_hint is only valid on memory operations", &I);
5795
5796 Check(MD->getNumOperands() % 2 == 0,
5797 "!mem.cache_hint must have even number of operands "
5798 "(operand_no, hint_node pairs)",
5799 MD);
5800
5801 const auto *CB = dyn_cast<CallBase>(&I);
5802 if (CB)
5803 Check(CB->getIntrinsicID() != Intrinsic::not_intrinsic,
5804 "!mem.cache_hint is not supported on non-intrinsic calls", &I);
5805
5806 unsigned NumOperands = CB ? CB->arg_size() : I.getNumOperands();
5807
5808 SmallDenseSet<unsigned, 4> SeenOperandNos;
5809 std::optional<uint64_t> LastOperandNo;
5810
5811 // Top-level metadata alternates: i32 operand_no, MDNode hint_node.
5812 for (unsigned J = 0; J + 1 < MD->getNumOperands(); J += 2) {
5813 auto *OpNoCI = mdconst::dyn_extract<ConstantInt>(MD->getOperand(J));
5814 Check(OpNoCI,
5815 "!mem.cache_hint must alternate between i32 operand numbers and "
5816 "metadata hint nodes",
5817 MD);
5818
5819 Check(OpNoCI->getValue().isNonNegative(),
5820 "!mem.cache_hint operand number must be non-negative", MD);
5821
5822 uint64_t OperandNo = OpNoCI->getZExtValue();
5823 Check(OperandNo < NumOperands,
5824 "!mem.cache_hint operand number is out of range", &I);
5825
5826 Value *Operand =
5827 CB ? CB->getArgOperand(OperandNo) : I.getOperand(OperandNo);
5828 Check(Operand->getType()->isPtrOrPtrVectorTy(),
5829 "!mem.cache_hint operand number must refer to a pointer operand", &I);
5830
5831 bool Inserted = SeenOperandNos.insert(OperandNo).second;
5832 Check(Inserted, "!mem.cache_hint contains duplicate operand number", MD);
5833
5834 Check(!Inserted || !LastOperandNo || OperandNo > *LastOperandNo,
5835 "!mem.cache_hint operand numbers must be in increasing order", MD);
5836 LastOperandNo = OperandNo;
5837
5838 const auto *Node = dyn_cast<MDNode>(MD->getOperand(J + 1));
5839 Check(Node,
5840 "!mem.cache_hint must alternate between i32 operand numbers and "
5841 "metadata hint nodes",
5842 MD);
5843
5844 Check(Node->getNumOperands() % 2 == 0,
5845 "!mem.cache_hint hint node must have even number of operands "
5846 "(key-value pairs)",
5847 Node);
5848
5849 StringSet<> SeenKeys;
5850 for (unsigned K = 0; K + 1 < Node->getNumOperands(); K += 2) {
5851 const auto *Key = dyn_cast<MDString>(Node->getOperand(K));
5852 Check(Key, "!mem.cache_hint key must be a string", Node);
5853
5854 StringRef KeyStr = Key->getString();
5855 Check(SeenKeys.insert(KeyStr).second,
5856 "!mem.cache_hint hint node contains duplicate key", Node);
5857
5858 const Metadata *Value = Node->getOperand(K + 1).get();
5861 "!mem.cache_hint value must be a string or integer", Node);
5862 }
5863 }
5864}
5865
5866/// verifyInstruction - Verify that an instruction is well formed.
5867///
5868void Verifier::visitInstruction(Instruction &I) {
5869 BasicBlock *BB = I.getParent();
5870 Check(BB, "Instruction not embedded in basic block!", &I);
5871
5872 if (!isa<PHINode>(I)) { // Check that non-phi nodes are not self referential
5873 for (User *U : I.users()) {
5874 Check(U != (User *)&I || !DT.isReachableFromEntry(BB),
5875 "Only PHI nodes may reference their own value!", &I);
5876 }
5877 }
5878
5879 // Check that void typed values don't have names
5880 Check(!I.getType()->isVoidTy() || !I.hasName(),
5881 "Instruction has a name, but provides a void value!", &I);
5882
5883 // Check that the return value of the instruction is either void or a legal
5884 // value type.
5885 Check(I.getType()->isVoidTy() || I.getType()->isFirstClassType(),
5886 "Instruction returns a non-scalar type!", &I);
5887
5888 // Check that the instruction doesn't produce metadata. Calls are already
5889 // checked against the callee type.
5890 Check(!I.getType()->isMetadataTy() || isa<CallInst>(I) || isa<InvokeInst>(I),
5891 "Invalid use of metadata!", &I);
5892
5893 // Check that all uses of the instruction, if they are instructions
5894 // themselves, actually have parent basic blocks. If the use is not an
5895 // instruction, it is an error!
5896 for (Use &U : I.uses()) {
5897 if (auto *Used = dyn_cast<Instruction>(U.getUser()))
5898 Check(Used->getParent() != nullptr,
5899 "Instruction referencing"
5900 " instruction not embedded in a basic block!",
5901 &I, Used);
5902 else {
5903 CheckFailed("Use of instruction is not an instruction!", U);
5904 return;
5905 }
5906 }
5907
5908 // Get a pointer to the call base of the instruction if it is some form of
5909 // call.
5910 const auto *CBI = dyn_cast<CallBase>(&I);
5911
5912 for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i) {
5913 Check(I.getOperand(i) != nullptr, "Instruction has null operand!", &I);
5914
5915 // Check to make sure that only first-class-values are operands to
5916 // instructions.
5917 if (!I.getOperand(i)->getType()->isFirstClassType()) {
5918 Check(false, "Instruction operands must be first-class values!", &I);
5919 }
5920
5921 if (auto *F = dyn_cast<Function>(I.getOperand(i))) {
5922 // This code checks whether the function is used as the operand of a
5923 // clang_arc_attachedcall operand bundle.
5924 auto IsAttachedCallOperand = [](Function *F, const CallBase *CBI,
5925 int Idx) {
5926 return CBI && CBI->isOperandBundleOfType(
5928 };
5929
5930 // Check to make sure that the "address of" an intrinsic function is never
5931 // taken. Ignore cases where the address of the intrinsic function is used
5932 // as the argument of operand bundle "clang.arc.attachedcall" as those
5933 // cases are handled in verifyAttachedCallBundle.
5934 Check((!F->isIntrinsic() ||
5935 (CBI && &CBI->getCalledOperandUse() == &I.getOperandUse(i)) ||
5936 IsAttachedCallOperand(F, CBI, i)),
5937 "Cannot take the address of an intrinsic!", &I);
5938 Check(!F->isIntrinsic() || isa<CallInst>(I) || isa<CallBrInst>(I) ||
5939 F->getIntrinsicID() == Intrinsic::donothing ||
5940 F->getIntrinsicID() == Intrinsic::seh_try_begin ||
5941 F->getIntrinsicID() == Intrinsic::seh_try_end ||
5942 F->getIntrinsicID() == Intrinsic::seh_scope_begin ||
5943 F->getIntrinsicID() == Intrinsic::seh_scope_end ||
5944 F->getIntrinsicID() == Intrinsic::coro_resume ||
5945 F->getIntrinsicID() == Intrinsic::coro_destroy ||
5946 F->getIntrinsicID() == Intrinsic::coro_await_suspend_void ||
5947 F->getIntrinsicID() == Intrinsic::coro_await_suspend_bool ||
5948 F->getIntrinsicID() == Intrinsic::coro_await_suspend_handle ||
5949 F->getIntrinsicID() ==
5950 Intrinsic::experimental_patchpoint_void ||
5951 F->getIntrinsicID() == Intrinsic::experimental_patchpoint ||
5952 F->getIntrinsicID() == Intrinsic::fake_use ||
5953 F->getIntrinsicID() == Intrinsic::experimental_gc_statepoint ||
5954 F->getIntrinsicID() == Intrinsic::wasm_throw ||
5955 F->getIntrinsicID() == Intrinsic::wasm_rethrow ||
5956 IsAttachedCallOperand(F, CBI, i),
5957 "Cannot invoke an intrinsic other than donothing, patchpoint, "
5958 "statepoint, coro_resume, coro_destroy, clang.arc.attachedcall or "
5959 "wasm.(re)throw",
5960 &I);
5961 Check(F->getParent() == &M, "Referencing function in another module!", &I,
5962 &M, F, F->getParent());
5963 } else if (auto *OpBB = dyn_cast<BasicBlock>(I.getOperand(i))) {
5964 Check(OpBB->getParent() == BB->getParent(),
5965 "Referring to a basic block in another function!", &I);
5966 } else if (auto *OpArg = dyn_cast<Argument>(I.getOperand(i))) {
5967 Check(OpArg->getParent() == BB->getParent(),
5968 "Referring to an argument in another function!", &I);
5969 } else if (auto *GV = dyn_cast<GlobalValue>(I.getOperand(i))) {
5970 Check(GV->getParent() == &M, "Referencing global in another module!", &I,
5971 &M, GV, GV->getParent());
5972 } else if (auto *OpInst = dyn_cast<Instruction>(I.getOperand(i))) {
5973 Check(OpInst->getFunction() == BB->getParent(),
5974 "Referring to an instruction in another function!", &I);
5975 verifyDominatesUse(I, i);
5976 } else if (isa<InlineAsm>(I.getOperand(i))) {
5977 Check(CBI && &CBI->getCalledOperandUse() == &I.getOperandUse(i),
5978 "Cannot take the address of an inline asm!", &I);
5979 } else if (auto *C = dyn_cast<Constant>(I.getOperand(i))) {
5980 visitConstantExprsRecursively(C);
5981 }
5982 }
5983
5984 if (MDNode *MD = I.getMetadata(LLVMContext::MD_fpmath)) {
5986 "fpmath requires a floating point result!", &I);
5987 Check(MD->getNumOperands() == 1, "fpmath takes one operand!", &I);
5988 if (ConstantFP *CFP0 =
5990 const APFloat &Accuracy = CFP0->getValueAPF();
5991 Check(&Accuracy.getSemantics() == &APFloat::IEEEsingle(),
5992 "fpmath accuracy must have float type", &I);
5993 Check(Accuracy.isFiniteNonZero() && !Accuracy.isNegative(),
5994 "fpmath accuracy not a positive number!", &I);
5995 } else {
5996 Check(false, "invalid fpmath accuracy!", &I);
5997 }
5998 }
5999
6000 if (MDNode *Range = I.getMetadata(LLVMContext::MD_range)) {
6002 "Ranges are only for loads, calls and invokes!", &I);
6003 visitRangeMetadata(I, Range, I.getType());
6004 }
6005
6006 if (MDNode *MD = I.getMetadata(LLVMContext::MD_nofpclass)) {
6007 Check(isa<LoadInst>(I), "nofpclass is only for loads", &I);
6008 visitNoFPClassMetadata(I, MD, I.getType());
6009 }
6010
6011 if (MDNode *Range = I.getMetadata(LLVMContext::MD_noalias_addrspace)) {
6014 "noalias.addrspace are only for memory operations!", &I);
6015 visitNoaliasAddrspaceMetadata(I, Range, I.getType());
6016 }
6017
6018 if (I.hasMetadata(LLVMContext::MD_invariant_group)) {
6020 "invariant.group metadata is only for loads and stores", &I);
6021 }
6022
6023 if (I.hasMetadata(LLVMContext::MD_invariant_load)) {
6024 auto *II = dyn_cast<IntrinsicInst>(&I);
6025 Check(isa<LoadInst>(I) || (II && II->onlyReadsMemory()),
6026 "invariant.load metadata is only for loads and readonly "
6027 "intrinsic calls",
6028 &I);
6029 }
6030
6031 if (MDNode *MD = I.getMetadata(LLVMContext::MD_nonnull)) {
6032 Check(I.getType()->isPointerTy(), "nonnull applies only to pointer types",
6033 &I);
6035 "nonnull applies only to load instructions, use attributes"
6036 " for calls or invokes",
6037 &I);
6038 Check(MD->getNumOperands() == 0, "nonnull metadata must be empty", &I);
6039 }
6040
6041 if (MDNode *MD = I.getMetadata(LLVMContext::MD_noundef)) {
6042 Check(isa<LoadInst>(I), "noundef applies only to load instructions", &I);
6043 Check(MD->getNumOperands() == 0, "noundef metadata must be empty", &I);
6044 }
6045
6046 if (MDNode *MD = I.getMetadata(LLVMContext::MD_dereferenceable))
6047 visitDereferenceableMetadata(I, MD);
6048
6049 if (MDNode *MD = I.getMetadata(LLVMContext::MD_dereferenceable_or_null))
6050 visitDereferenceableMetadata(I, MD);
6051
6052 if (MDNode *MD = I.getMetadata(LLVMContext::MD_nofreeobj))
6053 visitNoFreeObjMetadata(I, MD);
6054
6055 if (MDNode *TBAA = I.getMetadata(LLVMContext::MD_tbaa))
6056 TBAAVerifyHelper.visitTBAAMetadata(&I, TBAA);
6057
6058 if (MDNode *MD = I.getMetadata(LLVMContext::MD_noalias))
6059 visitAliasScopeListMetadata(MD);
6060 if (MDNode *MD = I.getMetadata(LLVMContext::MD_alias_scope))
6061 visitAliasScopeListMetadata(MD);
6062
6063 if (MDNode *MD = I.getMetadata(LLVMContext::MD_access_group))
6064 visitAccessGroupMetadata(MD);
6065
6066 if (MDNode *AlignMD = I.getMetadata(LLVMContext::MD_align)) {
6067 Check(I.getType()->isPointerTy(), "align applies only to pointer types",
6068 &I);
6070 "align applies only to load instructions, "
6071 "use attributes for calls or invokes",
6072 &I);
6073 Check(AlignMD->getNumOperands() == 1, "align takes one operand!", &I);
6074 ConstantInt *CI = mdconst::dyn_extract<ConstantInt>(AlignMD->getOperand(0));
6075 Check(CI && CI->getType()->isIntegerTy(64),
6076 "align metadata value must be an i64!", &I);
6077 uint64_t Align = CI->getZExtValue();
6078 Check(isPowerOf2_64(Align), "align metadata value must be a power of 2!",
6079 &I);
6080 Check(Align <= Value::MaximumAlignment,
6081 "alignment is larger that implementation defined limit", &I);
6082 }
6083
6084 if (MDNode *MD = I.getMetadata(LLVMContext::MD_prof))
6085 visitProfMetadata(I, MD);
6086
6087 if (MDNode *MD = I.getMetadata(LLVMContext::MD_memprof))
6088 visitMemProfMetadata(I, MD);
6089
6090 if (MDNode *MD = I.getMetadata(LLVMContext::MD_callsite))
6091 visitCallsiteMetadata(I, MD);
6092
6093 if (MDNode *MD = I.getMetadata(LLVMContext::MD_callee_type))
6094 visitCalleeTypeMetadata(I, MD);
6095
6096 if (MDNode *MD = I.getMetadata(LLVMContext::MD_DIAssignID))
6097 visitDIAssignIDMetadata(I, MD);
6098
6099 if (MDNode *MMRA = I.getMetadata(LLVMContext::MD_mmra))
6100 visitMMRAMetadata(I, MMRA);
6101
6102 if (MDNode *Annotation = I.getMetadata(LLVMContext::MD_annotation))
6103 visitAnnotationMetadata(Annotation);
6104
6105 if (MDNode *Captures = I.getMetadata(LLVMContext::MD_captures))
6106 visitCapturesMetadata(I, Captures);
6107
6108 if (MDNode *MD = I.getMetadata(LLVMContext::MD_alloc_token))
6109 visitAllocTokenMetadata(I, MD);
6110
6111 if (MDNode *MD = I.getMetadata(LLVMContext::MD_inline_history))
6112 visitInlineHistoryMetadata(I, MD);
6113
6114 if (MDNode *MD = I.getMetadata(LLVMContext::MD_mem_cache_hint))
6115 visitMemCacheHintMetadata(I, MD);
6116
6117 if (MDNode *MD = I.getMetadata("amdgpu.expected.active.lanes")) {
6118 Check(MD->getNumOperands() == 1,
6119 "!amdgpu.expected.active.lanes must have exactly one operand", &I,
6120 MD);
6121 ConstantInt *CI =
6123 Check(CI && CI->getType()->isIntegerTy(32),
6124 "!amdgpu.expected.active.lanes operand must be an i32 constant", &I,
6125 MD);
6126 }
6127
6128 if (MDNode *N = I.getDebugLoc().getAsMDNode()) {
6129 CheckDI(isa<DILocation>(N), "invalid !dbg metadata attachment", &I, N);
6130 visitMDNode(*N, AreDebugLocsAllowed::Yes);
6131
6132 if (auto *DL = dyn_cast<DILocation>(N)) {
6133 if (DL->getAtomGroup()) {
6134 DISubprogram *SP = getSubprogram(DL->getRawScope());
6135 CheckDI(SP && SP->getKeyInstructionsEnabled(),
6136 "DbgLoc uses atomGroup but DISubprogram doesn't have Key "
6137 "Instructions enabled",
6138 DL, SP);
6139 }
6140 }
6141 }
6142
6144 I.getAllMetadata(MDs);
6145 for (auto Attachment : MDs) {
6146 unsigned Kind = Attachment.first;
6147 auto AllowLocs =
6148 (Kind == LLVMContext::MD_dbg || Kind == LLVMContext::MD_loop)
6149 ? AreDebugLocsAllowed::Yes
6150 : AreDebugLocsAllowed::No;
6151 visitMDNode(*Attachment.second, AllowLocs);
6152 }
6153
6154 InstsInThisBlock.insert(&I);
6155}
6156
6157/// Allow intrinsics to be verified in different ways.
6158void Verifier::visitIntrinsicCall(Intrinsic::ID ID, CallBase &Call) {
6160
6161 // If the intrinsic takes MDNode arguments, verify that they are either global
6162 // or are local to *this* function.
6163 for (Value *V : Call.args()) {
6164 if (auto *MD = dyn_cast<MetadataAsValue>(V))
6165 visitMetadataAsValue(*MD, Call.getCaller());
6166 if (auto *Const = dyn_cast<Constant>(V))
6167 Check(!Const->getType()->isX86_AMXTy(),
6168 "const x86_amx is not allowed in argument!");
6169 }
6170
6171 switch (ID) {
6172 default:
6173 break;
6174 case Intrinsic::assume: {
6175 if (Call.hasOperandBundles()) {
6177 Check(Cond && Cond->isOne(),
6178 "assume with operand bundles must have i1 true condition", Call);
6179 }
6180 for (auto OBU : Call.operand_bundles()) {
6181 // Separate storage assumptions are special insofar as they're the only
6182 // operand bundles allowed on assumes that aren't parameter attributes.
6183
6184 auto GetTypeAt = [&](unsigned Index) {
6185 return OBU.Inputs[Index]->getType();
6186 };
6187
6188 switch (getBundleAttrFromOBU(OBU)) {
6189 case BundleAttr::None:
6190 CheckFailed("tags must be valid attribute names", Call);
6191 break;
6192 case BundleAttr::Align:
6193 Check(OBU.Inputs.size() >= 2 && OBU.Inputs.size() <= 3,
6194 "alignment assumptions should have 2 or 3 arguments", Call);
6195 Check(GetTypeAt(0)->isPointerTy(), "first argument should be a pointer",
6196 Call);
6197 Check(GetTypeAt(1)->isIntegerTy() &&
6198 GetTypeAt(1)->getIntegerBitWidth() <= 64,
6199 "second argument should be an integer with a maximum width of 64 "
6200 "bits",
6201 Call);
6202 Check(OBU.Inputs.size() < 3 ||
6203 (GetTypeAt(2)->isIntegerTy() &&
6204 GetTypeAt(2)->getIntegerBitWidth() <= 64),
6205 "third argument should be an integer with a maximum width of 64 "
6206 "bits if present",
6207 Call);
6208 break;
6209 case BundleAttr::Cold:
6210 Check(OBU.Inputs.size() == 0,
6211 "cold assumptions should have no arguments", Call);
6212 break;
6213 case BundleAttr::Dereferenceable:
6214 case BundleAttr::DereferenceableOrNull:
6215 Check(OBU.Inputs.size() == 2,
6216 "dereferenceable assumptions should have 2 arguments", Call);
6217 Check(GetTypeAt(0)->isPointerTy(), "first argument should be a pointer",
6218 Call);
6219 Check(GetTypeAt(1)->isIntegerTy() &&
6220 GetTypeAt(1)->getIntegerBitWidth() <= 64,
6221 "second argument should be an integer with a maximum width of 64 "
6222 "bits",
6223 Call);
6224 break;
6225 case BundleAttr::Ignore:
6226 break;
6227 case BundleAttr::NonNull:
6228 Check(OBU.Inputs.size() == 1,
6229 "nonnull assumptions should have 1 argument", Call);
6230 Check(GetTypeAt(0)->isPointerTy(), "first argument should be a pointer",
6231 Call);
6232 break;
6233 case BundleAttr::NoUndef:
6234 Check(OBU.Inputs.size() == 1,
6235 "noundef assumptions should have 1 argument", Call);
6236 break;
6237 case BundleAttr::SeparateStorage:
6238 Check(OBU.Inputs.size() == 2,
6239 "separate_storage assumptions should have 2 arguments", Call);
6240 Check(GetTypeAt(0)->isPointerTy() && GetTypeAt(1)->isPointerTy(),
6241 "arguments to separate_storage assumptions should be pointers",
6242 Call);
6243 break;
6244 }
6245 }
6246 break;
6247 }
6248 case Intrinsic::ucmp:
6249 case Intrinsic::scmp: {
6250 Type *SrcTy = Call.getOperand(0)->getType();
6251 Type *DestTy = Call.getType();
6252
6253 Check(DestTy->getScalarSizeInBits() >= 2,
6254 "result type must be at least 2 bits wide", Call);
6255
6256 bool IsDestTypeVector = DestTy->isVectorTy();
6257 Check(SrcTy->isVectorTy() == IsDestTypeVector,
6258 "ucmp/scmp argument and result types must both be either vector or "
6259 "scalar types",
6260 Call);
6261 if (IsDestTypeVector) {
6262 auto SrcVecLen = cast<VectorType>(SrcTy)->getElementCount();
6263 auto DestVecLen = cast<VectorType>(DestTy)->getElementCount();
6264 Check(SrcVecLen == DestVecLen,
6265 "return type and arguments must have the same number of "
6266 "elements",
6267 Call);
6268 }
6269 break;
6270 }
6271 case Intrinsic::coro_begin:
6272 case Intrinsic::coro_begin_custom_abi:
6274 "id argument of llvm.coro.begin must refer to coro.id");
6275 break;
6276 case Intrinsic::coro_id: {
6278 "align argument only accepts constants");
6279 auto *Promise = Call.getArgOperand(1);
6280 Check(isa<ConstantPointerNull>(Promise) || isa<AllocaInst>(Promise),
6281 "promise argument must refer to an alloca");
6282
6283 auto *CoroAddr = Call.getArgOperand(2)->stripPointerCastsAndAliases();
6284 bool BeforeCoroEarly = isa<ConstantPointerNull>(CoroAddr);
6285 Check(BeforeCoroEarly || isa<Function>(CoroAddr),
6286 "coro argument must refer to a function");
6287
6288 auto *InfoArg = Call.getArgOperand(3);
6289 bool BeforeCoroSplit = isa<ConstantPointerNull>(InfoArg);
6290 if (BeforeCoroSplit)
6291 break;
6292
6293 Check(!BeforeCoroEarly, "cannot run CoroSplit before CoroEarly");
6294 auto *GV = dyn_cast<GlobalVariable>(InfoArg);
6295 Check(GV && GV->isConstant() && GV->hasDefinitiveInitializer(),
6296 "info argument of llvm.coro.id must refer to an initialized "
6297 "constant");
6298 Constant *Init = GV->getInitializer();
6300 "info argument of llvm.coro.id must refer to either a struct or "
6301 "an array");
6302 break;
6303 }
6304 case Intrinsic::is_fpclass: {
6305 const ConstantInt *TestMask = cast<ConstantInt>(Call.getOperand(1));
6306 Check((TestMask->getZExtValue() & ~static_cast<unsigned>(fcAllFlags)) == 0,
6307 "unsupported bits for llvm.is.fpclass test mask");
6308 break;
6309 }
6310 case Intrinsic::fptrunc_round: {
6311 // Check the rounding mode
6312 Metadata *MD = nullptr;
6314 if (MAV)
6315 MD = MAV->getMetadata();
6316
6317 Check(MD != nullptr, "missing rounding mode argument", Call);
6318
6319 Check(isa<MDString>(MD),
6320 ("invalid value for llvm.fptrunc.round metadata operand"
6321 " (the operand should be a string)"),
6322 MD);
6323
6324 std::optional<RoundingMode> RoundMode =
6325 convertStrToRoundingMode(cast<MDString>(MD)->getString());
6326 Check(RoundMode && *RoundMode != RoundingMode::Dynamic,
6327 "unsupported rounding mode argument", Call);
6328 break;
6329 }
6330 case Intrinsic::convert_to_arbitrary_fp: {
6331 // Check that vector element counts are consistent.
6332 Type *ValueTy = Call.getArgOperand(0)->getType();
6333 Type *IntTy = Call.getType();
6334
6335 if (auto *ValueVecTy = dyn_cast<VectorType>(ValueTy)) {
6336 auto *IntVecTy = dyn_cast<VectorType>(IntTy);
6337 Check(IntVecTy,
6338 "if floating-point operand is a vector, integer operand must also "
6339 "be a vector",
6340 Call);
6341 Check(ValueVecTy->getElementCount() == IntVecTy->getElementCount(),
6342 "floating-point and integer vector operands must have the same "
6343 "element count",
6344 Call);
6345 }
6346
6347 // Check interpretation metadata (argoperand 1).
6348 auto *InterpMAV = dyn_cast<MetadataAsValue>(Call.getArgOperand(1));
6349 Check(InterpMAV, "missing interpretation metadata operand", Call);
6350 auto *InterpStr = dyn_cast<MDString>(InterpMAV->getMetadata());
6351 Check(InterpStr, "interpretation metadata operand must be a string", Call);
6352 StringRef Interp = InterpStr->getString();
6353
6354 Check(!Interp.empty(), "interpretation metadata string must not be empty",
6355 Call);
6356
6357 // Valid interpretation strings: mini-float format names.
6359 "unsupported interpretation metadata string", Call);
6360
6361 // The integer type width must equal the arbitrary FP format width.
6362 if (unsigned FormatBits =
6364 Check(IntTy->getScalarSizeInBits() == FormatBits,
6365 "integer type bit width must equal the arbitrary FP format width",
6366 Call);
6367
6368 // Check rounding mode metadata (argoperand 2).
6369 auto *RoundingMAV = dyn_cast<MetadataAsValue>(Call.getArgOperand(2));
6370 Check(RoundingMAV, "missing rounding mode metadata operand", Call);
6371 auto *RoundingStr = dyn_cast<MDString>(RoundingMAV->getMetadata());
6372 Check(RoundingStr, "rounding mode metadata operand must be a string", Call);
6373
6374 std::optional<RoundingMode> RM =
6375 convertStrToRoundingMode(RoundingStr->getString());
6376 Check(RM && *RM != RoundingMode::Dynamic,
6377 "unsupported rounding mode argument", Call);
6378 break;
6379 }
6380 case Intrinsic::convert_from_arbitrary_fp: {
6381 // Check that vector element counts are consistent.
6382 Type *IntTy = Call.getArgOperand(0)->getType();
6383 Type *ValueTy = Call.getType();
6384
6385 if (auto *ValueVecTy = dyn_cast<VectorType>(ValueTy)) {
6386 auto *IntVecTy = dyn_cast<VectorType>(IntTy);
6387 Check(IntVecTy,
6388 "if floating-point operand is a vector, integer operand must also "
6389 "be a vector",
6390 Call);
6391 Check(ValueVecTy->getElementCount() == IntVecTy->getElementCount(),
6392 "floating-point and integer vector operands must have the same "
6393 "element count",
6394 Call);
6395 }
6396
6397 // Check interpretation metadata (argoperand 1).
6398 auto *InterpMAV = dyn_cast<MetadataAsValue>(Call.getArgOperand(1));
6399 Check(InterpMAV, "missing interpretation metadata operand", Call);
6400 auto *InterpStr = dyn_cast<MDString>(InterpMAV->getMetadata());
6401 Check(InterpStr, "interpretation metadata operand must be a string", Call);
6402 StringRef Interp = InterpStr->getString();
6403
6404 Check(!Interp.empty(), "interpretation metadata string must not be empty",
6405 Call);
6406
6407 // Valid interpretation strings: mini-float format names.
6409 "unsupported interpretation metadata string", Call);
6410
6411 // The integer type width must equal the arbitrary FP format width.
6412 if (unsigned FormatBits =
6414 Check(IntTy->getScalarSizeInBits() == FormatBits,
6415 "integer type bit width must equal the arbitrary FP format width",
6416 Call);
6417 break;
6418 }
6419#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
6420#include "llvm/IR/VPIntrinsics.def"
6421#undef BEGIN_REGISTER_VP_INTRINSIC
6422 visitVPIntrinsic(cast<VPIntrinsic>(Call));
6423 break;
6424#define INSTRUCTION(NAME, NARGS, ROUND_MODE, INTRINSIC) \
6425 case Intrinsic::INTRINSIC:
6426#include "llvm/IR/ConstrainedOps.def"
6427#undef INSTRUCTION
6428 visitConstrainedFPIntrinsic(cast<ConstrainedFPIntrinsic>(Call));
6429 break;
6430 case Intrinsic::dbg_declare: // llvm.dbg.declare
6431 case Intrinsic::dbg_value: // llvm.dbg.value
6432 case Intrinsic::dbg_assign: // llvm.dbg.assign
6433 case Intrinsic::dbg_label: // llvm.dbg.label
6434 // We no longer interpret debug intrinsics (the old variable-location
6435 // design). They're meaningless as far as LLVM is concerned we could make
6436 // it an error for them to appear, but it's possible we'll have users
6437 // converting back to intrinsics for the forseeable future (such as DXIL),
6438 // so tolerate their existance.
6439 break;
6440 case Intrinsic::memcpy:
6441 case Intrinsic::memcpy_inline:
6442 case Intrinsic::memmove:
6443 case Intrinsic::memset:
6444 case Intrinsic::memset_inline:
6445 break;
6446 case Intrinsic::experimental_memset_pattern: {
6447 const auto Memset = cast<MemSetPatternInst>(&Call);
6448 Check(Memset->getValue()->getType()->isSized(),
6449 "unsized types cannot be used as memset patterns", Call);
6450 break;
6451 }
6452 case Intrinsic::memcpy_element_unordered_atomic:
6453 case Intrinsic::memmove_element_unordered_atomic:
6454 case Intrinsic::memset_element_unordered_atomic: {
6455 const auto *AMI = cast<AnyMemIntrinsic>(&Call);
6456
6457 ConstantInt *ElementSizeCI =
6458 cast<ConstantInt>(AMI->getRawElementSizeInBytes());
6459 const APInt &ElementSizeVal = ElementSizeCI->getValue();
6460 Check(ElementSizeVal.isPowerOf2(),
6461 "element size of the element-wise atomic memory intrinsic "
6462 "must be a power of 2",
6463 Call);
6464
6465 auto IsValidAlignment = [&](MaybeAlign Alignment) {
6466 return Alignment && ElementSizeVal.ule(Alignment->value());
6467 };
6468 Check(IsValidAlignment(AMI->getDestAlign()),
6469 "incorrect alignment of the destination argument", Call);
6470 if (const auto *AMT = dyn_cast<AnyMemTransferInst>(AMI)) {
6471 Check(IsValidAlignment(AMT->getSourceAlign()),
6472 "incorrect alignment of the source argument", Call);
6473 }
6474 break;
6475 }
6476 case Intrinsic::call_preallocated_setup: {
6477 auto *NumArgs = cast<ConstantInt>(Call.getArgOperand(0));
6478 bool FoundCall = false;
6479 for (User *U : Call.users()) {
6480 auto *UseCall = dyn_cast<CallBase>(U);
6481 Check(UseCall != nullptr,
6482 "Uses of llvm.call.preallocated.setup must be calls");
6483 Intrinsic::ID IID = UseCall->getIntrinsicID();
6484 if (IID == Intrinsic::call_preallocated_arg) {
6485 auto *AllocArgIndex = dyn_cast<ConstantInt>(UseCall->getArgOperand(1));
6486 Check(AllocArgIndex != nullptr,
6487 "llvm.call.preallocated.alloc arg index must be a constant");
6488 auto AllocArgIndexInt = AllocArgIndex->getValue();
6489 Check(AllocArgIndexInt.sge(0) &&
6490 AllocArgIndexInt.slt(NumArgs->getValue()),
6491 "llvm.call.preallocated.alloc arg index must be between 0 and "
6492 "corresponding "
6493 "llvm.call.preallocated.setup's argument count");
6494 } else if (IID == Intrinsic::call_preallocated_teardown) {
6495 // nothing to do
6496 } else {
6497 Check(!FoundCall, "Can have at most one call corresponding to a "
6498 "llvm.call.preallocated.setup");
6499 FoundCall = true;
6500 size_t NumPreallocatedArgs = 0;
6501 for (unsigned i = 0; i < UseCall->arg_size(); i++) {
6502 if (UseCall->paramHasAttr(i, Attribute::Preallocated)) {
6503 ++NumPreallocatedArgs;
6504 }
6505 }
6506 Check(NumPreallocatedArgs != 0,
6507 "cannot use preallocated intrinsics on a call without "
6508 "preallocated arguments");
6509 Check(NumArgs->equalsInt(NumPreallocatedArgs),
6510 "llvm.call.preallocated.setup arg size must be equal to number "
6511 "of preallocated arguments "
6512 "at call site",
6513 Call, *UseCall);
6514 // getOperandBundle() cannot be called if more than one of the operand
6515 // bundle exists. There is already a check elsewhere for this, so skip
6516 // here if we see more than one.
6517 if (UseCall->countOperandBundlesOfType(LLVMContext::OB_preallocated) >
6518 1) {
6519 return;
6520 }
6521 auto PreallocatedBundle =
6522 UseCall->getOperandBundle(LLVMContext::OB_preallocated);
6523 Check(PreallocatedBundle,
6524 "Use of llvm.call.preallocated.setup outside intrinsics "
6525 "must be in \"preallocated\" operand bundle");
6526 Check(PreallocatedBundle->Inputs.front().get() == &Call,
6527 "preallocated bundle must have token from corresponding "
6528 "llvm.call.preallocated.setup");
6529 }
6530 }
6531 break;
6532 }
6533 case Intrinsic::call_preallocated_arg: {
6534 auto *Token = dyn_cast<CallBase>(Call.getArgOperand(0));
6535 Check(Token &&
6536 Token->getIntrinsicID() == Intrinsic::call_preallocated_setup,
6537 "llvm.call.preallocated.arg token argument must be a "
6538 "llvm.call.preallocated.setup");
6539 Check(Call.hasFnAttr(Attribute::Preallocated),
6540 "llvm.call.preallocated.arg must be called with a \"preallocated\" "
6541 "call site attribute");
6542 break;
6543 }
6544 case Intrinsic::call_preallocated_teardown: {
6545 auto *Token = dyn_cast<CallBase>(Call.getArgOperand(0));
6546 Check(Token &&
6547 Token->getIntrinsicID() == Intrinsic::call_preallocated_setup,
6548 "llvm.call.preallocated.teardown token argument must be a "
6549 "llvm.call.preallocated.setup");
6550 break;
6551 }
6552 case Intrinsic::gcroot:
6553 case Intrinsic::gcwrite:
6554 case Intrinsic::gcread:
6555 if (ID == Intrinsic::gcroot) {
6556 auto *AI =
6558 Check(AI, "llvm.gcroot parameter #1 must be an alloca.", Call);
6560 "llvm.gcroot parameter #2 must be a constant.", Call);
6561 if (!AI->getAllocatedType()->isPointerTy()) {
6563 "llvm.gcroot parameter #1 must either be a pointer alloca, "
6564 "or argument #2 must be a non-null constant.",
6565 Call);
6566 }
6567 }
6568
6569 Check(Call.getParent()->getParent()->hasGC(),
6570 "Enclosing function does not use GC.", Call);
6571 break;
6572 case Intrinsic::init_trampoline:
6574 "llvm.init_trampoline parameter #2 must resolve to a function.",
6575 Call);
6576 break;
6577 case Intrinsic::reloc_none: {
6579 cast<MetadataAsValue>(Call.getArgOperand(0))->getMetadata()),
6580 "llvm.reloc.none argument must be a metadata string", &Call);
6581 break;
6582 }
6583 case Intrinsic::stackprotector:
6585 "llvm.stackprotector parameter #2 must resolve to an alloca.", Call);
6586 break;
6587 case Intrinsic::localescape: {
6588 BasicBlock *BB = Call.getParent();
6589 Check(BB->isEntryBlock(), "llvm.localescape used outside of entry block",
6590 Call);
6591 Check(!SawFrameEscape, "multiple calls to llvm.localescape in one function",
6592 Call);
6593 for (Value *Arg : Call.args()) {
6594 if (isa<ConstantPointerNull>(Arg))
6595 continue; // Null values are allowed as placeholders.
6596 auto *AI = dyn_cast<AllocaInst>(Arg->stripPointerCasts());
6597 Check(AI && AI->isStaticAlloca(),
6598 "llvm.localescape only accepts static allocas", Call);
6599 }
6600 FrameEscapeInfo[BB->getParent()].first = Call.arg_size();
6601 SawFrameEscape = true;
6602 break;
6603 }
6604 case Intrinsic::localrecover: {
6606 auto *Fn = dyn_cast<Function>(FnArg);
6607 Check(Fn && !Fn->isDeclaration(),
6608 "llvm.localrecover first "
6609 "argument must be function defined in this module",
6610 Call);
6611 auto *IdxArg = cast<ConstantInt>(Call.getArgOperand(2));
6612 auto &Entry = FrameEscapeInfo[Fn];
6613 Entry.second = unsigned(
6614 std::max(uint64_t(Entry.second), IdxArg->getLimitedValue(~0U) + 1));
6615 break;
6616 }
6617
6618 case Intrinsic::experimental_gc_statepoint:
6619 if (auto *CI = dyn_cast<CallInst>(&Call))
6620 Check(!CI->isInlineAsm(),
6621 "gc.statepoint support for inline assembly unimplemented", CI);
6622 Check(Call.getParent()->getParent()->hasGC(),
6623 "Enclosing function does not use GC.", Call);
6624
6625 verifyStatepoint(Call);
6626 break;
6627 case Intrinsic::experimental_gc_result: {
6628 Check(Call.getParent()->getParent()->hasGC(),
6629 "Enclosing function does not use GC.", Call);
6630
6631 auto *Statepoint = Call.getArgOperand(0);
6632 if (isa<UndefValue>(Statepoint))
6633 break;
6634
6635 // Are we tied to a statepoint properly?
6636 const auto *StatepointCall = dyn_cast<CallBase>(Statepoint);
6637 Check(StatepointCall && StatepointCall->getIntrinsicID() ==
6638 Intrinsic::experimental_gc_statepoint,
6639 "gc.result operand #1 must be from a statepoint", Call,
6640 Call.getArgOperand(0));
6641
6642 // Check that result type matches wrapped callee.
6643 auto *TargetFuncType =
6644 cast<FunctionType>(StatepointCall->getParamElementType(2));
6645 Check(Call.getType() == TargetFuncType->getReturnType(),
6646 "gc.result result type does not match wrapped callee", Call);
6647 break;
6648 }
6649 case Intrinsic::experimental_gc_relocate: {
6650 Check(Call.arg_size() == 3, "wrong number of arguments", Call);
6651
6653 "gc.relocate must return a pointer or a vector of pointers", Call);
6654
6655 // Check that this relocate is correctly tied to the statepoint
6656
6657 // This is case for relocate on the unwinding path of an invoke statepoint
6658 if (auto *LandingPad = dyn_cast<LandingPadInst>(Call.getArgOperand(0))) {
6659
6660 const BasicBlock *InvokeBB =
6661 LandingPad->getParent()->getUniquePredecessor();
6662
6663 // Landingpad relocates should have only one predecessor with invoke
6664 // statepoint terminator
6665 Check(InvokeBB, "safepoints should have unique landingpads",
6666 LandingPad->getParent());
6667 Check(InvokeBB->getTerminator(), "safepoint block should be well formed",
6668 InvokeBB);
6670 "gc relocate should be linked to a statepoint", InvokeBB);
6671 } else {
6672 // In all other cases relocate should be tied to the statepoint directly.
6673 // This covers relocates on a normal return path of invoke statepoint and
6674 // relocates of a call statepoint.
6675 auto *Token = Call.getArgOperand(0);
6677 "gc relocate is incorrectly tied to the statepoint", Call, Token);
6678 }
6679
6680 // Verify rest of the relocate arguments.
6681 const Value &StatepointCall = *cast<GCRelocateInst>(Call).getStatepoint();
6682
6683 // Both the base and derived must be piped through the safepoint.
6686 "gc.relocate operand #2 must be integer offset", Call);
6687
6688 Value *Derived = Call.getArgOperand(2);
6689 Check(isa<ConstantInt>(Derived),
6690 "gc.relocate operand #3 must be integer offset", Call);
6691
6692 const uint64_t BaseIndex = cast<ConstantInt>(Base)->getZExtValue();
6693 const uint64_t DerivedIndex = cast<ConstantInt>(Derived)->getZExtValue();
6694
6695 // Check the bounds
6696 if (isa<UndefValue>(StatepointCall))
6697 break;
6698 if (auto Opt = cast<GCStatepointInst>(StatepointCall)
6699 .getOperandBundle(LLVMContext::OB_gc_live)) {
6700 Check(BaseIndex < Opt->Inputs.size(),
6701 "gc.relocate: statepoint base index out of bounds", Call);
6702 Check(DerivedIndex < Opt->Inputs.size(),
6703 "gc.relocate: statepoint derived index out of bounds", Call);
6704 }
6705
6706 // Relocated value must be either a pointer type or vector-of-pointer type,
6707 // but gc_relocate does not need to return the same pointer type as the
6708 // relocated pointer. It can be casted to the correct type later if it's
6709 // desired. However, they must have the same address space and 'vectorness'
6710 GCRelocateInst &Relocate = cast<GCRelocateInst>(Call);
6711 auto *ResultType = Call.getType();
6712 auto *DerivedType = Relocate.getDerivedPtr()->getType();
6713 auto *BaseType = Relocate.getBasePtr()->getType();
6714
6715 Check(BaseType->isPtrOrPtrVectorTy(),
6716 "gc.relocate: relocated value must be a pointer", Call);
6717 Check(DerivedType->isPtrOrPtrVectorTy(),
6718 "gc.relocate: relocated value must be a pointer", Call);
6719
6720 Check(ResultType->isVectorTy() == DerivedType->isVectorTy(),
6721 "gc.relocate: vector relocates to vector and pointer to pointer",
6722 Call);
6723 Check(
6724 ResultType->getPointerAddressSpace() ==
6725 DerivedType->getPointerAddressSpace(),
6726 "gc.relocate: relocating a pointer shouldn't change its address space",
6727 Call);
6728
6729 auto GC = llvm::getGCStrategy(Relocate.getFunction()->getGC());
6730 Check(GC, "gc.relocate: calling function must have GCStrategy",
6731 Call.getFunction());
6732 if (GC) {
6733 auto isGCPtr = [&GC](Type *PTy) {
6734 return GC->isGCManagedPointer(PTy->getScalarType()).value_or(true);
6735 };
6736 Check(isGCPtr(ResultType), "gc.relocate: must return gc pointer", Call);
6737 Check(isGCPtr(BaseType),
6738 "gc.relocate: relocated value must be a gc pointer", Call);
6739 Check(isGCPtr(DerivedType),
6740 "gc.relocate: relocated value must be a gc pointer", Call);
6741 }
6742 break;
6743 }
6744 case Intrinsic::experimental_patchpoint: {
6745 if (Call.getCallingConv() == CallingConv::AnyReg) {
6747 "patchpoint: invalid return type used with anyregcc", Call);
6748 }
6749 break;
6750 }
6751 case Intrinsic::eh_exceptioncode:
6752 case Intrinsic::eh_exceptionpointer: {
6754 "eh.exceptionpointer argument must be a catchpad", Call);
6755 break;
6756 }
6757 case Intrinsic::get_active_lane_mask: {
6758 Type *ElemTy = Call.getType()->getScalarType();
6759 Check(ElemTy->isIntegerTy(1),
6760 "get_active_lane_mask: element type is not i1", Call);
6761 break;
6762 }
6763 case Intrinsic::experimental_get_vector_length: {
6764 auto *VF = cast<ConstantInt>(Call.getArgOperand(1));
6765 Check(!VF->isNegative() && !VF->isZero(),
6766 "get_vector_length: VF must be positive", Call);
6767 break;
6768 }
6769 case Intrinsic::experimental_guard: {
6770 Check(isa<CallInst>(Call), "experimental_guard cannot be invoked", Call);
6772 "experimental_guard must have exactly one "
6773 "\"deopt\" operand bundle");
6774 break;
6775 }
6776
6777 case Intrinsic::experimental_deoptimize: {
6778 Check(isa<CallInst>(Call), "experimental_deoptimize cannot be invoked",
6779 Call);
6781 "experimental_deoptimize must have exactly one "
6782 "\"deopt\" operand bundle");
6784 "experimental_deoptimize return type must match caller return type");
6785
6786 if (isa<CallInst>(Call)) {
6788 Check(RI,
6789 "calls to experimental_deoptimize must be followed by a return");
6790
6791 if (!Call.getType()->isVoidTy() && RI)
6792 Check(RI->getReturnValue() == &Call,
6793 "calls to experimental_deoptimize must be followed by a return "
6794 "of the value computed by experimental_deoptimize");
6795 }
6796
6797 break;
6798 }
6799 case Intrinsic::vastart: {
6801 "va_start called in a non-varargs function");
6802 break;
6803 }
6804 case Intrinsic::get_dynamic_area_offset: {
6805 auto *IntTy = dyn_cast<IntegerType>(Call.getType());
6806 Check(IntTy && DL.getPointerSizeInBits(DL.getAllocaAddrSpace()) ==
6807 IntTy->getBitWidth(),
6808 "get_dynamic_area_offset result type must be scalar integer matching "
6809 "alloca address space width",
6810 Call);
6811 break;
6812 }
6813 case Intrinsic::smul_fix:
6814 case Intrinsic::smul_fix_sat:
6815 case Intrinsic::umul_fix:
6816 case Intrinsic::umul_fix_sat:
6817 case Intrinsic::sdiv_fix:
6818 case Intrinsic::sdiv_fix_sat:
6819 case Intrinsic::udiv_fix:
6820 case Intrinsic::udiv_fix_sat: {
6821 Value *Op1 = Call.getArgOperand(0);
6822 auto *Op3 = cast<ConstantInt>(Call.getArgOperand(2));
6823
6824 if (ID == Intrinsic::smul_fix || ID == Intrinsic::smul_fix_sat ||
6825 ID == Intrinsic::sdiv_fix || ID == Intrinsic::sdiv_fix_sat) {
6826 Check(Op3->getZExtValue() < Op1->getType()->getScalarSizeInBits(),
6827 "the scale of s[mul|div]_fix[_sat] must be less than the width of "
6828 "the operands");
6829 } else {
6830 Check(Op3->getZExtValue() <= Op1->getType()->getScalarSizeInBits(),
6831 "the scale of u[mul|div]_fix[_sat] must be less than or equal "
6832 "to the width of the operands");
6833 }
6834 break;
6835 }
6836 case Intrinsic::lrint:
6837 case Intrinsic::llrint:
6838 case Intrinsic::lround:
6839 case Intrinsic::llround: {
6840 Type *ValTy = Call.getArgOperand(0)->getType();
6841 Type *ResultTy = Call.getType();
6842 Check(ValTy->isVectorTy() == ResultTy->isVectorTy(),
6843 IF->getName() + ": argument and result disagree on vector use",
6844 &Call);
6845 if (auto *VTy = dyn_cast<VectorType>(ValTy)) {
6846 auto *RTy = dyn_cast<VectorType>(ResultTy);
6847 Check(VTy->getElementCount() == RTy->getElementCount(),
6848 IF->getName() + ": argument must be same length as result", &Call);
6849 }
6850 break;
6851 }
6852 case Intrinsic::bswap: {
6853 Type *Ty = Call.getType();
6854 unsigned Size = Ty->getScalarSizeInBits();
6855 Check(Size % 16 == 0, "bswap must be an even number of bytes", &Call);
6856 break;
6857 }
6858 case Intrinsic::invariant_start: {
6859 auto *InvariantSize = dyn_cast<ConstantInt>(Call.getArgOperand(0));
6860 Check(InvariantSize &&
6861 (!InvariantSize->isNegative() || InvariantSize->isMinusOne()),
6862 "invariant_start parameter must be -1, 0 or a positive number",
6863 &Call);
6864 break;
6865 }
6866 case Intrinsic::matrix_multiply:
6867 case Intrinsic::matrix_transpose:
6868 case Intrinsic::matrix_column_major_load:
6869 case Intrinsic::matrix_column_major_store: {
6871 Value *Stride = nullptr;
6872 ConstantInt *NumRows;
6873 ConstantInt *NumColumns;
6874 VectorType *ResultTy;
6875 Type *Op0ElemTy = nullptr;
6876 Type *Op1ElemTy = nullptr;
6877 switch (ID) {
6878 case Intrinsic::matrix_multiply: {
6879 NumRows = cast<ConstantInt>(Call.getArgOperand(2));
6880 ConstantInt *N = cast<ConstantInt>(Call.getArgOperand(3));
6881 NumColumns = cast<ConstantInt>(Call.getArgOperand(4));
6883 ->getNumElements() ==
6884 NumRows->getZExtValue() * N->getZExtValue(),
6885 "First argument of a matrix operation does not match specified "
6886 "shape!");
6888 ->getNumElements() ==
6889 N->getZExtValue() * NumColumns->getZExtValue(),
6890 "Second argument of a matrix operation does not match specified "
6891 "shape!");
6892
6893 ResultTy = cast<VectorType>(Call.getType());
6894 Op0ElemTy =
6895 cast<VectorType>(Call.getArgOperand(0)->getType())->getElementType();
6896 Op1ElemTy =
6897 cast<VectorType>(Call.getArgOperand(1)->getType())->getElementType();
6898 break;
6899 }
6900 case Intrinsic::matrix_transpose:
6901 NumRows = cast<ConstantInt>(Call.getArgOperand(1));
6902 NumColumns = cast<ConstantInt>(Call.getArgOperand(2));
6903 ResultTy = cast<VectorType>(Call.getType());
6904 Op0ElemTy =
6905 cast<VectorType>(Call.getArgOperand(0)->getType())->getElementType();
6906 break;
6907 case Intrinsic::matrix_column_major_load: {
6908 Stride = Call.getArgOperand(1);
6909 NumRows = cast<ConstantInt>(Call.getArgOperand(3));
6910 NumColumns = cast<ConstantInt>(Call.getArgOperand(4));
6911 ResultTy = cast<VectorType>(Call.getType());
6912 break;
6913 }
6914 case Intrinsic::matrix_column_major_store: {
6915 Stride = Call.getArgOperand(2);
6916 NumRows = cast<ConstantInt>(Call.getArgOperand(4));
6917 NumColumns = cast<ConstantInt>(Call.getArgOperand(5));
6918 ResultTy = cast<VectorType>(Call.getArgOperand(0)->getType());
6919 Op0ElemTy =
6920 cast<VectorType>(Call.getArgOperand(0)->getType())->getElementType();
6921 break;
6922 }
6923 default:
6924 llvm_unreachable("unexpected intrinsic");
6925 }
6926
6927 Check(ResultTy->getElementType()->isIntegerTy() ||
6928 ResultTy->getElementType()->isFloatingPointTy(),
6929 "Result type must be an integer or floating-point type!", IF);
6930
6931 if (Op0ElemTy)
6932 Check(ResultTy->getElementType() == Op0ElemTy,
6933 "Vector element type mismatch of the result and first operand "
6934 "vector!",
6935 IF);
6936
6937 if (Op1ElemTy)
6938 Check(ResultTy->getElementType() == Op1ElemTy,
6939 "Vector element type mismatch of the result and second operand "
6940 "vector!",
6941 IF);
6942
6944 NumRows->getZExtValue() * NumColumns->getZExtValue(),
6945 "Result of a matrix operation does not fit in the returned vector!");
6946
6947 if (Stride)
6948 Check(Stride->getType()->getIntegerBitWidth() <= 64,
6949 "Stride bitwidth cannot exceed 64!", IF);
6950
6951 break;
6952 }
6953 case Intrinsic::stepvector: {
6954 auto *VecTy = dyn_cast<VectorType>(Call.getType());
6955 Check(VecTy && VecTy->getScalarType()->isIntegerTy() &&
6956 VecTy->getScalarSizeInBits() >= 8,
6957 "stepvector only supported for vectors of integers "
6958 "with a bitwidth of at least 8.",
6959 &Call);
6960 break;
6961 }
6962 case Intrinsic::experimental_vector_match: {
6963 Value *Op1 = Call.getArgOperand(0);
6964 Value *Op2 = Call.getArgOperand(1);
6966
6967 auto *Op1Ty = dyn_cast<VectorType>(Op1->getType());
6968 auto *Op2Ty = dyn_cast<VectorType>(Op2->getType());
6969 auto *MaskTy = dyn_cast<VectorType>(Mask->getType());
6970
6971 Check(Op1Ty && Op2Ty && MaskTy, "Operands must be vectors.", &Call);
6973 "Second operand must be a fixed length vector.", &Call);
6974 Check(Op1Ty->getElementType()->isIntegerTy(),
6975 "First operand must be a vector of integers.", &Call);
6976 Check(Op1Ty->getElementType() == Op2Ty->getElementType(),
6977 "First two operands must have the same element type.", &Call);
6978 Check(Op1Ty->getElementCount() == MaskTy->getElementCount(),
6979 "First operand and mask must have the same number of elements.",
6980 &Call);
6981 Check(MaskTy->getElementType()->isIntegerTy(1),
6982 "Mask must be a vector of i1's.", &Call);
6983 Check(Call.getType() == MaskTy, "Return type must match the mask type.",
6984 &Call);
6985 break;
6986 }
6987 case Intrinsic::vector_insert: {
6988 Value *Vec = Call.getArgOperand(0);
6989 Value *SubVec = Call.getArgOperand(1);
6990 Value *Idx = Call.getArgOperand(2);
6991 unsigned IdxN = cast<ConstantInt>(Idx)->getZExtValue();
6992
6993 VectorType *VecTy = cast<VectorType>(Vec->getType());
6994 VectorType *SubVecTy = cast<VectorType>(SubVec->getType());
6995
6996 ElementCount VecEC = VecTy->getElementCount();
6997 ElementCount SubVecEC = SubVecTy->getElementCount();
6998 Check(VecTy->getElementType() == SubVecTy->getElementType(),
6999 "vector_insert parameters must have the same element "
7000 "type.",
7001 &Call);
7002 Check(IdxN % SubVecEC.getKnownMinValue() == 0,
7003 "vector_insert index must be a constant multiple of "
7004 "the subvector's known minimum vector length.");
7005
7006 // The only allowed 'mixed' case is inserting a fixed vector into a
7007 // scalable vector.
7008 if (SubVecEC.isScalable()) {
7009 Check(VecEC.isScalable(), "cannot vector_insert a scalable vector into "
7010 "a fixed vector.");
7011 }
7012
7013 // If this insertion is not the 'mixed' case where a fixed vector is
7014 // inserted into a scalable vector, ensure that the insertion of the
7015 // subvector does not overrun the parent vector.
7016 if (VecEC.isScalable() == SubVecEC.isScalable()) {
7017 Check(IdxN < VecEC.getKnownMinValue() &&
7018 IdxN + SubVecEC.getKnownMinValue() <= VecEC.getKnownMinValue(),
7019 "subvector operand of vector_insert would overrun the "
7020 "vector being inserted into.");
7021 }
7022 break;
7023 }
7024 case Intrinsic::vector_extract: {
7025 Value *Vec = Call.getArgOperand(0);
7026 Value *Idx = Call.getArgOperand(1);
7027 unsigned IdxN = cast<ConstantInt>(Idx)->getZExtValue();
7028
7029 VectorType *ResultTy = cast<VectorType>(Call.getType());
7030 VectorType *VecTy = cast<VectorType>(Vec->getType());
7031
7032 ElementCount VecEC = VecTy->getElementCount();
7033 ElementCount ResultEC = ResultTy->getElementCount();
7034
7035 Check(ResultTy->getElementType() == VecTy->getElementType(),
7036 "vector_extract result must have the same element "
7037 "type as the input vector.",
7038 &Call);
7039 Check(IdxN % ResultEC.getKnownMinValue() == 0,
7040 "vector_extract index must be a constant multiple of "
7041 "the result type's known minimum vector length.");
7042
7043 // The only allowed 'mixed' case is extracting a fixed vector from a
7044 // scalable vector.
7045 if (ResultEC.isScalable()) {
7046 Check(VecEC.isScalable(), "cannot vector_extract a scalable vector from "
7047 "a fixed vector.");
7048 }
7049
7050 // If this extraction is not the 'mixed' case where a fixed vector is
7051 // extracted from a scalable vector, ensure that the extraction does not
7052 // overrun the parent vector.
7053 if (VecEC.isScalable() == ResultEC.isScalable()) {
7054 Check(IdxN < VecEC.getKnownMinValue() &&
7055 IdxN + ResultEC.getKnownMinValue() <= VecEC.getKnownMinValue(),
7056 "vector_extract would overrun.");
7057 }
7058 break;
7059 }
7060 case Intrinsic::vector_partial_reduce_fadd:
7061 case Intrinsic::vector_partial_reduce_add: {
7064
7065 unsigned VecWidth = VecTy->getElementCount().getKnownMinValue();
7066 unsigned AccWidth = AccTy->getElementCount().getKnownMinValue();
7067
7068 Check((VecWidth % AccWidth) == 0,
7069 "Invalid vector widths for partial "
7070 "reduction. The width of the input vector "
7071 "must be a positive integer multiple of "
7072 "the width of the accumulator vector.");
7073 break;
7074 }
7075 case Intrinsic::experimental_noalias_scope_decl: {
7076 NoAliasScopeDecls.push_back(cast<IntrinsicInst>(&Call));
7077 break;
7078 }
7079 case Intrinsic::preserve_array_access_index:
7080 case Intrinsic::preserve_struct_access_index:
7081 case Intrinsic::aarch64_ldaxr:
7082 case Intrinsic::aarch64_ldxr:
7083 case Intrinsic::arm_ldaex:
7084 case Intrinsic::arm_ldrex: {
7085 Type *ElemTy = Call.getParamElementType(0);
7086 Check(ElemTy, "Intrinsic requires elementtype attribute on first argument.",
7087 &Call);
7088 break;
7089 }
7090 case Intrinsic::aarch64_stlxr:
7091 case Intrinsic::aarch64_stxr:
7092 case Intrinsic::arm_stlex:
7093 case Intrinsic::arm_strex: {
7094 Type *ElemTy = Call.getAttributes().getParamElementType(1);
7095 Check(ElemTy,
7096 "Intrinsic requires elementtype attribute on second argument.",
7097 &Call);
7098 break;
7099 }
7100 case Intrinsic::aarch64_prefetch: {
7101 Check(cast<ConstantInt>(Call.getArgOperand(1))->getZExtValue() < 2,
7102 "write argument to llvm.aarch64.prefetch must be 0 or 1", Call);
7103 Check(cast<ConstantInt>(Call.getArgOperand(2))->getZExtValue() < 4,
7104 "target argument to llvm.aarch64.prefetch must be 0-3", Call);
7105 Check(cast<ConstantInt>(Call.getArgOperand(3))->getZExtValue() < 2,
7106 "stream argument to llvm.aarch64.prefetch must be 0 or 1", Call);
7107 Check(cast<ConstantInt>(Call.getArgOperand(4))->getZExtValue() < 2,
7108 "isdata argument to llvm.aarch64.prefetch must be 0 or 1", Call);
7109 break;
7110 }
7111 case Intrinsic::aarch64_range_prefetch: {
7112 Check(cast<ConstantInt>(Call.getArgOperand(1))->getZExtValue() < 2,
7113 "write argument to llvm.aarch64.range.prefetch must be 0 or 1", Call);
7114 Check(cast<ConstantInt>(Call.getArgOperand(2))->getZExtValue() < 2,
7115 "stream argument to llvm.aarch64.range.prefetch must be 0 or 1",
7116 Call);
7117 break;
7118 }
7119 case Intrinsic::riscv_vsetvli:
7120 case Intrinsic::riscv_vsetvlimax: {
7121 // The result models VLMAX (or a VL bounded by it) and is only defined for
7122 // XLen (i32/i64). Narrower types cannot represent the architectural VLMAX
7123 // range of [1, 65536], which value analyses rely on.
7125 "llvm.riscv.vsetvli/vsetvlimax result must be i32 or i64", &Call);
7126
7127 // VSEW and VLMUL select the vtype and must encode a valid SEW/LMUL pair.
7128 bool HasAVL = ID == Intrinsic::riscv_vsetvli;
7129 unsigned Offset = HasAVL ? 1 : 0;
7130 uint64_t VSEW =
7131 cast<ConstantInt>(Call.getArgOperand(Offset))->getZExtValue();
7132 uint64_t VLMUL =
7133 cast<ConstantInt>(Call.getArgOperand(Offset + 1))->getZExtValue();
7134 Check(VSEW <= 3, "llvm.riscv.vsetvli/vsetvlimax VSEW must be 0-3", &Call);
7135 Check(VLMUL <= 7 && VLMUL != RISCVVType::LMUL_RESERVED,
7136 "llvm.riscv.vsetvli/vsetvlimax VLMUL is reserved", &Call);
7137 break;
7138 }
7139 case Intrinsic::callbr_landingpad: {
7140 const auto *CBR = dyn_cast<CallBrInst>(Call.getOperand(0));
7141 Check(CBR, "intrinstic requires callbr operand", &Call);
7142 if (!CBR)
7143 break;
7144
7145 const BasicBlock *LandingPadBB = Call.getParent();
7146 const BasicBlock *PredBB = LandingPadBB->getUniquePredecessor();
7147 if (!PredBB) {
7148 CheckFailed("Intrinsic in block must have 1 unique predecessor", &Call);
7149 break;
7150 }
7151 if (!isa<CallBrInst>(PredBB->getTerminator())) {
7152 CheckFailed("Intrinsic must have corresponding callbr in predecessor",
7153 &Call);
7154 break;
7155 }
7156 Check(llvm::is_contained(CBR->getIndirectDests(), LandingPadBB),
7157 "Intrinsic's corresponding callbr must have intrinsic's parent basic "
7158 "block in indirect destination list",
7159 &Call);
7160 const Instruction &First = *LandingPadBB->begin();
7161 Check(&First == &Call, "No other instructions may proceed intrinsic",
7162 &Call);
7163 break;
7164 }
7165 case Intrinsic::structured_gep: {
7166 // Parser should refuse those 2 cases.
7167 assert(Call.arg_size() >= 1);
7169
7170 Check(Call.paramHasAttr(0, Attribute::ElementType),
7171 "Intrinsic first parameter is missing an ElementType attribute",
7172 &Call);
7173
7174 Type *T = Call.getParamAttr(0, Attribute::ElementType).getValueAsType();
7175 for (unsigned I = 1; I < Call.arg_size(); ++I) {
7177 auto *CI = dyn_cast<ConstantInt>(Index);
7178 Check(Index->getType()->isIntegerTy(),
7179 "Index operand type must be an integer", &Call);
7180
7181 if (auto *AT = dyn_cast<ArrayType>(T)) {
7182 T = AT->getElementType();
7183 } else if (auto *ST = dyn_cast<StructType>(T)) {
7184 Check(CI, "Indexing into a struct requires a constant int", &Call);
7185 Check(CI->getZExtValue() < ST->getNumElements(),
7186 "Indexing in a struct should be inbounds", &Call);
7187 T = ST->getElementType(CI->getZExtValue());
7188 } else if (auto *VT = dyn_cast<VectorType>(T)) {
7189 T = VT->getElementType();
7190 } else {
7191 CheckFailed("Reached a non-composite type with more indices to process",
7192 &Call);
7193 }
7194 }
7195 break;
7196 }
7197 case Intrinsic::structured_alloca:
7198 Check(Call.hasRetAttr(Attribute::ElementType),
7199 "@llvm.structured.alloca calls require elementtype attribute.",
7200 &Call);
7201 break;
7202 case Intrinsic::nvvm_setmaxnreg_inc_sync_aligned_u32:
7203 case Intrinsic::nvvm_setmaxnreg_dec_sync_aligned_u32: {
7204 Value *V = Call.getArgOperand(0);
7205 unsigned RegCount = cast<ConstantInt>(V)->getZExtValue();
7206 Check(RegCount % 8 == 0,
7207 "reg_count argument to nvvm.setmaxnreg must be in multiples of 8");
7208 break;
7209 }
7210 case Intrinsic::experimental_convergence_entry:
7211 case Intrinsic::experimental_convergence_anchor:
7212 break;
7213 case Intrinsic::experimental_convergence_loop:
7214 break;
7215 case Intrinsic::ptrmask: {
7216 Type *Ty0 = Call.getArgOperand(0)->getType();
7217 Type *Ty1 = Call.getArgOperand(1)->getType();
7219 "llvm.ptrmask intrinsic first argument must be pointer or vector "
7220 "of pointers",
7221 &Call);
7222 Check(
7223 Ty0->isVectorTy() == Ty1->isVectorTy(),
7224 "llvm.ptrmask intrinsic arguments must be both scalars or both vectors",
7225 &Call);
7226 if (Ty0->isVectorTy())
7227 Check(cast<VectorType>(Ty0)->getElementCount() ==
7228 cast<VectorType>(Ty1)->getElementCount(),
7229 "llvm.ptrmask intrinsic arguments must have the same number of "
7230 "elements",
7231 &Call);
7232 Check(DL.getIndexTypeSizeInBits(Ty0) == Ty1->getScalarSizeInBits(),
7233 "llvm.ptrmask intrinsic second argument bitwidth must match "
7234 "pointer index type size of first argument",
7235 &Call);
7236 break;
7237 }
7238 case Intrinsic::thread_pointer: {
7240 DL.getDefaultGlobalsAddressSpace(),
7241 "llvm.thread.pointer intrinsic return type must be for the globals "
7242 "address space",
7243 &Call);
7244 break;
7245 }
7246 case Intrinsic::threadlocal_address: {
7247 const Value &Arg0 = *Call.getArgOperand(0);
7248 Check(isa<GlobalValue>(Arg0),
7249 "llvm.threadlocal.address first argument must be a GlobalValue");
7250 Check(cast<GlobalValue>(Arg0).isThreadLocal(),
7251 "llvm.threadlocal.address operand isThreadLocal() must be true");
7252 break;
7253 }
7254 case Intrinsic::lifetime_start:
7255 case Intrinsic::lifetime_end: {
7256 Value *Ptr = Call.getArgOperand(0);
7257 auto *II = dyn_cast<IntrinsicInst>(Ptr);
7258 Check(isa<AllocaInst>(Ptr) || isa<PoisonValue>(Ptr) ||
7259 (II && II->getIntrinsicID() == Intrinsic::structured_alloca),
7260 "llvm.lifetime.start/end can only be used on alloca or poison",
7261 &Call);
7262 break;
7263 }
7264 case Intrinsic::sponentry: {
7265 const unsigned StackAS = DL.getAllocaAddrSpace();
7266 const Type *RetTy = Call.getFunctionType()->getReturnType();
7267 Check(RetTy->getPointerAddressSpace() == StackAS,
7268 "llvm.sponentry must return a pointer to the stack", &Call);
7269 break;
7270 }
7271 case Intrinsic::write_volatile_register: {
7272 auto *MD = cast<MDNode>(
7273 cast<MetadataAsValue>(Call.getArgOperand(0))->getMetadata());
7274 Check(MD->getNumOperands() == 1 && isa<MDString>(MD->getOperand(0)),
7275 "llvm.write_volatile_register metadata must be a single MDString",
7276 &Call);
7277 break;
7278 }
7279 case Intrinsic::ptrauth_auth_with_pc_and_resign: {
7280 // Verify that the auth key is IA (0) or IB (1), not DA (2) or DB (3)
7281 auto *AuthKey = cast<ConstantInt>(Call.getArgOperand(1));
7282 uint64_t Key = AuthKey->getZExtValue();
7283 Check(Key == 0 || Key == 1,
7284 "ptrauth.auth.with.pc.and.resign key must be IA (0) or IB (1)",
7285 &Call);
7286 break;
7287 }
7288 };
7289
7290 // Verify that there aren't any unmediated control transfers between funclets.
7292 Function *F = Call.getParent()->getParent();
7293 if (F->hasPersonalityFn() &&
7294 isScopedEHPersonality(classifyEHPersonality(F->getPersonalityFn()))) {
7295 // Run EH funclet coloring on-demand and cache results for other intrinsic
7296 // calls in this function
7297 if (BlockEHFuncletColors.empty())
7298 BlockEHFuncletColors = colorEHFunclets(*F);
7299
7300 // Check for catch-/cleanup-pad in first funclet block
7301 bool InEHFunclet = false;
7302 BasicBlock *CallBB = Call.getParent();
7303 const ColorVector &CV = BlockEHFuncletColors.find(CallBB)->second;
7304 assert(CV.size() > 0 && "Uncolored block");
7305 for (BasicBlock *ColorFirstBB : CV)
7306 if (auto It = ColorFirstBB->getFirstNonPHIIt();
7307 It != ColorFirstBB->end())
7309 InEHFunclet = true;
7310
7311 // Check for funclet operand bundle
7312 bool HasToken = false;
7313 for (unsigned I = 0, E = Call.getNumOperandBundles(); I != E; ++I)
7315 HasToken = true;
7316
7317 // This would cause silent code truncation in WinEHPrepare
7318 if (InEHFunclet)
7319 Check(HasToken, "Missing funclet token on intrinsic call", &Call);
7320 }
7321 }
7322
7323 // Target-specific intrinsic call checks.
7324 verifyAMDGPUIntrinsicCall(*this, ID, Call);
7325}
7326
7327/// Carefully grab the subprogram from a local scope.
7328///
7329/// This carefully grabs the subprogram from a local scope, avoiding the
7330/// built-in assertions that would typically fire.
7331DISubprogram *Verifier::getSubprogram(Metadata *LocalScope) {
7332 if (hasDIScopeCycle(LocalScope))
7333 return nullptr;
7334
7335 if (!LocalScope)
7336 return nullptr;
7337
7338 if (auto *SP = dyn_cast<DISubprogram>(LocalScope))
7339 return SP;
7340
7341 if (auto *LB = dyn_cast<DILexicalBlockBase>(LocalScope))
7342 return getSubprogram(LB->getRawScope());
7343
7344 // Just return null; broken scope chains are checked elsewhere.
7345 assert(!isa<DILocalScope>(LocalScope) && "Unknown type of local scope");
7346 return nullptr;
7347}
7348
7349void Verifier::visit(DbgLabelRecord &DLR) {
7351 "invalid #dbg_label intrinsic variable", &DLR, DLR.getRawLabel());
7352
7353 // Ignore broken !dbg attachments; they're checked elsewhere.
7354 if (MDNode *N = DLR.getDebugLoc().getAsMDNode())
7355 if (!isa<DILocation>(N))
7356 return;
7357
7358 BasicBlock *BB = DLR.getParent();
7359 Function *F = BB ? BB->getParent() : nullptr;
7360
7361 // The scopes for variables and !dbg attachments must agree.
7362 DILabel *Label = DLR.getLabel();
7363 DILocation *Loc = DLR.getDebugLoc();
7364 CheckDI(Loc, "#dbg_label record requires a !dbg attachment", &DLR, BB, F);
7365
7366 DISubprogram *LabelSP = getSubprogram(Label->getRawScope());
7367 DISubprogram *LocSP = getSubprogram(Loc->getRawScope());
7368 if (!LabelSP || !LocSP)
7369 return;
7370
7371 CheckDI(LabelSP == LocSP,
7372 "mismatched subprogram between #dbg_label label and !dbg attachment",
7373 &DLR, BB, F, Label, Label->getScope()->getSubprogram(), Loc,
7374 Loc->getScope()->getSubprogram());
7375}
7376
7377void Verifier::visit(DbgVariableRecord &DVR) {
7378 BasicBlock *BB = DVR.getParent();
7379 Function *F = BB->getParent();
7380
7381 CheckDI(DVR.getType() == DbgVariableRecord::LocationType::Value ||
7382 DVR.getType() == DbgVariableRecord::LocationType::Declare ||
7383 DVR.getType() == DbgVariableRecord::LocationType::DeclareValue ||
7384 DVR.getType() == DbgVariableRecord::LocationType::Assign,
7385 "invalid #dbg record type", &DVR, DVR.getType(), BB, F);
7386
7387 // The location for a DbgVariableRecord must be either a ValueAsMetadata,
7388 // DIArgList, or an empty MDNode (which is a legacy representation for an
7389 // "undef" location).
7390 auto *MD = DVR.getRawLocation();
7391 CheckDI(MD && (isa<ValueAsMetadata>(MD) || isa<DIArgList>(MD) ||
7392 (isa<MDNode>(MD) && !cast<MDNode>(MD)->getNumOperands())),
7393 "invalid #dbg record address/value", &DVR, MD, BB, F);
7394 if (auto *VAM = dyn_cast<ValueAsMetadata>(MD)) {
7395 visitValueAsMetadata(*VAM, F);
7396 if (DVR.isDbgDeclare()) {
7397 // Allow integers here to support inttoptr salvage.
7398 Type *Ty = VAM->getValue()->getType();
7399 CheckDI(Ty->isPointerTy() || Ty->isIntegerTy(),
7400 "location of #dbg_declare must be a pointer or int", &DVR, MD, BB,
7401 F);
7402 }
7403 } else if (auto *AL = dyn_cast<DIArgList>(MD)) {
7404 visitDIArgList(*AL, F);
7405 }
7406
7408 "invalid #dbg record variable", &DVR, DVR.getRawVariable(), BB, F);
7409 visitMDNode(*DVR.getRawVariable(), AreDebugLocsAllowed::No);
7410
7412 "invalid #dbg record expression", &DVR, DVR.getRawExpression(), BB,
7413 F);
7414 visitMDNode(*DVR.getExpression(), AreDebugLocsAllowed::No);
7415
7416 if (DVR.isDbgAssign()) {
7418 "invalid #dbg_assign DIAssignID", &DVR, DVR.getRawAssignID(), BB,
7419 F);
7420 visitMDNode(*cast<DIAssignID>(DVR.getRawAssignID()),
7421 AreDebugLocsAllowed::No);
7422
7423 const auto *RawAddr = DVR.getRawAddress();
7424 // Similarly to the location above, the address for an assign
7425 // DbgVariableRecord must be a ValueAsMetadata or an empty MDNode, which
7426 // represents an undef address.
7427 CheckDI(
7428 isa<ValueAsMetadata>(RawAddr) ||
7429 (isa<MDNode>(RawAddr) && !cast<MDNode>(RawAddr)->getNumOperands()),
7430 "invalid #dbg_assign address", &DVR, DVR.getRawAddress(), BB, F);
7431 if (auto *VAM = dyn_cast<ValueAsMetadata>(RawAddr))
7432 visitValueAsMetadata(*VAM, F);
7433
7435 "invalid #dbg_assign address expression", &DVR,
7436 DVR.getRawAddressExpression(), BB, F);
7437 visitMDNode(*DVR.getAddressExpression(), AreDebugLocsAllowed::No);
7438
7439 // All of the linked instructions should be in the same function as DVR.
7440 for (Instruction *I : at::getAssignmentInsts(&DVR))
7441 CheckDI(DVR.getFunction() == I->getFunction(),
7442 "inst not in same function as #dbg_assign", I, &DVR, BB, F);
7443 }
7444
7445 // This check is redundant with one in visitLocalVariable().
7446 DILocalVariable *Var = DVR.getVariable();
7447 CheckDI(isType(Var->getRawType()), "invalid type ref", Var, Var->getRawType(),
7448 BB, F);
7449
7450 auto *DLNode = DVR.getDebugLoc().getAsMDNode();
7451 CheckDI(isa_and_nonnull<DILocation>(DLNode), "invalid #dbg record DILocation",
7452 &DVR, DLNode, BB, F);
7453 DILocation *Loc = DVR.getDebugLoc();
7454
7455 // The scopes for variables and !dbg attachments must agree.
7456 DISubprogram *VarSP = getSubprogram(Var->getRawScope());
7457 DISubprogram *LocSP = getSubprogram(Loc->getRawScope());
7458 if (!VarSP || !LocSP)
7459 return; // Broken scope chains are checked elsewhere.
7460
7461 CheckDI(VarSP == LocSP,
7462 "mismatched subprogram between #dbg record variable and DILocation",
7463 &DVR, BB, F, Var, Var->getScope()->getSubprogram(), Loc,
7464 Loc->getScope()->getSubprogram(), BB, F);
7465
7466 verifyFnArgs(DVR);
7467}
7468
7469void Verifier::visitVPIntrinsic(VPIntrinsic &VPI) {
7470 switch (VPI.getIntrinsicID()) {
7471 case Intrinsic::experimental_vp_splice: {
7472 VectorType *VecTy = cast<VectorType>(VPI.getType());
7473 int64_t Idx = cast<ConstantInt>(VPI.getArgOperand(2))->getSExtValue();
7474 int64_t KnownMinNumElements = VecTy->getElementCount().getKnownMinValue();
7475 if (VPI.getParent() && VPI.getParent()->getParent()) {
7476 AttributeList Attrs = VPI.getParent()->getParent()->getAttributes();
7477 if (Attrs.hasFnAttr(Attribute::VScaleRange))
7478 KnownMinNumElements *= Attrs.getFnAttrs().getVScaleRangeMin();
7479 }
7480 Check((Idx < 0 && std::abs(Idx) <= KnownMinNumElements) ||
7481 (Idx >= 0 && Idx < KnownMinNumElements),
7482 "The splice index exceeds the range [-VL, VL-1] where VL is the "
7483 "known minimum number of elements in the vector. For scalable "
7484 "vectors the minimum number of elements is determined from "
7485 "vscale_range.",
7486 &VPI);
7487 break;
7488 }
7489 }
7490}
7491
7492void Verifier::visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI) {
7493 unsigned NumOperands = FPI.getNonMetadataArgCount();
7494 bool HasRoundingMD =
7496
7497 // Add the expected number of metadata operands.
7498 NumOperands += (1 + HasRoundingMD);
7499
7500 // Compare intrinsics carry an extra predicate metadata operand.
7502 NumOperands += 1;
7503 Check((FPI.arg_size() == NumOperands),
7504 "invalid arguments for constrained FP intrinsic", &FPI);
7505
7506 switch (FPI.getIntrinsicID()) {
7507 case Intrinsic::experimental_constrained_fcmp:
7508 case Intrinsic::experimental_constrained_fcmps: {
7509 auto Pred = cast<ConstrainedFPCmpIntrinsic>(&FPI)->getPredicate();
7511 "invalid predicate for constrained FP comparison intrinsic", &FPI);
7512 break;
7513 }
7514
7515 case Intrinsic::experimental_constrained_fptosi:
7516 case Intrinsic::experimental_constrained_fptoui: {
7517 Value *Operand = FPI.getArgOperand(0);
7518 ElementCount SrcEC;
7519 Check(Operand->getType()->isFPOrFPVectorTy(),
7520 "Intrinsic first argument must be floating point", &FPI);
7521 if (auto *OperandT = dyn_cast<VectorType>(Operand->getType())) {
7522 SrcEC = cast<VectorType>(OperandT)->getElementCount();
7523 }
7524
7525 Operand = &FPI;
7526 Check(SrcEC.isNonZero() == Operand->getType()->isVectorTy(),
7527 "Intrinsic first argument and result disagree on vector use", &FPI);
7528 Check(Operand->getType()->isIntOrIntVectorTy(),
7529 "Intrinsic result must be an integer", &FPI);
7530 if (auto *OperandT = dyn_cast<VectorType>(Operand->getType())) {
7531 Check(SrcEC == cast<VectorType>(OperandT)->getElementCount(),
7532 "Intrinsic first argument and result vector lengths must be equal",
7533 &FPI);
7534 }
7535 break;
7536 }
7537
7538 case Intrinsic::experimental_constrained_sitofp:
7539 case Intrinsic::experimental_constrained_uitofp: {
7540 Value *Operand = FPI.getArgOperand(0);
7541 ElementCount SrcEC;
7542 Check(Operand->getType()->isIntOrIntVectorTy(),
7543 "Intrinsic first argument must be integer", &FPI);
7544 if (auto *OperandT = dyn_cast<VectorType>(Operand->getType())) {
7545 SrcEC = cast<VectorType>(OperandT)->getElementCount();
7546 }
7547
7548 Operand = &FPI;
7549 Check(SrcEC.isNonZero() == Operand->getType()->isVectorTy(),
7550 "Intrinsic first argument and result disagree on vector use", &FPI);
7551 Check(Operand->getType()->isFPOrFPVectorTy(),
7552 "Intrinsic result must be a floating point", &FPI);
7553 if (auto *OperandT = dyn_cast<VectorType>(Operand->getType())) {
7554 Check(SrcEC == cast<VectorType>(OperandT)->getElementCount(),
7555 "Intrinsic first argument and result vector lengths must be equal",
7556 &FPI);
7557 }
7558 break;
7559 }
7560
7561 case Intrinsic::experimental_constrained_fptrunc:
7562 case Intrinsic::experimental_constrained_fpext: {
7563 Value *Operand = FPI.getArgOperand(0);
7564 Type *OperandTy = Operand->getType();
7565 Value *Result = &FPI;
7566 Type *ResultTy = Result->getType();
7567 Check(OperandTy->isFPOrFPVectorTy(),
7568 "Intrinsic first argument must be FP or FP vector", &FPI);
7569 Check(ResultTy->isFPOrFPVectorTy(),
7570 "Intrinsic result must be FP or FP vector", &FPI);
7571 Check(OperandTy->isVectorTy() == ResultTy->isVectorTy(),
7572 "Intrinsic first argument and result disagree on vector use", &FPI);
7573 if (OperandTy->isVectorTy()) {
7574 Check(cast<VectorType>(OperandTy)->getElementCount() ==
7575 cast<VectorType>(ResultTy)->getElementCount(),
7576 "Intrinsic first argument and result vector lengths must be equal",
7577 &FPI);
7578 }
7579 if (FPI.getIntrinsicID() == Intrinsic::experimental_constrained_fptrunc) {
7580 Check(OperandTy->getScalarSizeInBits() > ResultTy->getScalarSizeInBits(),
7581 "Intrinsic first argument's type must be larger than result type",
7582 &FPI);
7583 } else {
7584 Check(OperandTy->getScalarSizeInBits() < ResultTy->getScalarSizeInBits(),
7585 "Intrinsic first argument's type must be smaller than result type",
7586 &FPI);
7587 }
7588 break;
7589 }
7590
7591 default:
7592 break;
7593 }
7594
7595 // If a non-metadata argument is passed in a metadata slot then the
7596 // error will be caught earlier when the incorrect argument doesn't
7597 // match the specification in the intrinsic call table. Thus, no
7598 // argument type check is needed here.
7599
7600 Check(FPI.getExceptionBehavior().has_value(),
7601 "invalid exception behavior argument", &FPI);
7602 if (HasRoundingMD) {
7603 Check(FPI.getRoundingMode().has_value(), "invalid rounding mode argument",
7604 &FPI);
7605 }
7606}
7607
7608void Verifier::verifyFragmentExpression(const DbgVariableRecord &DVR) {
7609 DILocalVariable *V = dyn_cast_or_null<DILocalVariable>(DVR.getRawVariable());
7610 DIExpression *E = dyn_cast_or_null<DIExpression>(DVR.getRawExpression());
7611
7612 // We don't know whether this intrinsic verified correctly.
7613 if (!V || !E || !E->isValid())
7614 return;
7615
7616 // Nothing to do if this isn't a DW_OP_LLVM_fragment expression.
7617 auto Fragment = E->getFragmentInfo();
7618 if (!Fragment)
7619 return;
7620
7621 // The frontend helps out GDB by emitting the members of local anonymous
7622 // unions as artificial local variables with shared storage. When SROA splits
7623 // the storage for artificial local variables that are smaller than the entire
7624 // union, the overhang piece will be outside of the allotted space for the
7625 // variable and this check fails.
7626 // FIXME: Remove this check as soon as clang stops doing this; it hides bugs.
7627 if (V->isArtificial())
7628 return;
7629
7630 verifyFragmentExpression(*V, *Fragment, &DVR);
7631}
7632
7633template <typename ValueOrMetadata>
7634void Verifier::verifyFragmentExpression(const DIVariable &V,
7636 ValueOrMetadata *Desc) {
7637 // If there's no size, the type is broken, but that should be checked
7638 // elsewhere.
7639 auto VarSize = V.getSizeInBits();
7640 if (!VarSize)
7641 return;
7642
7643 unsigned FragSize = Fragment.SizeInBits;
7644 unsigned FragOffset = Fragment.OffsetInBits;
7645 CheckDI(FragSize + FragOffset <= *VarSize,
7646 "fragment is larger than or outside of variable", Desc, &V);
7647 CheckDI(FragSize != *VarSize, "fragment covers entire variable", Desc, &V);
7648}
7649
7650void Verifier::verifyFnArgs(const DbgVariableRecord &DVR) {
7651 // This function does not take the scope of noninlined function arguments into
7652 // account. Don't run it if current function is nodebug, because it may
7653 // contain inlined debug intrinsics.
7654 if (!HasDebugInfo)
7655 return;
7656
7657 // For performance reasons only check non-inlined ones.
7658 if (DVR.getDebugLoc()->getInlinedAt())
7659 return;
7660
7661 DILocalVariable *Var = DVR.getVariable();
7662 CheckDI(Var, "#dbg record without variable");
7663
7664 unsigned ArgNo = Var->getArg();
7665 if (!ArgNo)
7666 return;
7667
7668 // Verify there are no duplicate function argument debug info entries.
7669 // These will cause hard-to-debug assertions in the DWARF backend.
7670 if (DebugFnArgs.size() < ArgNo)
7671 DebugFnArgs.resize(ArgNo, nullptr);
7672
7673 auto *Prev = DebugFnArgs[ArgNo - 1];
7674 DebugFnArgs[ArgNo - 1] = Var;
7675 CheckDI(!Prev || (Prev == Var), "conflicting debug info for argument", &DVR,
7676 Prev, Var);
7677}
7678
7679void Verifier::verifyNotEntryValue(const DbgVariableRecord &DVR) {
7680 DIExpression *E = dyn_cast_or_null<DIExpression>(DVR.getRawExpression());
7681
7682 // We don't know whether this intrinsic verified correctly.
7683 if (!E || !E->isValid())
7684 return;
7685
7687 Value *VarValue = DVR.getVariableLocationOp(0);
7688 if (isa<UndefValue>(VarValue) || isa<PoisonValue>(VarValue))
7689 return;
7690 // We allow EntryValues for swift async arguments, as they have an
7691 // ABI-guarantee to be turned into a specific register.
7692 if (auto *ArgLoc = dyn_cast_or_null<Argument>(VarValue);
7693 ArgLoc && ArgLoc->hasAttribute(Attribute::SwiftAsync))
7694 return;
7695 }
7696
7697 CheckDI(!E->isEntryValue(),
7698 "Entry values are only allowed in MIR unless they target a "
7699 "swiftasync Argument",
7700 &DVR);
7701}
7702
7703void Verifier::verifyCompileUnits() {
7704 // When more than one Module is imported into the same context, such as during
7705 // an LTO build before linking the modules, ODR type uniquing may cause types
7706 // to point to a different CU. This check does not make sense in this case.
7707 if (M.getContext().isODRUniquingDebugTypes())
7708 return;
7709 auto *CUs = M.getNamedMetadata("llvm.dbg.cu");
7710 SmallPtrSet<const Metadata *, 2> Listed;
7711 if (CUs)
7712 Listed.insert_range(CUs->operands());
7713 for (const auto *CU : CUVisited)
7714 CheckDI(Listed.count(CU), "DICompileUnit not listed in llvm.dbg.cu", CU);
7715 CUVisited.clear();
7716}
7717
7718void Verifier::verifyDeoptimizeCallingConvs() {
7719 if (DeoptimizeDeclarations.empty())
7720 return;
7721
7722 const Function *First = DeoptimizeDeclarations[0];
7723 for (const auto *F : ArrayRef(DeoptimizeDeclarations).slice(1)) {
7724 Check(First->getCallingConv() == F->getCallingConv(),
7725 "All llvm.experimental.deoptimize declarations must have the same "
7726 "calling convention",
7727 First, F);
7728 }
7729}
7730
7731void Verifier::verifyAttachedCallBundle(const CallBase &Call,
7732 const OperandBundleUse &BU) {
7733 FunctionType *FTy = Call.getFunctionType();
7734
7735 Check((FTy->getReturnType()->isPointerTy() ||
7736 (Call.doesNotReturn() && FTy->getReturnType()->isVoidTy())),
7737 "a call with operand bundle \"clang.arc.attachedcall\" must call a "
7738 "function returning a pointer or a non-returning function that has a "
7739 "void return type",
7740 Call);
7741
7742 Check(BU.Inputs.size() == 1 && isa<Function>(BU.Inputs.front()),
7743 "operand bundle \"clang.arc.attachedcall\" requires one function as "
7744 "an argument",
7745 Call);
7746
7747 auto *Fn = cast<Function>(BU.Inputs.front());
7748 Intrinsic::ID IID = Fn->getIntrinsicID();
7749
7750 if (IID) {
7751 Check((IID == Intrinsic::objc_retainAutoreleasedReturnValue ||
7752 IID == Intrinsic::objc_claimAutoreleasedReturnValue ||
7753 IID == Intrinsic::objc_unsafeClaimAutoreleasedReturnValue),
7754 "invalid function argument", Call);
7755 } else {
7756 StringRef FnName = Fn->getName();
7757 Check((FnName == "objc_retainAutoreleasedReturnValue" ||
7758 FnName == "objc_claimAutoreleasedReturnValue" ||
7759 FnName == "objc_unsafeClaimAutoreleasedReturnValue"),
7760 "invalid function argument", Call);
7761 }
7762}
7763
7764void Verifier::verifyNoAliasScopeDecl() {
7765 if (NoAliasScopeDecls.empty())
7766 return;
7767
7768 // only a single scope must be declared at a time.
7769 for (auto *II : NoAliasScopeDecls) {
7770 assert(II->getIntrinsicID() == Intrinsic::experimental_noalias_scope_decl &&
7771 "Not a llvm.experimental.noalias.scope.decl ?");
7772 const auto *ScopeListMV = dyn_cast<MetadataAsValue>(
7774 Check(ScopeListMV != nullptr,
7775 "llvm.experimental.noalias.scope.decl must have a MetadataAsValue "
7776 "argument",
7777 II);
7778
7779 const auto *ScopeListMD = dyn_cast<MDNode>(ScopeListMV->getMetadata());
7780 Check(ScopeListMD != nullptr, "!id.scope.list must point to an MDNode", II);
7781 Check(ScopeListMD->getNumOperands() == 1,
7782 "!id.scope.list must point to a list with a single scope", II);
7783 visitAliasScopeListMetadata(ScopeListMD);
7784 }
7785
7786 // Only check the domination rule when requested. Once all passes have been
7787 // adapted this option can go away.
7789 return;
7790
7791 // Now sort the intrinsics based on the scope MDNode so that declarations of
7792 // the same scopes are next to each other.
7793 auto GetScope = [](IntrinsicInst *II) {
7794 const auto *ScopeListMV = cast<MetadataAsValue>(
7796 return &cast<MDNode>(ScopeListMV->getMetadata())->getOperand(0);
7797 };
7798
7799 // We are sorting on MDNode pointers here. For valid input IR this is ok.
7800 // TODO: Sort on Metadata ID to avoid non-deterministic error messages.
7801 auto Compare = [GetScope](IntrinsicInst *Lhs, IntrinsicInst *Rhs) {
7802 return GetScope(Lhs) < GetScope(Rhs);
7803 };
7804
7805 llvm::sort(NoAliasScopeDecls, Compare);
7806
7807 // Go over the intrinsics and check that for the same scope, they are not
7808 // dominating each other.
7809 auto ItCurrent = NoAliasScopeDecls.begin();
7810 while (ItCurrent != NoAliasScopeDecls.end()) {
7811 auto CurScope = GetScope(*ItCurrent);
7812 auto ItNext = ItCurrent;
7813 do {
7814 ++ItNext;
7815 } while (ItNext != NoAliasScopeDecls.end() &&
7816 GetScope(*ItNext) == CurScope);
7817
7818 // [ItCurrent, ItNext) represents the declarations for the same scope.
7819 // Ensure they are not dominating each other.. but only if it is not too
7820 // expensive.
7821 if (ItNext - ItCurrent < 32)
7822 for (auto *I : llvm::make_range(ItCurrent, ItNext))
7823 for (auto *J : llvm::make_range(ItCurrent, ItNext))
7824 if (I != J)
7825 Check(!DT.dominates(I, J),
7826 "llvm.experimental.noalias.scope.decl dominates another one "
7827 "with the same scope",
7828 I);
7829 ItCurrent = ItNext;
7830 }
7831}
7832
7833//===----------------------------------------------------------------------===//
7834// Implement the public interfaces to this file...
7835//===----------------------------------------------------------------------===//
7836
7838 Function &F = const_cast<Function &>(f);
7839
7840 // Don't use a raw_null_ostream. Printing IR is expensive.
7841 Verifier V(OS, /*ShouldTreatBrokenDebugInfoAsError=*/true, *f.getParent());
7842
7843 // Note that this function's return value is inverted from what you would
7844 // expect of a function called "verify".
7845 return !V.verify(F);
7846}
7847
7849 bool *BrokenDebugInfo) {
7850 // Don't use a raw_null_ostream. Printing IR is expensive.
7851 Verifier V(OS, /*ShouldTreatBrokenDebugInfoAsError=*/!BrokenDebugInfo, M);
7852
7853 bool Broken = false;
7854 for (const Function &F : M)
7855 Broken |= !V.verify(F);
7856
7857 Broken |= !V.verify();
7858 if (BrokenDebugInfo)
7859 *BrokenDebugInfo = V.hasBrokenDebugInfo();
7860 // Note that this function's return value is inverted from what you would
7861 // expect of a function called "verify".
7862 return Broken;
7863}
7864
7865namespace {
7866
7867struct VerifierLegacyPass : public FunctionPass {
7868 static char ID;
7869
7870 std::unique_ptr<Verifier> V;
7871 bool FatalErrors = true;
7872
7873 VerifierLegacyPass() : FunctionPass(ID) {}
7874 explicit VerifierLegacyPass(bool FatalErrors)
7875 : FunctionPass(ID), FatalErrors(FatalErrors) {}
7876
7877 bool doInitialization(Module &M) override {
7878 V = std::make_unique<Verifier>(
7879 &dbgs(), /*ShouldTreatBrokenDebugInfoAsError=*/false, M);
7880 return false;
7881 }
7882
7883 bool runOnFunction(Function &F) override {
7884 if (!V->verify(F) && FatalErrors) {
7885 errs() << "in function " << F.getName() << '\n';
7886 report_fatal_error("Broken function found, compilation aborted!");
7887 }
7888 return false;
7889 }
7890
7891 bool doFinalization(Module &M) override {
7892 bool HasErrors = false;
7893 for (Function &F : M)
7894 if (F.isDeclaration())
7895 HasErrors |= !V->verify(F);
7896
7897 HasErrors |= !V->verify();
7898 if (FatalErrors && (HasErrors || V->hasBrokenDebugInfo()))
7899 report_fatal_error("Broken module found, compilation aborted!");
7900 return false;
7901 }
7902
7903 void getAnalysisUsage(AnalysisUsage &AU) const override {
7904 AU.setPreservesAll();
7905 }
7906};
7907
7908} // end anonymous namespace
7909
7910/// Helper to issue failure from the TBAA verification
7911template <typename... Tys> void TBAAVerifier::CheckFailed(Tys &&... Args) {
7912 if (Diagnostic)
7913 return Diagnostic->CheckFailed(Args...);
7914}
7915
7916#define CheckTBAA(C, ...) \
7917 do { \
7918 if (!(C)) { \
7919 CheckFailed(__VA_ARGS__); \
7920 return false; \
7921 } \
7922 } while (false)
7923
7924/// Verify that \p BaseNode can be used as the "base type" in the struct-path
7925/// TBAA scheme. This means \p BaseNode is either a scalar node, or a
7926/// struct-type node describing an aggregate data structure (like a struct).
7927TBAAVerifier::TBAABaseNodeSummary
7928TBAAVerifier::verifyTBAABaseNode(const Instruction *I, const MDNode *BaseNode,
7929 bool IsNewFormat) {
7930 if (BaseNode->getNumOperands() < 2) {
7931 CheckFailed("Base nodes must have at least two operands", I, BaseNode);
7932 return {true, ~0u};
7933 }
7934
7935 auto Itr = TBAABaseNodes.find(BaseNode);
7936 if (Itr != TBAABaseNodes.end())
7937 return Itr->second;
7938
7939 auto Result = verifyTBAABaseNodeImpl(I, BaseNode, IsNewFormat);
7940 auto InsertResult = TBAABaseNodes.insert({BaseNode, Result});
7941 (void)InsertResult;
7942 assert(InsertResult.second && "We just checked!");
7943 return Result;
7944}
7945
7946TBAAVerifier::TBAABaseNodeSummary
7947TBAAVerifier::verifyTBAABaseNodeImpl(const Instruction *I,
7948 const MDNode *BaseNode, bool IsNewFormat) {
7949 const TBAAVerifier::TBAABaseNodeSummary InvalidNode = {true, ~0u};
7950
7951 if (BaseNode->getNumOperands() == 2) {
7952 // Scalar nodes can only be accessed at offset 0.
7953 return isValidScalarTBAANode(BaseNode)
7954 ? TBAAVerifier::TBAABaseNodeSummary({false, 0})
7955 : InvalidNode;
7956 }
7957
7958 if (IsNewFormat) {
7959 if (BaseNode->getNumOperands() % 3 != 0) {
7960 CheckFailed("Access tag nodes must have the number of operands that is a "
7961 "multiple of 3!", BaseNode);
7962 return InvalidNode;
7963 }
7964 } else {
7965 if (BaseNode->getNumOperands() % 2 != 1) {
7966 CheckFailed("Struct tag nodes must have an odd number of operands!",
7967 BaseNode);
7968 return InvalidNode;
7969 }
7970 }
7971
7972 // Check the type size field.
7973 if (IsNewFormat) {
7974 auto *TypeSizeNode = mdconst::dyn_extract_or_null<ConstantInt>(
7975 BaseNode->getOperand(1));
7976 if (!TypeSizeNode) {
7977 CheckFailed("Type size nodes must be constants!", I, BaseNode);
7978 return InvalidNode;
7979 }
7980 }
7981
7982 // Check the type name field. In the new format it can be anything.
7983 if (!IsNewFormat && !isa<MDString>(BaseNode->getOperand(0))) {
7984 CheckFailed("Struct tag nodes have a string as their first operand",
7985 BaseNode);
7986 return InvalidNode;
7987 }
7988
7989 bool Failed = false;
7990
7991 std::optional<APInt> PrevOffset;
7992 unsigned BitWidth = ~0u;
7993
7994 // We've already checked that BaseNode is not a degenerate root node with one
7995 // operand in \c verifyTBAABaseNode, so this loop should run at least once.
7996 unsigned FirstFieldOpNo = IsNewFormat ? 3 : 1;
7997 unsigned NumOpsPerField = IsNewFormat ? 3 : 2;
7998 for (unsigned Idx = FirstFieldOpNo; Idx < BaseNode->getNumOperands();
7999 Idx += NumOpsPerField) {
8000 const MDOperand &FieldTy = BaseNode->getOperand(Idx);
8001 const MDOperand &FieldOffset = BaseNode->getOperand(Idx + 1);
8002 if (!isa<MDNode>(FieldTy)) {
8003 CheckFailed("Incorrect field entry in struct type node!", I, BaseNode);
8004 Failed = true;
8005 continue;
8006 }
8007
8008 auto *OffsetEntryCI =
8010 if (!OffsetEntryCI) {
8011 CheckFailed("Offset entries must be constants!", I, BaseNode);
8012 Failed = true;
8013 continue;
8014 }
8015
8016 if (BitWidth == ~0u)
8017 BitWidth = OffsetEntryCI->getBitWidth();
8018
8019 if (OffsetEntryCI->getBitWidth() != BitWidth) {
8020 CheckFailed(
8021 "Bitwidth between the offsets and struct type entries must match", I,
8022 BaseNode);
8023 Failed = true;
8024 continue;
8025 }
8026
8027 // NB! As far as I can tell, we generate a non-strictly increasing offset
8028 // sequence only from structs that have zero size bit fields. When
8029 // recursing into a contained struct in \c getFieldNodeFromTBAABaseNode we
8030 // pick the field lexically the latest in struct type metadata node. This
8031 // mirrors the actual behavior of the alias analysis implementation.
8032 bool IsAscending =
8033 !PrevOffset || PrevOffset->ule(OffsetEntryCI->getValue());
8034
8035 if (!IsAscending) {
8036 CheckFailed("Offsets must be increasing!", I, BaseNode);
8037 Failed = true;
8038 }
8039
8040 PrevOffset = OffsetEntryCI->getValue();
8041
8042 if (IsNewFormat) {
8043 auto *MemberSizeNode = mdconst::dyn_extract_or_null<ConstantInt>(
8044 BaseNode->getOperand(Idx + 2));
8045 if (!MemberSizeNode) {
8046 CheckFailed("Member size entries must be constants!", I, BaseNode);
8047 Failed = true;
8048 continue;
8049 }
8050 }
8051 }
8052
8053 return Failed ? InvalidNode
8054 : TBAAVerifier::TBAABaseNodeSummary(false, BitWidth);
8055}
8056
8057static bool IsRootTBAANode(const MDNode *MD) {
8058 return MD->getNumOperands() < 2;
8059}
8060
8061static bool IsScalarTBAANodeImpl(const MDNode *MD,
8063 if (MD->getNumOperands() != 2 && MD->getNumOperands() != 3)
8064 return false;
8065
8066 if (!isa<MDString>(MD->getOperand(0)))
8067 return false;
8068
8069 if (MD->getNumOperands() == 3) {
8071 if (!(Offset && Offset->isZero() && isa<MDString>(MD->getOperand(0))))
8072 return false;
8073 }
8074
8075 auto *Parent = dyn_cast_or_null<MDNode>(MD->getOperand(1));
8076 return Parent && Visited.insert(Parent).second &&
8077 (IsRootTBAANode(Parent) || IsScalarTBAANodeImpl(Parent, Visited));
8078}
8079
8080bool TBAAVerifier::isValidScalarTBAANode(const MDNode *MD) {
8081 auto ResultIt = TBAAScalarNodes.find(MD);
8082 if (ResultIt != TBAAScalarNodes.end())
8083 return ResultIt->second;
8084
8085 SmallPtrSet<const MDNode *, 4> Visited;
8086 bool Result = IsScalarTBAANodeImpl(MD, Visited);
8087 auto InsertResult = TBAAScalarNodes.insert({MD, Result});
8088 (void)InsertResult;
8089 assert(InsertResult.second && "Just checked!");
8090
8091 return Result;
8092}
8093
8094/// Returns the field node at the offset \p Offset in \p BaseNode. Update \p
8095/// Offset in place to be the offset within the field node returned.
8096///
8097/// We assume we've okayed \p BaseNode via \c verifyTBAABaseNode.
8098MDNode *TBAAVerifier::getFieldNodeFromTBAABaseNode(const Instruction *I,
8099 const MDNode *BaseNode,
8100 APInt &Offset,
8101 bool IsNewFormat) {
8102 assert(BaseNode->getNumOperands() >= 2 && "Invalid base node!");
8103
8104 // Scalar nodes have only one possible "field" -- their parent in the access
8105 // hierarchy. Offset must be zero at this point, but our caller is supposed
8106 // to check that.
8107 if (BaseNode->getNumOperands() == 2)
8108 return cast<MDNode>(BaseNode->getOperand(1));
8109
8110 unsigned FirstFieldOpNo = IsNewFormat ? 3 : 1;
8111 unsigned NumOpsPerField = IsNewFormat ? 3 : 2;
8112 for (unsigned Idx = FirstFieldOpNo; Idx < BaseNode->getNumOperands();
8113 Idx += NumOpsPerField) {
8114 auto *OffsetEntryCI =
8115 mdconst::extract<ConstantInt>(BaseNode->getOperand(Idx + 1));
8116 if (OffsetEntryCI->getValue().ugt(Offset)) {
8117 if (Idx == FirstFieldOpNo) {
8118 CheckFailed("Could not find TBAA parent in struct type node", I,
8119 BaseNode, &Offset);
8120 return nullptr;
8121 }
8122
8123 unsigned PrevIdx = Idx - NumOpsPerField;
8124 auto *PrevOffsetEntryCI =
8125 mdconst::extract<ConstantInt>(BaseNode->getOperand(PrevIdx + 1));
8126 Offset -= PrevOffsetEntryCI->getValue();
8127 return cast<MDNode>(BaseNode->getOperand(PrevIdx));
8128 }
8129 }
8130
8131 unsigned LastIdx = BaseNode->getNumOperands() - NumOpsPerField;
8132 auto *LastOffsetEntryCI = mdconst::extract<ConstantInt>(
8133 BaseNode->getOperand(LastIdx + 1));
8134 Offset -= LastOffsetEntryCI->getValue();
8135 return cast<MDNode>(BaseNode->getOperand(LastIdx));
8136}
8137
8139 if (!Type || Type->getNumOperands() < 3)
8140 return false;
8141
8142 // In the new format type nodes shall have a reference to the parent type as
8143 // its first operand.
8144 return isa_and_nonnull<MDNode>(Type->getOperand(0));
8145}
8146
8148 CheckTBAA(MD->getNumOperands() > 0, "TBAA metadata cannot have 0 operands", I,
8149 MD);
8150
8151 if (I)
8155 "This instruction shall not have a TBAA access tag!", I);
8156
8157 bool IsStructPathTBAA =
8158 isa<MDNode>(MD->getOperand(0)) && MD->getNumOperands() >= 3;
8159
8160 CheckTBAA(IsStructPathTBAA,
8161 "Old-style TBAA is no longer allowed, use struct-path TBAA instead",
8162 I);
8163
8164 auto *BaseNode = dyn_cast_or_null<MDNode>(MD->getOperand(0));
8165 auto *AccessType = dyn_cast_or_null<MDNode>(MD->getOperand(1));
8166
8167 bool IsNewFormat = isNewFormatTBAATypeNode(AccessType);
8168
8169 if (IsNewFormat) {
8170 CheckTBAA(MD->getNumOperands() == 4 || MD->getNumOperands() == 5,
8171 "Access tag metadata must have either 4 or 5 operands", I, MD);
8172 } else {
8173 CheckTBAA(MD->getNumOperands() < 5,
8174 "Struct tag metadata must have either 3 or 4 operands", I, MD);
8175 }
8176
8177 // Check the access size field.
8178 if (IsNewFormat) {
8179 auto *AccessSizeNode = mdconst::dyn_extract_or_null<ConstantInt>(
8180 MD->getOperand(3));
8181 CheckTBAA(AccessSizeNode, "Access size field must be a constant", I, MD);
8182 }
8183
8184 // Check the immutability flag.
8185 unsigned ImmutabilityFlagOpNo = IsNewFormat ? 4 : 3;
8186 if (MD->getNumOperands() == ImmutabilityFlagOpNo + 1) {
8187 auto *IsImmutableCI = mdconst::dyn_extract_or_null<ConstantInt>(
8188 MD->getOperand(ImmutabilityFlagOpNo));
8189 CheckTBAA(IsImmutableCI,
8190 "Immutability tag on struct tag metadata must be a constant", I,
8191 MD);
8192 CheckTBAA(
8193 IsImmutableCI->isZero() || IsImmutableCI->isOne(),
8194 "Immutability part of the struct tag metadata must be either 0 or 1", I,
8195 MD);
8196 }
8197
8198 CheckTBAA(BaseNode && AccessType,
8199 "Malformed struct tag metadata: base and access-type "
8200 "should be non-null and point to Metadata nodes",
8201 I, MD, BaseNode, AccessType);
8202
8203 if (!IsNewFormat) {
8204 CheckTBAA(isValidScalarTBAANode(AccessType),
8205 "Access type node must be a valid scalar type", I, MD,
8206 AccessType);
8207 }
8208
8210 CheckTBAA(OffsetCI, "Offset must be constant integer", I, MD);
8211
8212 APInt Offset = OffsetCI->getValue();
8213 bool SeenAccessTypeInPath = false;
8214
8215 SmallPtrSet<MDNode *, 4> StructPath;
8216
8217 for (/* empty */; BaseNode && !IsRootTBAANode(BaseNode);
8218 BaseNode =
8219 getFieldNodeFromTBAABaseNode(I, BaseNode, Offset, IsNewFormat)) {
8220 if (!StructPath.insert(BaseNode).second) {
8221 CheckFailed("Cycle detected in struct path", I, MD);
8222 return false;
8223 }
8224
8225 bool Invalid;
8226 unsigned BaseNodeBitWidth;
8227 std::tie(Invalid, BaseNodeBitWidth) =
8228 verifyTBAABaseNode(I, BaseNode, IsNewFormat);
8229
8230 // If the base node is invalid in itself, then we've already printed all the
8231 // errors we wanted to print.
8232 if (Invalid)
8233 return false;
8234
8235 SeenAccessTypeInPath |= BaseNode == AccessType;
8236
8237 if (isValidScalarTBAANode(BaseNode) || BaseNode == AccessType)
8238 CheckTBAA(Offset == 0, "Offset not zero at the point of scalar access", I,
8239 MD, &Offset);
8240
8241 CheckTBAA(BaseNodeBitWidth == Offset.getBitWidth() ||
8242 (BaseNodeBitWidth == 0 && Offset == 0) ||
8243 (IsNewFormat && BaseNodeBitWidth == ~0u),
8244 "Access bit-width not the same as description bit-width", I, MD,
8245 BaseNodeBitWidth, Offset.getBitWidth());
8246
8247 if (IsNewFormat && SeenAccessTypeInPath)
8248 break;
8249 }
8250
8251 CheckTBAA(SeenAccessTypeInPath, "Did not see access type in access path!", I,
8252 MD);
8253 return true;
8254}
8255
8256char VerifierLegacyPass::ID = 0;
8257INITIALIZE_PASS(VerifierLegacyPass, "verify", "Module Verifier", false, false)
8258
8260 return new VerifierLegacyPass(FatalErrors);
8261}
8262
8263AnalysisKey VerifierAnalysis::Key;
8270
8275
8277 auto Res = AM.getResult<VerifierAnalysis>(M);
8278 if (FatalErrors && (Res.IRBroken || Res.DebugInfoBroken))
8279 report_fatal_error("Broken module found, compilation aborted!");
8280
8281 return PreservedAnalyses::all();
8282}
8283
8285 auto res = AM.getResult<VerifierAnalysis>(F);
8286 if (res.IRBroken && FatalErrors)
8287 report_fatal_error("Broken function found, compilation aborted!");
8288
8289 return PreservedAnalyses::all();
8290}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
unsigned uint64_t
This file declares a class to represent arbitrary precision floating point values and provide a varie...
This file implements a class to represent arbitrary precision integral constant values and operations...
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
Atomic ordering constants.
@ RetAttr
@ FnAttr
This file contains the simple types necessary to represent the attributes associated with functions a...
static GCRegistry::Add< ShadowStackGC > C("shadow-stack", "Very portable GC for uncooperative code generators")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
This file contains the declarations for the subclasses of Constant, which represent the different fla...
This file declares the LLVM IR specialization of the GenericConvergenceVerifier template.
static DISubprogram * getSubprogram(bool IsDistinct, Ts &&...Args)
dxil translate DXIL Translate Metadata
This file defines the DenseMap class.
This file contains constants used for implementing Dwarf debug support.
static bool runOnFunction(Function &F, bool PostInlining)
This file contains the declarations of entities that describe floating point environment and related ...
#define Check(C,...)
Hexagon Common GEP
This file provides various utilities for inspecting and working with the control flow graph in LLVM I...
Module.h This file contains the declarations for the Module class.
This header defines various interfaces for pass management in LLVM.
This defines the Use class.
static constexpr Value * getValue(Ty &ValueOrUse)
const size_t AbstractManglingParser< Derived, Alloc >::NumOps
#define F(x, y, z)
Definition MD5.cpp:54
#define I(x, y, z)
Definition MD5.cpp:57
Machine Check Debug Module
This file implements a map that provides insertion order iteration.
This file provides utility for Memory Model Relaxation Annotations (MMRAs).
static bool isContiguous(const ConstantRange &A, const ConstantRange &B)
This file contains the declarations for metadata subclasses.
#define T
ConstantRange Range(APInt(BitWidth, Low), APInt(BitWidth, High))
uint64_t High
uint64_t IntrinsicInst * II
ppc ctr loops verify
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
Definition PassSupport.h:56
This file contains the declarations for profiling metadata utility functions.
const SmallVectorImpl< MachineOperand > & Cond
static void visit(BasicBlock &Start, std::function< bool(BasicBlock *)> op)
This file contains some templates that are useful if you are working with the STL at all.
verify safepoint Safepoint IR Verifier
BaseType
A given derived pointer can have multiple base pointers through phi/selects.
This file defines the SmallPtrSet class.
This file defines the SmallVector class.
This file contains some functions that are useful when dealing with strings.
static unsigned getBitWidth(Type *Ty, const DataLayout &DL)
Returns the bitwidth of the given scalar or pointer type.
static bool IsScalarTBAANodeImpl(const MDNode *MD, SmallPtrSetImpl< const MDNode * > &Visited)
static bool isType(const Metadata *MD)
static Instruction * getSuccPad(Instruction *Terminator)
static bool isMDTuple(const Metadata *MD)
static bool isNewFormatTBAATypeNode(llvm::MDNode *Type)
#define CheckDI(C,...)
We know that a debug info condition should be true, if not print an error message.
Definition Verifier.cpp:524
static void forEachUser(const Value *User, SmallPtrSet< const Value *, 32 > &Visited, llvm::function_ref< bool(const Value *)> Callback)
Definition Verifier.cpp:565
static const Metadata * getRawDIScopeParent(const Metadata *S)
Parent scope operand of S, or null if S has no parent (a DIFile, DICompileUnit, or non-scope).
Definition Verifier.cpp:970
static bool isDINode(const Metadata *MD)
static bool isSupportedCallBrIntrinsic(Intrinsic::ID ID)
static bool isScope(const Metadata *MD)
static cl::opt< bool > VerifyNoAliasScopeDomination("verify-noalias-scope-decl-dom", cl::Hidden, cl::init(false), cl::desc("Ensure that llvm.experimental.noalias.scope.decl for identical " "scopes are not dominating"))
#define CheckTBAA(C,...)
static bool IsRootTBAANode(const MDNode *MD)
static Value * getParentPad(Value *EHPad)
static bool hasConflictingReferenceFlags(unsigned Flags)
Detect mutually exclusive flags.
static AttrBuilder getParameterABIAttributes(LLVMContext &C, unsigned I, AttributeList Attrs)
static const char PassName[]
static LLVM_ABI bool isValidArbitraryFPFormat(StringRef Format)
Returns true if the given string is a valid arbitrary floating-point format interpretation for llvm....
Definition APFloat.cpp:6127
static LLVM_ABI unsigned getArbitraryFPFormatSizeInBits(StringRef Format)
Returns the size in bits of a valid arbitrary floating-point format string, or 0 if the string is not...
Definition APFloat.cpp:6110
bool isFiniteNonZero() const
Definition APFloat.h:1593
bool isNegative() const
Definition APFloat.h:1583
const fltSemantics & getSemantics() const
Definition APFloat.h:1591
Class for arbitrary precision integers.
Definition APInt.h:78
bool sgt(const APInt &RHS) const
Signed greater than comparison.
Definition APInt.h:1206
bool isMinValue() const
Determine if this is the smallest unsigned value.
Definition APInt.h:414
bool ule(const APInt &RHS) const
Unsigned less or equal comparison.
Definition APInt.h:1155
bool isPowerOf2() const
Check if this APInt's value is a power of two greater than zero.
Definition APInt.h:437
bool isMaxValue() const
Determine if this is the largest unsigned value.
Definition APInt.h:396
This class represents a conversion between pointers from one address space to another.
bool isSwiftError() const
Return true if this alloca is used as a swifterror argument to a call.
LLVM_ABI bool isStaticAlloca() const
Return true if this alloca is in the entry block of the function and is a constant size.
Align getAlign() const
Return the alignment of the memory that is being allocated by the instruction.
Type * getAllocatedType() const
Return the type that is being allocated by the instruction.
LLVM_ABI bool isArrayAllocation() const
Return true if there is an allocation size parameter to the allocation instruction that is not 1.
const Value * getArraySize() const
Get the number of elements allocated.
PassT::Result & getResult(IRUnitT &IR, ExtraArgTs... ExtraArgs)
Get the result of an analysis pass for a given IR unit.
void setPreservesAll()
Set by analyses that do not transform their input at all.
bool isElementwise() const
Return true if this RMW has elementwise vector semantics.
static bool isFPOperation(BinOp Op)
BinOp getOperation() const
static LLVM_ABI StringRef getOperationName(BinOp Op)
AtomicOrdering getOrdering() const
Returns the ordering constraint of this rmw instruction.
bool contains(Attribute::AttrKind A) const
Return true if the builder has the specified attribute.
LLVM_ABI bool hasAttribute(Attribute::AttrKind Kind) const
Return true if the attribute exists in this set.
Functions, function parameters, and return types can have attributes to indicate how they should be t...
Definition Attributes.h:106
LLVM_ABI const ConstantRange & getValueAsConstantRange() const
Return the attribute's value as a ConstantRange.
LLVM_ABI StringRef getValueAsString() const
Return the attribute's value as a string.
AttrKind
This enumeration lists the attributes that can be associated with parameters, function results,...
Definition Attributes.h:125
bool isValid() const
Return true if the attribute is any kind of attribute.
Definition Attributes.h:266
LLVM_ABI Type * getValueAsType() const
Return the attribute's value as a Type.
LLVM Basic Block Representation.
Definition BasicBlock.h:62
iterator begin()
Instruction iterator methods.
Definition BasicBlock.h:446
iterator_range< const_phi_iterator > phis() const
Returns a range that iterates over the phis in the basic block.
Definition BasicBlock.h:515
const Function * getParent() const
Return the enclosing method, or null if none.
Definition BasicBlock.h:213
LLVM_ABI InstListType::const_iterator getFirstNonPHIIt() const
Returns an iterator to the first instruction in this block that is not a PHINode instruction.
LLVM_ABI bool isEntryBlock() const
Return true if this is the entry block of the containing function.
const Instruction & front() const
Definition BasicBlock.h:469
LLVM_ABI const BasicBlock * getUniquePredecessor() const
Return the predecessor of this block if it has a unique predecessor block.
InstListType::iterator iterator
Instruction iterators...
Definition BasicBlock.h:170
const Instruction * getTerminator() const LLVM_READONLY
Returns the terminator instruction; assumes that the block is well-formed.
Definition BasicBlock.h:237
This class represents a no-op cast from one type to another.
static LLVM_ABI BlockAddress * lookup(const BasicBlock *BB)
Lookup an existing BlockAddress constant for the given BasicBlock.
Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to callin...
bool isInlineAsm() const
Check if this call is an inline asm statement.
auto operand_bundles() const
bool hasInAllocaArgument() const
Determine if there are is an inalloca argument.
OperandBundleUse getOperandBundleAt(unsigned Index) const
Return the operand bundle at a specific index.
Function * getCalledFunction() const
Returns the function called, or null if this is an indirect function invocation or the function signa...
bool doesNotAccessMemory(unsigned OpNo) const
bool hasFnAttr(Attribute::AttrKind Kind) const
Determine whether this call has the given attribute.
bool hasRetAttr(Attribute::AttrKind Kind) const
Determine whether the return value has the given attribute.
unsigned getNumOperandBundles() const
Return the number of operand bundles associated with this User.
CallingConv::ID getCallingConv() const
LLVM_ABI bool paramHasAttr(unsigned ArgNo, Attribute::AttrKind Kind) const
Determine whether the argument or parameter has the given attribute.
Attribute getParamAttr(unsigned ArgNo, Attribute::AttrKind Kind) const
Get the attribute of a given kind from a given arg.
unsigned countOperandBundlesOfType(StringRef Name) const
Return the number of operand bundles with the tag Name attached to this instruction.
bool onlyReadsMemory(unsigned OpNo) const
Value * getCalledOperand() const
Type * getParamElementType(unsigned ArgNo) const
Extract the elementtype type for a parameter.
Value * getArgOperand(unsigned i) const
FunctionType * getFunctionType() const
LLVM_ABI Intrinsic::ID getIntrinsicID() const
Returns the intrinsic ID of the intrinsic called or Intrinsic::not_intrinsic if the called function i...
iterator_range< User::op_iterator > args()
Iteration adapter for range-for loops.
bool doesNotReturn() const
Determine if the call cannot return.
LLVM_ABI bool onlyAccessesArgMemory() const
Determine if the call can access memmory only using pointers based on its arguments.
unsigned arg_size() const
AttributeList getAttributes() const
Return the attributes for this call.
bool hasOperandBundles() const
Return true if this User has any operand bundles.
LLVM_ABI Function * getCaller()
Helper to get the caller (the parent function).
bool isMustTailCall() const
static LLVM_ABI bool castIsValid(Instruction::CastOps op, Type *SrcTy, Type *DstTy)
This method can be used to determine if a cast from SrcTy to DstTy using Opcode op is valid or not.
unsigned getNumHandlers() const
return the number of 'handlers' in this catchswitch instruction, except the default handler
Value * getParentPad() const
BasicBlock * getUnwindDest() const
handler_range handlers()
iteration adapter for range-for loops.
BasicBlock * getUnwindDest() const
bool isFPPredicate() const
Definition InstrTypes.h:845
static bool isIntPredicate(Predicate P)
Definition InstrTypes.h:839
Value * getCondition() const
unsigned getBitWidth() const
getBitWidth - Return the scalar bitwidth of this constant.
Definition Constants.h:162
uint64_t getZExtValue() const
Return the constant as a 64-bit unsigned integer value after it has been zero extended as appropriate...
Definition Constants.h:168
const APInt & getValue() const
Return the constant as an APInt value reference.
Definition Constants.h:159
Constant * getAddrDiscriminator() const
The address discriminator if any, or the null constant.
Definition Constants.h:1264
Constant * getPointer() const
The pointer that is signed in this ptrauth signed pointer.
Definition Constants.h:1251
ConstantInt * getKey() const
The Key ID, an i32 constant.
Definition Constants.h:1254
Constant * getDeactivationSymbol() const
Definition Constants.h:1273
ConstantInt * getDiscriminator() const
The integer discriminator, an i64 constant, or 0.
Definition Constants.h:1257
static LLVM_ABI bool isOrderedRanges(ArrayRef< ConstantRange > RangesRef)
This class represents a range of values.
LLVM_ABI bool contains(const APInt &Val) const
Return true if the specified value is in the set.
uint32_t getBitWidth() const
Get the bit width of this ConstantRange.
static LLVM_ABI ConstantTokenNone * get(LLVMContext &Context)
Return the ConstantTokenNone.
bool isNullValue() const
Return true if this is the value that would be returned by getNullValue.
Definition Constant.h:64
LLVM_ABI std::optional< fp::ExceptionBehavior > getExceptionBehavior() const
LLVM_ABI std::optional< RoundingMode > getRoundingMode() const
LLVM_ABI unsigned getNonMetadataArgCount() const
DbgVariableFragmentInfo FragmentInfo
@ FixedPointBinary
Scale factor 2^Factor.
@ FixedPointDecimal
Scale factor 10^Factor.
@ FixedPointRational
Arbitrary rational scale factor.
DIGlobalVariable * getVariable() const
LLVM_ABI DISubprogram * getSubprogram() const
Get the subprogram for this scope.
DILocalScope * getScope() const
Get the local scope for this variable.
Metadata * getRawScope() const
Base class for scope-like contexts.
Subprogram description. Uses SubclassData1.
static LLVM_ABI const DIScope * getRawRetainedNodeScope(const MDNode *N)
Base class for template parameters.
Base class for types.
Base class for variables.
Metadata * getRawType() const
Metadata * getRawScope() const
Records a position in IR for a source label (DILabel).
Base class for non-instruction debug metadata records that have positions within IR.
DebugLoc getDebugLoc() const
LLVM_ABI BasicBlock * getParent()
LLVM_ABI Function * getFunction()
Record of a variable value-assignment, aka a non instruction representation of the dbg....
LLVM_ABI Value * getVariableLocationOp(unsigned OpIdx) const
DIExpression * getExpression() const
DILocalVariable * getVariable() const
Metadata * getRawLocation() const
Returns the metadata operand for the first location description.
DIExpression * getAddressExpression() const
LLVM_ABI MDNode * getAsMDNode() const
Return this as a bar MDNode.
Definition DebugLoc.cpp:76
ValueT lookup(const_arg_type_t< KeyT > Val) const
Return the entry for the specified key, or a default constructed value if no such entry exists.
Definition DenseMap.h:278
iterator find(const_arg_type_t< KeyT > Val)
Definition DenseMap.h:251
bool empty() const
Definition DenseMap.h:199
iterator end()
Definition DenseMap.h:169
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
Definition DenseMap.h:312
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.
Definition Dominators.h:122
This instruction extracts a single (scalar) element from a VectorType value.
static LLVM_ABI bool isValidOperands(const Value *Vec, const Value *Idx)
Return true if an extractelement instruction can be formed with the specified operands.
ArrayRef< unsigned > getIndices() const
static LLVM_ABI Type * getIndexedType(Type *Agg, ArrayRef< unsigned > Idxs)
Returns the type of the element that would be extracted with an extractvalue instruction with the spe...
This instruction compares its operands according to the predicate given to the constructor.
This class represents an extension of floating point types.
static bool isSupportedFloatingPointType(Type *Ty)
Returns true if Ty is a supported floating-point type for phi, select, or call FPMathOperators.
Definition Operator.h:302
This class represents a cast from floating point to signed integer.
This class represents a cast from floating point to unsigned integer.
This class represents a truncation of floating point types.
AtomicOrdering getOrdering() const
Returns the ordering constraint of this fence instruction.
op_range arg_operands()
arg_operands - iteration adapter for range-for loops.
Value * getParentPad() const
Convenience accessors.
FunctionPass class - This class is used to implement most global optimizations.
Definition Pass.h:314
Type * getReturnType() const
FunctionType * getFunctionType() const
Returns the FunctionType for me.
Definition Function.h:212
DISubprogram * getSubprogram() const
Get the attached subprogram.
bool hasPersonalityFn() const
Check whether this function has a personality function.
Definition Function.h:890
const Function & getFunction() const
Definition Function.h:167
const std::string & getGC() const
Definition Function.cpp:820
Type * getReturnType() const
Returns the type of the ret val.
Definition Function.h:217
bool isVarArg() const
isVarArg - Return true if this function takes a variable number of arguments.
Definition Function.h:230
LLVM_ABI Value * getBasePtr() const
LLVM_ABI Value * getDerivedPtr() const
static LLVM_ABI Type * getIndexedType(Type *Ty, ArrayRef< Value * > IdxList)
Returns the result type of a getelementptr with the given source element type and indexes.
static bool isValidLinkage(LinkageTypes L)
Definition GlobalAlias.h:98
const Constant * getAliasee() const
Definition GlobalAlias.h:87
LLVM_ABI const Function * getResolverFunction() const
Definition Globals.cpp:759
static bool isValidLinkage(LinkageTypes L)
Definition GlobalIFunc.h:86
const Constant * getResolver() const
Definition GlobalIFunc.h:73
LLVM_ABI void getAllMetadata(SmallVectorImpl< std::pair< unsigned, MDNode * > > &MDs) const
Appends all metadata attached to this value to MDs, sorting by KindID.
bool hasComdat() const
MDNode * getMetadata(unsigned KindID) const
Get the metadata of given kind attached to this GlobalObject.
bool hasExternalLinkage() const
bool isDSOLocal() const
bool isImplicitDSOLocal() const
LLVM_ABI bool isDeclaration() const
Return true if the primary definition of this global value is outside of the current translation unit...
Definition Globals.cpp:408
bool hasValidDeclarationLinkage() const
LinkageTypes getLinkage() const
bool hasDefaultVisibility() const
bool hasPrivateLinkage() const
bool hasHiddenVisibility() const
bool hasExternalWeakLinkage() const
bool hasDLLImportStorageClass() const
bool hasDLLExportStorageClass() const
bool isDeclarationForLinker() const
unsigned getAddressSpace() const
Module * getParent()
Get the module that this global value is contained inside of...
PointerType * getType() const
Global values are always pointers.
bool hasComdat() const
bool hasCommonLinkage() const
bool hasGlobalUnnamedAddr() const
bool hasAppendingLinkage() const
bool hasAvailableExternallyLinkage() const
Type * getValueType() const
LLVM_ABI bool isInterposable(bool CheckNoIPA=true) const
Return true if this global's definition can be substituted with an arbitrary definition at link time ...
Definition Globals.cpp:178
const Constant * getInitializer() const
getInitializer - Return the initializer for this global variable.
bool hasInitializer() const
Definitions have initializers, declarations don't.
MaybeAlign getAlign() const
Returns the alignment of the given variable.
LLVM_ABI uint64_t getGlobalSize(const DataLayout &DL) const
Get the size of this global variable in bytes.
Definition Globals.cpp:640
bool isConstant() const
If the value is a global constant, its value is immutable throughout the runtime execution of the pro...
bool hasDefinitiveInitializer() const
hasDefinitiveInitializer - Whether the global variable has an initializer, and any other instances of...
This instruction compares its operands according to the predicate given to the constructor.
BasicBlock * getDestination(unsigned i)
Return the specified destination.
unsigned getNumDestinations() const
return the number of possible destinations in this indirectbr instruction.
unsigned getNumSuccessors() const
This instruction inserts a single (scalar) element into a VectorType value.
static LLVM_ABI bool isValidOperands(const Value *Vec, const Value *NewElt, const Value *Idx)
Return true if an insertelement instruction can be formed with the specified operands.
ArrayRef< unsigned > getIndices() const
Base class for instruction visitors.
Definition InstVisitor.h:78
void visit(Iterator Start, Iterator End)
Definition InstVisitor.h:87
LLVM_ABI unsigned getNumSuccessors() const LLVM_READONLY
Return the number of successors that this instruction has.
const DebugLoc & getDebugLoc() const
Return the debug location for this node as a DebugLoc.
LLVM_ABI const Module * getModule() const
Return the module owning the function this instruction belongs to or nullptr it the function does not...
LLVM_ABI bool isAtomic() const LLVM_READONLY
Return true if this instruction has an AtomicOrdering of unordered or higher.
LLVM_ABI const Function * getFunction() const
Return the function this instruction belongs to.
iterator_range< user_iterator > users()
This class represents a cast from an integer to a pointer.
static LLVM_ABI bool mayLowerToFunctionCall(Intrinsic::ID IID)
Check if the intrinsic might lower into a regular function call in the course of IR transformations.
Intrinsic::ID getIntrinsicID() const
Return the intrinsic ID of this intrinsic.
This is an important class for using LLVM in a threaded context.
Definition LLVMContext.h:68
bool isCleanup() const
Return 'true' if this landingpad instruction is a cleanup.
unsigned getNumClauses() const
Get the number of clauses for this landing pad.
bool isCatch(unsigned Idx) const
Return 'true' if the clause and index Idx is a catch clause.
bool isFilter(unsigned Idx) const
Return 'true' if the clause and index Idx is a filter clause.
Constant * getClause(unsigned Idx) const
Get the value of the clause at index Idx.
AtomicOrdering getOrdering() const
Returns the ordering constraint of this load instruction.
SyncScope::ID getSyncScopeID() const
Returns the synchronization scope ID of this load instruction.
bool isElementwise() const
Return true if this is an elementwise atomic load.
Align getAlign() const
Return the alignment of the access that is being performed.
Metadata node.
Definition Metadata.h:1069
const MDOperand & getOperand(unsigned I) const
Definition Metadata.h:1426
bool isTemporary() const
Definition Metadata.h:1253
ArrayRef< MDOperand > operands() const
Definition Metadata.h:1424
unsigned getNumOperands() const
Return number of MDNode operands.
Definition Metadata.h:1432
bool isDistinct() const
Definition Metadata.h:1252
bool isResolved() const
Check if node is fully resolved.
Definition Metadata.h:1249
LLVMContext & getContext() const
Definition Metadata.h:1233
bool equalsStr(StringRef Str) const
Definition Metadata.h:913
Metadata * get() const
Definition Metadata.h:920
LLVM_ABI StringRef getString() const
Definition Metadata.cpp:629
static LLVM_ABI bool isTagMD(const Metadata *MD)
This class implements a map that also provides access to all stored values in a deterministic order.
Definition MapVector.h:38
static LLVM_ABI MetadataAsValue * getIfExists(LLVMContext &Context, Metadata *MD)
Definition Metadata.cpp:115
Metadata * getMetadata() const
Definition Metadata.h:202
Root of the metadata hierarchy.
Definition Metadata.h:64
unsigned getMetadataID() const
Definition Metadata.h:104
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:68
Metadata * getModuleFlag(StringRef Key) const
Return the corresponding value if Key appears in module flags, otherwise return null.
Definition Module.cpp:358
LLVM_ABI StringRef getName() const
LLVM_ABI unsigned getNumOperands() const
iterator_range< op_iterator > operands()
Definition Metadata.h:1851
op_range incoming_values()
A set of analyses that are preserved following a run of a transformation pass.
Definition Analysis.h:112
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
Definition Analysis.h:118
This class represents a cast from a pointer to an address (non-capturing ptrtoint).
This class represents a cast from a pointer to an integer.
Value * getValue() const
Convenience accessor.
Value * getReturnValue() const
Convenience accessor. Returns null if there is no return value.
This class represents a sign extension of integer types.
This class represents a cast from signed integer to floating point.
static LLVM_ABI const char * areInvalidOperands(Value *Cond, Value *True, Value *False)
Return a string if the specified operands are invalid for a select operation, otherwise return null.
This instruction constructs a fixed permutation of two input vectors.
static LLVM_ABI bool isValidOperands(const Value *V1, const Value *V2, const Value *Mask)
Return true if a shufflevector instruction can be formed with the specified operands.
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
size_type count(ConstPtrType Ptr) const
count - Return 1 if the specified pointer is in the set, 0 otherwise.
void insert_range(Range &&R)
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
iterator insert(iterator I, T &&Elt)
void resize(size_type N)
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
std::pair< StringRef, StringRef > split(char Separator) const
Split into two substrings around the first occurrence of a separator character.
Definition StringRef.h:736
static constexpr size_t npos
Definition StringRef.h:58
bool getAsInteger(unsigned Radix, T &Result) const
Parse the current string as an integer of the specified radix.
Definition StringRef.h:490
bool starts_with(StringRef Prefix) const
Check if this string starts with the given Prefix.
Definition StringRef.h:258
constexpr bool empty() const
Check if the string is empty.
Definition StringRef.h:141
std::pair< typename Base::iterator, bool > insert(StringRef key)
Definition StringSet.h:39
Verify that the TBAA Metadatas are valid.
Definition Verifier.h:40
LLVM_ABI bool visitTBAAMetadata(const Instruction *I, const MDNode *MD)
Visit an instruction, or a TBAA node itself as part of a metadata, and return true if it is valid,...
unsigned size() const
This class represents a truncation of integer types.
The instances of the Type class are immutable: once they are created, they are never changed.
Definition Type.h:46
LLVM_ABI unsigned getIntegerBitWidth() const
bool isByteTy() const
True if this is an instance of ByteType.
Definition Type.h:237
bool isVectorTy() const
True if this is an instance of VectorType.
Definition Type.h:283
bool isLabelTy() const
Return true if this is 'label'.
Definition Type.h:225
bool isIntOrIntVectorTy() const
Return true if this is an integer type or a vector of integer types.
Definition Type.h:258
bool isPointerTy() const
True if this is an instance of PointerType.
Definition Type.h:277
LLVM_ABI bool isTokenLikeTy() const
Returns true if this is 'token' or a token-like target type.s.
Definition Type.cpp:1115
LLVM_ABI unsigned getPointerAddressSpace() const
Get the address space of this pointer or pointer vector type.
bool isSingleValueType() const
Return true if the type is a valid type for a register in codegen.
Definition Type.h:306
LLVM_ABI bool canLosslesslyBitCastTo(Type *Ty) const
Return true if this type could be converted with a lossless BitCast to type 'Ty'.
Definition Type.cpp:143
bool isSized() const
Return true if it makes sense to take the size of this type.
Definition Type.h:321
Type * getScalarType() const
If this is a vector type, return the element type, otherwise return 'this'.
Definition Type.h:363
LLVM_ABI unsigned getScalarSizeInBits() const LLVM_READONLY
If this is a vector type, return the getPrimitiveSizeInBits value for the element type.
Definition Type.cpp:222
bool isFloatingPointTy() const
Return true if this is one of the floating-point types.
Definition Type.h:186
bool isPtrOrPtrVectorTy() const
Return true if this is a pointer type or a vector of pointer types.
Definition Type.h:280
LLVM_ABI bool isScalableTy() const
Return true if this is a type whose size is a known multiple of vscale.
Definition Type.cpp:61
bool isIntOrPtrTy() const
Return true if this is an integer type or a pointer type.
Definition Type.h:265
bool isIntegerTy() const
True if this is an instance of IntegerType.
Definition Type.h:252
bool isFPOrFPVectorTy() const
Return true if this is a FP type or a vector of FP.
Definition Type.h:222
LLVM_ABI bool containsNonLocalTargetExtType() const
Return true if this type is or contains a target extension type that disallows being used as a local.
Definition Type.cpp:86
LLVM_ABI bool containsNonGlobalTargetExtType() const
Return true if this type is or contains a target extension type that disallows being used as a global...
Definition Type.cpp:76
bool isVoidTy() const
Return true if this is 'void'.
Definition Type.h:141
bool isMetadataTy() const
Return true if this is 'metadata'.
Definition Type.h:228
This class represents a cast unsigned integer to floating point.
Value * getOperand(unsigned i) const
Definition User.h:207
unsigned getNumOperands() const
Definition User.h:229
This class represents the va_arg llvm instruction, which returns an argument of the specified type gi...
Value * getValue() const
Definition Metadata.h:499
LLVM Value Representation.
Definition Value.h:75
iterator_range< user_iterator > materialized_users()
Definition Value.h:422
Type * getType() const
All values are typed, get the type of this value.
Definition Value.h:257
LLVM_ABI const Value * stripPointerCastsAndAliases() const
Strip off pointer casts, all-zero GEPs, address space casts, and aliases.
Definition Value.cpp:717
LLVMContext & getContext() const
All values hold a context through their type.
Definition Value.h:260
LLVM_ABI const Value * stripInBoundsOffsets(function_ref< void(const Value *)> Func=[](const Value *) {}) const
Strip off pointer casts and inbounds GEPs.
Definition Value.cpp:828
iterator_range< user_iterator > users()
Definition Value.h:428
bool materialized_use_empty() const
Definition Value.h:353
LLVM_ABI const Value * stripPointerCasts() const
Strip off pointer casts, all-zero GEPs and address space casts.
Definition Value.cpp:713
bool hasName() const
Definition Value.h:263
LLVM_ABI StringRef getName() const
Return a constant reference to the value's name.
Definition Value.cpp:319
Check a module for errors, and report separate error states for IR and debug info errors.
Definition Verifier.h:109
LLVM_ABI Result run(Module &M, ModuleAnalysisManager &)
LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
This class represents zero extension of integer types.
std::pair< iterator, bool > insert(const ValueT &V)
Definition DenseSet.h:209
constexpr bool isNonZero() const
Definition TypeSize.h:155
constexpr bool isScalable() const
Returns whether the quantity is scaled by a runtime quantity (vscale).
Definition TypeSize.h:168
constexpr ScalarTy getKnownMinValue() const
Returns the minimum value this quantity can represent.
Definition TypeSize.h:165
An efficient, type-erasing, non-owning reference to a callable.
const ParentTy * getParent() const
Definition ilist_node.h:34
NodeTy * getNextNode()
Get the next node, or nullptr for the list tail.
Definition ilist_node.h:348
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition raw_ostream.h:53
CallInst * Call
This file contains the declaration of the Comdat class, which represents a single COMDAT in LLVM.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
constexpr char Align[]
Key for Kernel::Arg::Metadata::mAlign.
constexpr char Args[]
Key for Kernel::Metadata::mArgs.
constexpr char Attrs[]
Key for Kernel::Metadata::mAttrs.
constexpr std::underlying_type_t< E > Mask()
Get a bitmask with 1s in all places up to the high-order bit of E's largest value.
@ Entry
Definition COFF.h:862
std::optional< ABIType > parseABIType(StringRef S)
Parse the string spelling used by the "float-abi" IR module flag into an ABIType.
Definition CodeGen.h:117
@ BasicBlock
Various leaf nodes.
Definition ISDOpcodes.h:81
LLVM_ABI bool hasConstrainedFPRoundingModeOperand(ID QID)
Returns true if the intrinsic ID is for one of the "ConstrainedFloating-Point Intrinsics" that take r...
LLVM_ABI StringRef getName(ID id)
Return the LLVM name for an intrinsic, such as "llvm.ppc.altivec.lvx".
static const int NoAliasScopeDeclScopeArg
Definition Intrinsics.h:44
LLVM_ABI bool isSignatureValid(Intrinsic::ID ID, FunctionType *FT, SmallVectorImpl< Type * > &OverloadTys, raw_ostream &OS=nulls())
Returns true if FT is a valid function type for intrinsic ID.
LLVM_ABI bool isImmArgValueInRangeSet(ID IID, unsigned ArgIdx, const APInt &Value)
Returns true if Value satisfies the range constraints specified for argument ArgIdx of intrinsic IID.
std::variant< std::monostate, Loc::Single, Loc::Multi, Loc::MMI, Loc::EntryValue > Variant
Alias for the std::variant specialization base class of DbgVariable.
Definition DwarfDebug.h:190
Flag
These should be considered private to the implementation of the MCInstrDesc class.
@ System
Synchronized with respect to all concurrently executing threads.
Definition LLVMContext.h:58
LLVM_ABI std::optional< VFInfo > tryDemangleForVFABI(StringRef MangledName, const FunctionType *FTy)
Function to construct a VFInfo out of a mangled names in the following format:
@ CE
Windows NT (Windows on ARM)
Definition MCAsmInfo.h:51
LLVM_ABI AssignmentInstRange getAssignmentInsts(DIAssignID *ID)
Return a range of instructions (typically just one) that have ID as an attachment.
initializer< Ty > init(const Ty &Val)
@ DW_LLVM_LANG_DIALECT_max
Definition Dwarf.h:212
@ DW_MACINFO_undef
Definition Dwarf.h:901
@ DW_MACINFO_start_file
Definition Dwarf.h:902
@ DW_MACINFO_define
Definition Dwarf.h:900
std::enable_if_t< detail::IsValidPointer< X, Y >::value, X * > dyn_extract_or_null(Y &&MD)
Extract a Value from Metadata, if any, allowing null.
Definition Metadata.h:709
std::enable_if_t< detail::IsValidPointer< X, Y >::value, X * > extract_or_null(Y &&MD)
Extract a Value from Metadata, allowing null.
Definition Metadata.h:683
std::enable_if_t< detail::IsValidPointer< X, Y >::value, X * > dyn_extract(Y &&MD)
Extract a Value from Metadata, if any.
Definition Metadata.h:696
std::enable_if_t< detail::IsValidPointer< X, Y >::value, X * > extract(Y &&MD)
Extract a Value from Metadata.
Definition Metadata.h:668
@ User
could "use" a pointer
NodeAddr< UseNode * > Use
Definition RDFGraph.h:385
NodeAddr< NodeBase * > Node
Definition RDFGraph.h:381
bool empty() const
Definition BasicBlock.h:101
friend class Instruction
Iterator for Instructions in a `BasicBlock.
Definition BasicBlock.h:73
unsigned getNumElements(Type *Ty)
Definition SLPUtils.cpp:86
This is an optimization pass for GlobalISel generic memory operations.
std::optional< LongDoubleFormat > parseLongDoubleFormat(StringRef Name)
Parses an IR floating-point type name into a LongDoubleFormat, returning std::nullopt if it does not ...
Definition CodeGen.h:94
@ Low
Lower the current thread's priority such that it does not affect foreground tasks significantly.
Definition Threading.h:280
@ Offset
Definition DWP.cpp:577
bool all_of(R &&range, UnaryPredicate P)
Provide wrappers to std::all_of which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1739
LLVM_ABI bool canInstructionHaveMMRAs(const Instruction &I)
LLVM_ABI unsigned getBranchWeightOffset(const MDNode *ProfileData)
Return the offset to the first branch weight data.
constexpr bool isInt(int64_t x)
Checks if an integer fits into the given bit width.
Definition MathExtras.h:166
RelativeUniformCounterPtr Values
Definition InstrProf.h:91
BundleAttr getBundleAttrFromOBU(OperandBundleUse OBU)
auto enumerate(FirstRange &&First, RestRanges &&...Rest)
Given two or more input ranges, returns a new range whose values are tuples (A, B,...
Definition STLExtras.h:2554
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:643
LLVM_ABI bool verifyFunction(const Function &F, raw_ostream *OS=nullptr)
Check a function for errors, useful for use when debugging a pass.
AllocFnKind
Definition Attributes.h:54
testing::Matcher< const detail::ErrorHolder & > Failed()
Definition Error.h:198
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
void append_range(Container &C, Range &&R)
Wrapper function to append range R to container C.
Definition STLExtras.h:2208
LLVM_ABI DenseMap< BasicBlock *, ColorVector > colorEHFunclets(Function &F)
If an EH funclet personality is in use (see isFuncletEHPersonality), this will recompute which blocks...
constexpr bool isUIntN(unsigned N, uint64_t x)
Checks if an unsigned integer fits into the given (dynamic) bit width.
Definition MathExtras.h:244
void verifyAMDGPUAlloca(VerifierSupport &VS, const AllocaInst &AI)
constexpr bool isPowerOf2_64(uint64_t Value)
Return true if the argument is a power of two > 0 (64 bit edition.)
Definition MathExtras.h:285
gep_type_iterator gep_type_end(const User *GEP)
bool isa_and_nonnull(const Y &Val)
Definition Casting.h:676
Op::Description Desc
bool isScopedEHPersonality(EHPersonality Pers)
Returns true if this personality uses scope-style EH IR instructions: catchswitch,...
RelativeUniformCounterPtr ValuesPtrExpr VTableAddr Value
Definition InstrProf.h:143
void verifyAMDGPUFunctionMetadata(VerifierSupport &VS, const Function &F)
auto dyn_cast_or_null(const Y &Val)
Definition Casting.h:753
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1746
auto formatv(bool Validate, const char *Fmt, Ts &&...Vals)
GenericConvergenceVerifier< SSAContext > ConvergenceVerifier
constexpr bool isPowerOf2_32(uint32_t Value)
Return true if the argument is a power of two > 0.
Definition MathExtras.h:280
bool isModSet(const ModRefInfo MRI)
Definition ModRef.h:49
void sort(IteratorTy Start, IteratorTy End)
Definition STLExtras.h:1636
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition Debug.cpp:209
void verifyAMDGPUIntrinsicCall(VerifierSupport &VS, Intrinsic::ID ID, CallBase &Call)
bool isPointerTy(const Type *T)
Definition SPIRVUtils.h:383
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
Definition Error.cpp:163
generic_gep_type_iterator<> gep_type_iterator
LLVM_ABI EHPersonality classifyEHPersonality(const Value *Pers)
See if the given exception handling personality function is one that we understand.
iterator_range< SplittingIterator > split(StringRef Str, StringRef Separator)
Split the specified string over a separator and return a range-compatible iterable over its partition...
constexpr BooleanLoopTags OldBooleanLoopTags[]
class LLVM_GSL_OWNER SmallVector
Forward declaration of SmallVector so that calculateSmallVectorDefaultInlinedElements can reference s...
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
Definition Casting.h:547
LLVM_ABI bool isValueProfileMD(const MDNode *ProfileData)
Checks if an MDNode contains value profiling Metadata.
LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key
LLVM_ABI raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
LLVM_ABI unsigned getNumBranchWeights(const MDNode &ProfileData)
AtomicOrdering
Atomic ordering for LLVM's memory model.
@ First
Helpers to iterate all locations in the MemoryEffectsBase class.
Definition ModRef.h:74
LLVM_ABI FunctionPass * createVerifierPass(bool FatalErrors=true)
RelativeUniformCounterPtr ValuesPtrExpr VTableAddr Count
Definition InstrProf.h:145
DWARFExpression::Operation Op
std::optional< ThreadModel > parseThreadModel(StringRef S)
Parse the string spelling used by the "thread-model" IR module flag into a ThreadModel.
Definition CodeGen.h:148
ArrayRef(const T &OneElt) -> ArrayRef< T >
constexpr unsigned BitWidth
TinyPtrVector< BasicBlock * > ColorVector
LLVM_ABI const char * LLVMLoopEstimatedTripCount
Profile-based loop metadata that should be accessed only by using llvm::getLoopEstimatedTripCount and...
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:559
LLVM_ABI std::optional< RoundingMode > convertStrToRoundingMode(StringRef)
Returns a valid RoundingMode enumerator when given a string that is valid as input in constrained int...
Definition FPEnv.cpp:25
gep_type_iterator gep_type_begin(const User *GEP)
LLVM_ABI std::unique_ptr< GCStrategy > getGCStrategy(const StringRef Name)
Lookup the GCStrategy object associated with the given gc name.
auto predecessors(const MachineBasicBlock *BB)
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.
Definition STLExtras.h:1947
RelativeUniformCounterPtr ValuesPtrExpr VTableAddr Next
Definition InstrProf.h:147
bool pred_empty(const BasicBlock *BB)
Definition CFG.h:107
void verifyAMDGPUGlobalVariable(VerifierSupport &VS, const GlobalVariable &GV)
bool isHexDigit(char C)
Checks if character C is a hexadecimal numeric character.
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
void verifyAMDGPUModuleFlag(VerifierSupport &VS, const MDString *ID, Module::ModFlagBehavior MFB, const MDNode *Op)
bool isAMDGPUCallBrIntrinsic(Intrinsic::ID ID)
constexpr bool isCallableCC(CallingConv::ID CC)
LLVM_ABI bool verifyModule(const Module &M, raw_ostream *OS=nullptr, bool *BrokenDebugInfo=nullptr)
Check a module for errors.
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Definition MIRParser.h:39
#define N
constexpr uint64_t value() const
This is a hole in the type system and should not be abused.
Definition Alignment.h:77
A special type used by analysis passes to provide an address that identifies that particular analysis...
Definition Analysis.h:29
StringLiteral Disable
StringLiteral Enable
static LLVM_ABI const char * SyntheticFunctionEntryCount
static LLVM_ABI const char * UnknownBranchWeightsMarker
static LLVM_ABI const char * ValueProfile
static LLVM_ABI const char * FunctionEntryCount
static LLVM_ABI const char * BranchWeights
uint32_t getTagID() const
Return the tag of this operand bundle as an integer.
ArrayRef< Use > Inputs