Skip to content

Commit 103c59b

Browse files
committed
[SwiftCompilerSources] Add assert to Builder.init(after:)
This API is incorrect for terminators. Assert that it isn't used incorrectly. Later, we should rename it.
1 parent 22f01a9 commit 103c59b

File tree

5 files changed

+20
-14
lines changed

5 files changed

+20
-14
lines changed

SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceInsertion.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ private func insertDependencies(for apply: LifetimeDependentApply,
116116
insertMarkDependencies(value: dependentValue, initializer: nil,
117117
bases: bases, builder: builder, context)
118118
}
119-
let builder = Builder(after: apply.applySite, context)
120119
for resultOper in apply.applySite.indirectResultOperands {
121120
let accessBase = resultOper.value.accessBase
122121
guard let (initialAddress, initializingStore) =
@@ -132,11 +131,11 @@ private func insertDependencies(for apply: LifetimeDependentApply,
132131
context) else {
133132
continue
134133
}
135-
assert(initializingStore == resultOper.instruction,
136-
"an indirect result is a store")
137-
insertMarkDependencies(value: initialAddress,
138-
initializer: initializingStore, bases: bases,
139-
builder: builder, context)
134+
assert(initializingStore == resultOper.instruction, "an indirect result is a store")
135+
Builder.insert(after: apply.applySite, context) { builder in
136+
insertMarkDependencies(value: initialAddress, initializer: initializingStore, bases: bases, builder: builder,
137+
context)
138+
}
140139
}
141140
}
142141

SwiftCompilerSources/Sources/Optimizer/FunctionPasses/ObjCBridgingOptimization.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ private func optimizeNonOptionalBridging(_ apply: ApplyInst,
232232
private func removeBridgingCodeInPredecessors(of block: BasicBlock, _ context: FunctionPassContext) {
233233
for pred in block.predecessors {
234234
let branch = pred.terminator as! BranchInst
235-
let builder = Builder(after: branch, context)
235+
let builder = Builder(atEndOf: branch.parentBlock, location: branch.location, context)
236236
builder.createBranch(to: block)
237237

238238
let en = branch.operands[0].value as! EnumInst

SwiftCompilerSources/Sources/Optimizer/PassManager/Context.swift

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -492,19 +492,23 @@ extension Builder {
492492
}
493493

494494
/// Creates a builder which inserts _after_ `insPnt`, using a custom `location`.
495+
///
496+
/// TODO: this is usually incorrect for terminator instructions. Instead use
497+
/// `Builder.insert(after:location:_:insertFunc)` from OptUtils.swift. Rename this to afterNonTerminator.
495498
init(after insPnt: Instruction, location: Location, _ context: some MutatingContext) {
496499
context.verifyIsTransforming(function: insPnt.parentFunction)
497-
if let nextInst = insPnt.next {
498-
self.init(insertAt: .before(nextInst), location: location,
499-
context.notifyInstructionChanged, context._bridged.asNotificationHandler())
500-
} else {
501-
self.init(insertAt: .atEndOf(insPnt.parentBlock), location: location,
502-
context.notifyInstructionChanged, context._bridged.asNotificationHandler())
500+
guard let nextInst = insPnt.next else {
501+
fatalError("cannot insert an instruction after a block terminator.")
503502
}
503+
self.init(insertAt: .before(nextInst), location: location,
504+
context.notifyInstructionChanged, context._bridged.asNotificationHandler())
504505
}
505506

506507
/// Creates a builder which inserts _after_ `insPnt`, using `insPnt`'s next
507508
/// non-meta instruction's location.
509+
///
510+
/// TODO: this is incorrect for terminator instructions. Instead use `Builder.insert(after:location:_:insertFunc)`
511+
/// from OptUtils.swift. Rename this to afterNonTerminator.
508512
init(after insPnt: Instruction, _ context: some MutatingContext) {
509513
self.init(after: insPnt, location: insPnt.locationOfNextNonMetaInstruction, context)
510514
}

SwiftCompilerSources/Sources/Optimizer/Utilities/FunctionSignatureTransforms.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,6 @@ private func createForwardingApply(
179179
isNonThrowing: ai.isNonThrowing,
180180
isNonAsync: ai.isNonAsync,
181181
specializationInfo: ai.specializationInfo)
182-
let builder = Builder(after: newApply, context)
183182
builder.createReturn(of: newApply)
184183
case let tai as TryApplyInst:
185184
let normalBlock = thunk.appendNewBlock(context)

SwiftCompilerSources/Sources/Optimizer/Utilities/OptUtils.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@ extension FullApplySite {
163163
}
164164

165165
extension Builder {
166+
static func insert(after inst: Instruction, _ context: some MutatingContext, insertFunc: (Builder) -> ()) {
167+
Builder.insert(after: inst, location: inst.location, context, insertFunc: insertFunc)
168+
}
169+
166170
static func insert(after inst: Instruction, location: Location,
167171
_ context: some MutatingContext, insertFunc: (Builder) -> ()) {
168172
if inst is TermInst {

0 commit comments

Comments
 (0)