Skip to content

Commit 2d10da0

Browse files
committed
SIL: add some Builder-create functions
1 parent 192bb33 commit 2d10da0

File tree

3 files changed

+73
-0
lines changed

3 files changed

+73
-0
lines changed

SwiftCompilerSources/Sources/SIL/Builder.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,17 @@ public struct Builder {
7979
self.notificationHandler = notificationHandler
8080
}
8181

82+
public func createBuiltin(name: StringRef,
83+
type: Type,
84+
substitutions: SubstitutionMap = SubstitutionMap(),
85+
arguments: [Value]) -> BuiltinInst {
86+
return arguments.withBridgedValues { valuesRef in
87+
let bi = bridged.createBuiltin(
88+
name._bridged, type.bridged, substitutions.bridged, valuesRef)
89+
return notifyNew(bi.getAs(BuiltinInst.self))
90+
}
91+
}
92+
8293
public func createBuiltinBinaryFunction(name: String,
8394
operandType: Type, resultType: Type, arguments: [Value]) -> BuiltinInst {
8495
return arguments.withBridgedValues { valuesRef in
@@ -142,11 +153,29 @@ public struct Builder {
142153
return notifyNew(dr.getAs(AddressToPointerInst.self))
143154
}
144155

156+
public func createPointerToAddress(pointer: Value, addressType: Type,
157+
isStrict: Bool, isInvariant: Bool,
158+
alignment: Int? = nil) -> PointerToAddressInst {
159+
let dr = bridged.createPointerToAddress(pointer.bridged, addressType.bridged, isStrict, isInvariant,
160+
UInt64(alignment ?? 0))
161+
return notifyNew(dr.getAs(PointerToAddressInst.self))
162+
}
163+
164+
public func createIndexAddr(base: Value, index: Value, needStackProtection: Bool) -> IndexAddrInst {
165+
let dr = bridged.createIndexAddr(base.bridged, index.bridged, needStackProtection)
166+
return notifyNew(dr.getAs(IndexAddrInst.self))
167+
}
168+
145169
public func createUncheckedRefCast(from value: Value, to type: Type) -> UncheckedRefCastInst {
146170
let cast = bridged.createUncheckedRefCast(value.bridged, type.bridged)
147171
return notifyNew(cast.getAs(UncheckedRefCastInst.self))
148172
}
149173

174+
public func createUncheckedAddrCast(from value: Value, to type: Type) -> UncheckedAddrCastInst {
175+
let cast = bridged.createUncheckedAddrCast(value.bridged, type.bridged)
176+
return notifyNew(cast.getAs(UncheckedAddrCastInst.self))
177+
}
178+
150179
public func createUpcast(from value: Value, to type: Type) -> UpcastInst {
151180
let cast = bridged.createUpcast(value.bridged, type.bridged)
152181
return notifyNew(cast.getAs(UpcastInst.self))

include/swift/SIL/SILBridging.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,6 +1063,10 @@ struct BridgedBuilder{
10631063
BRIDGED_INLINE swift::SILBuilder unbridged() const;
10641064
BRIDGED_INLINE swift::SILLocation regularLoc() const;
10651065

1066+
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createBuiltin(BridgedStringRef name,
1067+
BridgedType type,
1068+
BridgedSubstitutionMap subs,
1069+
BridgedValueArray arguments) const;
10661070
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createBuiltinBinaryFunction(BridgedStringRef name,
10671071
BridgedType operandType, BridgedType resultType,
10681072
BridgedValueArray arguments) const;
@@ -1084,8 +1088,18 @@ struct BridgedBuilder{
10841088
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createAddressToPointer(BridgedValue address,
10851089
BridgedType pointerTy,
10861090
bool needsStackProtection) const;
1091+
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createPointerToAddress(BridgedValue pointer,
1092+
BridgedType addressTy,
1093+
bool isStrict,
1094+
bool isInvariant,
1095+
uint64_t alignment) const;
1096+
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createIndexAddr(BridgedValue base,
1097+
BridgedValue index,
1098+
bool needsStackProtection) const;
10871099
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createUncheckedRefCast(BridgedValue op,
10881100
BridgedType type) const;
1101+
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createUncheckedAddrCast(BridgedValue op,
1102+
BridgedType type) const;
10891103
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createUpcast(BridgedValue op, BridgedType type) const;
10901104
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createLoad(BridgedValue op, SwiftInt ownership) const;
10911105
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedInstruction createLoadBorrow(BridgedValue op) const;

include/swift/SIL/SILBridgingImpl.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1919,6 +1919,17 @@ swift::SILLocation BridgedBuilder::regularLoc() const {
19191919
return swift::RegularLocation(loc.getLoc().getLocation());
19201920
}
19211921

1922+
BridgedInstruction BridgedBuilder::createBuiltin(BridgedStringRef name, BridgedType type,
1923+
BridgedSubstitutionMap subs,
1924+
BridgedValueArray arguments) const {
1925+
llvm::SmallVector<swift::SILValue, 16> argValues;
1926+
auto builder = unbridged();
1927+
auto ident = builder.getASTContext().getIdentifier(name.unbridged());
1928+
return {builder.createBuiltin(
1929+
regularLoc(), ident, type.unbridged(),
1930+
subs.unbridged(), arguments.getValues(argValues))};
1931+
}
1932+
19221933
BridgedInstruction BridgedBuilder::createBuiltinBinaryFunction(BridgedStringRef name,
19231934
BridgedType operandType, BridgedType resultType,
19241935
BridgedValueArray arguments) const {
@@ -1980,11 +1991,30 @@ BridgedInstruction BridgedBuilder::createAddressToPointer(BridgedValue address,
19801991
needsStackProtection)};
19811992
}
19821993

1994+
BridgedInstruction BridgedBuilder::createPointerToAddress(BridgedValue pointer, BridgedType addressTy,
1995+
bool isStrict, bool isInvariant,
1996+
uint64_t alignment) const {
1997+
return {unbridged().createPointerToAddress(regularLoc(), pointer.getSILValue(), addressTy.unbridged(),
1998+
isStrict, isInvariant,
1999+
alignment == 0 ? llvm::MaybeAlign() : llvm::Align(alignment))};
2000+
}
2001+
2002+
BridgedInstruction BridgedBuilder::createIndexAddr(BridgedValue base, BridgedValue index,
2003+
bool needsStackProtection) const {
2004+
return {unbridged().createIndexAddr(regularLoc(), base.getSILValue(), index.getSILValue(),
2005+
needsStackProtection)};
2006+
}
2007+
19832008
BridgedInstruction BridgedBuilder::createUncheckedRefCast(BridgedValue op, BridgedType type) const {
19842009
return {unbridged().createUncheckedRefCast(regularLoc(), op.getSILValue(),
19852010
type.unbridged())};
19862011
}
19872012

2013+
BridgedInstruction BridgedBuilder::createUncheckedAddrCast(BridgedValue op, BridgedType type) const {
2014+
return {unbridged().createUncheckedAddrCast(regularLoc(), op.getSILValue(),
2015+
type.unbridged())};
2016+
}
2017+
19882018
BridgedInstruction BridgedBuilder::createUpcast(BridgedValue op, BridgedType type) const {
19892019
return {unbridged().createUpcast(regularLoc(), op.getSILValue(),
19902020
type.unbridged())};

0 commit comments

Comments
 (0)