YLChenZ wrote: @arsenm Based on your tips, I have the following in mind: First, the function pointer field of structure DeltaPass needs to be modified to void (Oracle &, ReducerWorkItem &). Second, instead of using reduceXXXDeltaPass to call runDeltaPass indirectly, the function pointer provided by DeltaPass is called directly in DeltaManager.
For example: before: ```c++ //===- ReduceAliases.h - Specialized Delta Pass -----------------*- C++ -*-===// #ifndef LLVM_TOOLS_LLVM_REDUCE_DELTAS_REDUCEALIASES_H #define LLVM_TOOLS_LLVM_REDUCE_DELTAS_REDUCEALIASES_H #include "Delta.h" namespace llvm { void reduceAliasesDeltaPass(TestRunner &Test); void reduceIFuncsDeltaPass(TestRunner &Test); } // namespace llvm #endif ``` ```c++ //===- ReduceAliases.cpp - Specialized Delta Pass -------------------------===// #include "ReduceAliases.h" ... using namespace llvm; /// Removes all aliases aren't inside any of the /// desired Chunks. static void extractAliasesFromModule(Oracle &O, ReducerWorkItem &Program) { ... } static void extractIFuncsFromModule(Oracle &O, ReducerWorkItem &WorkItem) { ... } void llvm::reduceAliasesDeltaPass(TestRunner &Test, StringRef PassMessage) { runDeltaPass(Test, extractAliasesFromModule, PassMessage); } void llvm::reduceIFuncsDeltaPass(TestRunner &Test, StringRef PassMessage) { runDeltaPass(Test, extractIFuncsFromModule, PassMessage); } ``` after: ```c++ //===- ReduceAliases.h - Specialized Delta Pass -----------------*- C++ -*-===// #ifndef LLVM_TOOLS_LLVM_REDUCE_DELTAS_REDUCEALIASES_H #define LLVM_TOOLS_LLVM_REDUCE_DELTAS_REDUCEALIASES_H #include "Delta.h" namespace llvm { void extractAliasesFromModule(Oracle &O, ReducerWorkItem &Program); void extractIFuncsFromModule(Oracle &O, ReducerWorkItem &WorkItem); } // namespace llvm #endif ``` ```c++ //===- ReduceAliases.cpp - Specialized Delta Pass -------------------------===// #include "ReduceAliases.h" ... using namespace llvm; /// Removes all aliases aren't inside any of the /// desired Chunks. void llvm::extractAliasesFromModule(Oracle &O, ReducerWorkItem &Program) { ... } void llvm::extractIFuncsFromModule(Oracle &O, ReducerWorkItem &WorkItem) { ... } ``` Call runDeltaPass directly in DeltaManager: ```c++ ... static void runAllDeltaPasses(TestRunner &Tester, const SmallStringSet &SkipPass) { if (Tester.getProgram().isMIR()) { for(const DeltaPass &Pass : MIR_Passes) { if (!SkipPass.count(Pass.Name)) { SmallString<64> Message = Pass.Desc; Message += " ("; Message += Pass.Name; Message += ')'; runDeltaPass(Tester,Pass.Func,Message); } } } ... ``` https://github.com/llvm/llvm-project/pull/132813 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits