brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 52aad8f Raw
54 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8/// \file9///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 18using namespace 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 24void PassInstrumentationCallbacks::addClassToPassName(StringRef ClassName,25                                                      StringRef PassName) {26  assert(!PassName.empty() && "PassName can't be empty!");27  ClassToPassName.try_emplace(ClassName, PassName.str());28}29 30StringRef31PassInstrumentationCallbacks::getPassNameForClassName(StringRef ClassName) {32  if (!ClassToPassNameCallbacks.empty()) {33    for (auto &Fn : ClassToPassNameCallbacks)34      Fn();35    ClassToPassNameCallbacks.clear();36  }37  auto PassNameIter = ClassToPassName.find(ClassName);38  if (PassNameIter != ClassToPassName.end())39    return PassNameIter->second;40  return {};41}42 43AnalysisKey PassInstrumentationAnalysis::Key;44 45bool llvm::isSpecialPass(StringRef PassID,46                         const std::vector<StringRef> &Specials) {47  size_t Pos = PassID.find('<');48  StringRef Prefix = PassID;49  if (Pos != StringRef::npos)50    Prefix = PassID.substr(0, Pos);51  return any_of(Specials,52                [Prefix](StringRef S) { return Prefix.ends_with(S); });53}54