mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
5bc5d5ec44
This changes --print-before/after to be a list of strings rather than legacy passes. (this also has the effect of not showing the entire list of passes in --help-hidden after --print-before/after, which IMO is great for making it less verbose). Currently PrintIRInstrumentation passes the class name rather than pass name to llvm::shouldPrintBeforePass(), meaning llvm::shouldPrintBeforePass() never functions as intended in the NPM. There is no easy way of converting class names to pass names outside of within an instance of PassBuilder. This adds a map of pass class names to their short names in PassRegistry.def within PassInstrumentationCallbacks. It is populated inside the constructor of PassBuilder, which takes a PassInstrumentationCallbacks. Add a pointer to PassInstrumentationCallbacks inside PrintIRInstrumentation and use the newly created map. This is a bit hacky, but I can't think of a better way since the short id to class name only exists within PassRegistry.def. This also doesn't handle passes not in PassRegistry.def but rather added via PassBuilder::registerPipelineParsingCallback(). llvm/test/CodeGen/Generic/print-after.ll doesn't seem very useful now with this change. Reviewed By: ychen, jamieschmeiser Differential Revision: https://reviews.llvm.org/D87216
49 lines
1.5 KiB
C++
49 lines
1.5 KiB
C++
//===- 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) {
|
|
ClassToPassName[ClassName] = PassName.str();
|
|
}
|
|
|
|
bool PassInstrumentationCallbacks::hasPassName(StringRef PassName) {
|
|
for (const auto &E : ClassToPassName) {
|
|
if (E.getValue() == PassName)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
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
|