Multiple return values...

Robert Jacques sandford at jhu.edu
Mon Mar 12 13:42:40 PDT 2012


On Mon, 12 Mar 2012 04:46:45 -0500, Mantis <mail.mantis.88 at gmail.com> wrote:
> 12.03.2012 6:01, Robert Jacques пишет:
>> On Sun, 11 Mar 2012 21:49:52 -0500, Mantis <mail.mantis.88 at gmail.com>
>> wrote:
>>> [...]
>>> That's the point of discussion. Fields of structure may not be optimized
>>> away, because they are not independent variables. In D you have
>>> unchecked pointer-to-pointer casts, and results of these casts should
>>> depend on target architecture, not on optimizer implementation. At
>>> particular, if such optimizations are allowed, some C API will no longer
>>> be accessible from D.
>>
>> Unused fields of a structure are optimized away _today_. Unless a
>> piece of code takes the address of the struct, all of the fields are
>> treated as independent variables.
>
> I can't confirm: http://pastebin.com/YgBULGfe
> Prints "42\n3.14\n", compiled with dmd -release on windows x86. How
> exactly did you find out that such optimization is performed?
>

We are referring to values on the stack; unless inlined, the returning function always has to return all values for both structs and MRV. So, by 'optimized away' I'm referring to the ability of the optimizer to not keep values around, if that's more efficient. So to test it, you'd probably want to include enough operations for the optimizer not want to do this. Second, taking the address of a field might be tripping the optimizer up, so try looking at the stack directly. I honestly don't know if DMD does this particular optimization as the x86 stack is cheap and out of order chips (i.e. x86) thrive on independent assignments, but it's a big and very visible feature of NVCC, a GPU C/C++ compiler.

 


More information about the Digitalmars-d mailing list