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