[llvm] bd1f80f - [llvm-reduce] Add delta pass to run IR passes

Arthur Eubanks via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 12 10:38:38 PDT 2022


Author: Arthur Eubanks
Date: 2022-08-12T10:38:19-07:00
New Revision: bd1f80f54e249b4b8abc1f5c520b0743ee0e07e4

URL: https://github.com/llvm/llvm-project/commit/bd1f80f54e249b4b8abc1f5c520b0743ee0e07e4
DIFF: https://github.com/llvm/llvm-project/commit/bd1f80f54e249b4b8abc1f5c520b0743ee0e07e4.diff

LOG: [llvm-reduce] Add delta pass to run IR passes

The exact IR passes run is customizable via `-ir-passes`.

Reviewed By: regehr

Differential Revision: https://reviews.llvm.org/D123749

Added: 
    llvm/test/tools/llvm-reduce/run-ir-passes.ll
    llvm/tools/llvm-reduce/deltas/RunIRPasses.cpp
    llvm/tools/llvm-reduce/deltas/RunIRPasses.h

Modified: 
    llvm/tools/llvm-reduce/CMakeLists.txt
    llvm/tools/llvm-reduce/DeltaManager.cpp
    llvm/utils/gn/secondary/llvm/tools/llvm-reduce/BUILD.gn

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/llvm-reduce/run-ir-passes.ll b/llvm/test/tools/llvm-reduce/run-ir-passes.ll
new file mode 100644
index 0000000000000..d3dceec252286
--- /dev/null
+++ b/llvm/test/tools/llvm-reduce/run-ir-passes.ll
@@ -0,0 +1,28 @@
+; RUN: llvm-reduce --delta-passes=ir-passes --test FileCheck --test-arg --check-prefixes=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t
+; RUN: FileCheck --check-prefixes=CHECK-FINAL --input-file=%t %s
+
+; CHECK-INTERESTINGNESS-LABEL: @f1
+; CHECK-INTERESTINGNESS: add
+; CHECK-INTERESTINGNESS-LABEL: @f2
+; CHECK-INTERESTINGNESS: add
+; CHECK-INTERESTINGNESS: add
+
+; CHECK-FINAL-LABEL: @f1
+; CHECK-FINAL: add i32 %a, 10
+; CHECK-FINAL-LABEL: @f2
+; CHECK-FINAL: add i32 %a, 5
+; CHECK-FINAL: add i32 %b, 5
+
+define i32 @f1(i32 %a) {
+  %b = add i32 %a, 5
+  %c = add i32 %b, 5
+  ret i32 %c
+}
+
+define i32 @f2(i32 %a) {
+  %b = add i32 %a, 5
+  %c = add i32 %b, 5
+  ret i32 %c
+}
+
+declare void @f3()
\ No newline at end of file

diff  --git a/llvm/tools/llvm-reduce/CMakeLists.txt b/llvm/tools/llvm-reduce/CMakeLists.txt
index fe6619d306f4f..969da364bfa43 100644
--- a/llvm/tools/llvm-reduce/CMakeLists.txt
+++ b/llvm/tools/llvm-reduce/CMakeLists.txt
@@ -11,6 +11,7 @@ set(LLVM_LINK_COMPONENTS
   IRReader
   MC
   MIRParser
+  Passes
   Support
   Target
   TransformUtils
@@ -48,6 +49,7 @@ add_llvm_tool(llvm-reduce
   deltas/ReduceRegisterMasks.cpp
   deltas/ReduceRegisterDefs.cpp
   deltas/ReduceRegisterUses.cpp
+  deltas/RunIRPasses.cpp
   deltas/SimplifyInstructions.cpp
   llvm-reduce.cpp
 

diff  --git a/llvm/tools/llvm-reduce/DeltaManager.cpp b/llvm/tools/llvm-reduce/DeltaManager.cpp
index 5601ee951dc88..5fa0376545487 100644
--- a/llvm/tools/llvm-reduce/DeltaManager.cpp
+++ b/llvm/tools/llvm-reduce/DeltaManager.cpp
@@ -40,6 +40,7 @@
 #include "deltas/ReduceRegisterUses.h"
 #include "deltas/ReduceSpecialGlobals.h"
 #include "deltas/ReduceVirtualRegisters.h"
+#include "deltas/RunIRPasses.h"
 #include "deltas/SimplifyInstructions.h"
 #include "llvm/Support/CommandLine.h"
 
@@ -67,6 +68,7 @@ static cl::opt<std::string>
     DELTA_PASS("arguments", reduceArgumentsDeltaPass)                          \
     DELTA_PASS("instructions", reduceInstructionsDeltaPass)                    \
     DELTA_PASS("simplify-instructions", simplifyInstructionsDeltaPass)         \
+    DELTA_PASS("ir-passes", runIRPassesDeltaPass)                              \
     DELTA_PASS("operands-zero", reduceOperandsZeroDeltaPass)                   \
     DELTA_PASS("operands-one", reduceOperandsOneDeltaPass)                     \
     DELTA_PASS("operands-nan", reduceOperandsNaNDeltaPass)                     \

diff  --git a/llvm/tools/llvm-reduce/deltas/RunIRPasses.cpp b/llvm/tools/llvm-reduce/deltas/RunIRPasses.cpp
new file mode 100644
index 0000000000000..ba93ba724eeb7
--- /dev/null
+++ b/llvm/tools/llvm-reduce/deltas/RunIRPasses.cpp
@@ -0,0 +1,53 @@
+//===- RunIRPasses.cpp ----------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "RunIRPasses.h"
+#include "Delta.h"
+#include "llvm/Passes/PassBuilder.h"
+#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ErrorHandling.h"
+
+using namespace llvm;
+
+static cl::opt<std::string> PassPipeline(
+    "ir-passes",
+    cl::desc("A textual description of the pass pipeline, same as "
+             "what's passed to `opt -passes`."),
+    cl::init(
+        "function(sroa,instcombine,gvn,simplifycfg,infer-address-spaces)"));
+
+static void runPasses(Oracle &O, Module &Program) {
+  LoopAnalysisManager LAM;
+  FunctionAnalysisManager FAM;
+  CGSCCAnalysisManager CGAM;
+  ModuleAnalysisManager MAM;
+
+  PassInstrumentationCallbacks PIC;
+  PIC.registerShouldRunOptionalPassCallback(
+      [&](StringRef, Any) { return !O.shouldKeep(); });
+  PassBuilder PB(nullptr, PipelineTuningOptions(), None, &PIC);
+
+  PB.registerModuleAnalyses(MAM);
+  PB.registerCGSCCAnalyses(CGAM);
+  PB.registerFunctionAnalyses(FAM);
+  PB.registerLoopAnalyses(LAM);
+  PB.crossRegisterProxies(LAM, FAM, CGAM, MAM);
+
+  ModulePassManager MPM;
+  if (auto Err = PB.parsePassPipeline(MPM, PassPipeline)) {
+    errs() << toString(std::move(Err)) << "\n";
+    report_fatal_error("Error constructing pass pipeline");
+  }
+  MPM.run(Program, MAM);
+}
+
+void llvm::runIRPassesDeltaPass(TestRunner &Test) {
+  errs() << "*** Running passes ...\n";
+  runDeltaPass(Test, runPasses);
+  errs() << "----------------------------\n";
+}

diff  --git a/llvm/tools/llvm-reduce/deltas/RunIRPasses.h b/llvm/tools/llvm-reduce/deltas/RunIRPasses.h
new file mode 100644
index 0000000000000..603363bdfcec9
--- /dev/null
+++ b/llvm/tools/llvm-reduce/deltas/RunIRPasses.h
@@ -0,0 +1,18 @@
+//===- RunIRPasses.h ------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVM_REDUCE_DELTAS_RUNPASSES_H
+#define LLVM_TOOLS_LLVM_REDUCE_DELTAS_RUNPASSES_H
+
+#include "Delta.h"
+
+namespace llvm {
+void runIRPassesDeltaPass(TestRunner &Test);
+} // namespace llvm
+
+#endif

diff  --git a/llvm/utils/gn/secondary/llvm/tools/llvm-reduce/BUILD.gn b/llvm/utils/gn/secondary/llvm/tools/llvm-reduce/BUILD.gn
index 40219eaaf18e3..d0ee9a0d8f1cc 100644
--- a/llvm/utils/gn/secondary/llvm/tools/llvm-reduce/BUILD.gn
+++ b/llvm/utils/gn/secondary/llvm/tools/llvm-reduce/BUILD.gn
@@ -3,6 +3,7 @@ executable("llvm-reduce") {
     "//llvm/lib/CodeGen/MIRParser",
     "//llvm/lib/IR",
     "//llvm/lib/IRReader",
+    "//llvm/lib/Passes",
     "//llvm/lib/Support",
     "//llvm/lib/Target",
     "//llvm/lib/Target:TargetsToBuild",
@@ -40,6 +41,7 @@ executable("llvm-reduce") {
     "deltas/ReduceRegisterUses.cpp",
     "deltas/ReduceSpecialGlobals.cpp",
     "deltas/ReduceVirtualRegisters.cpp",
+    "deltas/RunIRPasses.cpp",
     "deltas/SimplifyInstructions.cpp",
     "deltas/Utils.cpp",
     "llvm-reduce.cpp",


        


More information about the llvm-commits mailing list