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