aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2022-04-19 16:42:27 -0400
committerMatt Arsenault <Matthew.Arsenault@amd.com>2022-06-01 08:58:34 -0400
commit2011052150e1a2fb8586b030126f8bec338f4cc5 (patch)
tree0bc4b9795cd4467e582ae3f202c09a188145ee2a /llvm/tools
parentf68c5471588859bda6e82f2e86a1fc4f47db70a0 (diff)
downloadllvm-2011052150e1a2fb8586b030126f8bec338f4cc5.zip
llvm-2011052150e1a2fb8586b030126f8bec338f4cc5.tar.gz
llvm-2011052150e1a2fb8586b030126f8bec338f4cc5.tar.bz2
llvm-reduce: Add pass to reduce MIR instruction flags
Diffstat (limited to 'llvm/tools')
-rw-r--r--llvm/tools/llvm-reduce/CMakeLists.txt1
-rw-r--r--llvm/tools/llvm-reduce/DeltaManager.cpp4
-rw-r--r--llvm/tools/llvm-reduce/deltas/ReduceInstructionFlagsMIR.cpp35
-rw-r--r--llvm/tools/llvm-reduce/deltas/ReduceInstructionFlagsMIR.h23
4 files changed, 62 insertions, 1 deletions
diff --git a/llvm/tools/llvm-reduce/CMakeLists.txt b/llvm/tools/llvm-reduce/CMakeLists.txt
index 88229d6..21151d7 100644
--- a/llvm/tools/llvm-reduce/CMakeLists.txt
+++ b/llvm/tools/llvm-reduce/CMakeLists.txt
@@ -39,6 +39,7 @@ add_llvm_tool(llvm-reduce
deltas/ReduceOperandsSkip.cpp
deltas/ReduceOperandsToArgs.cpp
deltas/ReduceInstructionsMIR.cpp
+ deltas/ReduceInstructionFlagsMIR.cpp
deltas/ReduceIRReferences.cpp
llvm-reduce.cpp
diff --git a/llvm/tools/llvm-reduce/DeltaManager.cpp b/llvm/tools/llvm-reduce/DeltaManager.cpp
index d3e8740..a5b6c17 100644
--- a/llvm/tools/llvm-reduce/DeltaManager.cpp
+++ b/llvm/tools/llvm-reduce/DeltaManager.cpp
@@ -25,6 +25,7 @@
#include "deltas/ReduceGlobalVarInitializers.h"
#include "deltas/ReduceGlobalVars.h"
#include "deltas/ReduceIRReferences.h"
+#include "deltas/ReduceInstructionFlagsMIR.h"
#include "deltas/ReduceInstructions.h"
#include "deltas/ReduceInstructionsMIR.h"
#include "deltas/ReduceMetadata.h"
@@ -72,7 +73,8 @@ static cl::opt<std::string>
DELTA_PASS("ir-instruction-references", \
reduceIRInstructionReferencesDeltaPass) \
DELTA_PASS("ir-block-references", reduceIRBlockReferencesDeltaPass) \
- DELTA_PASS("ir-function-references", reduceIRFunctionReferencesDeltaPass)
+ DELTA_PASS("ir-function-references", reduceIRFunctionReferencesDeltaPass) \
+ DELTA_PASS("instruction-flags", reduceInstructionFlagsMIRDeltaPass)
static void runAllDeltaPasses(TestRunner &Tester) {
#define DELTA_PASS(NAME, FUNC) FUNC(Tester);
diff --git a/llvm/tools/llvm-reduce/deltas/ReduceInstructionFlagsMIR.cpp b/llvm/tools/llvm-reduce/deltas/ReduceInstructionFlagsMIR.cpp
new file mode 100644
index 0000000..4c3b4d39
--- /dev/null
+++ b/llvm/tools/llvm-reduce/deltas/ReduceInstructionFlagsMIR.cpp
@@ -0,0 +1,35 @@
+//===- ReduceInstructionFlagsMIR.cpp - Specialized Delta Pass -------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements a function which calls the Generic Delta pass in order
+// to reduce uninteresting MachineInstr flags from the MachineFunction.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ReduceInstructionFlagsMIR.h"
+#include "llvm/CodeGen/MachineFunction.h"
+using namespace llvm;
+
+static void removeFlagsFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
+ for (const Function &F : WorkItem.getModule()) {
+ if (auto *MF = WorkItem.MMI->getMachineFunction(F)) {
+ for (MachineBasicBlock &MBB : *MF) {
+ for (MachineInstr &MI : MBB) {
+ // TODO: Should this clear flags individually?
+ if (MI.getFlags() != 0 && !O.shouldKeep())
+ MI.setFlags(0);
+ }
+ }
+ }
+ }
+}
+
+void llvm::reduceInstructionFlagsMIRDeltaPass(TestRunner &Test) {
+ outs() << "*** Reducing Instruction flags...\n";
+ runDeltaPass(Test, removeFlagsFromModule);
+}
diff --git a/llvm/tools/llvm-reduce/deltas/ReduceInstructionFlagsMIR.h b/llvm/tools/llvm-reduce/deltas/ReduceInstructionFlagsMIR.h
new file mode 100644
index 0000000..a211994
--- /dev/null
+++ b/llvm/tools/llvm-reduce/deltas/ReduceInstructionFlagsMIR.h
@@ -0,0 +1,23 @@
+//===- ReduceInstructionFlagsMIR.h - Specialized Delta Pass --------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements a function which calls the Generic Delta pass in order
+// to reduce uninteresting MachineInstr flags from the MachineFunction.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVM_REDUCE_DELTAS_REDUCEINSTRUCTIONFLAGSMIR_H
+#define LLVM_TOOLS_LLVM_REDUCE_DELTAS_REDUCEINSTRUCTIONFLAGSMIR_H
+
+#include "Delta.h"
+
+namespace llvm {
+void reduceInstructionFlagsMIRDeltaPass(TestRunner &Test);
+} // namespace llvm
+
+#endif