|
| 1 | +// RUN: %target-sil-opt -enable-sil-verify-all %s -onone-simplification -simplify-instruction=tuple | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ONONE |
| 2 | +// RUN: %target-sil-opt -enable-sil-verify-all %s -simplification -simplify-instruction=tuple | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-O |
| 3 | + |
| 4 | +// REQUIRES: swift_in_compiler |
| 5 | + |
| 6 | +import Swift |
| 7 | +import Builtin |
| 8 | + |
| 9 | +// CHECK-LABEL: sil [ossa] @forward_owned : |
| 10 | +// CHECK-NOT: tuple |
| 11 | +// CHECK: return %0 |
| 12 | +// CHECK: } // end sil function 'forward_owned' |
| 13 | +sil [ossa] @forward_owned : $@convention(thin) (@owned (String, Int)) -> @owned (String, Int) { |
| 14 | +bb0(%0 : @owned $(String, Int)): |
| 15 | + (%3, %4) = destructure_tuple %0 : $(String, Int) |
| 16 | + %2 = tuple (%3 : $String, %4 : $Int) |
| 17 | + return %2 : $(String, Int) |
| 18 | +} |
| 19 | + |
| 20 | +// CHECK-LABEL: sil [ossa] @forward_borrowed : |
| 21 | +// CHECK-NOT: tuple |
| 22 | +// CHECK: fix_lifetime %0 |
| 23 | +// CHECK: } // end sil function 'forward_borrowed' |
| 24 | +sil [ossa] @forward_borrowed : $@convention(thin) (@guaranteed (String, Int)) -> () { |
| 25 | +bb0(%0 : @guaranteed $(String, Int)): |
| 26 | + (%3, %4) = destructure_tuple %0 : $(String, Int) |
| 27 | + %2 = tuple (%3 : $String, %4 : $Int) |
| 28 | + fix_lifetime %2 : $(String, Int) |
| 29 | + %7 = tuple () |
| 30 | + return %7 : $() |
| 31 | +} |
| 32 | + |
| 33 | +// CHECK-LABEL: sil [ossa] @dont_forward_owned_with_uses : |
| 34 | +// CHECK: destructure_tuple |
| 35 | +// CHECK: tuple |
| 36 | +// CHECK: } // end sil function 'dont_forward_owned_with_uses' |
| 37 | +sil [ossa] @dont_forward_owned_with_uses : $@convention(thin) (@owned (String, Int)) -> @owned (String, Int) { |
| 38 | +bb0(%0 : @owned $(String, Int)): |
| 39 | + (%5, %6) = destructure_tuple %0 : $(String, Int) |
| 40 | + %3 = begin_borrow %5 : $String |
| 41 | + end_borrow %3 : $String |
| 42 | + %2 = tuple (%5 : $String, %6 : $Int) |
| 43 | + return %2 : $(String, Int) |
| 44 | +} |
| 45 | + |
| 46 | +// CHECK-LABEL: sil [ossa] @forward_owned_with_debug_use : |
| 47 | +// CHECK-ONONE: destructure_tuple |
| 48 | +// CHECK-ONONE: tuple |
| 49 | +// CHECK-O: return %0 |
| 50 | +// CHECK: } // end sil function 'forward_owned_with_debug_use' |
| 51 | +sil [ossa] @forward_owned_with_debug_use : $@convention(thin) (@owned (String, Int)) -> @owned (String, Int) { |
| 52 | +bb0(%0 : @owned $(String, Int)): |
| 53 | + (%4, %5) = destructure_tuple %0 : $(String, Int) |
| 54 | + debug_value %4 : $String, let, name "t" |
| 55 | + %2 = tuple (%4 : $String, %5 : $Int) |
| 56 | + return %2 : $(String, Int) |
| 57 | +} |
| 58 | + |
| 59 | +// CHECK-LABEL: sil [ossa] @dont_forward_label_change : |
| 60 | +// CHECK: destructure_tuple |
| 61 | +// CHECK: tuple |
| 62 | +// CHECK-LABEL: } // end sil function 'dont_forward_label_change' |
| 63 | +sil [ossa] @dont_forward_label_change : $@convention(thin) (@owned (s: String, i: Int)) -> @owned (String, Int) { |
| 64 | +bb0(%0 : @owned $(s: String, i: Int)): |
| 65 | + (%4, %5) = destructure_tuple %0 : $(s: String, i: Int) |
| 66 | + %2 = tuple (%4 : $String, %5 : $Int) |
| 67 | + return %2 : $(String, Int) |
| 68 | +} |
| 69 | + |
| 70 | +// CHECK-LABEL: sil [ossa] @dont_forward_flipped_arguments : |
| 71 | +// CHECK: destructure_tuple |
| 72 | +// CHECK: tuple |
| 73 | +// CHECK-LABEL: } // end sil function 'dont_forward_flipped_arguments' |
| 74 | +sil [ossa] @dont_forward_flipped_arguments : $@convention(thin) (@owned (String, String)) -> @owned (String, String) { |
| 75 | +bb0(%0 : @owned $(String, String)): |
| 76 | + (%4, %5) = destructure_tuple %0 : $(String, String) |
| 77 | + %2 = tuple (%5 : $String, %4 : $String) |
| 78 | + return %2 : $(String, String) |
| 79 | +} |
0 commit comments