summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/CodeGen/TargetInstrInfo.h3
-rw-r--r--llvm/include/llvm/Target/TargetMachine.h3
-rw-r--r--llvm/include/llvm/Target/TargetOptions.h6
-rw-r--r--llvm/lib/CodeGen/MachineOutliner.cpp9
-rw-r--r--llvm/lib/CodeGen/TargetPassConfig.cpp3
-rw-r--r--llvm/lib/Target/AArch64/AArch64InstrInfo.h2
-rw-r--r--llvm/lib/Target/AArch64/AArch64TargetMachine.cpp3
-rw-r--r--llvm/lib/Target/X86/X86InstrInfo.h3
-rw-r--r--llvm/lib/Target/X86/X86TargetMachine.cpp4
9 files changed, 17 insertions, 19 deletions
diff --git a/llvm/include/llvm/CodeGen/TargetInstrInfo.h b/llvm/include/llvm/CodeGen/TargetInstrInfo.h
index 2619488c525..b477680a5b1 100644
--- a/llvm/include/llvm/CodeGen/TargetInstrInfo.h
+++ b/llvm/include/llvm/CodeGen/TargetInstrInfo.h
@@ -1602,9 +1602,6 @@ public:
return false;
}
- /// Returns true if the target implements the MachineOutliner.
- virtual bool useMachineOutliner() const { return false; }
-
/// Returns a \p outliner::TargetCostInfo struct containing target-specific
/// information for a set of outlining candidates.
virtual outliner::TargetCostInfo getOutlininingCandidateInfo(
diff --git a/llvm/include/llvm/Target/TargetMachine.h b/llvm/include/llvm/Target/TargetMachine.h
index 1dfb9ddcc86..c2b74543c88 100644
--- a/llvm/include/llvm/Target/TargetMachine.h
+++ b/llvm/include/llvm/Target/TargetMachine.h
@@ -202,6 +202,9 @@ public:
bool getO0WantsFastISel() { return O0WantsFastISel; }
void setO0WantsFastISel(bool Enable) { O0WantsFastISel = Enable; }
void setGlobalISel(bool Enable) { Options.EnableGlobalISel = Enable; }
+ void setMachineOutliner(bool Enable) {
+ Options.EnableMachineOutliner = Enable;
+ }
bool shouldPrintMachineCode() const { return Options.PrintMachineCode; }
diff --git a/llvm/include/llvm/Target/TargetOptions.h b/llvm/include/llvm/Target/TargetOptions.h
index 726dddac517..db2818c1ea8 100644
--- a/llvm/include/llvm/Target/TargetOptions.h
+++ b/llvm/include/llvm/Target/TargetOptions.h
@@ -110,7 +110,8 @@ namespace llvm {
UniqueSectionNames(true), TrapUnreachable(false),
NoTrapAfterNoreturn(false),
EmulatedTLS(false), ExplicitEmulatedTLS(false),
- EnableIPRA(false), EmitStackSizeSection(false) {}
+ EnableIPRA(false), EmitStackSizeSection(false),
+ EnableMachineOutliner(false) {}
/// PrintMachineCode - This flag is enabled when the -print-machineinstrs
/// option is specified on the command line, and should enable debugging
@@ -231,6 +232,9 @@ namespace llvm {
/// Emit section containing metadata on function stack sizes.
unsigned EmitStackSizeSection : 1;
+ /// Enables the MachineOutliner pass.
+ unsigned EnableMachineOutliner : 1;
+
/// 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.
/// Default selects the target's default behavior. Soft selects the ABI for
diff --git a/llvm/lib/CodeGen/MachineOutliner.cpp b/llvm/lib/CodeGen/MachineOutliner.cpp
index 8f78240e1f7..8e92cd482d8 100644
--- a/llvm/lib/CodeGen/MachineOutliner.cpp
+++ b/llvm/lib/CodeGen/MachineOutliner.cpp
@@ -1331,15 +1331,6 @@ bool MachineOutliner::runOnModule(Module &M) {
const TargetRegisterInfo *TRI = STI.getRegisterInfo();
const TargetInstrInfo *TII = STI.getInstrInfo();
- // Does the target implement the MachineOutliner? If it doesn't, quit here.
- if (!TII->useMachineOutliner()) {
- // No. So we're done.
- LLVM_DEBUG(
- dbgs()
- << "Skipping pass: Target does not support the MachineOutliner.\n");
- return false;
- }
-
// If the user specifies that they want to outline from linkonceodrs, set
// it here.
OutlineFromLinkOnceODRs = EnableLinkOnceODROutlining;
diff --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp
index 8c5bdde888e..0ac89917012 100644
--- a/llvm/lib/CodeGen/TargetPassConfig.cpp
+++ b/llvm/lib/CodeGen/TargetPassConfig.cpp
@@ -906,7 +906,8 @@ void TargetPassConfig::addMachinePasses() {
addPass(&XRayInstrumentationID, false);
addPass(&PatchableFunctionID, false);
- if (EnableMachineOutliner)
+ if (TM->Options.EnableMachineOutliner &&
+ EnableMachineOutliner)
addPass(createMachineOutlinerPass());
// Add passes that directly emit MI after all other MI passes.
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.h b/llvm/lib/Target/AArch64/AArch64InstrInfo.h
index 0e5e7976f93..80cae6c6071 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.h
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.h
@@ -236,8 +236,6 @@ public:
ArrayRef<std::pair<MachineMemOperand::Flags, const char *>>
getSerializableMachineMemOperandTargetFlags() const override;
- /// AArch64 supports the MachineOutliner.
- bool useMachineOutliner() const override { return true; }
bool isFunctionSafeToOutlineFrom(MachineFunction &MF,
bool OutlineFromLinkOnceODRs) const override;
outliner::TargetCostInfo getOutlininingCandidateInfo(
diff --git a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
index b25bcdb7edc..01a997e5aed 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
@@ -252,6 +252,9 @@ AArch64TargetMachine::AArch64TargetMachine(const Target &T, const Triple &TT,
// Enable GlobalISel at or below EnableGlobalISelAt0.
if (getOptLevel() <= EnableGlobalISelAtO)
setGlobalISel(true);
+
+ // AArch64 supports the MachineOutliner.
+ setMachineOutliner(true);
}
AArch64TargetMachine::~AArch64TargetMachine() = default;
diff --git a/llvm/lib/Target/X86/X86InstrInfo.h b/llvm/lib/Target/X86/X86InstrInfo.h
index 8fee1d950df..aa31c837924 100644
--- a/llvm/lib/Target/X86/X86InstrInfo.h
+++ b/llvm/lib/Target/X86/X86InstrInfo.h
@@ -553,9 +553,6 @@ public:
ArrayRef<std::pair<unsigned, const char *>>
getSerializableDirectMachineOperandTargetFlags() const override;
- /// X86 supports the MachineOutliner.
- bool useMachineOutliner() const override { return true; }
-
virtual outliner::TargetCostInfo getOutlininingCandidateInfo(
std::vector<outliner::Candidate> &RepeatedSequenceLocs) const override;
diff --git a/llvm/lib/Target/X86/X86TargetMachine.cpp b/llvm/lib/Target/X86/X86TargetMachine.cpp
index 9b45e3bddc8..c5f476b54b9 100644
--- a/llvm/lib/Target/X86/X86TargetMachine.cpp
+++ b/llvm/lib/Target/X86/X86TargetMachine.cpp
@@ -234,6 +234,10 @@ X86TargetMachine::X86TargetMachine(const Target &T, const Triple &TT,
this->Options.NoTrapAfterNoreturn = TT.isOSBinFormatMachO();
}
+ // Outlining is available for x86-64.
+ if (TT.getArch() == Triple::x86_64)
+ setMachineOutliner(true);
+
initAsmInfo();
}
OpenPOWER on IntegriCloud