[fpc-devel] Peephole Optimizer suggestions

J. Gareth Moreton gareth at moreton-family.com
Tue Jul 21 10:00:10 CEST 2020


So I'm now running the full test suite, including "make fullcycle" for 
my refactoring of instruction removal (replacing most references of 
"asml.remove(hp1); hp1.free;" etc. with "RemoveInstruction(hp1);".  
Trying to get the optimiser to run before assigning real registers to 
the instructions is actually somewhat difficult.  Besides having to 
avoid certain optimisations like CMOV that don't allow writing to the 
stack (although this is under pass 2, which helps), removal of 
instructions can sometimes result in danglong pointers for the 
"livestart" and "liveend" fields for the register tracking.

I'll submit the 'removal refactor' patch once everything has passed, 
this helps reduce maintenance and avoids dangling pointers (i.e. 
forgetting to call "asml.remove" before freeing an instruction), but 
running pass 1 of the peephole optimizer before assigning registers is 
still very much experimental and may be too complicated.  I'll also have 
to look at the effects on compiler speed and the quality of the binaries 
produced to see if it's truly worthwhile.

Gareth aka. Kit



More information about the fpc-devel mailing list