GDC generates invalid assembly around fiber yield operations (Not re-reading data from clobberedd memory to registers)

Iain Buclaw via D.gnu d.gnu at puremagic.com
Fri May 15 00:23:33 PDT 2015


On 15 May 2015 at 09:13, Iain Buclaw <ibuclaw at gdcproject.org> wrote:
> On 15 May 2015 at 09:08, Johannes Pfau via D.gnu <d.gnu at puremagic.com> wrote:
>> Am Thu, 14 May 2015 19:02:48 +0200
>> schrieb Johannes Pfau <nospam at example.com>:
>>
>>> ...
>>
>> TLDR
>> As a workaround replace
>>
>> globalSum += otherFunc();
>>
>> which GDC currently treats as
>>
>> globalSum = globalSum + otherFunc();
>>
>> with
>>
>> globalSum = otherFunc() + globalSum;
>>
>
> That is an interesting workaround, should we perhaps reconsider our
> code generation here?
>

I can confirm that C codegen does infact emit 'foo += bar()'  as  'foo
= bar() + foo'

Which only strengthens the reasoning to change it.

Liran, can you raise a bug report?  Also, can we use your small sample
(names will be anonymised) to put into the testsuite?


Regards
Iain.


More information about the D.gnu mailing list