Skip to content

Commit eb3f734

Browse files
committed
AddressUseVisitor
1 parent 853f946 commit eb3f734

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

SwiftCompilerSources/Sources/Optimizer/Utilities/OwnershipLiveness.swift

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,3 +975,39 @@ let interiorLivenessTest = FunctionTest("interior_liveness_swift") {
975975
defer { boundary.deinitialize() }
976976
print(boundary)
977977
}
978+
979+
// Print the uses of an address.
980+
struct AddressUsePrinter: AddressUseVisitor {
981+
let _context: Context
982+
983+
mutating func leafUse(address: Operand) -> WalkResult {
984+
print("Leaf use: \(address)")
985+
return .continueWalk
986+
}
987+
988+
mutating func pointerEscape(address: Operand) -> WalkResult {
989+
print("Pointer escape: \(address)")
990+
return .continueWalk
991+
}
992+
993+
mutating func unknown(address: Operand) -> WalkResult {
994+
print("Unknown: \(address)")
995+
return .continueWalk
996+
}
997+
998+
mutating func dependent(value: Value, dependsOn address: Operand)
999+
-> WalkResult {
1000+
print("Dependent: \(value) on \(address)")
1001+
return .continueWalk
1002+
}
1003+
}
1004+
1005+
let addressUseTest = FunctionTest("address_use_test") {
1006+
function, arguments, context in
1007+
let address = arguments.takeValue()
1008+
assert(address.type.isAddress)
1009+
print(function)
1010+
print("Uses of address: \(address)")
1011+
var printer = AddressUsePrinter(_context: context)
1012+
printer.walkDownUses(ofAddress: address)
1013+
}

0 commit comments

Comments
 (0)