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