// RUN: %target-swift-emit-silgen -Xllvm -sil-print-types -disable-experimental-parser-round-trip -disable-availability-checking -enable-experimental-feature BuiltinModule %s | %FileCheck %s // REQUIRES: swift_feature_BuiltinModule import Builtin struct MyVector: ~Copyable { var storage: Builtin.FixedArray } extension MyVector: Copyable where T: Copyable {} // CHECK-LABEL: sil{{.*}} @$s{{.*}}13trivial_fixed // CHECK: bb0(%0 : $MyVector<4, Int>): // CHECK: tuple (%0 : {{.*}}, %0 : {{.*}}) func trivial_fixed(a: MyVector<4, Int>) -> (MyVector<4, Int>, MyVector<4, Int>){ return (a, a) } // CHECK-LABEL: sil{{.*}} @$s{{.*}}14loadable_fixed // CHECK: bb0(%0 : @guaranteed $MyVector<4, AnyObject>): // CHECK: [[COPY1:%.*]] = copy_value %0 // CHECK: [[COPY2:%.*]] = copy_value %0 // CHECK: tuple ([[COPY1]] : {{.*}}, [[COPY2]] : {{.*}}) func loadable_fixed(a: MyVector<4, AnyObject>) -> (MyVector<4, AnyObject>, MyVector<4, AnyObject>) { return (a, a) } // CHECK-LABEL: sil{{.*}} @$s{{.*}}8ao_fixed // CHECK: bb0(%0 : $*MyVector<4, Any>, %1 : $*MyVector<4, Any>, %2 : $*MyVector<4, Any>): // CHECK: copy_addr %2 to [init] %0 // CHECK: copy_addr %2 to [init] %1 func ao_fixed(a: MyVector<4, Any>) -> (MyVector<4, Any>, MyVector<4, Any>) { return (a, a) } // CHECK-LABEL: sil{{.*}} @$s{{.*}}11trivial_dep // CHECK: bb0(%0 : $*MyVector, %1 : $*MyVector, %2 : $*MyVector): // CHECK: copy_addr %2 to [init] %0 // CHECK: copy_addr %2 to [init] %1 func trivial_dep(a: MyVector) -> (MyVector, MyVector) { return (a, a) } // CHECK-LABEL: sil{{.*}} @$s{{.*}}12loadable_dep // CHECK: bb0(%0 : $*MyVector, %1 : $*MyVector, %2 : $*MyVector): // CHECK: copy_addr %2 to [init] %0 // CHECK: copy_addr %2 to [init] %1 func loadable_dep(a: MyVector) -> (MyVector, MyVector) { return (a, a) } // CHECK-LABEL: sil{{.*}} @$s{{.*}}6ao_dep // CHECK: bb0(%0 : $*MyVector, %1 : $*MyVector, %2 : $*MyVector): // CHECK: copy_addr %2 to [init] %0 // CHECK: copy_addr %2 to [init] %1 func ao_dep(a: MyVector) -> (MyVector, MyVector) { return (a, a) }