[llvm] 23cc36e - llvm-reduce: Use consistent ReductionFunc types

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 19 17:35:33 PST 2023


Author: Matt Arsenault
Date: 2023-01-19T21:35:26-04:00
New Revision: 23cc36e4765912a1bcdbbc3fb8b0976a06dea043

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

LOG: llvm-reduce: Use consistent ReductionFunc types

Some of these were relying on ReducerWorkItem's operator Module&.

Added: 
    

Modified: 
    llvm/tools/llvm-reduce/ReducerWorkItem.h
    llvm/tools/llvm-reduce/TestRunner.cpp
    llvm/tools/llvm-reduce/deltas/ReduceAliases.cpp
    llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp
    llvm/tools/llvm-reduce/deltas/ReduceAttributes.cpp
    llvm/tools/llvm-reduce/deltas/ReduceBasicBlocks.cpp
    llvm/tools/llvm-reduce/deltas/ReduceDIMetadata.cpp
    llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.cpp
    llvm/tools/llvm-reduce/deltas/ReduceFunctions.cpp
    llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.cpp
    llvm/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp
    llvm/tools/llvm-reduce/deltas/ReduceGlobalVarInitializers.cpp
    llvm/tools/llvm-reduce/deltas/ReduceGlobalVars.cpp
    llvm/tools/llvm-reduce/deltas/ReduceInstructionFlags.cpp
    llvm/tools/llvm-reduce/deltas/ReduceInstructions.cpp
    llvm/tools/llvm-reduce/deltas/ReduceInvokes.cpp
    llvm/tools/llvm-reduce/deltas/ReduceMemoryOperations.cpp
    llvm/tools/llvm-reduce/deltas/ReduceMetadata.cpp
    llvm/tools/llvm-reduce/deltas/ReduceModuleData.cpp
    llvm/tools/llvm-reduce/deltas/ReduceOpcodes.cpp
    llvm/tools/llvm-reduce/deltas/ReduceOperandBundles.cpp
    llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp
    llvm/tools/llvm-reduce/deltas/ReduceOperandsSkip.cpp
    llvm/tools/llvm-reduce/deltas/ReduceOperandsToArgs.cpp
    llvm/tools/llvm-reduce/deltas/ReduceSpecialGlobals.cpp
    llvm/tools/llvm-reduce/deltas/ReduceUsingSimplifyCFG.cpp
    llvm/tools/llvm-reduce/deltas/RunIRPasses.cpp
    llvm/tools/llvm-reduce/deltas/SimplifyInstructions.cpp
    llvm/tools/llvm-reduce/deltas/StripDebugInfo.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/tools/llvm-reduce/ReducerWorkItem.h b/llvm/tools/llvm-reduce/ReducerWorkItem.h
index ec19e3ab5b01c..45efaefd12926 100644
--- a/llvm/tools/llvm-reduce/ReducerWorkItem.h
+++ b/llvm/tools/llvm-reduce/ReducerWorkItem.h
@@ -26,6 +26,11 @@ class ReducerWorkItem {
 
   bool isMIR() const { return MMI != nullptr; }
 
+  LLVMContext &getContext() {
+    return M->getContext();
+  }
+
+  Module &getModule() { return *M; }
   const Module &getModule() const { return *M; }
 
   void print(raw_ostream &ROS, void *p = nullptr) const;

diff  --git a/llvm/tools/llvm-reduce/TestRunner.cpp b/llvm/tools/llvm-reduce/TestRunner.cpp
index 286eb2accbc41..c8849de9ed4af 100644
--- a/llvm/tools/llvm-reduce/TestRunner.cpp
+++ b/llvm/tools/llvm-reduce/TestRunner.cpp
@@ -91,7 +91,7 @@ void writeBitcode(const ReducerWorkItem &M, raw_ostream &OutStream) {
       Index = std::make_unique<ModuleSummaryIndex>(
           buildModuleSummaryIndex(M, nullptr, &PSI));
     }
-    WriteBitcodeToFile(M, OutStream, Index.get());
+    WriteBitcodeToFile(M.getModule(), OutStream, Index.get());
   }
 }
 

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceAliases.cpp b/llvm/tools/llvm-reduce/deltas/ReduceAliases.cpp
index db5376f5933b9..d889b3ebebe6b 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceAliases.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceAliases.cpp
@@ -22,8 +22,8 @@ using namespace llvm;
 
 /// Removes all aliases aren't inside any of the
 /// desired Chunks.
-static void extractAliasesFromModule(Oracle &O, Module &Program) {
-  for (auto &GA : make_early_inc_range(Program.aliases())) {
+static void extractAliasesFromModule(Oracle &O, ReducerWorkItem &Program) {
+  for (auto &GA : make_early_inc_range(Program.getModule().aliases())) {
     if (!O.shouldKeep()) {
       GA.replaceAllUsesWith(GA.getAliasee());
       GA.eraseFromParent();

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp b/llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp
index e251256cc0ebb..10bbc64340325 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp
@@ -56,7 +56,8 @@ static bool shouldRemoveArguments(const Function &F) {
 
 /// Removes out-of-chunk arguments from functions, and modifies their calls
 /// accordingly. It also removes allocations of out-of-chunk arguments.
-static void extractArgumentsFromModule(Oracle &O, Module &Program) {
+static void extractArgumentsFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
   std::vector<Argument *> InitArgsToKeep;
   std::vector<Function *> Funcs;
   // Get inside-chunk arguments, as well as their parent function

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceAttributes.cpp b/llvm/tools/llvm-reduce/deltas/ReduceAttributes.cpp
index 036f0fbc014d7..df87ce7cfa0f8 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceAttributes.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceAttributes.cpp
@@ -146,9 +146,9 @@ class AttributeRemapper : public InstVisitor<AttributeRemapper> {
 } // namespace
 
 /// Removes out-of-chunk attributes from module.
-static void extractAttributesFromModule(Oracle &O, Module &Program) {
-  AttributeRemapper R(O, Program.getContext());
-  R.visit(Program);
+static void extractAttributesFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
+  AttributeRemapper R(O, WorkItem.getContext());
+  R.visit(WorkItem.getModule());
 }
 
 void llvm::reduceAttributesDeltaPass(TestRunner &Test) {

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceBasicBlocks.cpp b/llvm/tools/llvm-reduce/deltas/ReduceBasicBlocks.cpp
index cb518a9c4313f..6858dac9aeac4 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceBasicBlocks.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceBasicBlocks.cpp
@@ -132,11 +132,11 @@ removeUninterestingBBsFromSwitch(SwitchInst &SwInst,
 
 /// Removes out-of-chunk arguments from functions, and modifies their calls
 /// accordingly. It also removes allocations of out-of-chunk arguments.
-static void extractBasicBlocksFromModule(Oracle &O, Module &Program) {
+static void extractBasicBlocksFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
   DenseSet<BasicBlock *> BBsToDelete;
   df_iterator_default_set<BasicBlock *> Reachable;
 
-  for (auto &F : Program) {
+  for (auto &F : WorkItem.getModule()) {
     if (F.empty())
       continue;
 
@@ -183,11 +183,12 @@ void llvm::reduceBasicBlocksDeltaPass(TestRunner &Test) {
   runDeltaPass(Test, extractBasicBlocksFromModule, "Reducing Basic Blocks");
 }
 
-static void removeUnreachableBasicBlocksFromModule(Oracle &O, Module &M) {
+static void removeUnreachableBasicBlocksFromModule(Oracle &O,
+                                                   ReducerWorkItem &WorkItem) {
   std::vector<BasicBlock *> DeadBlocks;
   df_iterator_default_set<BasicBlock *> Reachable;
 
-  for (Function &F : M) {
+  for (Function &F : WorkItem.getModule()) {
     if (F.empty())
       continue;
 

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceDIMetadata.cpp b/llvm/tools/llvm-reduce/deltas/ReduceDIMetadata.cpp
index 6ae535fdfd13d..1ac580b9e5994 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceDIMetadata.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceDIMetadata.cpp
@@ -78,7 +78,9 @@ void identifyUninterestingMDNodes(Oracle &O, MDNodeList &MDs) {
   }
 }
 
-static void extractDIMetadataFromModule(Oracle &O, Module &Program) {
+static void extractDIMetadataFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
+
   MDNodeList MDs;
   // Collect all !dbg metadata attachments.
   for (const auto &DC : Program.debug_compile_units())

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.cpp b/llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.cpp
index 98a280f74000d..21875ba00cf8b 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceFunctionBodies.cpp
@@ -21,9 +21,10 @@ using namespace llvm;
 
 /// Removes all the bodies of defined functions that aren't inside any of the
 /// desired Chunks.
-static void extractFunctionBodiesFromModule(Oracle &O, Module &Program) {
+static void extractFunctionBodiesFromModule(Oracle &O,
+                                            ReducerWorkItem &WorkItem) {
   // Delete out-of-chunk function bodies
-  for (auto &F : Program) {
+  for (auto &F : WorkItem.getModule()) {
     if (!F.isDeclaration() && !hasAliasUse(F) && !O.shouldKeep()) {
       F.deleteBody();
       F.setComdat(nullptr);
@@ -36,8 +37,8 @@ void llvm::reduceFunctionBodiesDeltaPass(TestRunner &Test) {
                "Reducing Function Bodies");
 }
 
-static void reduceFunctionData(Oracle &O, Module &M) {
-  for (Function &F : M) {
+static void reduceFunctionData(Oracle &O, ReducerWorkItem &WorkItem) {
+  for (Function &F : WorkItem.getModule()) {
     if (F.hasPersonalityFn()) {
       if (none_of(F,
                   [](const BasicBlock &BB) {

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceFunctions.cpp b/llvm/tools/llvm-reduce/deltas/ReduceFunctions.cpp
index 0c1ec50db6ed1..05127ec7b9c80 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceFunctions.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceFunctions.cpp
@@ -25,7 +25,9 @@ using namespace llvm;
 
 /// Removes all the Defined Functions
 /// that aren't inside any of the desired Chunks.
-static void extractFunctionsFromModule(Oracle &O, Module &Program) {
+static void extractFunctionsFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
+
   // Record all out-of-chunk functions.
   SmallPtrSet<Constant *, 8> FuncsToRemove;
   for (Function &F : Program.functions()) {

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.cpp b/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.cpp
index 8677a72a4a3db..1d1463a055bd8 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceGlobalObjects.cpp
@@ -19,8 +19,8 @@ static bool shouldReduceAlign(GlobalObject &GO) {
 
 static bool shouldReduceComdat(GlobalObject &GO) { return GO.hasComdat(); }
 
-static void reduceGOs(Oracle &O, Module &Program) {
-  for (auto &GO : Program.global_objects()) {
+static void reduceGOs(Oracle &O, ReducerWorkItem &Program) {
+  for (auto &GO : Program.getModule().global_objects()) {
     if (shouldReduceSection(GO) && !O.shouldKeep())
       GO.setSection("");
     if (shouldReduceAlign(GO) && !O.shouldKeep())

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp b/llvm/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp
index eb0ea4e78ba8a..470d5ba97ea66 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceGlobalValues.cpp
@@ -37,8 +37,8 @@ static bool shouldReduceThreadLocal(GlobalValue &GV) {
   return GV.isThreadLocal();
 }
 
-static void reduceGVs(Oracle &O, Module &Program) {
-  for (auto &GV : Program.global_values()) {
+static void reduceGVs(Oracle &O, ReducerWorkItem &Program) {
+  for (auto &GV : Program.getModule().global_values()) {
     if (shouldReduceDSOLocal(GV) && !O.shouldKeep())
       GV.setDSOLocal(false);
     if (shouldReduceVisibility(GV) && !O.shouldKeep()) {

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceGlobalVarInitializers.cpp b/llvm/tools/llvm-reduce/deltas/ReduceGlobalVarInitializers.cpp
index 9765b38d9ce43..4c7125217f252 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceGlobalVarInitializers.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceGlobalVarInitializers.cpp
@@ -18,9 +18,9 @@
 using namespace llvm;
 
 /// Removes all the Initialized GVs that aren't inside the desired Chunks.
-static void extractGVsFromModule(Oracle &O, Module &Program) {
+static void extractGVsFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
   // Drop initializers of out-of-chunk GVs
-  for (auto &GV : Program.globals())
+  for (auto &GV : WorkItem.getModule().globals())
     if (GV.hasInitializer() && !O.shouldKeep()) {
       GV.setInitializer(nullptr);
       GV.setLinkage(GlobalValue::LinkageTypes::ExternalLinkage);

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceGlobalVars.cpp b/llvm/tools/llvm-reduce/deltas/ReduceGlobalVars.cpp
index 4e25c0c82c9fa..b448081ee1a27 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceGlobalVars.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceGlobalVars.cpp
@@ -23,7 +23,9 @@ static bool shouldAlwaysKeep(const GlobalVariable &GV) {
 }
 
 /// Removes all the GVs that aren't inside the desired Chunks.
-static void extractGVsFromModule(Oracle &O, Module &Program) {
+static void extractGVsFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
+
   // Get GVs inside desired chunks
   std::vector<Constant *> InitGVsToKeep;
   for (auto &GV : Program.globals()) {

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceInstructionFlags.cpp b/llvm/tools/llvm-reduce/deltas/ReduceInstructionFlags.cpp
index 78bbaf9a75c23..e0f251708a50f 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceInstructionFlags.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceInstructionFlags.cpp
@@ -17,8 +17,8 @@
 #include "llvm/IR/Instructions.h"
 #include "llvm/IR/Operator.h"
 
-static void reduceFlagsInModule(Oracle &O, Module &Mod) {
-  for (Function &F : Mod) {
+static void reduceFlagsInModule(Oracle &O, ReducerWorkItem &WorkItem) {
+  for (Function &F : WorkItem.getModule()) {
     for (Instruction &I : instructions(F)) {
       if (auto *OBO = dyn_cast<OverflowingBinaryOperator>(&I)) {
         if (OBO->hasNoSignedWrap() && !O.shouldKeep())

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceInstructions.cpp b/llvm/tools/llvm-reduce/deltas/ReduceInstructions.cpp
index 8dd9872da12ac..7dfe028d75132 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceInstructions.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceInstructions.cpp
@@ -28,7 +28,8 @@ static bool shouldAlwaysKeep(const Instruction &I) {
 
 /// Removes out-of-chunk arguments from functions, and modifies their calls
 /// accordingly. It also removes allocations of out-of-chunk arguments.
-static void extractInstrFromModule(Oracle &O, Module &Program) {
+static void extractInstrFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
   std::vector<Instruction *> InitInstToKeep;
 
   for (auto &F : Program)

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceInvokes.cpp b/llvm/tools/llvm-reduce/deltas/ReduceInvokes.cpp
index 7c7d94ba1fbf8..421108a186818 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceInvokes.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceInvokes.cpp
@@ -27,8 +27,8 @@ static void reduceInvokesInFunction(Oracle &O, Function &F) {
   // reduction.
 }
 
-static void reduceInvokesInModule(Oracle &O, Module &Mod) {
-  for (Function &F : Mod) {
+static void reduceInvokesInModule(Oracle &O, ReducerWorkItem &WorkItem) {
+  for (Function &F : WorkItem.getModule()) {
     if (F.hasPersonalityFn())
       reduceInvokesInFunction(O, F);
   }

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceMemoryOperations.cpp b/llvm/tools/llvm-reduce/deltas/ReduceMemoryOperations.cpp
index b64b455aafb45..c1db3441eca6e 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceMemoryOperations.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceMemoryOperations.cpp
@@ -34,8 +34,8 @@ static void removeVolatileInFunction(Oracle &O, Function &F) {
   }
 }
 
-static void removeVolatileInModule(Oracle &O, Module &Mod) {
-  for (Function &F : Mod)
+static void removeVolatileInModule(Oracle &O, ReducerWorkItem &WorkItem) {
+  for (Function &F : WorkItem.getModule())
     removeVolatileInFunction(O, F);
 }
 
@@ -64,8 +64,9 @@ static void reduceAtomicSyncScopesInFunction(Oracle &O, Function &F) {
   }
 }
 
-static void reduceAtomicSyncScopesInModule(Oracle &O, Module &Mod) {
-  for (Function &F : Mod)
+static void reduceAtomicSyncScopesInModule(Oracle &O,
+                                           ReducerWorkItem &WorkItem) {
+  for (Function &F : WorkItem.getModule())
     reduceAtomicSyncScopesInFunction(O, F);
 }
 
@@ -97,8 +98,8 @@ static void reduceAtomicOrderingInFunction(Oracle &O, Function &F) {
   }
 }
 
-static void reduceAtomicOrderingInModule(Oracle &O, Module &Mod) {
-  for (Function &F : Mod)
+static void reduceAtomicOrderingInModule(Oracle &O, ReducerWorkItem &WorkItem) {
+  for (Function &F : WorkItem.getModule())
     reduceAtomicOrderingInFunction(O, F);
 }
 

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceMetadata.cpp b/llvm/tools/llvm-reduce/deltas/ReduceMetadata.cpp
index bec39ad751155..d491858db590e 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceMetadata.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceMetadata.cpp
@@ -42,7 +42,9 @@ static constexpr StringLiteral ListNamedMetadata[] = {
 };
 
 /// Remove unneeded arguments to named metadata.
-static void reduceNamedMetadataOperands(Oracle &O, Module &M) {
+static void reduceNamedMetadataOperands(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &M = WorkItem.getModule();
+
   for (StringRef MDName : ListNamedMetadata) {
     NamedMDNode *NamedNode = M.getNamedMetadata(MDName);
     if (!NamedNode)
@@ -67,7 +69,9 @@ static void reduceNamedMetadataOperands(Oracle &O, Module &M) {
 
 /// Removes all the Named and Unnamed Metadata Nodes, as well as any debug
 /// functions that aren't inside the desired Chunks.
-static void extractMetadataFromModule(Oracle &O, Module &Program) {
+static void extractMetadataFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
+
   // Get out-of-chunk Named metadata nodes
   SmallVector<NamedMDNode *> NamedNodesToDelete;
   for (NamedMDNode &MD : Program.named_metadata())

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceModuleData.cpp b/llvm/tools/llvm-reduce/deltas/ReduceModuleData.cpp
index 7c31437c37d26..17930abe6dbfe 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceModuleData.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceModuleData.cpp
@@ -14,7 +14,9 @@
 
 using namespace llvm;
 
-static void clearModuleData(Oracle &O, Module &Program) {
+static void clearModuleData(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
+
   if (!Program.getModuleIdentifier().empty() && !O.shouldKeep())
     Program.setModuleIdentifier("");
   if (!Program.getSourceFileName().empty() && !O.shouldKeep())

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceOpcodes.cpp b/llvm/tools/llvm-reduce/deltas/ReduceOpcodes.cpp
index 4acc77bb883f4..77131008dee40 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceOpcodes.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceOpcodes.cpp
@@ -253,7 +253,9 @@ static Value *reduceInstruction(Oracle &O, Module &M, Instruction &I) {
   return nullptr;
 }
 
-static void replaceOpcodesInModule(Oracle &O, Module &Mod) {
+static void replaceOpcodesInModule(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &Mod = WorkItem.getModule();
+
   for (Function &F : Mod) {
     for (BasicBlock &BB : F)
       for (Instruction &I : make_early_inc_range(BB)) {

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceOperandBundles.cpp b/llvm/tools/llvm-reduce/deltas/ReduceOperandBundles.cpp
index 0998d6b842369..6f9cafb8f73a5 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceOperandBundles.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceOperandBundles.cpp
@@ -95,7 +95,9 @@ static void maybeRewriteCallWithDifferentBundles(
 }
 
 /// Removes out-of-chunk operand bundles from calls.
-static void extractOperandBundesFromModule(Oracle &O, Module &Program) {
+static void extractOperandBundesFromModule(Oracle &O,
+                                           ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
   OperandBundleRemapper R(O);
   R.visit(Program);
 

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp b/llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp
index 98d068f6b1344..6bf84f2985dc2 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp
@@ -18,8 +18,10 @@ using namespace llvm;
 using namespace PatternMatch;
 
 static void
-extractOperandsFromModule(Oracle &O, Module &Program,
+extractOperandsFromModule(Oracle &O, ReducerWorkItem &WorkItem,
                           function_ref<Value *(Use &)> ReduceValue) {
+  Module &Program = WorkItem.getModule();
+
   for (auto &F : Program.functions()) {
     for (auto &I : instructions(&F)) {
       if (PHINode *Phi = dyn_cast<PHINode>(&I)) {
@@ -118,8 +120,8 @@ void llvm::reduceOperandsOneDeltaPass(TestRunner &Test) {
   };
   runDeltaPass(
       Test,
-      [ReduceValue](Oracle &O, Module &Program) {
-        extractOperandsFromModule(O, Program, ReduceValue);
+      [ReduceValue](Oracle &O, ReducerWorkItem &WorkItem) {
+        extractOperandsFromModule(O, WorkItem, ReduceValue);
       },
       "Reducing Operands to one");
 }
@@ -137,7 +139,7 @@ void llvm::reduceOperandsZeroDeltaPass(TestRunner &Test) {
   };
   runDeltaPass(
       Test,
-      [ReduceValue](Oracle &O, Module &Program) {
+      [ReduceValue](Oracle &O, ReducerWorkItem &Program) {
         extractOperandsFromModule(O, Program, ReduceValue);
       },
       "Reducing Operands to zero");
@@ -165,7 +167,7 @@ void llvm::reduceOperandsNaNDeltaPass(TestRunner &Test) {
   };
   runDeltaPass(
       Test,
-      [ReduceValue](Oracle &O, Module &Program) {
+      [ReduceValue](Oracle &O, ReducerWorkItem &Program) {
         extractOperandsFromModule(O, Program, ReduceValue);
       },
       "Reducing Operands to NaN");

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceOperandsSkip.cpp b/llvm/tools/llvm-reduce/deltas/ReduceOperandsSkip.cpp
index 8120bfa6b4eed..a634c3a523a3a 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceOperandsSkip.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceOperandsSkip.cpp
@@ -187,7 +187,9 @@ opportunities(Function &F,
   }
 }
 
-static void extractOperandsFromModule(Oracle &O, Module &Program) {
+static void extractOperandsFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
+
   for (Function &F : Program.functions()) {
     SmallVector<std::pair<Use *, Value *>> Replacements;
     opportunities(F, [&](Use &Op, ArrayRef<Value *> Candidates) {

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceOperandsToArgs.cpp b/llvm/tools/llvm-reduce/deltas/ReduceOperandsToArgs.cpp
index c77cccb719a65..0f949ab1fe897 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceOperandsToArgs.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceOperandsToArgs.cpp
@@ -173,7 +173,9 @@ static void substituteOperandWithArgument(Function *OldF,
   NewF->setName(FName);
 }
 
-static void reduceOperandsToArgs(Oracle &O, Module &Program) {
+static void reduceOperandsToArgs(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
+
   SmallVector<Use *> OperandsToReduce;
   for (Function &F : make_early_inc_range(Program.functions())) {
     if (!canReplaceFunction(&F))

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceSpecialGlobals.cpp b/llvm/tools/llvm-reduce/deltas/ReduceSpecialGlobals.cpp
index 0e356953b4e2f..5b124a4052960 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceSpecialGlobals.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceSpecialGlobals.cpp
@@ -27,7 +27,10 @@ static StringRef SpecialGlobalNames[] = {"llvm.used", "llvm.compiler.used"};
 
 /// Removes all special globals aren't inside any of the
 /// desired Chunks.
-static void extractSpecialGlobalsFromModule(Oracle &O, Module &Program) {
+static void extractSpecialGlobalsFromModule(Oracle &O,
+                                            ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
+
   for (StringRef Name : SpecialGlobalNames) {
     if (auto *Used = Program.getNamedGlobal(Name)) {
       Used->replaceAllUsesWith(getDefaultValue(Used->getType()));

diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceUsingSimplifyCFG.cpp b/llvm/tools/llvm-reduce/deltas/ReduceUsingSimplifyCFG.cpp
index 416b1652eb99a..c49fcb9855d41 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceUsingSimplifyCFG.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceUsingSimplifyCFG.cpp
@@ -19,7 +19,8 @@
 
 using namespace llvm;
 
-static void reduceUsingSimplifyCFG(Oracle &O, Module &Program) {
+static void reduceUsingSimplifyCFG(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
   SmallVector<BasicBlock *, 16> ToSimplify;
   for (auto &F : Program)
     for (auto &BB : F)
@@ -33,7 +34,9 @@ static void reduceUsingSimplifyCFG(Oracle &O, Module &Program) {
 void llvm::reduceUsingSimplifyCFGDeltaPass(TestRunner &Test) {
   runDeltaPass(Test, reduceUsingSimplifyCFG, "Reducing using SimplifyCFG");
 }
-static void reduceConditionals(Oracle &O, Module &M, bool Direction) {
+static void reduceConditionals(Oracle &O, ReducerWorkItem &WorkItem,
+                               bool Direction) {
+  Module &M = WorkItem.getModule();
   SmallVector<BasicBlock *, 16> ToSimplify;
 
   for (auto &F : M) {
@@ -58,12 +61,18 @@ static void reduceConditionals(Oracle &O, Module &M, bool Direction) {
 
 void llvm::reduceConditionalsTrueDeltaPass(TestRunner &Test) {
   runDeltaPass(
-      Test, [](Oracle &O, Module &M) { reduceConditionals(O, M, true); },
+      Test,
+      [](Oracle &O, ReducerWorkItem &WorkItem) {
+        reduceConditionals(O, WorkItem, true);
+      },
       "Reducing conditional branches to true");
 }
 
 void llvm::reduceConditionalsFalseDeltaPass(TestRunner &Test) {
   runDeltaPass(
-      Test, [](Oracle &O, Module &M) { reduceConditionals(O, M, false); },
+      Test,
+      [](Oracle &O, ReducerWorkItem &WorkItem) {
+        reduceConditionals(O, WorkItem, false);
+      },
       "Reducing conditional branches to false");
 }

diff  --git a/llvm/tools/llvm-reduce/deltas/RunIRPasses.cpp b/llvm/tools/llvm-reduce/deltas/RunIRPasses.cpp
index 30fe6a8088424..acef29a681941 100644
--- a/llvm/tools/llvm-reduce/deltas/RunIRPasses.cpp
+++ b/llvm/tools/llvm-reduce/deltas/RunIRPasses.cpp
@@ -23,7 +23,8 @@ static cl::opt<std::string> PassPipeline(
     cl::init("function(sroa,instcombine,gvn,simplifycfg,infer-address-spaces)"),
     cl::cat(LLVMReduceOptions));
 
-static void runPasses(Oracle &O, Module &Program) {
+static void runPasses(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
   LoopAnalysisManager LAM;
   FunctionAnalysisManager FAM;
   CGSCCAnalysisManager CGAM;

diff  --git a/llvm/tools/llvm-reduce/deltas/SimplifyInstructions.cpp b/llvm/tools/llvm-reduce/deltas/SimplifyInstructions.cpp
index 93556b7e91795..fc21593c5415c 100644
--- a/llvm/tools/llvm-reduce/deltas/SimplifyInstructions.cpp
+++ b/llvm/tools/llvm-reduce/deltas/SimplifyInstructions.cpp
@@ -19,9 +19,10 @@ using namespace llvm;
 
 /// Calls simplifyInstruction in each instruction in functions, and replaces
 /// their values.
-static void extractInstrFromModule(Oracle &O, Module &Program) {
+static void extractInstrFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
   std::vector<Instruction *> InstsToDelete;
 
+  Module &Program = WorkItem.getModule();
   const DataLayout &DL = Program.getDataLayout();
 
   std::vector<Instruction *> InstToDelete;

diff  --git a/llvm/tools/llvm-reduce/deltas/StripDebugInfo.cpp b/llvm/tools/llvm-reduce/deltas/StripDebugInfo.cpp
index efb02332bee91..a65e55d5f6f48 100644
--- a/llvm/tools/llvm-reduce/deltas/StripDebugInfo.cpp
+++ b/llvm/tools/llvm-reduce/deltas/StripDebugInfo.cpp
@@ -15,7 +15,8 @@ using namespace llvm;
 
 /// Removes all aliases aren't inside any of the
 /// desired Chunks.
-static void stripDebugInfoImpl(Oracle &O, Module &Program) {
+static void stripDebugInfoImpl(Oracle &O, ReducerWorkItem &WorkItem) {
+  Module &Program = WorkItem.getModule();
   bool HasDebugInfo = any_of(Program.named_metadata(), [](NamedMDNode &NMD) {
     return NMD.getName().startswith("llvm.dbg.");
   });


        


More information about the llvm-commits mailing list