[PATCH] D153784: [PassBuilder] Add textual representation for function simplification pipeline

Arthur Eubanks via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 26 09:55:38 PDT 2023


aeubanks created this revision.
aeubanks added reviewers: asbirlea, nikic.
Herald added subscribers: StephenFan, hiraditya.
Herald added a project: All.
aeubanks requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D153784

Files:
  llvm/lib/Passes/PassBuilder.cpp
  llvm/lib/Passes/PassRegistry.def
  llvm/test/Other/function-simplification.ll


Index: llvm/test/Other/function-simplification.ll
===================================================================
--- /dev/null
+++ llvm/test/Other/function-simplification.ll
@@ -0,0 +1,18 @@
+; RUN: opt -passes='function-simplification<O1>' -debug-pass-manager -disable-output < %s 2>&1 | FileCheck %s --check-prefix=O1
+; RUN: opt -passes='function-simplification<O2>' -debug-pass-manager -disable-output < %s 2>&1 | FileCheck %s --check-prefix=O23SZ
+; RUN: opt -passes='function-simplification<O3>' -debug-pass-manager -disable-output < %s 2>&1 | FileCheck %s --check-prefix=O23SZ
+; RUN: opt -passes='function-simplification<Os>' -debug-pass-manager -disable-output < %s 2>&1 | FileCheck %s --check-prefix=O23SZ
+; RUN: opt -passes='function-simplification<Oz>' -debug-pass-manager -disable-output < %s 2>&1 | FileCheck %s --check-prefix=O23SZ
+; RUN: not opt -passes='function-simplification<O0>' -disable-output < %s 2>&1 | FileCheck %s --check-prefix=O0
+
+; O1: Running pass: EarlyCSEPass
+; O1-NOT: Running pass: GVNPass
+
+; O23SZ: Running pass: EarlyCSEPass
+; O23SZ: Running pass: GVNPass
+
+; O0: invalid function-simplification parameter 'O0'
+
+define void @f() {
+  ret void
+}
\ No newline at end of file
Index: llvm/lib/Passes/PassRegistry.def
===================================================================
--- llvm/lib/Passes/PassRegistry.def
+++ llvm/lib/Passes/PassRegistry.def
@@ -543,6 +543,13 @@
                            },
                           parseSeparateConstOffsetFromGEPPassOptions,
                           "lower-gep")
+FUNCTION_PASS_WITH_PARAMS("function-simplification",
+                          "",
+                           [this](OptimizationLevel OL) {
+                             return buildFunctionSimplificationPipeline(OL, ThinOrFullLTOPhase::None);
+                           },
+                          parseFunctionSimplificationPipelineOptions,
+                          "O1;O2;O3;Os;Oz")
 #undef FUNCTION_PASS_WITH_PARAMS
 
 #ifndef LOOPNEST_PASS
Index: llvm/lib/Passes/PassBuilder.cpp
===================================================================
--- llvm/lib/Passes/PassBuilder.cpp
+++ llvm/lib/Passes/PassBuilder.cpp
@@ -1025,6 +1025,25 @@
                                "SeparateConstOffsetFromGEP");
 }
 
+Expected<OptimizationLevel>
+parseFunctionSimplificationPipelineOptions(StringRef Params) {
+  std::optional<OptimizationLevel> L =
+      StringSwitch<std::optional<OptimizationLevel>>(Params)
+          .Case("O1", OptimizationLevel::O1)
+          .Case("O2", OptimizationLevel::O2)
+          .Case("O3", OptimizationLevel::O3)
+          .Case("Os", OptimizationLevel::Os)
+          .Case("Oz", OptimizationLevel::Oz)
+          .Default(std::nullopt);
+  if (!L) {
+    return make_error<StringError>(
+        formatv("invalid function-simplification parameter '{0}' ", Params)
+            .str(),
+        inconvertibleErrorCode());
+  };
+  return *L;
+}
+
 } // namespace
 
 /// Tests whether a pass name starts with a valid prefix for a default pipeline


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D153784.534622.patch
Type: text/x-patch
Size: 3064 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230626/286364cd/attachment.bin>


More information about the llvm-commits mailing list