Skip to content

Commit 163d5bc

Browse files
authored
Merge pull request #68466 from gottesmm/actor-field-access-sns
[send-non-sendable] Treat final fields of actors and values returned from actor methods as non-transferrable
2 parents 90cfbd6 + 4dcee71 commit 163d5bc

File tree

3 files changed

+501
-299
lines changed

3 files changed

+501
-299
lines changed

include/swift/SILOptimizer/Utils/PartitionUtils.h

Lines changed: 26 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ class PartitionOp {
141141

142142
PartitionOpKind getKind() const { return OpKind; }
143143

144+
ArrayRef<Element> getOpArgs() const { return OpArgs; }
145+
144146
SILInstruction *getSourceInst(bool assertNonNull = false) const {
145147
assert(!assertNonNull ||
146148
sourceInst && "PartitionOps should be assigned SILInstruction"
@@ -152,38 +154,24 @@ class PartitionOp {
152154
return sourceExpr;
153155
}
154156

155-
void dump() const LLVM_ATTRIBUTE_USED {
156-
raw_ostream &os = llvm::errs();
157+
SWIFT_DEBUG_DUMP { print(llvm::dbgs()); }
158+
159+
void print(llvm::raw_ostream &os) const {
157160
switch (OpKind) {
158161
case PartitionOpKind::Assign:
159-
os.changeColor(llvm::raw_ostream::CYAN, true);
160-
os << "assign";
161-
os.resetColor();
162-
os << " %%" << OpArgs[0] << " = %%" << OpArgs[1] << "\n";
162+
os << "assign %%" << OpArgs[0] << " = %%" << OpArgs[1] << "\n";
163163
break;
164164
case PartitionOpKind::AssignFresh:
165-
os.changeColor(llvm::raw_ostream::GREEN, true);
166-
os << "assign_fresh";
167-
os.resetColor();
168-
os << " %%" << OpArgs[0] << "\n";
165+
os << "assign_fresh %%" << OpArgs[0] << "\n";
169166
break;
170167
case PartitionOpKind::Consume:
171-
os.changeColor(llvm::raw_ostream::RED, true);
172-
os << "consume";
173-
os.resetColor();
174-
os << " %%" << OpArgs[0] << "\n";
168+
os << "consume %%" << OpArgs[0] << "\n";
175169
break;
176170
case PartitionOpKind::Merge:
177-
os.changeColor(llvm::raw_ostream::BLUE, true);
178-
os << "merge";
179-
os.resetColor();
180-
os << " %%" << OpArgs[0] << " with %%" << OpArgs[1] << "\n";
171+
os << "merge %%" << OpArgs[0] << " with %%" << OpArgs[1] << "\n";
181172
break;
182173
case PartitionOpKind::Require:
183-
os.changeColor(llvm::raw_ostream::YELLOW, true);
184-
os << "require";
185-
os.resetColor();
186-
os << " %%" << OpArgs[0] << "\n";
174+
os << "require %%" << OpArgs[0] << "\n";
187175
break;
188176
}
189177
}
@@ -236,7 +224,7 @@ class Partition {
236224

237225
auto fail = [&](Element i, int type) {
238226
llvm::dbgs() << "FAIL(i=" << i << "; type=" << type << "): ";
239-
dump();
227+
print(llvm::dbgs());
240228
return false;
241229
};
242230

@@ -382,14 +370,10 @@ class Partition {
382370
fst_reduced.merge(i, Element(snd_label));
383371
}
384372

385-
LLVM_DEBUG(
386-
llvm::dbgs() << "JOIN PEFORMED: \nFST: ";
387-
fst.dump();
388-
llvm::dbgs() << "SND: ";
389-
snd.dump();
390-
llvm::dbgs() << "RESULT: ";
391-
fst_reduced.dump();
392-
);
373+
LLVM_DEBUG(llvm::dbgs() << "JOIN PEFORMED: \nFST: ";
374+
fst.print(llvm::dbgs()); llvm::dbgs() << "SND: ";
375+
snd.print(llvm::dbgs()); llvm::dbgs() << "RESULT: ";
376+
fst_reduced.print(llvm::dbgs()););
393377

394378
assert(fst_reduced.is_canonical_correct());
395379

@@ -410,7 +394,7 @@ class Partition {
410394
llvm::function_ref<void(const PartitionOp &, Element)> handleFailure =
411395
[](const PartitionOp &, Element) {},
412396

413-
std::vector<Element> nonconsumables = {},
397+
ArrayRef<Element> nonconsumables = {},
414398

415399
llvm::function_ref<void(const PartitionOp &, Element)>
416400
handleConsumeNonConsumable = [](const PartitionOp &, Element) {}) {
@@ -531,24 +515,27 @@ class Partition {
531515
llvm::dbgs() << "}\n";
532516
}
533517

534-
void dump() const LLVM_ATTRIBUTE_USED {
518+
SWIFT_DEBUG_DUMP { print(llvm::dbgs()); }
519+
520+
void print(llvm::raw_ostream &os) const {
535521
std::map<Region, std::vector<Element>> buckets;
536522

537523
for (auto [i, label] : labels)
538524
buckets[label].push_back(i);
539525

540-
llvm::dbgs() << "[";
526+
os << "[";
541527
for (auto [label, indices] : buckets) {
542-
llvm::dbgs() << (label.isConsumed() ? "{" : "(");
528+
os << (label.isConsumed() ? "{" : "(");
543529
int j = 0;
544530
for (Element i : indices) {
545-
llvm::dbgs() << (j++ ? " " : "") << i;
531+
os << (j++ ? " " : "") << i;
546532
}
547-
llvm::dbgs() << (label.isConsumed() ? "}" : ")");
533+
os << (label.isConsumed() ? "}" : ")");
548534
}
549-
llvm::dbgs() << "]\n";
535+
os << "]\n";
550536
}
551537
};
552-
}
538+
539+
} // namespace swift
553540

554541
#endif // SWIFT_PARTITIONUTILS_H

0 commit comments

Comments
 (0)