diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2022-04-19 16:42:27 -0400 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2022-06-01 08:58:34 -0400 |
commit | 2011052150e1a2fb8586b030126f8bec338f4cc5 (patch) | |
tree | 0bc4b9795cd4467e582ae3f202c09a188145ee2a /llvm/tools | |
parent | f68c5471588859bda6e82f2e86a1fc4f47db70a0 (diff) | |
download | llvm-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.txt | 1 | ||||
-rw-r--r-- | llvm/tools/llvm-reduce/DeltaManager.cpp | 4 | ||||
-rw-r--r-- | llvm/tools/llvm-reduce/deltas/ReduceInstructionFlagsMIR.cpp | 35 | ||||
-rw-r--r-- | llvm/tools/llvm-reduce/deltas/ReduceInstructionFlagsMIR.h | 23 |
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 |