Skip to content

Commit 2259fe6

Browse files
committed
SIL: add some instruction creation functions in Builder
1 parent c19aa69 commit 2259fe6

File tree

3 files changed

+71
-0
lines changed

3 files changed

+71
-0
lines changed

SwiftCompilerSources/Sources/SIL/Builder.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,20 @@ public struct Builder {
382382
return notifyNew(apply.getAs(TryApplyInst.self))
383383
}
384384

385+
public func createBeginApply(function: Value,
386+
_ substitutionMap: SubstitutionMap,
387+
arguments: [Value],
388+
isNonThrowing: Bool = false,
389+
isNonAsync: Bool = false,
390+
specializationInfo: ApplyInst.SpecializationInfo = ApplyInst.SpecializationInfo()
391+
) -> BeginApplyInst {
392+
let apply = arguments.withBridgedValues { valuesRef in
393+
bridged.createBeginApply(function.bridged, substitutionMap.bridged, valuesRef,
394+
isNonThrowing, isNonAsync, specializationInfo)
395+
}
396+
return notifyNew(apply.getAs(BeginApplyInst.self))
397+
}
398+
385399
public func createWitnessMethod(lookupType: CanonicalType,
386400
conformance: Conformance,
387401
member: DeclRef,
@@ -544,6 +558,10 @@ public struct Builder {
544558
return notifyNew(bridged.createDestructureTuple(tuple.bridged).getAs(DestructureTupleInst.self))
545559
}
546560

561+
public func createProjectBox(box: Value, fieldIndex: Int) -> ProjectBoxInst {
562+
return notifyNew(bridged.createProjectBox(box.bridged, fieldIndex).getAs(ProjectBoxInst.self))
563+
}
564+
547565
@discardableResult
548566
public func createStore(source: Value, destination: Value, ownership: StoreInst.StoreOwnership) -> StoreInst {
549567
let store = bridged.createStore(source.bridged, destination.bridged, ownership.rawValue)
@@ -611,6 +629,18 @@ public struct Builder {
611629
return notifyNew(markDependence.getAs(MarkDependenceAddrInst.self))
612630
}
613631

632+
public func createMarkUninitialized(value: Value, kind: MarkUninitializedInst.Kind) -> MarkUninitializedInst {
633+
let mu = bridged.createMarkUninitialized(value.bridged, kind.rawValue)
634+
return notifyNew(mu.getAs(MarkUninitializedInst.self))
635+
}
636+
637+
public func createMarkUnresolvedNonCopyableValue(value: Value,
638+
checkKind: MarkUnresolvedNonCopyableValueInst.CheckKind,
639+
isStrict: Bool) -> MarkUnresolvedNonCopyableValueInst {
640+
let mu = bridged.createMarkUnresolvedNonCopyableValue(value.bridged, checkKind.rawValue, isStrict)
641+
return notifyNew(mu.getAs(MarkUnresolvedNonCopyableValueInst.self))
642+
}
643+
614644
@discardableResult
615645
public func createEndAccess(beginAccess: BeginAccessInst) -> EndAccessInst {
616646
let endAccess = bridged.createEndAccess(beginAccess.bridged)

include/swift/SIL/SILBridging.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1241,6 +1241,10 @@ struct BridgedBuilder{
12411241
BridgedBasicBlock normalBB, BridgedBasicBlock errorBB,
12421242
bool isNonAsync,
12431243
BridgedGenericSpecializationInformation specInfo) const;
1244+
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createBeginApply(BridgedValue function,
1245+
BridgedSubstitutionMap subMap,
1246+
BridgedValueArray arguments, bool isNonThrowing, bool isNonAsync,
1247+
BridgedGenericSpecializationInformation specInfo) const;
12441248
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createWitnessMethod(BridgedCanType lookupType,
12451249
BridgedConformance conformance,
12461250
BridgedDeclRef member, BridgedType methodType) const;
@@ -1294,6 +1298,7 @@ struct BridgedBuilder{
12941298
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createTupleElementAddr(BridgedValue addr,
12951299
SwiftInt elementIndex) const;
12961300
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createDestructureTuple(BridgedValue str) const;
1301+
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createProjectBox(BridgedValue box, SwiftInt fieldIdx) const;
12971302
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createStore(BridgedValue src, BridgedValue dst,
12981303
SwiftInt ownership) const;
12991304
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createInitExistentialRef(BridgedValue instance,
@@ -1314,6 +1319,12 @@ struct BridgedBuilder{
13141319
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createMarkDependenceAddr(
13151320
BridgedValue value, BridgedValue base, BridgedInstruction::MarkDependenceKind dependenceKind) const;
13161321

1322+
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createMarkUninitialized(
1323+
BridgedValue value, SwiftInt kind) const;
1324+
1325+
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createMarkUnresolvedNonCopyableValue(
1326+
BridgedValue value, SwiftInt checkKind, bool isStrict) const;
1327+
13171328
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createEndAccess(BridgedValue value) const;
13181329

13191330
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createEndApply(BridgedValue value) const;

include/swift/SIL/SILBridgingImpl.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2400,6 +2400,19 @@ BridgedInstruction BridgedBuilder::createTryApply(BridgedValue function, Bridged
24002400
arguments.getValues(argValues), normalBB.unbridged(), errorBB.unbridged(), applyOpts, specInfo.data)};
24012401
}
24022402

2403+
BridgedInstruction BridgedBuilder::createBeginApply(BridgedValue function, BridgedSubstitutionMap subMap,
2404+
BridgedValueArray arguments, bool isNonThrowing, bool isNonAsync,
2405+
BridgedGenericSpecializationInformation specInfo) const {
2406+
llvm::SmallVector<swift::SILValue, 16> argValues;
2407+
swift::ApplyOptions applyOpts;
2408+
if (isNonThrowing) { applyOpts |= swift::ApplyFlags::DoesNotThrow; }
2409+
if (isNonAsync) { applyOpts |= swift::ApplyFlags::DoesNotAwait; }
2410+
2411+
return {unbridged().createBeginApply(
2412+
regularLoc(), function.getSILValue(), subMap.unbridged(),
2413+
arguments.getValues(argValues), applyOpts, specInfo.data)};
2414+
}
2415+
24032416
BridgedInstruction BridgedBuilder::createWitnessMethod(BridgedCanType lookupType,
24042417
BridgedConformance conformance,
24052418
BridgedDeclRef member, BridgedType methodType) const {
@@ -2548,6 +2561,10 @@ BridgedInstruction BridgedBuilder::createDestructureTuple(BridgedValue str) cons
25482561
return {unbridged().createDestructureTuple(regularLoc(), str.getSILValue())};
25492562
}
25502563

2564+
BridgedInstruction BridgedBuilder::createProjectBox(BridgedValue box, SwiftInt fieldIdx) const {
2565+
return {unbridged().createProjectBox(regularLoc(), box.getSILValue(), (unsigned)fieldIdx)};
2566+
}
2567+
25512568
BridgedInstruction BridgedBuilder::createStore(BridgedValue src, BridgedValue dst,
25522569
SwiftInt ownership) const {
25532570
return {unbridged().createStore(regularLoc(), src.getSILValue(),
@@ -2602,6 +2619,19 @@ BridgedInstruction BridgedBuilder::createMarkDependenceAddr(BridgedValue value,
26022619
swift::MarkDependenceKind(kind))};
26032620
}
26042621

2622+
BridgedInstruction BridgedBuilder::createMarkUninitialized(BridgedValue value, SwiftInt kind) const {
2623+
return {unbridged().createMarkUninitialized(
2624+
regularLoc(), value.getSILValue(), (swift::MarkUninitializedInst::Kind)kind)};
2625+
}
2626+
2627+
BridgedInstruction BridgedBuilder::createMarkUnresolvedNonCopyableValue(BridgedValue value,
2628+
SwiftInt checkKind, bool isStrict) const {
2629+
return {unbridged().createMarkUnresolvedNonCopyableValueInst(
2630+
regularLoc(), value.getSILValue(), (swift::MarkUnresolvedNonCopyableValueInst::CheckKind)checkKind,
2631+
(swift::MarkUnresolvedNonCopyableValueInst::IsStrict_t)isStrict)};
2632+
}
2633+
2634+
26052635
BridgedInstruction BridgedBuilder::createEndAccess(BridgedValue value) const {
26062636
return {unbridged().createEndAccess(regularLoc(), value.getSILValue(), false)};
26072637
}

0 commit comments

Comments
 (0)