What I mean is that if a function is marked as "pure" or "inline" (or both), only one copy of the unoptimised node tree is stored in the "inlininginfo" field, and both "pass1_pure" and "pass1_inline" duplicate this tree and transform it as needed.  Because only the unoptimised tree is stored, I felt there was no need to store this twice (doing so would also increase the size of PPU files).

Kit

On 15/12/2022 21:39, Sven Barth wrote:
Am 14.12.2022 um 12:15 schrieb J. Gareth Moreton via fpc-devel:

To better explain how purity analysis currently works (I'm sure there's a better name than "purity analysis"), it takes a copy of the unoptimised node tree (this is the same as the tree used for inline, and for a space saving, they share the same field), adds explicit definitions for the formal parameters so they equal the constants passed in, and then tries to collapse the node tree down to a single assignment to the result.  This is done by running the following operations in this order:


What do you mean with “share the same field”? A pure function might still be called and inlined like a normal function and for that you shouldn't transform the node tree needlessly as that might influence the debugging experience. So you should have two different copies, one for inlining and one for pure related transformations.

Regards,
Sven

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

Reply via email to