mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
24db3e65cf
OptBisect is in IR due to LLVMContext using it. However, it uses IR units from Analysis as well. This change moves getDescription functions from OptBisect to their respective IR units. Generating names for IR units will now be up to the callers, keeping the Analysis IR units in Analysis. To prevent unnecessary string generation, isEnabled function is added so that callers know when the description needs to be generated. Differential Revision: https://reviews.llvm.org/D58406 llvm-svn: 355068
57 lines
1.9 KiB
C++
57 lines
1.9 KiB
C++
//===- llvm/IR/OptBisect/Bisect.cpp - LLVM Bisect support -----------------===//
|
|
//
|
|
// 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 implements support for a bisecting optimizations based on a
|
|
/// command line option.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/IR/OptBisect.h"
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/Pass.h"
|
|
#include "llvm/Support/CommandLine.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
#include <cassert>
|
|
#include <limits>
|
|
#include <string>
|
|
|
|
using namespace llvm;
|
|
|
|
static cl::opt<int> OptBisectLimit("opt-bisect-limit", cl::Hidden,
|
|
cl::init(std::numeric_limits<int>::max()),
|
|
cl::Optional,
|
|
cl::desc("Maximum optimization to perform"));
|
|
|
|
OptBisect::OptBisect() : OptPassGate() {
|
|
BisectEnabled = OptBisectLimit != std::numeric_limits<int>::max();
|
|
}
|
|
|
|
static void printPassMessage(const StringRef &Name, int PassNum,
|
|
StringRef TargetDesc, bool Running) {
|
|
StringRef Status = Running ? "" : "NOT ";
|
|
errs() << "BISECT: " << Status << "running pass "
|
|
<< "(" << PassNum << ") " << Name << " on " << TargetDesc << "\n";
|
|
}
|
|
|
|
bool OptBisect::shouldRunPass(const Pass *P, StringRef IRDescription) {
|
|
assert(BisectEnabled);
|
|
|
|
return checkPass(P->getPassName(), IRDescription);
|
|
}
|
|
|
|
bool OptBisect::checkPass(const StringRef PassName,
|
|
const StringRef TargetDesc) {
|
|
assert(BisectEnabled);
|
|
|
|
int CurBisectNum = ++LastBisectNum;
|
|
bool ShouldRun = (OptBisectLimit == -1 || CurBisectNum <= OptBisectLimit);
|
|
printPassMessage(PassName, CurBisectNum, TargetDesc, ShouldRun);
|
|
return ShouldRun;
|
|
}
|