Skip to content

Commit 23a049c

Browse files
Merge pull request #79205 from nate-chandler/nfc/20250206/1
[NFC] OSSACanonicalizeOwned: Simplify Def definition.
2 parents c35d65e + c6e0480 commit 23a049c

File tree

2 files changed

+27
-71
lines changed

2 files changed

+27
-71
lines changed

include/swift/SILOptimizer/Utils/CanonicalizeOSSALifetime.h

Lines changed: 11 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@
9797
#define SWIFT_SILOPTIMIZER_UTILS_CANONICALOSSALIFETIME_H
9898

9999
#include "swift/Basic/SmallPtrSetVector.h"
100-
#include "swift/Basic/TaggedUnion.h"
101100
#include "swift/SIL/PrunedLiveness.h"
102101
#include "swift/SIL/SILInstruction.h"
103102
#include "swift/SILOptimizer/Analysis/DeadEndBlocksAnalysis.h"
@@ -279,68 +278,25 @@ class CanonicalizeOSSALifetime final {
279278
/// outside the pruned liveness at the time it is discovered.
280279
llvm::SmallPtrSet<DebugValueInst *, 8> debugValues;
281280

282-
class Def {
283-
struct Root {
284-
SILValue value;
285-
};
286-
struct Copy {
287-
CopyValueInst *cvi;
288-
};
289-
struct BorrowedFrom {
290-
BorrowedFromInst *bfi;
291-
};
292-
struct Reborrow {
293-
SILArgument *argument;
294-
};
295-
using Payload = TaggedUnion<Root, Copy, BorrowedFrom, Reborrow>;
296-
Payload payload;
297-
Def(Payload payload) : payload(payload) {}
298-
299-
public:
300-
enum class Kind {
281+
struct Def {
282+
enum Kind {
301283
Root,
302284
Copy,
303285
BorrowedFrom,
304286
Reborrow,
305287
};
306-
Kind getKind() const {
307-
if (payload.isa<Root>()) {
308-
return Kind::Root;
309-
}
310-
if (payload.isa<Copy>()) {
311-
return Kind::Copy;
312-
}
313-
if (payload.isa<BorrowedFrom>()) {
314-
return Kind::BorrowedFrom;
315-
}
316-
assert(payload.isa<Reborrow>());
317-
return Kind::Reborrow;
318-
}
319-
operator Kind() const { return getKind(); }
320-
bool operator==(Def rhs) const {
321-
return getKind() == rhs.getKind() && getValue() == rhs.getValue();
322-
}
323-
static Def root(SILValue value) { return {Root{value}}; }
324-
static Def copy(CopyValueInst *cvi) { return {Copy{cvi}}; }
288+
const Kind kind;
289+
const SILValue value;
290+
static Def root(SILValue value) { return {Root, value}; }
291+
static Def copy(CopyValueInst *cvi) { return {Copy, cvi}; }
325292
static Def borrowedFrom(BorrowedFromInst *bfi) {
326-
return {BorrowedFrom{bfi}};
327-
}
328-
static Def reborrow(SILArgument *argument) { return {Reborrow{argument}}; }
329-
SILValue getValue() const {
330-
switch (*this) {
331-
case Kind::Root:
332-
return payload.get<Root>().value;
333-
case Kind::Copy:
334-
return payload.get<Copy>().cvi;
335-
case Kind::BorrowedFrom:
336-
return payload.get<BorrowedFrom>().bfi;
337-
case Kind::Reborrow:
338-
return payload.get<Reborrow>().argument;
339-
}
340-
llvm_unreachable("covered switch");
293+
return {BorrowedFrom, bfi};
341294
}
295+
static Def reborrow(SILArgument *argument) { return {Reborrow, argument}; }
296+
297+
private:
298+
Def(Kind kind, SILValue value) : kind(kind), value(value) {}
342299
};
343-
friend llvm::DenseMapInfo<Def>;
344300

345301
/// The defs derived from currentDef whose uses are added to liveness.
346302
SmallVector<Def, 8> discoveredDefs;

lib/SILOptimizer/Utils/CanonicalizeOSSALifetime.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ bool CanonicalizeOSSALifetime::computeCanonicalLiveness() {
135135
SmallVector<unsigned, 8> indexWorklist;
136136
ValueSet visitedDefs(getCurrentDef()->getFunction());
137137
auto addDefToWorklist = [&](Def def) {
138-
if (!visitedDefs.insert(def.getValue()))
138+
if (!visitedDefs.insert(def.value))
139139
return;
140140
discoveredDefs.push_back(def);
141141
indexWorklist.push_back(discoveredDefs.size() - 1);
@@ -154,25 +154,25 @@ bool CanonicalizeOSSALifetime::computeCanonicalLiveness() {
154154
while (!indexWorklist.empty()) {
155155
auto index = indexWorklist.pop_back_val();
156156
auto def = discoveredDefs[index];
157-
auto value = def.getValue();
157+
auto value = def.value;
158158
LLVM_DEBUG(llvm::dbgs() << " Uses of value:\n";
159159
value->print(llvm::dbgs()));
160160

161161
for (Operand *use : value->getUses()) {
162162
LLVM_DEBUG(llvm::dbgs() << " Use:\n";
163163
use->getUser()->print(llvm::dbgs()));
164-
164+
165165
auto *user = use->getUser();
166166
// Recurse through copies.
167167
if (auto *copy = dyn_cast<CopyValueInst>(user)) {
168168
// Don't recurse through copies of borrowed-froms or reborrows.
169-
switch (def) {
170-
case Def::Kind::Root:
171-
case Def::Kind::Copy:
169+
switch (def.kind) {
170+
case Def::Root:
171+
case Def::Copy:
172172
addDefToWorklist(Def::copy(copy));
173173
break;
174-
case Def::Kind::Reborrow:
175-
case Def::Kind::BorrowedFrom:
174+
case Def::Reborrow:
175+
case Def::BorrowedFrom:
176176
break;
177177
}
178178
continue;
@@ -1252,15 +1252,15 @@ void CanonicalizeOSSALifetime::rewriteCopies(
12521252

12531253
// Perform a def-use traversal, visiting each use operand.
12541254
for (auto def : discoveredDefs) {
1255-
switch (def) {
1256-
case Def::Kind::BorrowedFrom:
1257-
case Def::Kind::Reborrow:
1255+
switch (def.kind) {
1256+
case Def::BorrowedFrom:
1257+
case Def::Reborrow:
12581258
// Direct uses of these defs never need to be rewritten. Being guaranteed
12591259
// values, none of their direct uses consume an owned value.
1260-
assert(def.getValue()->getOwnershipKind() == OwnershipKind::Guaranteed);
1260+
assert(def.value->getOwnershipKind() == OwnershipKind::Guaranteed);
12611261
break;
1262-
case Def::Kind::Root: {
1263-
SILValue value = def.getValue();
1262+
case Def::Root: {
1263+
SILValue value = def.value;
12641264
for (auto useIter = value->use_begin(), endIter = value->use_end();
12651265
useIter != endIter;) {
12661266
Operand *use = *useIter++;
@@ -1270,8 +1270,8 @@ void CanonicalizeOSSALifetime::rewriteCopies(
12701270
}
12711271
break;
12721272
}
1273-
case Def::Kind::Copy: {
1274-
SILValue value = def.getValue();
1273+
case Def::Copy: {
1274+
SILValue value = def.value;
12751275
CopyValueInst *srcCopy = cast<CopyValueInst>(value);
12761276
// Recurse through copies while replacing their uses.
12771277
Operand *reusedCopyOp = nullptr;

0 commit comments

Comments
 (0)