LLVM 20.0.0git
PassInstrumentation.cpp
Go to the documentation of this file.
1//===- PassInstrumentation.cpp - Pass Instrumentation interface -*- C++ -*-===//
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/// \file
9///
10/// This file provides the implementation of PassInstrumentation class.
11///
12//===----------------------------------------------------------------------===//
13
15#include "llvm/ADT/STLExtras.h"
16#include "llvm/IR/PassManager.h"
17
18namespace llvm {
19
20template struct LLVM_EXPORT_TEMPLATE Any::TypeId<const Module *>;
21template struct LLVM_EXPORT_TEMPLATE Any::TypeId<const Function *>;
22template struct LLVM_EXPORT_TEMPLATE Any::TypeId<const Loop *>;
23
26 ClassToPassName.try_emplace(ClassName, PassName.str());
27}
28
31 if (!ClassToPassNameCallbacks.empty()) {
32 for (auto &Fn : ClassToPassNameCallbacks)
33 Fn();
34 ClassToPassNameCallbacks.clear();
35 }
36 return ClassToPassName[ClassName];
37}
38
39AnalysisKey PassInstrumentationAnalysis::Key;
40
41bool isSpecialPass(StringRef PassID, const std::vector<StringRef> &Specials) {
42 size_t Pos = PassID.find('<');
43 StringRef Prefix = PassID;
44 if (Pos != StringRef::npos)
45 Prefix = PassID.substr(0, Pos);
46 return any_of(Specials,
47 [Prefix](StringRef S) { return Prefix.ends_with(S); });
48}
49
50} // namespace llvm
This header defines various interfaces for pass management in LLVM.
This file defines the Pass Instrumentation classes that provide instrumentation points into the pass ...
This file contains some templates that are useful if you are working with the STL at all.
static const char PassName[]
bool empty() const
Definition: SmallVector.h:81
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:51
constexpr StringRef substr(size_t Start, size_t N=npos) const
Return a reference to the substring from [Start, Start + N).
Definition: StringRef.h:571
size_t find(char C, size_t From=0) const
Search for the first character C in the string.
Definition: StringRef.h:297
static constexpr size_t npos
Definition: StringRef.h:53
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly.
Definition: STLExtras.h:1746
bool isSpecialPass(StringRef PassID, const std::vector< StringRef > &Specials)
A special type used by analysis passes to provide an address that identifies that particular analysis...
Definition: Analysis.h:28
StringRef getPassNameForClassName(StringRef ClassName)
Get the pass name for a given pass class name.
void addClassToPassName(StringRef ClassName, StringRef PassName)
Add a class name to pass name mapping for use by pass instrumentation.