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 | |
14 | #include "llvm/IR/PassInstrumentation.h" |
15 | #include "llvm/ADT/STLExtras.h" |
16 | #include "llvm/IR/PassManager.h" |
17 | |
18 | namespace llvm { |
19 | |
20 | void PassInstrumentationCallbacks::addClassToPassName(StringRef ClassName, |
21 | StringRef PassName) { |
22 | if (ClassToPassName[ClassName].empty()) |
23 | ClassToPassName[ClassName] = PassName.str(); |
24 | } |
25 | |
26 | StringRef |
27 | PassInstrumentationCallbacks::getPassNameForClassName(StringRef ClassName) { |
28 | return ClassToPassName[ClassName]; |
29 | } |
30 | |
31 | AnalysisKey PassInstrumentationAnalysis::Key; |
32 | |
33 | bool isSpecialPass(StringRef PassID, const std::vector<StringRef> &Specials) { |
34 | size_t Pos = PassID.find(C: '<'); |
35 | StringRef Prefix = PassID; |
36 | if (Pos != StringRef::npos) |
37 | Prefix = PassID.substr(Start: 0, N: Pos); |
38 | return any_of(Range: Specials, |
39 | P: [Prefix](StringRef S) { return Prefix.ends_with(Suffix: S); }); |
40 | } |
41 | |
42 | } // namespace llvm |
43 |