March 14, 2012 Re: Optimize away immediately-called delegate literals? | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | On Mon, 12 Mar 2012 20:28:15 -0400, H. S. Teoh <hsteoh@quickfur.ath.cx> wrote:
>
> Hmph.
>
> I tried this code:
>
> import std.stdio;
> struct A {
> int[] data;
> int opApply(int delegate(ref int) dg) {
> foreach (d; data) {
> if (dg(d)) return 1;
> }
> return 0;
> }
> }
> void main() {
> A a;
> int n = 0;
>
> a.data = [1,2,3,4,5];
> foreach (d; a) {
> n++;
> }
> }
>
> With both dmd and gdc, the delegate is never inlined. :-( Compiling
> with gdc -O3 causes opApply to get inlined and loop-unrolled, but the
> call to the delegate is still there. With dmd -O, even opApply is not
> inlined, and the code is generally much longer per loop iteration than
> gdc -O3.
IIRC, ldc does inline opApply. But this is somewhat hearsay since I don't use ldc. I'm just remembering what others have posted here.
-Steve
|
Copyright © 1999-2021 by the D Language Foundation