I mention WPO because of other procedures calling them.  It would be very impractical to go back to procedures that have already gone through the peephole optimizer etc and change the references, especially if said reference is converted into a raw offset (I'm not absolutely sure when it's converted into a raw offset and when it's a reference that's converted by the assembler).

Gareth aka. Kit

On 19/07/2021 00:37, Martin Frb via fpc-devel wrote:
On 19/07/2021 01:24, J. Gareth Moreton via fpc-devel wrote:

The final assembly language of each method is identical.

(Note that the trunk is not this efficient just yet... it still leaves a "movq %rcx,%rax" instruction prior to "movl $1,%r8d" and then calls "movq (%rax),%rax" instead of "movq (%rcx),%rax" - it's still all identical though).

Would it be plausible to calculate and store a form of message digest (hash) of the final form of the tai entries or machine code and identify collisions and potential duplicate procedures for whole-program optimization? Granted I don't know anything about WPO yet so I don't know how plausible this is.  This wouldn't be somethind done on quick or debug builds because you'll need to be able to do proper stack traces, and having identical procedures merged into one might cause confusion.

Why WPO?

When you compute this hash, you could immediately check if it already exists. (either in this unit, or any unit used).

The only miss would be, if 2 units, that do not see each other include identical code. That part could then still be a WPO.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel


--
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to