mirror of
https://github.com/intel/llvm.git
synced 2026-01-21 03:50:33 +08:00
[MachineOutliner] NFC: Move EnableLinkOnceODROutlining into MachineOutliner.cpp
This moves the EnableLinkOnceODROutlining flag from TargetPassConfig.cpp into MachineOutliner.cpp. It also removes OutlineFromLinkOnceODRs from the MachineOutliner constructor. This is now handled by the moved command-line flag. llvm-svn: 330373
This commit is contained in:
@@ -419,7 +419,7 @@ namespace llvm {
|
||||
|
||||
/// This pass performs outlining on machine instructions directly before
|
||||
/// printing assembly.
|
||||
ModulePass *createMachineOutlinerPass(bool OutlineFromLinkOnceODRs = false);
|
||||
ModulePass *createMachineOutlinerPass();
|
||||
|
||||
/// This pass expands the experimental reduction intrinsics into sequences of
|
||||
/// shuffles.
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
#include "llvm/IR/Mangler.h"
|
||||
#include "llvm/Support/Allocator.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <functional>
|
||||
@@ -87,6 +88,17 @@ using namespace ore;
|
||||
STATISTIC(NumOutlined, "Number of candidates outlined");
|
||||
STATISTIC(FunctionsCreated, "Number of functions created");
|
||||
|
||||
// Set to true if the user wants the outliner to run on linkonceodr linkage
|
||||
// functions. This is false by default because the linker can dedupe linkonceodr
|
||||
// functions. Since the outliner is confined to a single module (modulo LTO),
|
||||
// this is off by default. It should, however, be the default behaviour in
|
||||
// LTO.
|
||||
static cl::opt<bool> EnableLinkOnceODROutlining(
|
||||
"enable-linkonceodr-outlining",
|
||||
cl::Hidden,
|
||||
cl::desc("Enable the machine outliner on linkonceodr functions"),
|
||||
cl::init(false));
|
||||
|
||||
namespace {
|
||||
|
||||
/// \brief An individual sequence of instructions to be replaced with a call to
|
||||
@@ -813,8 +825,7 @@ struct MachineOutliner : public ModulePass {
|
||||
ModulePass::getAnalysisUsage(AU);
|
||||
}
|
||||
|
||||
MachineOutliner(bool OutlineFromLinkOnceODRs = false)
|
||||
: ModulePass(ID), OutlineFromLinkOnceODRs(OutlineFromLinkOnceODRs) {
|
||||
MachineOutliner() : ModulePass(ID) {
|
||||
initializeMachineOutlinerPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
|
||||
@@ -910,8 +921,8 @@ struct MachineOutliner : public ModulePass {
|
||||
char MachineOutliner::ID = 0;
|
||||
|
||||
namespace llvm {
|
||||
ModulePass *createMachineOutlinerPass(bool OutlineFromLinkOnceODRs) {
|
||||
return new MachineOutliner(OutlineFromLinkOnceODRs);
|
||||
ModulePass *createMachineOutlinerPass() {
|
||||
return new MachineOutliner();
|
||||
}
|
||||
|
||||
} // namespace llvm
|
||||
@@ -1425,6 +1436,10 @@ bool MachineOutliner::runOnModule(Module &M) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If the user specifies that they want to outline from linkonceodrs, set
|
||||
// it here.
|
||||
OutlineFromLinkOnceODRs = EnableLinkOnceODROutlining;
|
||||
|
||||
InstructionMapper Mapper;
|
||||
|
||||
// Build instruction mappings for each function in the module. Start by
|
||||
|
||||
@@ -114,11 +114,6 @@ static cl::opt<bool> VerifyMachineCode("verify-machineinstrs", cl::Hidden,
|
||||
static cl::opt<bool> EnableMachineOutliner("enable-machine-outliner",
|
||||
cl::Hidden,
|
||||
cl::desc("Enable machine outliner"));
|
||||
static cl::opt<bool> EnableLinkOnceODROutlining(
|
||||
"enable-linkonceodr-outlining",
|
||||
cl::Hidden,
|
||||
cl::desc("Enable the machine outliner on linkonceodr functions"),
|
||||
cl::init(false));
|
||||
// Enable or disable FastISel. Both options are needed, because
|
||||
// FastISel is enabled by default with -fast, and we wish to be
|
||||
// able to enable or disable fast-isel independently from -O0.
|
||||
@@ -907,7 +902,7 @@ void TargetPassConfig::addMachinePasses() {
|
||||
addPass(&PatchableFunctionID, false);
|
||||
|
||||
if (EnableMachineOutliner)
|
||||
PM->add(createMachineOutlinerPass(EnableLinkOnceODROutlining));
|
||||
addPass(createMachineOutlinerPass());
|
||||
|
||||
// Add passes that directly emit MI after all other MI passes.
|
||||
addPreEmitPass2();
|
||||
|
||||
Reference in New Issue
Block a user