mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
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
This commit is contained in:
parent
717ca64899
commit
98b9ddd887
@ -5482,3 +5482,8 @@ MachineBasicBlock::iterator AArch64InstrInfo::insertOutlinedCall(
|
||||
|
||||
return CallPt;
|
||||
}
|
||||
|
||||
bool AArch64InstrInfo::shouldOutlineFromFunctionByDefault(
|
||||
MachineFunction &MF) const {
|
||||
return MF.getFunction().optForMinSize();
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -154,6 +154,8 @@
|
||||
; CHECK-NEXT: Insert fentry calls
|
||||
; CHECK-NEXT: Insert XRay ops
|
||||
; CHECK-NEXT: Implement the 'patchable-function' attribute
|
||||
; CHECK-NEXT: Machine Outliner
|
||||
; CHECK-NEXT: FunctionPass Manager
|
||||
; CHECK-NEXT: Lazy Machine Block Frequency Analysis
|
||||
; CHECK-NEXT: Machine Optimization Remark Emitter
|
||||
; CHECK-NEXT: AArch64 Assembly Printer
|
||||
|
@ -1,6 +1,6 @@
|
||||
; RUN: llc %s -mtriple=arm64-apple-darwin -o - | \
|
||||
; RUN: FileCheck --check-prefixes=CHECK,CHECK-DARWIN %s
|
||||
; RUN: llc %s -mtriple=arm64-linux-gnu -o - | \
|
||||
; RUN: llc %s -enable-machine-outliner=never -mtriple=arm64-apple-darwin -o - \
|
||||
; RUN: | FileCheck --check-prefixes=CHECK,CHECK-DARWIN %s
|
||||
; RUN: llc %s -enable-machine-outliner=never -mtriple=arm64-linux-gnu -o - | \
|
||||
; RUN: FileCheck --check-prefixes=CHECK,CHECK-LINUX %s
|
||||
; <rdar://problem/14199482> ARM64: Calls to bzero() replaced with calls to memset()
|
||||
|
||||
|
@ -26,8 +26,8 @@
|
||||
; requested. (This hard-codes the previous pass to the Assembly Printer,
|
||||
; please adjust accordingly.)
|
||||
|
||||
; HOTNESS: Executing Pass 'Implement the 'patchable-function' attribute'
|
||||
; HOTNESS-NEXT: Freeing Pass 'Implement the 'patchable-function' attribute'
|
||||
; HOTNESS: Freeing Pass 'Machine Outliner'
|
||||
; HOTNESS-NEXT: Executing Pass 'Function Pass Manager'
|
||||
; HOTNESS-NEXT: Executing Pass 'Lazy Machine Block Frequency Analysis'
|
||||
; HOTNESS-NEXT: Executing Pass 'Machine Optimization Remark Emitter'
|
||||
; HOTNESS-NEXT: Building MachineBlockFrequencyInfo on the fly
|
||||
@ -41,8 +41,8 @@
|
||||
; HOTNESS: arm64-summary-remarks.ll:5:0: 1 instructions in function (hotness: 33)
|
||||
|
||||
|
||||
; NO_HOTNESS: Executing Pass 'Implement the 'patchable-function' attribute'
|
||||
; NO_HOTNESS-NEXT: Freeing Pass 'Implement the 'patchable-function' attribute'
|
||||
; NO_HOTNESS: Freeing Pass 'Machine Outliner'
|
||||
; NO_HOTNESS-NEXT: Executing Pass 'Function Pass Manager'
|
||||
; NO_HOTNESS-NEXT: Executing Pass 'Lazy Machine Block Frequency Analysis'
|
||||
; NO_HOTNESS-NEXT: Executing Pass 'Machine Optimization Remark Emitter'
|
||||
; NO_HOTNESS-NEXT: Executing Pass 'AArch64 Assembly Printer'
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -mcpu=cyclone | FileCheck %s
|
||||
; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -mattr=-fp-armv8 | FileCheck --check-prefix=CHECK-NOFP %s
|
||||
; RUN: llc -enable-machine-outliner=never -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -mcpu=cyclone | FileCheck %s
|
||||
; RUN: llc -enable-machine-outliner=never -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -mattr=-fp-armv8 | FileCheck --check-prefix=CHECK-NOFP %s
|
||||
|
||||
@var32 = global i32 0
|
||||
@var64 = global i64 0
|
||||
|
71
test/CodeGen/AArch64/machine-outliner-default.mir
Normal file
71
test/CodeGen/AArch64/machine-outliner-default.mir
Normal file
@ -0,0 +1,71 @@
|
||||
# RUN: llc -mtriple=aarch64--- -run-pass=machine-outliner \
|
||||
# RUN: -verify-machineinstrs %s -o - | FileCheck %s
|
||||
|
||||
--- |
|
||||
define void @outline_1() #0 { ret void }
|
||||
define void @outline_2() #0 { ret void }
|
||||
define void @outline_3() #0 { ret void }
|
||||
define void @dont_outline() #1 { ret void }
|
||||
|
||||
attributes #0 = { noredzone minsize optsize }
|
||||
attributes #1 = { noredzone }
|
||||
...
|
||||
---
|
||||
|
||||
name: outline_1
|
||||
tracksRegLiveness: true
|
||||
body: |
|
||||
bb.0:
|
||||
; CHECK-LABEL: bb.0:
|
||||
; CHECK: OUTLINED
|
||||
liveins: $w8, $wzr
|
||||
$w8 = ORRWri $wzr, 1
|
||||
$w8 = ORRWri $wzr, 2
|
||||
$w8 = ORRWri $wzr, 3
|
||||
$w8 = ORRWri $wzr, 4
|
||||
RET undef $lr
|
||||
...
|
||||
---
|
||||
|
||||
name: outline_2
|
||||
tracksRegLiveness: true
|
||||
body: |
|
||||
bb.0:
|
||||
; CHECK-LABEL: bb.0:
|
||||
; CHECK: OUTLINED
|
||||
liveins: $w8, $wzr
|
||||
$w8 = ORRWri $wzr, 1
|
||||
$w8 = ORRWri $wzr, 2
|
||||
$w8 = ORRWri $wzr, 3
|
||||
$w8 = ORRWri $wzr, 4
|
||||
RET undef $lr
|
||||
...
|
||||
---
|
||||
|
||||
name: outline_3
|
||||
tracksRegLiveness: true
|
||||
body: |
|
||||
bb.0:
|
||||
; CHECK-LABEL: bb.0:
|
||||
; CHECK: OUTLINED
|
||||
liveins: $w8, $wzr
|
||||
$w8 = ORRWri $wzr, 1
|
||||
$w8 = ORRWri $wzr, 2
|
||||
$w8 = ORRWri $wzr, 3
|
||||
$w8 = ORRWri $wzr, 4
|
||||
RET undef $lr
|
||||
...
|
||||
---
|
||||
|
||||
name: dont_outline
|
||||
tracksRegLiveness: true
|
||||
body: |
|
||||
bb.0:
|
||||
; CHECK-LABEL: bb.0:
|
||||
; CHECK-NOT: BL
|
||||
liveins: $w8, $wzr
|
||||
$w8 = ORRWri $wzr, 1
|
||||
$w8 = ORRWri $wzr, 2
|
||||
$w8 = ORRWri $wzr, 3
|
||||
$w8 = ORRWri $wzr, 4
|
||||
RET undef $lr
|
@ -14,7 +14,7 @@
|
||||
; RUN: | FileCheck %s -check-prefix=NEVER
|
||||
|
||||
; RUN: llc %s -debug-pass=Structure -verify-machineinstrs \
|
||||
; RUN: -mtriple arm64---- -o /dev/null 2>&1 \
|
||||
; RUN: --debug-only=machine-outliner -mtriple arm64---- -o /dev/null 2>&1 \
|
||||
; RUN: | FileCheck %s -check-prefix=NOT-ADDED
|
||||
|
||||
; RUN: llc %s -O=0 -debug-pass=Structure -verify-machineinstrs \
|
||||
@ -27,10 +27,11 @@
|
||||
; Cases where it should be added:
|
||||
; * -enable-machine-outliner
|
||||
; * -enable-machine-outliner=always
|
||||
; * -enable-machine-outliner is not passed (AArch64 supports
|
||||
; target-default outlining)
|
||||
;
|
||||
; Cases where it should not be added:
|
||||
; * -O0 or equivalent
|
||||
; * -enable-machine-outliner is not passed
|
||||
; * -enable-machine-outliner=never is passed
|
||||
|
||||
; ALWAYS: Machine Outliner
|
||||
@ -38,7 +39,8 @@
|
||||
; ENABLE: Machine Outliner
|
||||
; ENABLE: Machine Outliner: Running on all functions
|
||||
; NEVER-NOT: Machine Outliner
|
||||
; NOT-ADDED-NOT: Machine Outliner
|
||||
; NOT-ADDED: Machine Outliner
|
||||
; NOT-ADDED: Machine Outliner: Running on target-default functions
|
||||
; OPTNONE-NOT: Machine Outliner
|
||||
|
||||
define void @foo() {
|
||||
|
@ -89,6 +89,7 @@ entry:
|
||||
; CHECKM1-NOT: %jump-table.1
|
||||
; CHECKM3-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.5 %bb.6{{$}}
|
||||
; CHECKM3-NOT: %jump-table.1
|
||||
; CHECK-DAG: End machine code for function jt2.
|
||||
|
||||
bb1: tail call void @ext(i32 1) br label %return
|
||||
bb2: tail call void @ext(i32 2) br label %return
|
||||
|
Loading…
Reference in New Issue
Block a user