mirror of
https://github.com/apple/swift.git
synced 2026-02-27 18:26:24 +01:00
87 lines
3.4 KiB
Plaintext
87 lines
3.4 KiB
Plaintext
// RUN: %target-sil-opt %s -test-runner -o /dev/null | %FileCheck %s
|
|
|
|
sil_stage canonical
|
|
|
|
import Builtin
|
|
import Swift
|
|
|
|
// CHECK-LABEL: run SILPrinter on function: testfunc
|
|
// CHECK-NEXT: bb0:
|
|
// CHECK-NEXT: predecessors: []
|
|
// CHECK-NEXT: successors: [bb1, bb2]
|
|
// CHECK-NEXT: arguments:
|
|
// CHECK-NEXT: arg: %0 = argument of bb0 : $*Int
|
|
// CHECK-NEXT: user: %2 = begin_access [read] [dynamic] %0 : $*Int
|
|
// CHECK-NEXT: arg: %1 = argument of bb0 : $(String, String)
|
|
// CHECK-NEXT: user: (%4, %5) = destructure_tuple %1 : $(String, String)
|
|
// CHECK-NEXT: instructions:
|
|
// CHECK-NEXT: %2 = begin_access [read] [dynamic] %0 : $*Int
|
|
// CHECK-NEXT: op: %0 = argument of bb0 : $*Int
|
|
// CHECK-NEXT: user of result 0: end_access %2 : $*Int
|
|
// CHECK-NEXT: %3 = alloc_stack $String
|
|
// CHECK-NEXT: user of result 0: dealloc_stack %3 : $*String
|
|
// CHECK-NEXT: user of result 0: destroy_addr %3 : $*String
|
|
// CHECK-NEXT: user of result 0: %8 = load [copy] %3 : $*String
|
|
// CHECK-NEXT: user of result 0: store %4 to [init] %3 : $*String
|
|
// CHECK-NEXT: (%4, %5) = destructure_tuple %1 : $(String, String)
|
|
// CHECK-NEXT: op: %1 = argument of bb0 : $(String, String)
|
|
// CHECK-NEXT: user of result 0: store %4 to [init] %3 : $*String
|
|
// CHECK-NEXT: user of result 1: destroy_value %5 : $String
|
|
// CHECK-NEXT: store %4 to [init] %3 : $*String
|
|
// CHECK-NEXT: op: (**%4**, %5) = destructure_tuple %1 : $(String, String)
|
|
// CHECK-NEXT: op: %3 = alloc_stack $String
|
|
// CHECK-NEXT: end_access %2 : $*Int
|
|
// CHECK-NEXT: op: %2 = begin_access [read] [dynamic] %0 : $*Int
|
|
// CHECK-NEXT: %8 = load [copy] %3 : $*String
|
|
// CHECK-NEXT: op: %3 = alloc_stack $String
|
|
// CHECK-NEXT: user of result 0: return %8 : $String
|
|
// CHECK-NEXT: destroy_addr %3 : $*String
|
|
// CHECK-NEXT: op: %3 = alloc_stack $String
|
|
// CHECK-NEXT: dealloc_stack %3 : $*String
|
|
// CHECK-NEXT: op: %3 = alloc_stack $String
|
|
// CHECK-NEXT: destroy_value %5 : $String
|
|
// CHECK-NEXT: op: (%4, **%5**) = destructure_tuple %1 : $(String, String)
|
|
// CHECK-NEXT: cond_br undef, bb1, bb2
|
|
// CHECK-NEXT: op: undef<$Builtin.Int1>
|
|
// CHECK-NEXT: bb1:
|
|
// CHECK-NEXT: predecessors: [bb0]
|
|
// CHECK-NEXT: successors: [bb3]
|
|
// CHECK-NEXT: arguments:
|
|
// CHECK-NEXT: instructions:
|
|
// CHECK-NEXT: br bb3
|
|
// CHECK-NEXT: bb2:
|
|
// CHECK-NEXT: predecessors: [bb0]
|
|
// CHECK-NEXT: successors: [bb3]
|
|
// CHECK-NEXT: arguments:
|
|
// CHECK-NEXT: instructions:
|
|
// CHECK-NEXT: br bb3
|
|
// CHECK-NEXT: bb3:
|
|
// CHECK-NEXT: predecessors: [bb2, bb1]
|
|
// CHECK-NEXT: successors: []
|
|
// CHECK-NEXT: arguments:
|
|
// CHECK-NEXT: instructions:
|
|
// CHECK-NEXT: return %8 : $String
|
|
// CHECK-NEXT: op: %8 = load [copy] %3 : $*String
|
|
|
|
sil [ossa] @testfunc : $@convention(thin) (@in_guaranteed Int, @owned (String, String)) -> @owned String {
|
|
bb0(%0 : $*Int, %1 : @owned $(String, String)):
|
|
specify_test "basic_block"
|
|
%2 = begin_access [read] [dynamic] %0 : $*Int
|
|
%4 = alloc_stack $String
|
|
(%5, %6) = destructure_tuple %1 : $(String, String)
|
|
store %5 to [init] %4 : $*String
|
|
end_access %2 : $*Int
|
|
%7 = load [copy] %4 : $*String
|
|
destroy_addr %4 : $*String
|
|
dealloc_stack %4 : $*String
|
|
destroy_value %6 : $String
|
|
cond_br undef, bb1, bb2
|
|
bb1:
|
|
br bb3
|
|
bb2:
|
|
br bb3
|
|
bb3:
|
|
return %7 : $String
|
|
}
|
|
|