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