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