Add EnableIPRA to TargetOptions, and move the cl::opt -enable-ipra to TargetMachine.cpp
Avoid exposing a cl::opt in a public header and instead promote this option in the API. Alternatively, we could land the cl::opt in CommandFlags.h so that it is available to every tool, but we would still have to find an option for clang. llvm-svn: 275348
This commit is contained in:
@@ -16,11 +16,8 @@
|
|||||||
|
|
||||||
#include "llvm/Pass.h"
|
#include "llvm/Pass.h"
|
||||||
#include "llvm/Support/CodeGen.h"
|
#include "llvm/Support/CodeGen.h"
|
||||||
#include "llvm/Support/CommandLine.h"
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
extern llvm::cl::opt<bool> UseIPRA;
|
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
|
|
||||||
class PassConfigImpl;
|
class PassConfigImpl;
|
||||||
|
|||||||
@@ -100,7 +100,8 @@ namespace llvm {
|
|||||||
DisableIntegratedAS(false), CompressDebugSections(false),
|
DisableIntegratedAS(false), CompressDebugSections(false),
|
||||||
RelaxELFRelocations(false), FunctionSections(false),
|
RelaxELFRelocations(false), FunctionSections(false),
|
||||||
DataSections(false), UniqueSectionNames(true), TrapUnreachable(false),
|
DataSections(false), UniqueSectionNames(true), TrapUnreachable(false),
|
||||||
EmulatedTLS(false), FloatABIType(FloatABI::Default),
|
EmulatedTLS(false), EnableIPRA(false),
|
||||||
|
FloatABIType(FloatABI::Default),
|
||||||
AllowFPOpFusion(FPOpFusion::Standard), Reciprocals(TargetRecip()),
|
AllowFPOpFusion(FPOpFusion::Standard), Reciprocals(TargetRecip()),
|
||||||
JTType(JumpTable::Single), ThreadModel(ThreadModel::POSIX),
|
JTType(JumpTable::Single), ThreadModel(ThreadModel::POSIX),
|
||||||
EABIVersion(EABI::Default), DebuggerTuning(DebuggerKind::Default),
|
EABIVersion(EABI::Default), DebuggerTuning(DebuggerKind::Default),
|
||||||
@@ -207,6 +208,9 @@ namespace llvm {
|
|||||||
/// function in the runtime library..
|
/// function in the runtime library..
|
||||||
unsigned EmulatedTLS : 1;
|
unsigned EmulatedTLS : 1;
|
||||||
|
|
||||||
|
/// This flag enables InterProcedural Register Allocation (IPRA).
|
||||||
|
unsigned EnableIPRA : 1;
|
||||||
|
|
||||||
/// FloatABIType - This setting is set by -float-abi=xxx option is specfied
|
/// FloatABIType - This setting is set by -float-abi=xxx option is specfied
|
||||||
/// on the command line. This setting may either be Default, Soft, or Hard.
|
/// on the command line. This setting may either be Default, Soft, or Hard.
|
||||||
/// Default selects the target's default behavior. Soft selects the ABI for
|
/// Default selects the target's default behavior. Soft selects the ABI for
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ void TargetFrameLowering::determineCalleeSaves(MachineFunction &MF,
|
|||||||
|
|
||||||
// When interprocedural register allocation is enabled caller saved registers
|
// When interprocedural register allocation is enabled caller saved registers
|
||||||
// are preferred over callee saved registers.
|
// are preferred over callee saved registers.
|
||||||
if (UseIPRA && isSafeForNoCSROpt(MF.getFunction()))
|
if (MF.getTarget().Options.EnableIPRA && isSafeForNoCSROpt(MF.getFunction()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Get the callee saved register list...
|
// Get the callee saved register list...
|
||||||
|
|||||||
@@ -124,10 +124,6 @@ static cl::opt<CFLAAType> UseCFLAA(
|
|||||||
"Enable both variants of CFL-AA"),
|
"Enable both variants of CFL-AA"),
|
||||||
clEnumValEnd));
|
clEnumValEnd));
|
||||||
|
|
||||||
cl::opt<bool> UseIPRA("enable-ipra", cl::init(false), cl::Hidden,
|
|
||||||
cl::desc("Enable interprocedural register allocation "
|
|
||||||
"to reduce load/store at procedure calls."));
|
|
||||||
|
|
||||||
/// Allow standard passes to be disabled by command line options. This supports
|
/// Allow standard passes to be disabled by command line options. This supports
|
||||||
/// simple binary flags that either suppress the pass or do nothing.
|
/// simple binary flags that either suppress the pass or do nothing.
|
||||||
/// i.e. -disable-mypass=false has no effect.
|
/// i.e. -disable-mypass=false has no effect.
|
||||||
@@ -522,7 +518,7 @@ void TargetPassConfig::addISelPrepare() {
|
|||||||
addPreISel();
|
addPreISel();
|
||||||
|
|
||||||
// Force codegen to run according to the callgraph.
|
// Force codegen to run according to the callgraph.
|
||||||
if (UseIPRA)
|
if (TM->Options.EnableIPRA)
|
||||||
addPass(new DummyCGSCCPass);
|
addPass(new DummyCGSCCPass);
|
||||||
|
|
||||||
// Add both the safe stack and the stack protection passes: each of them will
|
// Add both the safe stack and the stack protection passes: each of them will
|
||||||
@@ -561,7 +557,7 @@ void TargetPassConfig::addISelPrepare() {
|
|||||||
void TargetPassConfig::addMachinePasses() {
|
void TargetPassConfig::addMachinePasses() {
|
||||||
AddingMachinePasses = true;
|
AddingMachinePasses = true;
|
||||||
|
|
||||||
if (UseIPRA)
|
if (TM->Options.EnableIPRA)
|
||||||
addPass(createRegUsageInfoPropPass());
|
addPass(createRegUsageInfoPropPass());
|
||||||
|
|
||||||
// Insert a machine instr printer pass after the specified pass.
|
// Insert a machine instr printer pass after the specified pass.
|
||||||
@@ -649,7 +645,7 @@ void TargetPassConfig::addMachinePasses() {
|
|||||||
|
|
||||||
addPreEmitPass();
|
addPreEmitPass();
|
||||||
|
|
||||||
if (UseIPRA)
|
if (TM->Options.EnableIPRA)
|
||||||
// Collect register usage information and produce a register mask of
|
// Collect register usage information and produce a register mask of
|
||||||
// clobbered registers, to be used to optimize call sites.
|
// clobbered registers, to be used to optimize call sites.
|
||||||
addPass(createRegUsageInfoCollector());
|
addPass(createRegUsageInfoCollector());
|
||||||
|
|||||||
@@ -31,6 +31,10 @@
|
|||||||
#include "llvm/Target/TargetSubtargetInfo.h"
|
#include "llvm/Target/TargetSubtargetInfo.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
|
cl::opt<bool> EnableIPRA("enable-ipra", cl::init(false), cl::Hidden,
|
||||||
|
cl::desc("Enable interprocedural register allocation "
|
||||||
|
"to reduce load/store at procedure calls."));
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// TargetMachine Class
|
// TargetMachine Class
|
||||||
//
|
//
|
||||||
@@ -40,7 +44,10 @@ TargetMachine::TargetMachine(const Target &T, StringRef DataLayoutString,
|
|||||||
const TargetOptions &Options)
|
const TargetOptions &Options)
|
||||||
: TheTarget(T), DL(DataLayoutString), TargetTriple(TT), TargetCPU(CPU),
|
: TheTarget(T), DL(DataLayoutString), TargetTriple(TT), TargetCPU(CPU),
|
||||||
TargetFS(FS), AsmInfo(nullptr), MRI(nullptr), MII(nullptr), STI(nullptr),
|
TargetFS(FS), AsmInfo(nullptr), MRI(nullptr), MII(nullptr), STI(nullptr),
|
||||||
RequireStructuredCFG(false), Options(Options) {}
|
RequireStructuredCFG(false), Options(Options) {
|
||||||
|
if (EnableIPRA.getNumOccurrences())
|
||||||
|
this->Options.EnableIPRA = EnableIPRA;
|
||||||
|
}
|
||||||
|
|
||||||
TargetMachine::~TargetMachine() {
|
TargetMachine::~TargetMachine() {
|
||||||
delete AsmInfo;
|
delete AsmInfo;
|
||||||
|
|||||||
Reference in New Issue
Block a user