Skip to content

Commit 303ed78

Browse files
author
Anxhelo Xhebraj
committed
Swift SIL: add AccessKind to BeginAccess
1 parent b8b8f1a commit 303ed78

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

SwiftCompilerSources/Sources/SIL/Instruction.swift

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,35 @@ final public class BridgeObjectToRefInst : SingleValueInstruction,
488488
final public class BridgeObjectToWordInst : SingleValueInstruction,
489489
UnaryInstruction {}
490490

491-
final public class BeginAccessInst : SingleValueInstruction, UnaryInstruction {}
491+
public enum AccessKind {
492+
case initialize
493+
case read
494+
case modify
495+
case deinitialize
496+
}
497+
498+
extension BridgedAccessKind {
499+
var kind: AccessKind {
500+
switch self {
501+
case AccessKind_Init:
502+
return .initialize
503+
case AccessKind_Read:
504+
return .read
505+
case AccessKind_Modify:
506+
return .modify
507+
case AccessKind_Deinit:
508+
return .deinitialize
509+
default:
510+
fatalError("unsupported access kind")
511+
}
512+
}
513+
}
514+
515+
516+
// TODO: add support for begin_unpaired_access
517+
final public class BeginAccessInst : SingleValueInstruction, UnaryInstruction {
518+
public var accessKind: AccessKind { BeginAccessInst_getAccessKind(bridged).kind }
519+
}
492520

493521
final public class BeginBorrowInst : SingleValueInstruction, UnaryInstruction {}
494522

include/swift/SIL/SILBridging.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,13 @@ typedef enum {
140140
MayHaveSideEffectsBehavior
141141
} BridgedMemoryBehavior;
142142

143+
typedef enum {
144+
AccessKind_Init,
145+
AccessKind_Read,
146+
AccessKind_Modify,
147+
AccessKind_Deinit
148+
} BridgedAccessKind;
149+
143150
typedef enum {
144151
Ownership_Unowned,
145152
Ownership_Owned,
@@ -321,6 +328,7 @@ BridgedBasicBlock BranchInst_getTargetBlock(BridgedInstruction bi);
321328
SwiftInt SwitchEnumInst_getNumCases(BridgedInstruction se);
322329
SwiftInt SwitchEnumInst_getCaseIndex(BridgedInstruction se, SwiftInt idx);
323330
SwiftInt StoreInst_getStoreOwnership(BridgedInstruction store);
331+
BridgedAccessKind BeginAccessInst_getAccessKind(BridgedInstruction beginAccess);
324332
SwiftInt CopyAddrInst_isTakeOfSrc(BridgedInstruction copyAddr);
325333
SwiftInt CopyAddrInst_isInitializationOfDest(BridgedInstruction copyAddr);
326334
void RefCountingInst_setIsAtomic(BridgedInstruction rc, bool isAtomic);

lib/SIL/Utils/SILBridging.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,20 @@ SwiftInt StoreInst_getStoreOwnership(BridgedInstruction store) {
723723
return (SwiftInt)castToInst<StoreInst>(store)->getOwnershipQualifier();
724724
}
725725

726+
BridgedAccessKind BeginAccessInst_getAccessKind(BridgedInstruction beginAccess) {
727+
auto kind = castToInst<BeginAccessInst>(beginAccess)->getAccessKind();
728+
switch (kind) {
729+
case SILAccessKind::Init:
730+
return BridgedAccessKind::AccessKind_Init;
731+
case SILAccessKind::Read:
732+
return BridgedAccessKind::AccessKind_Read;
733+
case SILAccessKind::Modify:
734+
return BridgedAccessKind::AccessKind_Modify;
735+
case SILAccessKind::Deinit:
736+
return BridgedAccessKind::AccessKind_Deinit;
737+
}
738+
}
739+
726740
SwiftInt CopyAddrInst_isTakeOfSrc(BridgedInstruction copyAddr) {
727741
return castToInst<CopyAddrInst>(copyAddr)->isTakeOfSrc() ? 1 : 0;
728742
}

0 commit comments

Comments
 (0)