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).
Long story short, the patch /finally/ works 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
