diff options
| author | Jessica Paquette <jpaquette@apple.com> | 2018-07-27 20:18:27 +0000 | 
|---|---|---|
| committer | Jessica Paquette <jpaquette@apple.com> | 2018-07-27 20:18:27 +0000 | 
| commit | f90edbe3d6b0c9b72214f6514133a72997610964 (patch) | |
| tree | d1b2854518ee2904517848b70361f2f3b03433a8 /llvm/lib | |
| parent | 1b826174738891ec3bdc4b1964ac45757448a4c2 (diff) | |
| download | bcm5719-llvm-f90edbe3d6b0c9b72214f6514133a72997610964.tar.gz bcm5719-llvm-f90edbe3d6b0c9b72214f6514133a72997610964.zip | |
Recommit "Enable MachineOutliner by default under -Oz for AArch64"
Fixed the ASAN failure from before in r338148, so recommiting.
This patch enables the MachineOutliner by default in AArch64 under -Oz.
The MachineOutliner offers around a 4.5% improvement on the current -Oz code
size improvements.
We have done work into improving the debuggability of outlined code, so that
users of -Oz won't be surprised by the optimization. We have also been executing
the LLVM test suite and common external tests such as the SPEC suites
continuously with no issue. The outliner has a low compile-time overhead of
roughly 1%. At this point, the outliner would be a really good addition to the
-Oz pass pipeline!
llvm-svn: 338160
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64InstrInfo.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64InstrInfo.h | 1 | ||||
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64TargetMachine.cpp | 3 | 
3 files changed, 9 insertions, 0 deletions
| diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp index 230480cf1ce..b571c4207c9 100644 --- a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp @@ -5482,3 +5482,8 @@ MachineBasicBlock::iterator AArch64InstrInfo::insertOutlinedCall(    return CallPt;  } + +bool AArch64InstrInfo::shouldOutlineFromFunctionByDefault( +  MachineFunction &MF) const { +  return MF.getFunction().optForMinSize(); +} diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.h b/llvm/lib/Target/AArch64/AArch64InstrInfo.h index 0e5953f6216..585cbd4b9c7 100644 --- a/llvm/lib/Target/AArch64/AArch64InstrInfo.h +++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.h @@ -249,6 +249,7 @@ public:    insertOutlinedCall(Module &M, MachineBasicBlock &MBB,                       MachineBasicBlock::iterator &It, MachineFunction &MF,                       const outliner::Candidate &C) const override; +  bool shouldOutlineFromFunctionByDefault(MachineFunction &MF) const override;    /// Returns true if the instruction sets to an immediate value that can be    /// executed more efficiently.    bool isExynosResetFast(const MachineInstr &MI) const; diff --git a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp index 01a997e5aed..120d71381c6 100644 --- a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp +++ b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp @@ -255,6 +255,9 @@ AArch64TargetMachine::AArch64TargetMachine(const Target &T, const Triple &TT,    // AArch64 supports the MachineOutliner.    setMachineOutliner(true); + +  // AArch64 supports default outlining behaviour. +  setSupportsDefaultOutlining(true);  }  AArch64TargetMachine::~AArch64TargetMachine() = default; | 

