1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
// RUN: %target-sil-opt -enable-objc-interop -enforce-exclusivity=none -enable-sil-verify-all %s -sil-combine -sil-combine-disable-alloc-stack-opts | %FileCheck %s
// REQUIRES: swift_in_compiler
sil_stage canonical
import Builtin
import Swift
class Klass {}
struct Wrapper {
var val1: Klass
var val2: Klass
}
// CHECK-LABEL: sil [ossa] @test_destructure_struct1 : $@convention(thin) () -> () {
// CHECK-NOT: destructure_struct
// CHECK-LABEL: } // end sil function 'test_destructure_struct1'
sil [ossa] @test_destructure_struct1 : $@convention(thin) () -> () {
bb0:
%0 = integer_literal $Builtin.Int32, 100
%1 = struct $Int32(%0 : $Builtin.Int32)
(%2) = destructure_struct %1 : $Int32
apply undef(%2) : $@convention(thin) (Builtin.Int32) -> ()
%t = tuple ()
return %t : $()
}
// CHECK-LABEL: sil [ossa] @test_destructure_struct2 : $@convention(thin) (@owned Klass, @owned Klass) -> () {
// CHECK-NOT: destructure_struct
// CHECK-LABEL: } // end sil function 'test_destructure_struct2'
sil [ossa] @test_destructure_struct2 : $@convention(thin) (@owned Klass, @owned Klass) -> () {
bb0(%0 : @owned $Klass, %1 : @owned $Klass):
%3 = struct $Wrapper(%0 : $Klass, %1 : $Klass)
debug_value %3 : $Wrapper
(%4, %5) = destructure_struct %3 : $Wrapper
apply undef(%4) : $@convention(thin) (@owned Klass) -> ()
destroy_value %5 : $Klass
%t = tuple ()
return %t : $()
}
// CHECK-LABEL: sil [ossa] @test_destructure_tuple1 : $@convention(thin) () -> () {
// CHECK-NOT: destructure_tuple
// CHECK-LABEL: } // end sil function 'test_destructure_tuple1'
sil [ossa] @test_destructure_tuple1 : $@convention(thin) () -> () {
bb0:
%0 = integer_literal $Builtin.Int32, 100
%1 = integer_literal $Builtin.Int32, 200
%2 = tuple (%0 : $Builtin.Int32, %1 : $Builtin.Int32)
(%3, %4) = destructure_tuple %2 : $(Builtin.Int32, Builtin.Int32)
apply undef(%4) : $@convention(thin) (Builtin.Int32) -> ()
%t = tuple ()
return %t : $()
}
// CHECK-LABEL: sil [ossa] @test_destructure_tuple2 : $@convention(thin) (@owned Klass, @owned Klass) -> () {
// CHECK-NOT: destructure_tuple
// CHECK-LABEL: } // end sil function 'test_destructure_tuple2'
sil [ossa] @test_destructure_tuple2 : $@convention(thin) (@owned Klass, @owned Klass) -> () {
bb0(%0 : @owned $Klass, %1 : @owned $Klass):
%3 = tuple(%0 : $Klass, %1 : $Klass)
debug_value %3 : $(Klass, Klass)
(%4, %5) = destructure_tuple %3 : $(Klass, Klass)
apply undef(%4) : $@convention(thin) (@owned Klass) -> ()
destroy_value %5 : $Klass
%t = tuple ()
return %t : $()
}
|