> On Dec 17, 2015, at 3:34 PM, Joe Groff via swift-dev <swift-dev@swift.org> 
> wrote:
> We currently always pass inout parameters indirectly, but it seems to me that 
> for inout parameters that are of small trivial types like Int or CGSize, a 
> value-result calling convention might always be preferable, and we might want 
> to codify that in the stable ABI. Values of these types are likely to be 
> SSAed, and the indirect convention forces memory traffic that would otherwise 
> be unnecessary. On ARMv7 and ARM64, the argument and return register sets are 
> the same, so a value-result convention is likely to be able to compile down 
> to in-place operations on those registers, so it's a potential code size win 
> too.
> 
> (Value-result is not a clear win for nontrivial types, since it forces a load 
> and retain onto the outermost caller that inouts a value in memory, since we 
> can't invalidate the memory during the inout call. The extra retain would 
> potentially defeat COW optimization. We have primitives like 
> `isUniquelyReferenced` that depend on mutable references being in memory too.)

IIRC, the mutation model does try to make stronger promises about updates to 
stored variables and properties; this would interfere with that.

My larger concern, though, is that I’m not sure that the set of non-inlinable 
functions taking inouts that are concrete, fixed-size, and trivial is actually 
worth adding special-case ABI rules for.

John.
_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to