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

Liran Zvibel via D.gnu d.gnu at puremagic.com
Fri May 15 02:47:39 PDT 2015


Please feel free to use my code sample in the test suite.
I fill post a bug report.

Thanks!


Liran
> On May 15, 2015, at 10:23, Iain Buclaw via D.gnu <d.gnu at puremagic.com> wrote:
> 
> 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