[fpc-devel] Peephole optimiser insight

J. Gareth Moreton gareth at moreton-family.com
Thu Jan 2 23:44:03 CET 2020

Hi everyone,

So one of my patch suggestions sought to give a small efficiency boost 
to the post-peephole optimiser stage, since it is only designed to 
convert instructions into abbreviated forms but which would likely 
damage the peephole optimizer if done sooner. 
https://bugs.freepascal.org/view.php?id=36437  Florian rejected it 
because it made the stage act differently to the others and might be 
considered hard to follow.

One thing that I've noted though is that the peephole optimizer only 
investigates instructions, not other entries like labels or register 
allocations (except to update UsedRegs), and it makes me wonder if it's 
possible to convert the peephole optimiser stages so it doesn't enter 
the platform-specific methods if the current list entry is not an 
instruction.  At the moment, it enters a platform-specific method, which 
then checks to see if the current entry is an instruction, and 
immediately exits out if it's not. Instead, I propose that the 
platform-independent method does this check.  It might not sound like 
much, but it means that it cuts down on a number of procedure calls, 
which might number several dozen when analysing a complex function.  It 
also means one can remove the specific checks for the entry type in the 
platform-specific methods.

One thing Florian noted in the above issue is how the parameters were 
still of type tai (class for a list entry) instead of taicpu (which is 
specific for instructions).  Thinking ahead, I don't think this can be 
changed to taicpu without failing some optional sanity checks, because 
if the current instruction gets deleted, most optimisation methods set 
the parameter to the next entry in the list, which may not be an 
instruction.  One could get around this by demanding the methods call 
GetNextInstruction and calling UpdateUsedRegs, but it's asking for 
subtle bugs to be introduced if this gets forgotten sonewhere.

Gareth aka. Kit

More information about the fpc-devel mailing list