diff options
| -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 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AArch64/O3-pipeline.ll | 2 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AArch64/arm64-memset-to-bzero.ll | 6 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll | 8 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AArch64/cond-sel.ll | 4 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AArch64/machine-outliner-default.mir | 71 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AArch64/machine-outliner-flags.ll | 8 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AArch64/max-jump-table.ll | 1 | 
10 files changed, 97 insertions, 12 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp index dc3fa4f8c1d..9e5c0b83a4a 100644 --- a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp @@ -5478,3 +5478,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; diff --git a/llvm/test/CodeGen/AArch64/O3-pipeline.ll b/llvm/test/CodeGen/AArch64/O3-pipeline.ll index e482682fc9d..f0c7e4e67c1 100644 --- a/llvm/test/CodeGen/AArch64/O3-pipeline.ll +++ b/llvm/test/CodeGen/AArch64/O3-pipeline.ll @@ -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 diff --git a/llvm/test/CodeGen/AArch64/arm64-memset-to-bzero.ll b/llvm/test/CodeGen/AArch64/arm64-memset-to-bzero.ll index 0afe1c006b0..ab819a42729 100644 --- a/llvm/test/CodeGen/AArch64/arm64-memset-to-bzero.ll +++ b/llvm/test/CodeGen/AArch64/arm64-memset-to-bzero.ll @@ -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() diff --git a/llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll b/llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll index 7efb4bf6d59..452c822e43b 100644 --- a/llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll +++ b/llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll @@ -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' diff --git a/llvm/test/CodeGen/AArch64/cond-sel.ll b/llvm/test/CodeGen/AArch64/cond-sel.ll index b39cea1f619..691cbcf1a5d 100644 --- a/llvm/test/CodeGen/AArch64/cond-sel.ll +++ b/llvm/test/CodeGen/AArch64/cond-sel.ll @@ -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 diff --git a/llvm/test/CodeGen/AArch64/machine-outliner-default.mir b/llvm/test/CodeGen/AArch64/machine-outliner-default.mir new file mode 100644 index 00000000000..698a2fc55b5 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/machine-outliner-default.mir @@ -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 diff --git a/llvm/test/CodeGen/AArch64/machine-outliner-flags.ll b/llvm/test/CodeGen/AArch64/machine-outliner-flags.ll index e00a19099cf..c435093b794 100644 --- a/llvm/test/CodeGen/AArch64/machine-outliner-flags.ll +++ b/llvm/test/CodeGen/AArch64/machine-outliner-flags.ll @@ -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() { diff --git a/llvm/test/CodeGen/AArch64/max-jump-table.ll b/llvm/test/CodeGen/AArch64/max-jump-table.ll index 612eba8f2ce..44dde7b1cd0 100644 --- a/llvm/test/CodeGen/AArch64/max-jump-table.ll +++ b/llvm/test/CodeGen/AArch64/max-jump-table.ll @@ -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  | 

