| //===- 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 |