• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
addClassToPassName(StringRef ClassName,StringRef PassName)20 void PassInstrumentationCallbacks::addClassToPassName(StringRef ClassName,
21                                                       StringRef PassName) {
22   ClassToPassName[ClassName] = PassName.str();
23 }
24 
hasPassName(StringRef PassName)25 bool PassInstrumentationCallbacks::hasPassName(StringRef PassName) {
26   for (const auto &E : ClassToPassName) {
27     if (E.getValue() == PassName)
28       return true;
29   }
30   return false;
31 }
32 
33 StringRef
getPassNameForClassName(StringRef ClassName)34 PassInstrumentationCallbacks::getPassNameForClassName(StringRef ClassName) {
35   return ClassToPassName[ClassName];
36 }
37 
38 AnalysisKey PassInstrumentationAnalysis::Key;
39 
isSpecialPass(StringRef PassID,const std::vector<StringRef> & Specials)40 bool isSpecialPass(StringRef PassID, const std::vector<StringRef> &Specials) {
41   size_t Pos = PassID.find('<');
42   StringRef Prefix = PassID;
43   if (Pos != StringRef::npos)
44     Prefix = PassID.substr(0, Pos);
45   return any_of(Specials, [Prefix](StringRef S) { return Prefix.endswith(S); });
46 }
47 
48 } // namespace llvm
49