[fpc-devel] Peephole Optimizer suggestions
J. Gareth Moreton
gareth at moreton-family.com
Sun Jul 19 18:03:14 CEST 2020
Hi everyone,
Now that I'm back in my element and looking for improvements in the
generated assembly language, I'm pondering about refactoring something
in the Peephole Optimizer when it comes to removing instrucitons.
During the development of the optimisations over at #37389, I was
struggling to deal with an internal error that was cropping up for no
apparent reason, and the reason for that is because I forgot to call
"asml.remove" on an instruction before freeing it, therefore causing a
dangling pointer to remain in the linked list. To avoid this situation
from happening in the future, I would like to introduce a new method
called RemoveInstruction that ensures that the instruction is removed
from AsmL before being freed. While RemoveCurrentP already exists, it
is designed only for the current instruction and not ones that appear
later, especially if the instruction that appears after it is unknown.
For a more experimental one, I want to see if it's possible to run the
Peephole Optimizer (with the possible exception of the Post-Peephole
stage due to the nature of its optimisations) before all the virtual
registers are turned to real ones, because a number of optimisations
involve the removal of registers holding temporary values and hence
might allow a simpler function prologue and epilogue to be generated.
Also, some potential new optimisations would require rearranging
registers, an overly complex task that can be avoided completely if
virtual registers are used. Theoretically, the only changes that would
be needed is to ensure the TUsedRegs objects can handle virtual
registers (trying to use it now will cause an out of bounds error or
access violation on account of the virtual registers having starting
indices of 2^24).
Gareth aka. Kit
More information about the fpc-devel
mailing list