On Wednesday, 25 July 2018 at 09:37:56 UTC, rikki cattermole wrote:

You misunderstand.
It isn't optimizing anything.
You requested the call to memcpy, explicitly when you said 'I want this copied ASAP'.

By the looks, the spec doesn't clearly explain this properly.

Well, it seems that this is not a good example to show. I didn't notice its semantics :)


A naive implementation of memset also lead to "call memset": https://run.dlang.io/is/k3Hl04

Okay yup, that is an optimization.

This won't optimize:

extern(C) void* memset(ubyte* dest, int val, size_t count) {
    immutable c = cast(ubyte)val;
    foreach(i; 0..count) {
        dest[i] = c;
    }
    return dest;
}

And yes the name is important :)

First, IIRC, the name hacking is a technique used to bypass llvm optimizers, I'm not sure if it also applies to gdc. Moreover, I think this *is* a hack around compiler because this forces memset implementer to write all code in that function.

Reply via email to