[PATCH] D48682: [MachineOutliner] Add always and never options to -enable-machine-outliner

Jessica Paquette via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 27 16:30:01 PDT 2018


paquette created this revision.
paquette added a reviewer: eli.friedman.
Herald added a reviewer: javed.absar.
Herald added a subscriber: kristof.beyls.

To enable the MachineOutliner by default on AArch64, we need to be able to disable the MachineOutliner and also provide an option to "always" enable the outliner.

This adds that capability. It allows the user to still use the old -enable-machine-outliner option, which defaults to "always". This is building up to allowing the user to specify "always" versus the target default outlining behaviour.


https://reviews.llvm.org/D48682

Files:
  lib/CodeGen/TargetPassConfig.cpp
  test/CodeGen/AArch64/machine-outliner-flags.ll


Index: test/CodeGen/AArch64/machine-outliner-flags.ll
===================================================================
--- /dev/null
+++ test/CodeGen/AArch64/machine-outliner-flags.ll
@@ -0,0 +1,30 @@
+; RUN: llc %s -debug-pass=Structure -verify-machineinstrs \
+; RUN: -enable-machine-outliner=always -mtriple arm64---- -o /dev/null 2>&1 \
+; RUN: | FileCheck %s -check-prefix=ALWAYS
+
+; RUN: llc %s -debug-pass=Structure -verify-machineinstrs \
+; RUN: -enable-machine-outliner -mtriple arm64---- -o /dev/null 2>&1 \
+; RUN: | FileCheck %s -check-prefix=ENABLE
+
+; RUN: llc %s -debug-pass=Structure -verify-machineinstrs \
+; RUN: -enable-machine-outliner=never -mtriple arm64---- -o /dev/null 2>&1 \
+; RUN: | FileCheck %s -check-prefix=NEVER
+
+; RUN: llc %s -debug-pass=Structure -verify-machineinstrs \
+; RUN: -mtriple arm64---- -o /dev/null 2>&1 \
+; RUN: | FileCheck %s -check-prefix=NOT-ADDED
+
+; Make sure that the outliner flags all work properly. If we specify
+; -enable-machine-outliner with always or no argument, it should be added to the
+; pass pipeline. If we specify it with never, or don't pass the flag,
+; then we shouldn't add it.
+
+; ALWAYS: Machine Outliner
+; ENABLE: Machine Outliner
+; NEVER-NOT: Machine Outliner
+; NOT-ADDED-NOT: Machine Outliner
+
+define void @foo() {
+  ret void;
+}
+
Index: lib/CodeGen/TargetPassConfig.cpp
===================================================================
--- lib/CodeGen/TargetPassConfig.cpp
+++ lib/CodeGen/TargetPassConfig.cpp
@@ -111,9 +111,17 @@
     cl::desc("Verify generated machine code"),
     cl::init(false),
     cl::ZeroOrMore);
-static cl::opt<bool> EnableMachineOutliner("enable-machine-outliner",
-    cl::Hidden,
-    cl::desc("Enable machine outliner"));
+enum RunOutliner { AlwaysOutline, NeverOutline };
+// Enable or disable the MachineOutliner.
+static cl::opt<RunOutliner> EnableMachineOutliner(
+    "enable-machine-outliner", cl::desc("Enable the machine outliner"),
+    cl::Hidden, cl::ValueOptional, cl::init(NeverOutline),
+    cl::values(clEnumValN(AlwaysOutline, "always",
+                          "Run on all functions guaranteed to be beneficial "
+                          "(pass -enable-linkonceodr-outlining for more)"),
+               clEnumValN(NeverOutline, "never", "Disable all outlining"),
+               // Sentinel value for unspecified option.
+               clEnumValN(AlwaysOutline, "", "")));
 // Enable or disable FastISel. Both options are needed, because
 // FastISel is enabled by default with -fast, and we wish to be
 // able to enable or disable fast-isel independently from -O0.
@@ -906,7 +914,7 @@
   addPass(&XRayInstrumentationID, false);
   addPass(&PatchableFunctionID, false);
 
-  if (EnableMachineOutliner)
+  if (EnableMachineOutliner == AlwaysOutline)
     addPass(createMachineOutlinerPass());
 
   // Add passes that directly emit MI after all other MI passes.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D48682.153200.patch
Type: text/x-patch
Size: 2916 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180627/f54935f5/attachment.bin>


More information about the llvm-commits mailing list