var a, b: Box } func pairFoo() -> (Foo, Foo) { let v = makeFoo() return (v, v) // Copy happens here } pairFoo: bl _makeFoo ; Get value (returns in x0, x1) mov x19, x0 ; Save first Box reference mov x20, x1 ; Save second Box reference bl _swift_retain ; Retain first Box (x0 already set) mov x0, x20 ; Load second Box for retain bl _swift_retain ; Retain second Box mov x0, x19 ; Setup return tuple mov x1, x20 mov x2, x19 mov x3, x20 ret ; Done - but with runtime calls 16