Skip to content

Commit 668da24

Browse files
committed
separated DeltaPasses from DeltaManager
1 parent 054f69d commit 668da24

File tree

76 files changed

+321
-243
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+321
-243
lines changed

llvm/tools/llvm-reduce/DeltaManager.cpp

Lines changed: 72 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@
5353
#include "deltas/StripDebugInfo.h"
5454
#include "llvm/ADT/SmallSet.h"
5555
#include "llvm/Support/CommandLine.h"
56+
#include "DeltaPass.h"
57+
#include "llvm/ADT/ArrayRef.h"
5658

5759
using namespace llvm;
5860

@@ -71,91 +73,77 @@ static cl::list<std::string>
7173
"default, run all delta passes."),
7274
cl::cat(LLVMReduceOptions), cl::CommaSeparated);
7375

74-
#define DELTA_PASSES \
75-
do { \
76-
DELTA_PASS("strip-debug-info", stripDebugInfoDeltaPass) \
77-
DELTA_PASS("functions", reduceFunctionsDeltaPass) \
78-
DELTA_PASS("function-bodies", reduceFunctionBodiesDeltaPass) \
79-
DELTA_PASS("special-globals", reduceSpecialGlobalsDeltaPass) \
80-
DELTA_PASS("aliases", reduceAliasesDeltaPass) \
81-
DELTA_PASS("ifuncs", reduceIFuncsDeltaPass) \
82-
DELTA_PASS("simplify-conditionals-true", reduceConditionalsTrueDeltaPass) \
83-
DELTA_PASS("simplify-conditionals-false", \
84-
reduceConditionalsFalseDeltaPass) \
85-
DELTA_PASS("invokes", reduceInvokesDeltaPass) \
86-
DELTA_PASS("unreachable-basic-blocks", \
87-
reduceUnreachableBasicBlocksDeltaPass) \
88-
DELTA_PASS("basic-blocks", reduceBasicBlocksDeltaPass) \
89-
DELTA_PASS("simplify-cfg", reduceUsingSimplifyCFGDeltaPass) \
90-
DELTA_PASS("function-data", reduceFunctionDataDeltaPass) \
91-
DELTA_PASS("global-values", reduceGlobalValuesDeltaPass) \
92-
DELTA_PASS("global-objects", reduceGlobalObjectsDeltaPass) \
93-
DELTA_PASS("global-initializers", reduceGlobalsInitializersDeltaPass) \
94-
DELTA_PASS("global-variables", reduceGlobalsDeltaPass) \
95-
DELTA_PASS("di-metadata", reduceDIMetadataDeltaPass) \
96-
DELTA_PASS("dbg-records", reduceDbgRecordDeltaPass) \
97-
DELTA_PASS("distinct-metadata", reduceDistinctMetadataDeltaPass) \
98-
DELTA_PASS("metadata", reduceMetadataDeltaPass) \
99-
DELTA_PASS("named-metadata", reduceNamedMetadataDeltaPass) \
100-
DELTA_PASS("arguments", reduceArgumentsDeltaPass) \
101-
DELTA_PASS("instructions", reduceInstructionsDeltaPass) \
102-
DELTA_PASS("simplify-instructions", simplifyInstructionsDeltaPass) \
103-
DELTA_PASS("ir-passes", runIRPassesDeltaPass) \
104-
DELTA_PASS("operands-zero", reduceOperandsZeroDeltaPass) \
105-
DELTA_PASS("operands-one", reduceOperandsOneDeltaPass) \
106-
DELTA_PASS("operands-nan", reduceOperandsNaNDeltaPass) \
107-
DELTA_PASS("operands-to-args", reduceOperandsToArgsDeltaPass) \
108-
DELTA_PASS("operands-skip", reduceOperandsSkipDeltaPass) \
109-
DELTA_PASS("operand-bundles", reduceOperandBundesDeltaPass) \
110-
DELTA_PASS("attributes", reduceAttributesDeltaPass) \
111-
DELTA_PASS("module-data", reduceModuleDataDeltaPass) \
112-
DELTA_PASS("opcodes", reduceOpcodesDeltaPass) \
113-
DELTA_PASS("volatile", reduceVolatileInstructionsDeltaPass) \
114-
DELTA_PASS("atomic-ordering", reduceAtomicOrderingDeltaPass) \
115-
DELTA_PASS("syncscopes", reduceAtomicSyncScopesDeltaPass) \
116-
DELTA_PASS("instruction-flags", reduceInstructionFlagsDeltaPass) \
117-
} while (false)
118-
119-
#define DELTA_PASSES_MIR \
120-
do { \
121-
DELTA_PASS("instructions", reduceInstructionsMIRDeltaPass) \
122-
DELTA_PASS("ir-instruction-references", \
123-
reduceIRInstructionReferencesDeltaPass) \
124-
DELTA_PASS("ir-block-references", reduceIRBlockReferencesDeltaPass) \
125-
DELTA_PASS("ir-function-references", reduceIRFunctionReferencesDeltaPass) \
126-
DELTA_PASS("instruction-flags", reduceInstructionFlagsMIRDeltaPass) \
127-
DELTA_PASS("register-uses", reduceRegisterUsesMIRDeltaPass) \
128-
DELTA_PASS("register-defs", reduceRegisterDefsMIRDeltaPass) \
129-
DELTA_PASS("register-hints", reduceVirtualRegisterHintsDeltaPass) \
130-
DELTA_PASS("register-masks", reduceRegisterMasksMIRDeltaPass) \
131-
} while (false)
76+
// Generate two separate Pass lists: IR_Passes and MIR_Passes
77+
static const DeltaPass IR_Passes[] = {
78+
#undef DELTA_PASS_IR
79+
#undef DELTA_PASS_MIR
80+
#define DELTA_PASS_IR(NAME, FUNC, DESC) {NAME, FUNC, DESC},
81+
#include "DeltaPasses.def"
82+
#undef DELTA_PASS_IR
83+
};
84+
85+
static const DeltaPass MIR_Passes[] = {
86+
#undef DELTA_PASS_IR
87+
#undef DELTA_PASS_MIR
88+
#define DELTA_PASS_MIR(NAME, FUNC, DESC) {NAME, FUNC, DESC},
89+
#include "DeltaPasses.def"
90+
#undef DELTA_PASS_MIR
91+
};
92+
13293

13394
static void runAllDeltaPasses(TestRunner &Tester,
13495
const SmallStringSet &SkipPass) {
135-
#define DELTA_PASS(NAME, FUNC) \
136-
if (!SkipPass.count(NAME)) { \
137-
FUNC(Tester); \
138-
}
13996
if (Tester.getProgram().isMIR()) {
140-
DELTA_PASSES_MIR;
97+
for(const DeltaPass &Pass : MIR_Passes) {
98+
if (!SkipPass.count(Pass.Name)) {
99+
SmallString<64> Message;
100+
Message += Pass.Desc;
101+
Message += " (";
102+
Message += Pass.Name;
103+
Message += ")";
104+
Pass.Func(Tester,Message);
105+
}
106+
}
141107
} else {
142-
DELTA_PASSES;
108+
for(const DeltaPass &Pass : IR_Passes) {
109+
if (!SkipPass.count(Pass.Name)) {
110+
SmallString<64> Message;
111+
Message += Pass.Desc;
112+
Message += " (";
113+
Message += Pass.Name;
114+
Message += ")";
115+
Pass.Func(Tester,Message);
116+
}
117+
}
143118
}
144-
#undef DELTA_PASS
145119
}
146120

147121
static void runDeltaPassName(TestRunner &Tester, StringRef PassName) {
148-
#define DELTA_PASS(NAME, FUNC) \
149-
if (PassName == NAME) { \
150-
FUNC(Tester); \
151-
return; \
152-
}
153122
if (Tester.getProgram().isMIR()) {
154-
DELTA_PASSES_MIR;
123+
for(const DeltaPass &Pass : MIR_Passes) {
124+
if (PassName == Pass.Name) {
125+
SmallString<64> Message;
126+
Message += Pass.Desc;
127+
Message += " (";
128+
Message += Pass.Name;
129+
Message += ")";
130+
Pass.Func(Tester,Message);
131+
return;
132+
}
133+
}
155134
} else {
156-
DELTA_PASSES;
135+
for(const DeltaPass &Pass : IR_Passes) {
136+
if (PassName == Pass.Name) {
137+
SmallString<64> Message;
138+
Message += Pass.Desc;
139+
Message += " (";
140+
Message += Pass.Name;
141+
Message += ")";
142+
Pass.Func(Tester,Message);
143+
return;
144+
}
145+
}
157146
}
158-
#undef DELTA_PASS
159147

160148
// We should have errored on unrecognized passes before trying to run
161149
// anything.
@@ -164,24 +152,25 @@ static void runDeltaPassName(TestRunner &Tester, StringRef PassName) {
164152

165153
void llvm::printDeltaPasses(raw_ostream &OS) {
166154
OS << "Delta passes (pass to `--delta-passes=` as a comma separated list):\n";
167-
#define DELTA_PASS(NAME, FUNC) OS << " " << NAME << "\n";
168155
OS << " IR:\n";
169-
DELTA_PASSES;
156+
for (const DeltaPass &Pass : IR_Passes) {
157+
OS << " " << Pass.Name << "\n";
158+
}
170159
OS << " MIR:\n";
171-
DELTA_PASSES_MIR;
172-
#undef DELTA_PASS
160+
for (const DeltaPass &Pass : MIR_Passes) {
161+
OS << " " << Pass.Name << "\n";
162+
}
173163
}
174164

175165
// Built a set of available delta passes.
176166
static void collectPassNames(const TestRunner &Tester,
177167
SmallStringSet &NameSet) {
178-
#define DELTA_PASS(NAME, FUNC) NameSet.insert(NAME);
179-
if (Tester.getProgram().isMIR()) {
180-
DELTA_PASSES_MIR;
181-
} else {
182-
DELTA_PASSES;
168+
for (const DeltaPass &Pass : MIR_Passes) {
169+
NameSet.insert(Pass.Name);
170+
}
171+
for (const DeltaPass &Pass : IR_Passes) {
172+
NameSet.insert(Pass.Name);
183173
}
184-
#undef DELTA_PASS
185174
}
186175

187176
/// Verify all requested or skipped passes are valid names, and return them in a

llvm/tools/llvm-reduce/DeltaPass.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//===--- DeltaPass.h - Delta Pass Structure --------------------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
10+
11+
#ifndef LLVM_TOOLS_LLVM_REDUCE_DELTAPASS_H
12+
#define LLVM_TOOLS_LLVM_REDUCE_DELTAPASS_H
13+
14+
#include "TestRunner.h"
15+
16+
namespace llvm {
17+
struct DeltaPass {
18+
StringRef Name; // e.g., "strip-debug-info"
19+
void (*Func)(TestRunner &, StringRef); // function pointer, e.g.,stripDebugInfoDeltaPass
20+
StringRef Desc; // e.g., "Stripping Debug Info"
21+
};
22+
} // namespace llvm
23+
24+
25+
#endif
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
//===--- DeltaPasses.def - Delta Pass Definitions --------------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
10+
#ifndef DELTA_PASS_IR
11+
#define DELTA_PASS_IR(NAME, FUNC, DESC)
12+
#endif
13+
DELTA_PASS_IR("strip-debug-info", stripDebugInfoDeltaPass, "Stripping Debug Info")
14+
DELTA_PASS_IR("functions", reduceFunctionsDeltaPass, "Reducing Functions")
15+
DELTA_PASS_IR("function-bodies", reduceFunctionBodiesDeltaPass, "Reducing Function Bodies")
16+
DELTA_PASS_IR("special-globals", reduceSpecialGlobalsDeltaPass, "Reducing Special Globals")
17+
DELTA_PASS_IR("aliases", reduceAliasesDeltaPass, "Reducing Aliases")
18+
DELTA_PASS_IR("ifuncs", reduceIFuncsDeltaPass, "Reducing Ifuncs")
19+
DELTA_PASS_IR("simplify-conditionals-true", reduceConditionalsTrueDeltaPass,"Reducing conditional branches to true")
20+
DELTA_PASS_IR("simplify-conditionals-false",
21+
reduceConditionalsFalseDeltaPass,"Reducing conditional branches to false")
22+
DELTA_PASS_IR("invokes", reduceInvokesDeltaPass, "Reducing Invokes")
23+
DELTA_PASS_IR("unreachable-basic-blocks",
24+
reduceUnreachableBasicBlocksDeltaPass, "Removing Unreachable Basic Blocks")
25+
DELTA_PASS_IR("basic-blocks", reduceBasicBlocksDeltaPass, "Reducing Basic Blocks")
26+
DELTA_PASS_IR("simplify-cfg", reduceUsingSimplifyCFGDeltaPass,"Reducing using SimplifyCFG")
27+
DELTA_PASS_IR("function-data", reduceFunctionDataDeltaPass, "Reducing Function Data")
28+
DELTA_PASS_IR("global-values", reduceGlobalValuesDeltaPass, "Reducing GlobalValues")
29+
DELTA_PASS_IR("global-objects", reduceGlobalObjectsDeltaPass, "Reducing GlobalObjects")
30+
DELTA_PASS_IR("global-initializers", reduceGlobalsInitializersDeltaPass, "Reducing GV Initializers")
31+
DELTA_PASS_IR("global-variables", reduceGlobalsDeltaPass, "Reducing GlobalVariables")
32+
DELTA_PASS_IR("di-metadata", reduceDIMetadataDeltaPass, "Reducing DIMetadata")
33+
DELTA_PASS_IR("dbg-records", reduceDbgRecordDeltaPass, "Reducing DbgRecords")
34+
DELTA_PASS_IR("distinct-metadata", reduceDistinctMetadataDeltaPass, "Reducing Distinct Metadata")
35+
DELTA_PASS_IR("metadata", reduceMetadataDeltaPass,"Reducing Metadata")
36+
DELTA_PASS_IR("named-metadata", reduceNamedMetadataDeltaPass,"Reducing Named Metadata")
37+
DELTA_PASS_IR("arguments", reduceArgumentsDeltaPass, "Reducing Arguments")
38+
DELTA_PASS_IR("instructions", reduceInstructionsDeltaPass, "Reducing Instructions")
39+
DELTA_PASS_IR("simplify-instructions", simplifyInstructionsDeltaPass,"Simplifying Instructions")
40+
DELTA_PASS_IR("ir-passes", runIRPassesDeltaPass,"Running passes")
41+
DELTA_PASS_IR("operands-zero", reduceOperandsZeroDeltaPass,"Reducing Operands to zero")
42+
DELTA_PASS_IR("operands-one", reduceOperandsOneDeltaPass,"Reducing Operands to one")
43+
DELTA_PASS_IR("operands-nan", reduceOperandsNaNDeltaPass,"Reducing Operands to NaN")
44+
DELTA_PASS_IR("operands-to-args", reduceOperandsToArgsDeltaPass,"Converting operands to function arguments")
45+
DELTA_PASS_IR("operands-skip", reduceOperandsSkipDeltaPass,"Reducing operands by skipping over instructions")
46+
DELTA_PASS_IR("operand-bundles", reduceOperandBundesDeltaPass,"Reducing Operand Bundles")
47+
DELTA_PASS_IR("attributes", reduceAttributesDeltaPass, "Reducing Attributes")
48+
DELTA_PASS_IR("module-data", reduceModuleDataDeltaPass,"Reducing Module Data")
49+
DELTA_PASS_IR("opcodes", reduceOpcodesDeltaPass,"Reducing Opcodes")
50+
DELTA_PASS_IR("volatile", reduceVolatileInstructionsDeltaPass,"Reducing Volatile Instructions")
51+
DELTA_PASS_IR("atomic-ordering", reduceAtomicOrderingDeltaPass,"Reducing Atomic Ordering")
52+
DELTA_PASS_IR("syncscopes", reduceAtomicSyncScopesDeltaPass,"Reducing Atomic Sync Scopes")
53+
DELTA_PASS_IR("instruction-flags", reduceInstructionFlagsDeltaPass, "Reducing Instruction Flags")
54+
55+
56+
#ifndef DELTA_PASS_MIR
57+
#define DELTA_PASS_MIR(NAME, FUNC, DESC)
58+
#endif
59+
DELTA_PASS_MIR("instructions", reduceInstructionsMIRDeltaPass, "Reducing Instructions")
60+
DELTA_PASS_MIR("ir-instruction-references",
61+
reduceIRInstructionReferencesDeltaPass,"Reducing IR references from instructions")
62+
DELTA_PASS_MIR("ir-block-references", reduceIRBlockReferencesDeltaPass,"Reducing IR references from blocks")
63+
DELTA_PASS_MIR("ir-function-references", reduceIRFunctionReferencesDeltaPass,"Reducing IR references from functions")
64+
DELTA_PASS_MIR("instruction-flags", reduceInstructionFlagsMIRDeltaPass, "Reducing Instruction Flags")
65+
DELTA_PASS_MIR("register-uses", reduceRegisterUsesMIRDeltaPass,"Reducing register uses")
66+
DELTA_PASS_MIR("register-defs", reduceRegisterDefsMIRDeltaPass,"Reducing register defs")
67+
DELTA_PASS_MIR("register-hints", reduceVirtualRegisterHintsDeltaPass,"Reducing virtual register hints from functions")
68+
DELTA_PASS_MIR("register-masks", reduceRegisterMasksMIRDeltaPass,"Reducing register masks")

llvm/tools/llvm-reduce/deltas/Delta.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "llvm/Support/raw_ostream.h"
2121
#include <functional>
2222
#include <utility>
23+
#include "llvm/ADT/StringRef.h"
2324

2425
namespace llvm {
2526

llvm/tools/llvm-reduce/deltas/ReduceAliases.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ static void extractIFuncsFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
4444
lowerGlobalIFuncUsersAsGlobalCtor(Mod, IFuncs);
4545
}
4646

47-
void llvm::reduceAliasesDeltaPass(TestRunner &Test) {
48-
runDeltaPass(Test, extractAliasesFromModule, "Reducing Aliases (aliases)");
47+
void llvm::reduceAliasesDeltaPass(TestRunner &Test, StringRef PassMessage) {
48+
runDeltaPass(Test, extractAliasesFromModule, PassMessage);
4949
}
5050

51-
void llvm::reduceIFuncsDeltaPass(TestRunner &Test) {
52-
runDeltaPass(Test, extractIFuncsFromModule, "Reducing Ifuncs (ifuncs)");
51+
void llvm::reduceIFuncsDeltaPass(TestRunner &Test, StringRef PassMessage) {
52+
runDeltaPass(Test, extractIFuncsFromModule, PassMessage);
5353
}

llvm/tools/llvm-reduce/deltas/ReduceAliases.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
#include "Delta.h"
1818

1919
namespace llvm {
20-
void reduceAliasesDeltaPass(TestRunner &Test);
21-
void reduceIFuncsDeltaPass(TestRunner &Test);
20+
void reduceAliasesDeltaPass(TestRunner &Test, StringRef PassMessage);
21+
void reduceIFuncsDeltaPass(TestRunner &Test, StringRef PassMessage);
2222
} // namespace llvm
2323

2424
#endif

llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,6 @@ static void extractArgumentsFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
119119
}
120120
}
121121

122-
void llvm::reduceArgumentsDeltaPass(TestRunner &Test) {
123-
runDeltaPass(Test, extractArgumentsFromModule, "Reducing Arguments (arguments)");
122+
void llvm::reduceArgumentsDeltaPass(TestRunner &Test, StringRef PassMessage) {
123+
runDeltaPass(Test, extractArgumentsFromModule, PassMessage);
124124
}

llvm/tools/llvm-reduce/deltas/ReduceArguments.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#include "llvm/Transforms/Utils/Cloning.h"
2121

2222
namespace llvm {
23-
void reduceArgumentsDeltaPass(TestRunner &Test);
23+
void reduceArgumentsDeltaPass(TestRunner &Test, StringRef PassMessage);
2424
} // namespace llvm
2525

2626
#endif

llvm/tools/llvm-reduce/deltas/ReduceAttributes.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,6 @@ static void extractAttributesFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
148148
R.visit(WorkItem.getModule());
149149
}
150150

151-
void llvm::reduceAttributesDeltaPass(TestRunner &Test) {
152-
runDeltaPass(Test, extractAttributesFromModule, "Reducing Attributes (attributes)");
151+
void llvm::reduceAttributesDeltaPass(TestRunner &Test, StringRef PassMessage) {
152+
runDeltaPass(Test, extractAttributesFromModule, PassMessage);
153153
}

llvm/tools/llvm-reduce/deltas/ReduceAttributes.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@
1414
#ifndef LLVM_TOOLS_LLVM_REDUCE_DELTAS_REDUCEATTRIBUTES_H
1515
#define LLVM_TOOLS_LLVM_REDUCE_DELTAS_REDUCEATTRIBUTES_H
1616

17+
#include "llvm/ADT/StringRef.h"
18+
1719
namespace llvm {
1820
class TestRunner;
19-
void reduceAttributesDeltaPass(TestRunner &Test);
21+
void reduceAttributesDeltaPass(TestRunner &Test, StringRef PassMessage);
2022
} // namespace llvm
2123

2224
#endif

0 commit comments

Comments
 (0)