You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Jun 1, 2023. It is now read-only.
perl-5.003_02 added an incomplete op_const_sv to check an optree for a single const or pad, and to mark it as CvCONST then. 760ac83
Nothing much changed since then.
This is
wrong. only const pad values may be used like this. sideeffects changing the lexical are not safe. 5.22 started warning about this condition.
not enough. proper constant folding should be done to check if the body may be inlinable.
Splice a OP* into the caller if inlinable, not just a CONSTSUB via the const_sv logic.
With some heuristic/cost calculation when it makes sense.
we can also use the new :const and :pure attributes to mark functions as inlinable.
:const to bypass the constant folding check, :pure to mark the closed over lexicals as not being changed by sideeffects.
Note: inlined subs and methods are a huge performance win in most dynamic languages. esp. with the slow perl function calls, it might be a big win.
Analyze the body and check if a enter/leave is needed, and if the args can be hardcoded into the inlined body (optim_args). this can be done by ref (with consts and with $_[]) or by value via copies of the sv/pad.
otherwise use a simple push @_ , args oplist instead of the pushmark args gv entersub sequence.
The inlined body needs to be copied, as the nextstate and args needs to be changed. We can do this on the fly, or 2nd or more generally add a new op_clone_oplist() API, which just clones the ops, not the data.
See the branch feature/CM-707-cperl-inline-subs, now feature/gh311-opclone
The text was updated successfully, but these errors were encountered:
perl-5.003_02 added an incomplete op_const_sv to check an optree for a single const or pad, and to mark it as CvCONST then. 760ac83
Nothing much changed since then.
This is
Splice a OP* into the caller if inlinable, not just a CONSTSUB via the const_sv logic.
With some heuristic/cost calculation when it makes sense.
we can also use the new :const and :pure attributes to mark functions as inlinable.
:const to bypass the constant folding check, :pure to mark the closed over lexicals as not being changed by sideeffects.
Note: inlined subs and methods are a huge performance win in most dynamic languages. esp. with the slow perl function calls, it might be a big win.
Analyze the body and check if a enter/leave is needed, and if the args can be hardcoded into the inlined body (optim_args). this can be done by ref (with consts and with
$_[]
) or by value via copies of the sv/pad.otherwise use a simple
push @_ , args oplist
instead of thepushmark args gv entersub
sequence.The inlined body needs to be copied, as the nextstate and args needs to be changed. We can do this on the fly, or 2nd or more generally add a new
op_clone_oplist()
API, which just clones the ops, not the data.See the branch
feature/CM-707-cperl-inline-subs
, nowfeature/gh311-opclone
The text was updated successfully, but these errors were encountered: