> On Dec 6, 2015, at 5:16 PM, Karl Pickett via swift-users > <swift-users@swift.org> wrote: > > I have a struct and this code: > > func test() { > precondition(sizeof(Foo) == 128) > > let s = Foo() > for _ in 0..<100_000_000 { > doSomething(s) > } > } > > The asm (on LInux, with -O) is showing me that s is being re-initialized on > every iteration of the loop. I was hoping that thanks to swift's strict > constness rules on structs, it wouldn't have to do this - and just pass the > same pointer to doSomething() each time. > > When I use an inout param, that is 2x as fast and doesn't re-initialize each > time. However I don't see why passing something immutably wouldn't be as > fast.
This definitely seems like a place where we ought to be able to peephole the extra copies away. Mind filing a bug? -Joe > > - Karl > > asm from perf: > > 2.71 │50:┌─→xorps %xmm0,%xmm0 > ▒ > 8.06 │ │ movaps %xmm0,-0x20(%rbp) > ▒ > 2.71 │ │ movaps %xmm0,-0x30(%rbp) > ▒ > 7.41 │ │ movaps %xmm0,-0x40(%rbp) > ▒ > 10.59 │ │ movaps %xmm0,-0x50(%rbp) > ▒ > 10.00 │ │ movaps %xmm0,-0x60(%rbp) > ▒ > 9.53 │ │ movaps %xmm0,-0x70(%rbp) > ▒ > 10.65 │ │ movaps %xmm0,-0x80(%rbp) > ▒ > 11.24 │ │ movaps %xmm0,-0x90(%rbp) > ▒ > 12.06 │ │ mov %r14,%rdi > ▒ > 3.41 │ │→ callq _TF4main11doSomethingFVS_3FooT_ > ▒ > 2.82 │ │ dec %rbx > ▒ > 8.82 │ └──jne 50 > > main.swift: > > struct Vec4 { > var a: Int64 = 0 > var b: Int64 = 0 > var c: Int64 = 0 > var d: Int64 = 0 > } > > struct Foo { > var x: Vec4 = Vec4() > var y: Vec4 = Vec4() > var z: Vec4 = Vec4() > var u: Vec4 = Vec4() > } > > func test() { > precondition(sizeof(Foo) == 128) > > let s = Foo() > for _ in 0..<100_000_000 { > doSomething(s) > } > } > > test() > > > lib.swift: > > func doSomething(s: Foo) { > precondition(s.x.a != 1) > } > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users