[fpc-devel] Finally fixed that MOVZX/SX optimisation!

J. Gareth Moreton gareth at moreton-family.com
Thu Feb 20 21:20:56 CET 2020


The first patch, movzx-choices.patch, is already part of the trunk.  I 
applied movxx-self-extra.patch amd movx-new-tests.patch (which just 
contains the tests) to the trunk, which was r44195 at the time, and then 
also applied just movx-new-tests.patch to a separate branch, then ran 
regression tests on both branches and compared the results.

Gareth aka. Kit

On 20/02/2020 17:10, Florian Klämpfl wrote:
> Am 18.02.20 um 23:04 schrieb J. Gareth Moreton:
>> Hi everyone,
>>
>> So I had some difficulty reproducing a regression with my latest 
>> optimisation patch, but a couple of days ago I finally reproduced it 
>> and isolated the cause.  As explained in the topic, my optimisation 
>> was faulty with the instruction pair "movb $-63,%al; movsbw %al,%ax" 
>> and other similar constructs - negative constants weren't handled 
>> properly.
>>
>> It seems that not all regressions are caught when you run the test 
>> suite conventionally, and you have to specify additional options like 
>> "-O4", which may cause other failures to occur if a test is not 
>> expecting any kind of intense optimisation, for example.  In 
>> response, over here at https://bugs.freepascal.org/view.php?id=36687, 
>> I've introduced two new tests that are copies of the ones that 
>> failed, but which explicitly add -O4 to the default compiler 
>> options.  Besides covering the fault in my patch, I can see these 
>> tests proving useful later on because I can see future peephole 
>> optimisations in the compiled assembly language (e.g. the following 
>> triplet appears... "movw $65280,%ax; cmp $65280,%ax; je @lbl"... 
>> logical analysis shows that the conditional branch is always taken).
>
> Yes, but in this case, there is something missed at the node level 
> optimizer. Such code should not be generated.
>
>>
>> Long story short, the patch /finally/ works 
>
> Which ones did you exactly apply? All three in the bug tracker at once?
>
>> and a full run of the regression suite on i386-win32 and 
>> x86_64-win64, including the two new tests, show no new failures.
>>
>> Gareth aka. Kit
>>
>>
>> _______________________________________________
>> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
>> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>>
>
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>


More information about the fpc-devel mailing list