Skip to content

Commit c28279f

Browse files
authored
Merge pull request #80095 from eeckstein/cleanup-passes-def
PassManager: cleanup Passes.def
2 parents f8798ce + 62ea5b1 commit c28279f

File tree

8 files changed

+378
-364
lines changed

8 files changed

+378
-364
lines changed

include/swift/SILOptimizer/PassManager/PassManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ class SILPassManager {
252252
/// A mask which has one bit for each pass. A one for a pass-bit means that
253253
/// the pass doesn't need to run, because nothing has changed since the
254254
/// previous run of that pass.
255-
typedef std::bitset<(size_t)PassKind::AllPasses_Last + 1> CompletedPasses;
255+
typedef std::bitset<(size_t)PassKind::numPasses> CompletedPasses;
256256

257257
/// A completed-passes mask for each function.
258258
llvm::DenseMap<SILFunction *, CompletedPasses> CompletedPassesMap;

include/swift/SILOptimizer/PassManager/Passes.def

Lines changed: 300 additions & 338 deletions
Large diffs are not rendered by default.

include/swift/SILOptimizer/PassManager/Passes.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ namespace swift {
6565
/// lists of passes.
6666
enum class PassKind {
6767
#define PASS(ID, TAG, NAME) ID,
68-
#define PASS_RANGE(ID, START, END) ID##_First = START, ID##_Last = END,
6968
#include "Passes.def"
70-
invalidPassKind
69+
invalidPassKind,
70+
numPasses = invalidPassKind,
7171
};
7272

7373
PassKind PassKindFromString(StringRef ID);

lib/SILOptimizer/PassManager/PassManager.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,8 +1202,7 @@ enum class IRGenPasses : uint8_t {
12021202
} // end anonymous namespace
12031203

12041204
void SILPassManager::addPass(PassKind Kind) {
1205-
assert(unsigned(PassKind::AllPasses_Last) >= unsigned(Kind) &&
1206-
"Invalid pass kind");
1205+
ASSERT(unsigned(PassKind::numPasses) > unsigned(Kind) && "Invalid pass kind");
12071206
switch (Kind) {
12081207
#define PASS(ID, TAG, NAME) \
12091208
case PassKind::ID: { \

lib/SILOptimizer/PassManager/Passes.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -285,26 +285,26 @@ void SILPassManager_registerFunctionPass(BridgedStringRef name,
285285
passesRegistered = true;
286286
}
287287

288-
#define PASS(ID, TAG, DESCRIPTION)
288+
#define LEGACY_PASS(ID, TAG, DESCRIPTION)
289289

290-
#define SWIFT_MODULE_PASS(ID, TAG, DESCRIPTION) \
291-
class ID##Pass : public SILModuleTransform { \
292-
static BridgedModulePassRunFn runFunction; \
290+
#define PASS(ID, TAG, DESCRIPTION) \
291+
class ID##Pass : public SILFunctionTransform { \
292+
static BridgedFunctionPassRunFn runFunction; \
293293
void run() override { \
294-
runBridgedModulePass(runFunction, PM, TAG); \
294+
runBridgedFunctionPass(runFunction, PM, getFunction(), TAG); \
295295
} \
296296
}; \
297-
BridgedModulePassRunFn ID##Pass::runFunction = nullptr; \
297+
BridgedFunctionPassRunFn ID##Pass::runFunction = nullptr; \
298298
SILTransform *swift::create##ID() { return new ID##Pass(); } \
299299

300-
#define SWIFT_FUNCTION_PASS(ID, TAG, DESCRIPTION) \
301-
class ID##Pass : public SILFunctionTransform { \
302-
static BridgedFunctionPassRunFn runFunction; \
300+
#define MODULE_PASS(ID, TAG, DESCRIPTION) \
301+
class ID##Pass : public SILModuleTransform { \
302+
static BridgedModulePassRunFn runFunction; \
303303
void run() override { \
304-
runBridgedFunctionPass(runFunction, PM, getFunction(), TAG); \
304+
runBridgedModulePass(runFunction, PM, TAG); \
305305
} \
306306
}; \
307-
BridgedFunctionPassRunFn ID##Pass::runFunction = nullptr; \
307+
BridgedModulePassRunFn ID##Pass::runFunction = nullptr; \
308308
SILTransform *swift::create##ID() { return new ID##Pass(); } \
309309

310310
#include "swift/SILOptimizer/PassManager/Passes.def"

lib/SILOptimizer/SILCombiner/SILCombine.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -633,12 +633,12 @@ void SILCombine_registerInstructionPass(BridgedStringRef instClassName,
633633
runSwiftInstructionPass(inst, runFunction); \
634634
return nullptr; \
635635

636-
#define SWIFT_SILCOMBINE_PASS(INST) \
636+
#define INSTRUCTION_SIMPLIFICATION(INST) \
637637
SILInstruction *SILCombiner::visit##INST(INST *inst) { \
638638
_RUN_SWIFT_SIMPLIFICATON(INST) \
639639
} \
640640

641-
#define SWIFT_SILCOMBINE_PASS_WITH_LEGACY(INST) \
641+
#define INSTRUCTION_SIMPLIFICATION_WITH_LEGACY(INST) \
642642
SILInstruction *SILCombiner::visit##INST(INST *inst) { \
643643
if (auto *result = legacyVisit##INST(inst)) \
644644
return result; \
@@ -648,9 +648,7 @@ SILInstruction *SILCombiner::visit##INST(INST *inst) { \
648648
return nullptr; \
649649
} \
650650

651-
#define PASS(ID, TAG, DESCRIPTION)
652-
653-
#include "swift/SILOptimizer/PassManager/Passes.def"
651+
#include "Simplifications.def"
654652

655653
#undef _RUN_SWIFT_SIMPLIFICATON
656654

lib/SILOptimizer/SILCombiner/SILCombiner.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -301,14 +301,12 @@ class SILCombiner :
301301

302302
SILInstruction *legacyVisitGlobalValueInst(GlobalValueInst *globalValue);
303303

304-
#define PASS(ID, TAG, DESCRIPTION)
305-
#define SWIFT_FUNCTION_PASS(ID, TAG, DESCRIPTION)
306-
#define SWIFT_SILCOMBINE_PASS(INST) \
304+
#define INSTRUCTION_SIMPLIFICATION(INST) \
307305
SILInstruction *visit##INST(INST *);
308-
#define SWIFT_SILCOMBINE_PASS_WITH_LEGACY(INST) \
306+
#define INSTRUCTION_SIMPLIFICATION_WITH_LEGACY(INST) \
309307
SILInstruction *visit##INST(INST *); \
310308
SILInstruction *legacyVisit##INST(INST *);
311-
#include "swift/SILOptimizer/PassManager/Passes.def"
309+
#include "Simplifications.def"
312310

313311
/// Instruction visitor helpers.
314312

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
//===--- Simplifications.def ------------------------------------*- C++ -*-===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2014 - 2025 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0 with Runtime Library Exception
7+
//
8+
// See https://swift.org/LICENSE.txt for license information
9+
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
//===----------------------------------------------------------------------===//
12+
//
13+
// This file contains macro-metaprogramming for instruction simplifications
14+
// running in SILCombine.
15+
//
16+
//===----------------------------------------------------------------------===//
17+
18+
/// INSTRUCTION_SIMPLIFICATION(Inst)
19+
/// Defines an instruction simplification which is implemented in swift and is
20+
/// run by the SILCombiner.
21+
/// The \p Inst argument specifies the instruction class.
22+
///
23+
/// No further code is need on the C++ side. On the swift side an instruction
24+
/// simplification must be registered for the instruction class with
25+
/// `registerForSILCombine`.
26+
///
27+
28+
/// INSTRUCTION_SIMPLIFICATION_WITH_LEGACY(Inst)
29+
/// Like INSTRUCTION_SIMPLIFICATION, but also runs the legacy `visitInst`
30+
/// implementation in SILCombine.
31+
32+
INSTRUCTION_SIMPLIFICATION(BeginBorrowInst)
33+
INSTRUCTION_SIMPLIFICATION(BeginCOWMutationInst)
34+
INSTRUCTION_SIMPLIFICATION(ClassifyBridgeObjectInst)
35+
INSTRUCTION_SIMPLIFICATION(FixLifetimeInst)
36+
INSTRUCTION_SIMPLIFICATION(GlobalValueInst)
37+
INSTRUCTION_SIMPLIFICATION(StrongRetainInst)
38+
INSTRUCTION_SIMPLIFICATION(StrongReleaseInst)
39+
INSTRUCTION_SIMPLIFICATION(RetainValueInst)
40+
INSTRUCTION_SIMPLIFICATION(ReleaseValueInst)
41+
INSTRUCTION_SIMPLIFICATION(LoadInst)
42+
INSTRUCTION_SIMPLIFICATION(LoadBorrowInst)
43+
INSTRUCTION_SIMPLIFICATION(CopyValueInst)
44+
INSTRUCTION_SIMPLIFICATION(DestroyValueInst)
45+
INSTRUCTION_SIMPLIFICATION(DestructureStructInst)
46+
INSTRUCTION_SIMPLIFICATION(DestructureTupleInst)
47+
INSTRUCTION_SIMPLIFICATION(PointerToAddressInst)
48+
INSTRUCTION_SIMPLIFICATION(TypeValueInst)
49+
INSTRUCTION_SIMPLIFICATION(UncheckedEnumDataInst)
50+
INSTRUCTION_SIMPLIFICATION(WitnessMethodInst)
51+
INSTRUCTION_SIMPLIFICATION_WITH_LEGACY(AllocStackInst)
52+
INSTRUCTION_SIMPLIFICATION_WITH_LEGACY(UnconditionalCheckedCastInst)
53+
INSTRUCTION_SIMPLIFICATION_WITH_LEGACY(ApplyInst)
54+
INSTRUCTION_SIMPLIFICATION_WITH_LEGACY(TryApplyInst)
55+
56+
#undef INSTRUCTION_SIMPLIFICATION
57+
#undef INSTRUCTION_SIMPLIFICATION_WITH_LEGACY

0 commit comments

Comments
 (0)