[fpc-devel] RemoveCurrentP Refactor
J. Gareth Moreton
gareth at moreton-family.com
Mon Mar 16 02:52:21 CET 2020
Hi everyone,
I have made note of a preference to use RemoveCurrentP instead of
removing the current instruction from the assembler list due to an
optimisation that warrants its removal. This is fair enough because
there are a number of steps that have to be taken and the procedure is
largely the same each time, and subtle errors or memory leaks arising if
a step is missed. The full process is rather expensive, however, with
calls to both UpdateUsedRegs and GetNextInstruction, and there are cases
where it is a waste to call them (for the former, when removing multiple
adjacent instructions; for the latter, when the next instruction is
already known).
https://bugs.freepascal.org/view.php?id=36797
This patch introduces a new version of RemoveCurrentP that takes a
second parameter, but doesn't return a result - procedure
RemoveCurrentP(var p: tai; const hp1: tai) - this is for situations
where the next instruction is already known... or more simply, it simply
sets p to hp1 once the original p is removed and freed, instead of
calling GetNextInstruction. Additionally, a number of calls to
RemoveCurrentP where it's clear that hp1 came from GetNextInstruction
have been changed to the new version. Note the old one still exists for
when the next instruction is not known.
This patch is a pure refactor - it doesn't add any new features. As
such, the prerequisites for its acceptance are that any binaries
generated by the compilers do NOT change, and that the compiler runs
slightly faster (which should be the case since the number of calls to
GetNextInstruction have been reduced).
I like to think this draws a balance between performance and
maintainability.
Gareth aka. Kit
--
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
More information about the fpc-devel
mailing list