Skip to content

Commit 1284254

Browse files
committed
[llvm-reduce]: print short form, actionable names in the log
1 parent f8ffbae commit 1284254

File tree

76 files changed

+329
-471
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

+329
-471
lines changed

llvm/tools/llvm-reduce/DeltaManager.cpp

Lines changed: 58 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
//===----------------------------------------------------------------------===//
1313

1414
#include "DeltaManager.h"
15+
#include "DeltaPass.h"
1516
#include "ReducerWorkItem.h"
1617
#include "TestRunner.h"
1718
#include "deltas/Delta.h"
@@ -71,91 +72,64 @@ static cl::list<std::string>
7172
"default, run all delta passes."),
7273
cl::cat(LLVMReduceOptions), cl::CommaSeparated);
7374

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)
75+
// Generate two separate Pass lists: IR_Passes and MIR_Passes
76+
static const DeltaPass IR_Passes[] = {
77+
#undef DELTA_PASS_IR
78+
#undef DELTA_PASS_MIR
79+
#define DELTA_PASS_IR(NAME, FUNC, DESC) {NAME, FUNC, DESC},
80+
#include "DeltaPasses.def"
81+
#undef DELTA_PASS_IR
82+
};
83+
84+
static const DeltaPass MIR_Passes[] = {
85+
#undef DELTA_PASS_IR
86+
#undef DELTA_PASS_MIR
87+
#define DELTA_PASS_MIR(NAME, FUNC, DESC) {NAME, FUNC, DESC},
88+
#include "DeltaPasses.def"
89+
#undef DELTA_PASS_MIR
90+
};
91+
92+
static SmallString<64> getPassMessage(const DeltaPass &Pass) {
93+
SmallString<64> Message = Pass.Desc;
94+
Message += " (";
95+
Message += Pass.Name;
96+
Message += ')';
97+
return Message;
98+
}
13299

133100
static void runAllDeltaPasses(TestRunner &Tester,
134101
const SmallStringSet &SkipPass) {
135-
#define DELTA_PASS(NAME, FUNC) \
136-
if (!SkipPass.count(NAME)) { \
137-
FUNC(Tester); \
138-
}
139102
if (Tester.getProgram().isMIR()) {
140-
DELTA_PASSES_MIR;
103+
for (const DeltaPass &Pass : MIR_Passes) {
104+
if (!SkipPass.count(Pass.Name)) {
105+
runDeltaPass(Tester, Pass.Func, getPassMessage(Pass));
106+
}
107+
}
141108
} else {
142-
DELTA_PASSES;
109+
for (const DeltaPass &Pass : IR_Passes) {
110+
if (!SkipPass.count(Pass.Name)) {
111+
runDeltaPass(Tester, Pass.Func, getPassMessage(Pass));
112+
}
113+
}
143114
}
144-
#undef DELTA_PASS
145115
}
146116

147117
static void runDeltaPassName(TestRunner &Tester, StringRef PassName) {
148-
#define DELTA_PASS(NAME, FUNC) \
149-
if (PassName == NAME) { \
150-
FUNC(Tester); \
151-
return; \
152-
}
153118
if (Tester.getProgram().isMIR()) {
154-
DELTA_PASSES_MIR;
119+
for (const DeltaPass &Pass : MIR_Passes) {
120+
if (PassName == Pass.Name) {
121+
runDeltaPass(Tester, Pass.Func, getPassMessage(Pass));
122+
return;
123+
}
124+
}
155125
} else {
156-
DELTA_PASSES;
126+
for (const DeltaPass &Pass : IR_Passes) {
127+
if (PassName == Pass.Name) {
128+
runDeltaPass(Tester, Pass.Func, getPassMessage(Pass));
129+
return;
130+
}
131+
}
157132
}
158-
#undef DELTA_PASS
159133

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

165139
void llvm::printDeltaPasses(raw_ostream &OS) {
166140
OS << "Delta passes (pass to `--delta-passes=` as a comma separated list):\n";
167-
#define DELTA_PASS(NAME, FUNC) OS << " " << NAME << "\n";
168141
OS << " IR:\n";
169-
DELTA_PASSES;
142+
for (const DeltaPass &Pass : IR_Passes) {
143+
OS << " " << Pass.Name << '\n';
144+
}
170145
OS << " MIR:\n";
171-
DELTA_PASSES_MIR;
172-
#undef DELTA_PASS
146+
for (const DeltaPass &Pass : MIR_Passes) {
147+
OS << " " << Pass.Name << '\n';
148+
}
173149
}
174150

175151
// Built a set of available delta passes.
176152
static void collectPassNames(const TestRunner &Tester,
177153
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;
154+
for (const DeltaPass &Pass : MIR_Passes) {
155+
NameSet.insert(Pass.Name);
156+
}
157+
for (const DeltaPass &Pass : IR_Passes) {
158+
NameSet.insert(Pass.Name);
183159
}
184-
#undef DELTA_PASS
185160
}
186161

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

llvm/tools/llvm-reduce/DeltaPass.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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+
#ifndef LLVM_TOOLS_LLVM_REDUCE_DELTAPASS_H
10+
#define LLVM_TOOLS_LLVM_REDUCE_DELTAPASS_H
11+
12+
namespace llvm {
13+
struct DeltaPass {
14+
StringRef Name; // e.g., "strip-debug-info"
15+
void (*Func)(Oracle &, ReducerWorkItem &); // e.g.,stripDebugInfoDeltaPass
16+
StringRef Desc; // e.g., "Stripping Debug Info"
17+
};
18+
} // namespace llvm
19+
20+
#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
@@ -17,6 +17,7 @@
1717

1818
#include "ReducerWorkItem.h"
1919
#include "llvm/ADT/ArrayRef.h"
20+
#include "llvm/ADT/StringRef.h"
2021
#include "llvm/Support/raw_ostream.h"
2122
#include <functional>
2223
#include <utility>

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

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
//===----------------------------------------------------------------------===//
1313

1414
#include "ReduceAliases.h"
15-
#include "Delta.h"
1615
#include "Utils.h"
1716
#include "llvm/IR/Constants.h"
1817
#include "llvm/IR/GlobalValue.h"
@@ -22,7 +21,7 @@ using namespace llvm;
2221

2322
/// Removes all aliases aren't inside any of the
2423
/// desired Chunks.
25-
static void extractAliasesFromModule(Oracle &O, ReducerWorkItem &Program) {
24+
void llvm::reduceAliasesDeltaPass(Oracle &O, ReducerWorkItem &Program) {
2625
for (auto &GA : make_early_inc_range(Program.getModule().aliases())) {
2726
if (!O.shouldKeep()) {
2827
GA.replaceAllUsesWith(GA.getAliasee());
@@ -31,7 +30,7 @@ static void extractAliasesFromModule(Oracle &O, ReducerWorkItem &Program) {
3130
}
3231
}
3332

34-
static void extractIFuncsFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
33+
void llvm::reduceIFuncsDeltaPass(Oracle &O, ReducerWorkItem &WorkItem) {
3534
Module &Mod = WorkItem.getModule();
3635

3736
std::vector<GlobalIFunc *> IFuncs;
@@ -42,12 +41,4 @@ static void extractIFuncsFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
4241

4342
if (!IFuncs.empty())
4443
lowerGlobalIFuncUsersAsGlobalCtor(Mod, IFuncs);
45-
}
46-
47-
void llvm::reduceAliasesDeltaPass(TestRunner &Test) {
48-
runDeltaPass(Test, extractAliasesFromModule, "Reducing Aliases");
49-
}
50-
51-
void llvm::reduceIFuncsDeltaPass(TestRunner &Test) {
52-
runDeltaPass(Test, extractIFuncsFromModule, "Reducing Ifuncs");
53-
}
44+
}

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(Oracle &O, ReducerWorkItem &Program);
21+
void reduceIFuncsDeltaPass(Oracle &O, ReducerWorkItem &WorkItem);
2222
} // namespace llvm
2323

2424
#endif

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
//===----------------------------------------------------------------------===//
1313

1414
#include "ReduceArguments.h"
15-
#include "Delta.h"
1615
#include "Utils.h"
1716
#include "llvm/ADT/SmallVector.h"
1817
#include "llvm/IR/Constants.h"
@@ -112,7 +111,7 @@ static bool allFuncUsersRewritable(const Function &F) {
112111

113112
/// Removes out-of-chunk arguments from functions, and modifies their calls
114113
/// accordingly. It also removes allocations of out-of-chunk arguments.
115-
static void extractArgumentsFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
114+
void llvm::reduceArgumentsDeltaPass(Oracle &O, ReducerWorkItem &WorkItem) {
116115
Module &Program = WorkItem.getModule();
117116
std::vector<Argument *> InitArgsToKeep;
118117
std::vector<Function *> Funcs;
@@ -176,8 +175,4 @@ static void extractArgumentsFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
176175
F->replaceAllUsesWith(ClonedFunc);
177176
F->eraseFromParent();
178177
}
179-
}
180-
181-
void llvm::reduceArgumentsDeltaPass(TestRunner &Test) {
182-
runDeltaPass(Test, extractArgumentsFromModule, "Reducing Arguments");
183-
}
178+
}

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(Oracle &O, ReducerWorkItem &WorkItem);
2424
} // namespace llvm
2525

2626
#endif

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
//===----------------------------------------------------------------------===//
1313

1414
#include "ReduceAttributes.h"
15-
#include "Delta.h"
1615
#include "TestRunner.h"
1716
#include "llvm/ADT/ArrayRef.h"
1817
#include "llvm/ADT/STLExtras.h"
@@ -166,11 +165,7 @@ class AttributeRemapper : public InstVisitor<AttributeRemapper> {
166165
} // namespace
167166

168167
/// Removes out-of-chunk attributes from module.
169-
static void extractAttributesFromModule(Oracle &O, ReducerWorkItem &WorkItem) {
170-
AttributeRemapper R(O, WorkItem.getModule());
168+
void llvm::reduceAttributesDeltaPass(Oracle &O, ReducerWorkItem &WorkItem) {
169+
AttributeRemapper R(O, WorkItem.getContext());
171170
R.visit(WorkItem.getModule());
172171
}
173-
174-
void llvm::reduceAttributesDeltaPass(TestRunner &Test) {
175-
runDeltaPass(Test, extractAttributesFromModule, "Reducing Attributes");
176-
}

0 commit comments

Comments
 (0)