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