<div dir="ltr"><div>Hello Jessica,</div><div><br></div><div>This commit broke tests on one of our builders:</div><div><a href="http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/11299">http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/11299</a></div><div><br></div><div>. . .</div><div>Failing Tests (1):</div><div>    LLVM :: CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll</div><div><br></div><div>Please have a look?</div><div><br></div><div>Thanks</div><div><br></div><div>Galina</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 27, 2018 at 1:18 PM, Jessica Paquette via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: paquette<br>
Date: Fri Jul 27 13:18:27 2018<br>
New Revision: 338160<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=338160&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=338160&view=rev</a><br>
Log:<br>
Recommit "Enable MachineOutliner by default under -Oz for AArch64"<br>
<br>
Fixed the ASAN failure from before in r338148, so recommiting.<br>
<br>
This patch enables the MachineOutliner by default in AArch64 under -Oz.<br>
<br>
The MachineOutliner offers around a 4.5% improvement on the current -Oz code<br>
size improvements.<br>
<br>
We have done work into improving the debuggability of outlined code, so that<br>
users of -Oz won't be surprised by the optimization. We have also been executing<br>
the LLVM test suite and common external tests such as the SPEC suites<br>
continuously with no issue. The outliner has a low compile-time overhead of<br>
roughly 1%. At this point, the outliner would be a really good addition to the<br>
-Oz pass pipeline!<br>
<br>
Added:<br>
    llvm/trunk/test/CodeGen/<wbr>AArch64/machine-outliner-<wbr>default.mir<br>
Modified:<br>
    llvm/trunk/lib/Target/AArch64/<wbr>AArch64InstrInfo.cpp<br>
    llvm/trunk/lib/Target/AArch64/<wbr>AArch64InstrInfo.h<br>
    llvm/trunk/lib/Target/AArch64/<wbr>AArch64TargetMachine.cpp<br>
    llvm/trunk/test/CodeGen/<wbr>AArch64/O3-pipeline.ll<br>
    llvm/trunk/test/CodeGen/<wbr>AArch64/arm64-memset-to-bzero.<wbr>ll<br>
    llvm/trunk/test/CodeGen/<wbr>AArch64/arm64-opt-remarks-<wbr>lazy-bfi.ll<br>
    llvm/trunk/test/CodeGen/<wbr>AArch64/cond-sel.ll<br>
    llvm/trunk/test/CodeGen/<wbr>AArch64/machine-outliner-<wbr>flags.ll<br>
    llvm/trunk/test/CodeGen/<wbr>AArch64/max-jump-table.ll<br>
<br>
Modified: llvm/trunk/lib/Target/AArch64/<wbr>AArch64InstrInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp?rev=338160&r1=338159&r2=338160&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Target/<wbr>AArch64/AArch64InstrInfo.cpp?<wbr>rev=338160&r1=338159&r2=<wbr>338160&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/AArch64/<wbr>AArch64InstrInfo.cpp (original)<br>
+++ llvm/trunk/lib/Target/AArch64/<wbr>AArch64InstrInfo.cpp Fri Jul 27 13:18:27 2018<br>
@@ -5482,3 +5482,8 @@ MachineBasicBlock::iterator AArch64Instr<br>
<br>
   return CallPt;<br>
 }<br>
+<br>
+bool AArch64InstrInfo::<wbr>shouldOutlineFromFunctionByDef<wbr>ault(<br>
+  MachineFunction &MF) const {<br>
+  return MF.getFunction().<wbr>optForMinSize();<br>
+}<br>
<br>
Modified: llvm/trunk/lib/Target/AArch64/<wbr>AArch64InstrInfo.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.h?rev=338160&r1=338159&r2=338160&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Target/<wbr>AArch64/AArch64InstrInfo.h?<wbr>rev=338160&r1=338159&r2=<wbr>338160&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/AArch64/<wbr>AArch64InstrInfo.h (original)<br>
+++ llvm/trunk/lib/Target/AArch64/<wbr>AArch64InstrInfo.h Fri Jul 27 13:18:27 2018<br>
@@ -249,6 +249,7 @@ public:<br>
   insertOutlinedCall(Module &M, MachineBasicBlock &MBB,<br>
                      MachineBasicBlock::iterator &It, MachineFunction &MF,<br>
                      const outliner::Candidate &C) const override;<br>
+  bool shouldOutlineFromFunctionByDef<wbr>ault(MachineFunction &MF) const override;<br>
   /// Returns true if the instruction sets to an immediate value that can be<br>
   /// executed more efficiently.<br>
   bool isExynosResetFast(const MachineInstr &MI) const;<br>
<br>
Modified: llvm/trunk/lib/Target/AArch64/<wbr>AArch64TargetMachine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp?rev=338160&r1=338159&r2=338160&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Target/<wbr>AArch64/AArch64TargetMachine.<wbr>cpp?rev=338160&r1=338159&r2=<wbr>338160&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/AArch64/<wbr>AArch64TargetMachine.cpp (original)<br>
+++ llvm/trunk/lib/Target/AArch64/<wbr>AArch64TargetMachine.cpp Fri Jul 27 13:18:27 2018<br>
@@ -255,6 +255,9 @@ AArch64TargetMachine::<wbr>AArch64TargetMachi<br>
<br>
   // AArch64 supports the MachineOutliner.<br>
   setMachineOutliner(true);<br>
+<br>
+  // AArch64 supports default outlining behaviour.<br>
+  setSupportsDefaultOutlining(<wbr>true);<br>
 }<br>
<br>
 AArch64TargetMachine::~<wbr>AArch64TargetMachine() = default;<br>
<br>
Modified: llvm/trunk/test/CodeGen/<wbr>AArch64/O3-pipeline.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/O3-pipeline.ll?rev=338160&r1=338159&r2=338160&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>CodeGen/AArch64/O3-pipeline.<wbr>ll?rev=338160&r1=338159&r2=<wbr>338160&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/<wbr>AArch64/O3-pipeline.ll (original)<br>
+++ llvm/trunk/test/CodeGen/<wbr>AArch64/O3-pipeline.ll Fri Jul 27 13:18:27 2018<br>
@@ -154,6 +154,8 @@<br>
 ; CHECK-NEXT:       Insert fentry calls<br>
 ; CHECK-NEXT:       Insert XRay ops<br>
 ; CHECK-NEXT:       Implement the 'patchable-function' attribute<br>
+; CHECK-NEXT:     Machine Outliner<br>
+; CHECK-NEXT:     FunctionPass Manager<br>
 ; CHECK-NEXT:       Lazy Machine Block Frequency Analysis<br>
 ; CHECK-NEXT:       Machine Optimization Remark Emitter<br>
 ; CHECK-NEXT:       AArch64 Assembly Printer<br>
<br>
Modified: llvm/trunk/test/CodeGen/<wbr>AArch64/arm64-memset-to-bzero.<wbr>ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/arm64-memset-to-bzero.ll?rev=338160&r1=338159&r2=338160&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>CodeGen/AArch64/arm64-memset-<wbr>to-bzero.ll?rev=338160&r1=<wbr>338159&r2=338160&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/<wbr>AArch64/arm64-memset-to-bzero.<wbr>ll (original)<br>
+++ llvm/trunk/test/CodeGen/<wbr>AArch64/arm64-memset-to-bzero.<wbr>ll Fri Jul 27 13:18:27 2018<br>
@@ -1,6 +1,6 @@<br>
-; RUN: llc %s -mtriple=arm64-apple-darwin -o - | \<br>
-; RUN:   FileCheck --check-prefixes=CHECK,CHECK-<wbr>DARWIN %s<br>
-; RUN: llc %s -mtriple=arm64-linux-gnu -o - | \<br>
+; RUN: llc %s -enable-machine-outliner=never -mtriple=arm64-apple-darwin -o - \<br>
+; RUN: | FileCheck --check-prefixes=CHECK,CHECK-<wbr>DARWIN %s<br>
+; RUN: llc %s -enable-machine-outliner=never -mtriple=arm64-linux-gnu -o - | \<br>
 ; RUN:   FileCheck --check-prefixes=CHECK,CHECK-<wbr>LINUX %s<br>
 ; <rdar://problem/14199482> ARM64: Calls to bzero() replaced with calls to memset()<br>
<br>
<br>
Modified: llvm/trunk/test/CodeGen/<wbr>AArch64/arm64-opt-remarks-<wbr>lazy-bfi.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll?rev=338160&r1=338159&r2=338160&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>CodeGen/AArch64/arm64-opt-<wbr>remarks-lazy-bfi.ll?rev=<wbr>338160&r1=338159&r2=338160&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/<wbr>AArch64/arm64-opt-remarks-<wbr>lazy-bfi.ll (original)<br>
+++ llvm/trunk/test/CodeGen/<wbr>AArch64/arm64-opt-remarks-<wbr>lazy-bfi.ll Fri Jul 27 13:18:27 2018<br>
@@ -26,8 +26,8 @@<br>
 ; requested.  (This hard-codes the previous pass to the Assembly Printer,<br>
 ; please adjust accordingly.)<br>
<br>
-; HOTNESS:      Executing Pass 'Implement the 'patchable-function' attribute'<br>
-; HOTNESS-NEXT:  Freeing Pass 'Implement the 'patchable-function' attribute'<br>
+; HOTNESS:      Freeing Pass 'Machine Outliner'<br>
+; HOTNESS-NEXT:  Executing Pass 'Function Pass Manager'<br>
 ; HOTNESS-NEXT: Executing Pass 'Lazy Machine Block Frequency Analysis'<br>
 ; HOTNESS-NEXT: Executing Pass 'Machine Optimization Remark Emitter'<br>
 ; HOTNESS-NEXT: Building MachineBlockFrequencyInfo on the fly<br>
@@ -41,8 +41,8 @@<br>
 ; HOTNESS: arm64-summary-remarks.ll:5:0: 1 instructions in function (hotness: 33)<br>
<br>
<br>
-; NO_HOTNESS:      Executing Pass 'Implement the 'patchable-function' attribute'<br>
-; NO_HOTNESS-NEXT:  Freeing Pass 'Implement the 'patchable-function' attribute'<br>
+; NO_HOTNESS:      Freeing Pass 'Machine Outliner'<br>
+; NO_HOTNESS-NEXT:  Executing Pass 'Function Pass Manager'<br>
 ; NO_HOTNESS-NEXT: Executing Pass 'Lazy Machine Block Frequency Analysis'<br>
 ; NO_HOTNESS-NEXT: Executing Pass 'Machine Optimization Remark Emitter'<br>
 ; NO_HOTNESS-NEXT: Executing Pass 'AArch64 Assembly Printer'<br>
<br>
Modified: llvm/trunk/test/CodeGen/<wbr>AArch64/cond-sel.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/cond-sel.ll?rev=338160&r1=338159&r2=338160&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>CodeGen/AArch64/cond-sel.ll?<wbr>rev=338160&r1=338159&r2=<wbr>338160&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/<wbr>AArch64/cond-sel.ll (original)<br>
+++ llvm/trunk/test/CodeGen/<wbr>AArch64/cond-sel.ll Fri Jul 27 13:18:27 2018<br>
@@ -1,5 +1,5 @@<br>
-; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-<wbr>gnu -mcpu=cyclone | FileCheck %s<br>
-; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-<wbr>gnu -mattr=-fp-armv8 | FileCheck --check-prefix=CHECK-NOFP %s<br>
+; RUN: llc -enable-machine-outliner=never -verify-machineinstrs < %s -mtriple=aarch64-none-linux-<wbr>gnu -mcpu=cyclone | FileCheck %s<br>
+; RUN: llc -enable-machine-outliner=never -verify-machineinstrs < %s -mtriple=aarch64-none-linux-<wbr>gnu -mattr=-fp-armv8 | FileCheck --check-prefix=CHECK-NOFP %s<br>
<br>
 @var32 = global i32 0<br>
 @var64 = global i64 0<br>
<br>
Added: llvm/trunk/test/CodeGen/<wbr>AArch64/machine-outliner-<wbr>default.mir<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/machine-outliner-default.mir?rev=338160&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>CodeGen/AArch64/machine-<wbr>outliner-default.mir?rev=<wbr>338160&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/<wbr>AArch64/machine-outliner-<wbr>default.mir (added)<br>
+++ llvm/trunk/test/CodeGen/<wbr>AArch64/machine-outliner-<wbr>default.mir Fri Jul 27 13:18:27 2018<br>
@@ -0,0 +1,71 @@<br>
+# RUN: llc -mtriple=aarch64--- -run-pass=machine-outliner \<br>
+# RUN: -verify-machineinstrs %s -o - | FileCheck %s<br>
+<br>
+--- |<br>
+  define void @outline_1() #0 { ret void }<br>
+  define void @outline_2() #0 { ret void }<br>
+  define void @outline_3() #0 { ret void }<br>
+  define void @dont_outline() #1 { ret void }<br>
+<br>
+  attributes #0 = { noredzone minsize optsize }<br>
+  attributes #1 = { noredzone }<br>
+...<br>
+---<br>
+<br>
+name:           outline_1<br>
+tracksRegLiveness: true<br>
+body:             |<br>
+  bb.0:<br>
+    ; CHECK-LABEL: bb.0:<br>
+    ; CHECK: OUTLINED<br>
+    liveins: $w8, $wzr<br>
+    $w8 = ORRWri $wzr, 1<br>
+    $w8 = ORRWri $wzr, 2<br>
+    $w8 = ORRWri $wzr, 3<br>
+    $w8 = ORRWri $wzr, 4<br>
+    RET undef $lr<br>
+...<br>
+---<br>
+<br>
+name:           outline_2<br>
+tracksRegLiveness: true<br>
+body:             |<br>
+  bb.0:<br>
+    ; CHECK-LABEL: bb.0:<br>
+    ; CHECK: OUTLINED<br>
+    liveins: $w8, $wzr<br>
+    $w8 = ORRWri $wzr, 1<br>
+    $w8 = ORRWri $wzr, 2<br>
+    $w8 = ORRWri $wzr, 3<br>
+    $w8 = ORRWri $wzr, 4<br>
+    RET undef $lr<br>
+...<br>
+---<br>
+<br>
+name:           outline_3<br>
+tracksRegLiveness: true<br>
+body:             |<br>
+  bb.0:<br>
+    ; CHECK-LABEL: bb.0:<br>
+    ; CHECK: OUTLINED<br>
+    liveins: $w8, $wzr<br>
+    $w8 = ORRWri $wzr, 1<br>
+    $w8 = ORRWri $wzr, 2<br>
+    $w8 = ORRWri $wzr, 3<br>
+    $w8 = ORRWri $wzr, 4<br>
+    RET undef $lr<br>
+...<br>
+---<br>
+<br>
+name:           dont_outline<br>
+tracksRegLiveness: true<br>
+body:             |<br>
+  bb.0:<br>
+    ; CHECK-LABEL: bb.0:<br>
+    ; CHECK-NOT: BL<br>
+    liveins: $w8, $wzr<br>
+    $w8 = ORRWri $wzr, 1<br>
+    $w8 = ORRWri $wzr, 2<br>
+    $w8 = ORRWri $wzr, 3<br>
+    $w8 = ORRWri $wzr, 4<br>
+    RET undef $lr<br>
<br>
Modified: llvm/trunk/test/CodeGen/<wbr>AArch64/machine-outliner-<wbr>flags.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/machine-outliner-flags.ll?rev=338160&r1=338159&r2=338160&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>CodeGen/AArch64/machine-<wbr>outliner-flags.ll?rev=338160&<wbr>r1=338159&r2=338160&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/<wbr>AArch64/machine-outliner-<wbr>flags.ll (original)<br>
+++ llvm/trunk/test/CodeGen/<wbr>AArch64/machine-outliner-<wbr>flags.ll Fri Jul 27 13:18:27 2018<br>
@@ -14,7 +14,7 @@<br>
 ; RUN: | FileCheck %s -check-prefix=NEVER<br>
<br>
 ; RUN: llc %s -debug-pass=Structure -verify-machineinstrs \<br>
-; RUN: -mtriple arm64---- -o /dev/null 2>&1 \<br>
+; RUN: --debug-only=machine-outliner -mtriple arm64---- -o /dev/null 2>&1 \<br>
 ; RUN: | FileCheck %s -check-prefix=NOT-ADDED<br>
<br>
 ; RUN: llc %s -O=0 -debug-pass=Structure -verify-machineinstrs \<br>
@@ -27,10 +27,11 @@<br>
 ; Cases where it should be added:<br>
 ;  * -enable-machine-outliner<br>
 ;  * -enable-machine-outliner=<wbr>always<br>
+;  * -enable-machine-outliner is not passed (AArch64 supports<br>
+;     target-default outlining)<br>
 ;<br>
 ; Cases where it should not be added:<br>
 ;  * -O0 or equivalent<br>
-;  * -enable-machine-outliner is not passed<br>
 ;  * -enable-machine-outliner=never is passed<br>
<br>
 ; ALWAYS: Machine Outliner<br>
@@ -38,7 +39,8 @@<br>
 ; ENABLE: Machine Outliner<br>
 ; ENABLE: Machine Outliner: Running on all functions<br>
 ; NEVER-NOT: Machine Outliner<br>
-; NOT-ADDED-NOT: Machine Outliner<br>
+; NOT-ADDED: Machine Outliner<br>
+; NOT-ADDED: Machine Outliner: Running on target-default functions<br>
 ; OPTNONE-NOT: Machine Outliner<br>
<br>
 define void @foo() {<br>
<br>
Modified: llvm/trunk/test/CodeGen/<wbr>AArch64/max-jump-table.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/max-jump-table.ll?rev=338160&r1=338159&r2=338160&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>CodeGen/AArch64/max-jump-<wbr>table.ll?rev=338160&r1=338159&<wbr>r2=338160&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/<wbr>AArch64/max-jump-table.ll (original)<br>
+++ llvm/trunk/test/CodeGen/<wbr>AArch64/max-jump-table.ll Fri Jul 27 13:18:27 2018<br>
@@ -89,6 +89,7 @@ entry:<br>
 ; CHECKM1-NOT: %jump-table.1<br>
 ; 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{{$}}<br>
 ; CHECKM3-NOT: %jump-table.1<br>
+; CHECK-DAG: End machine code for function jt2.<br>
<br>
 bb1: tail call void @ext(i32 1) br label %return<br>
 bb2: tail call void @ext(i32 2) br label %return<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>