Files
swift-mirror/SwiftCompilerSources/Sources/Optimizer/Utilities/OptUtils.swift
Erik Eckstein 31143bf79c Swift Optimizer: add the Builder.insert(after: Instruction ...) utility
For inserting new instruction after another instruction. This is especially interesting if the insertion point is a terminator.
In this case, the new instruction(s) are inserted in the successor block(s).
2022-01-12 15:47:16 +01:00

38 lines
1.3 KiB
Swift

//===--- OptUtils.swift - Utilities for optimzations ----------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2021 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import SIL
extension Value {
var nonDebugUses: LazyFilterSequence<UseList> {
uses.lazy.filter { !($0.instruction is DebugValueInst) }
}
}
extension Builder {
static func insert(after inst: Instruction, location: Location,
_ context: PassContext, insertFunc: (Builder) -> ()) {
if inst is TermInst {
for succ in inst.block.successors {
assert(succ.hasSinglePredecessor,
"the terminator instruction must not have critical successors")
let builder = Builder(at: succ.instructions.first!, location: location,
context)
insertFunc(builder)
}
} else {
let builder = Builder(at: inst.next!, location: location, context)
insertFunc(builder)
}
}
}