mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
f1a54f61f5
I am experimenting with turning backends into loadable modules and in that scenario, target specific command line arguments won't be available until after the targets are initialized. Also, most other tools initialize targets before parsing arguments. Reviewed By: wlei Differential Revision: https://reviews.llvm.org/D93348
56 lines
1.9 KiB
C++
56 lines
1.9 KiB
C++
//===- llvm-profgen.cpp - LLVM SPGO profile generation tool -----*- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// llvm-profgen generates SPGO profiles from perf script ouput.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "ErrorHandling.h"
|
|
#include "PerfReader.h"
|
|
#include "ProfileGenerator.h"
|
|
#include "ProfiledBinary.h"
|
|
#include "llvm/Support/CommandLine.h"
|
|
#include "llvm/Support/InitLLVM.h"
|
|
#include "llvm/Support/TargetSelect.h"
|
|
|
|
static cl::list<std::string> PerfTraceFilenames(
|
|
"perfscript", cl::value_desc("perfscript"), cl::OneOrMore,
|
|
llvm::cl::MiscFlags::CommaSeparated,
|
|
cl::desc("Path of perf-script trace created by Linux perf tool with "
|
|
"`script` command(the raw perf.data should be profiled with -b)"));
|
|
|
|
static cl::list<std::string>
|
|
BinaryFilenames("binary", cl::value_desc("binary"), cl::OneOrMore,
|
|
llvm::cl::MiscFlags::CommaSeparated,
|
|
cl::desc("Path of profiled binary files"));
|
|
|
|
using namespace llvm;
|
|
using namespace sampleprof;
|
|
|
|
int main(int argc, const char *argv[]) {
|
|
InitLLVM X(argc, argv);
|
|
|
|
// Initialize targets and assembly printers/parsers.
|
|
InitializeAllTargetInfos();
|
|
InitializeAllTargetMCs();
|
|
InitializeAllDisassemblers();
|
|
|
|
cl::ParseCommandLineOptions(argc, argv, "llvm SPGO profile generator\n");
|
|
|
|
// Load binaries and parse perf events and samples
|
|
PerfReader Reader(BinaryFilenames);
|
|
Reader.parsePerfTraces(PerfTraceFilenames);
|
|
|
|
std::unique_ptr<ProfileGenerator> Generator = ProfileGenerator::create(
|
|
Reader.getBinarySampleCounters(), Reader.getPerfScriptType());
|
|
Generator->generateProfile();
|
|
Generator->write();
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|