| //===- PassInstrumentation.cpp - Pass Instrumentation interface -*- C++ -*-===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| /// \file | |
| /// | |
| /// This file provides the implementation of PassInstrumentation class. | |
| /// | |
| //===----------------------------------------------------------------------===// | |
| #include "llvm/IR/PassInstrumentation.h" | |
| #include "llvm/ADT/STLExtras.h" | |
| #include "llvm/IR/PassManager.h" | |
| namespace llvm { | |
| void PassInstrumentationCallbacks::addClassToPassName(StringRef ClassName, | |
| StringRef PassName) { | |
| if (ClassToPassName[ClassName].empty()) | |
| ClassToPassName[ClassName] = PassName.str(); | |
| } | |
| StringRef | |
| PassInstrumentationCallbacks::getPassNameForClassName(StringRef ClassName) { | |
| return ClassToPassName[ClassName]; | |
| } | |
| AnalysisKey PassInstrumentationAnalysis::Key; | |
| bool isSpecialPass(StringRef PassID, const std::vector<StringRef> &Specials) { | |
| size_t Pos = PassID.find('<'); | |
| StringRef Prefix = PassID; | |
| if (Pos != StringRef::npos) | |
| Prefix = PassID.substr(0, Pos); | |
| return any_of(Specials, [Prefix](StringRef S) { return Prefix.endswith(S); }); | |
| } | |
| } // namespace llvm |