[DTrace-devel] [PATCH 05/14] Call dt_cg_assoc_op() via dt_cg_load_var()
Kris Van Hees
kris.van.hees at oracle.com
Tue May 23 21:35:29 UTC 2023
On Mon, May 01, 2023 at 11:47:13PM -0400, eugene.loh--- via DTrace-devel wrote:
> From: Eugene Loh <eugene.loh at oracle.com>
>
> To load a variable, we currently call dt_cg_assoc_op() for associative
> arrays and dt_cg_load_var() for all other types of variables. This is
> unfortunate since associative arrays and thread-local variables share
> a lot of code, and this sharing will increase once NULL strings are
> supported. Further, such splitting is a different model from
> dt_cg_store_var(), where all variable types are handled by a common
> function.
>
> Therefore, call dt_cg_assoc_op() via dt_cg_load_var(). Subsequent
> patches will inline the call and consolidate common code. This first
> step appears separately to clarify the changes.
>
> Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
Reviewed-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
> libdtrace/dt_cg.c | 18 +++++++++++-------
> 1 file changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
> index 7bfc33a1..35c28bcf 100644
> --- a/libdtrace/dt_cg.c
> +++ b/libdtrace/dt_cg.c
> @@ -2500,6 +2500,9 @@ dt_cg_load_scalar(dt_node_t *dnp, uint_t op, ssize_t size, dt_irlist_t *dlp,
> dt_cg_promote(dnp, size, dlp, drp);
> }
>
> +static void
> +dt_cg_assoc_op(dt_node_t *dst, dt_irlist_t *dlp, dt_regset_t *drp);
> +
> static void
> dt_cg_load_var(dt_node_t *dst, dt_irlist_t *dlp, dt_regset_t *drp)
> {
> @@ -2507,6 +2510,11 @@ dt_cg_load_var(dt_node_t *dst, dt_irlist_t *dlp, dt_regset_t *drp)
>
> idp->di_flags |= DT_IDFLG_DIFR;
>
> + if (dst->dn_ident->di_kind == DT_IDENT_ARRAY) {
> + dt_cg_assoc_op(dst, dlp, drp);
> + return;
> + }
> +
> /* global and local variables */
> if ((idp->di_flags & DT_IDFLG_LOCAL) ||
> (!(idp->di_flags & DT_IDFLG_TLS) &&
> @@ -4000,8 +4008,6 @@ dt_cg_assoc_op(dt_node_t *dst, dt_irlist_t *dlp, dt_regset_t *drp)
> assert(!(dst->dn_ident->di_flags & DT_IDFLG_LOCAL));
> assert(dst->dn_args != NULL);
>
> - dst->dn_ident->di_flags |= DT_IDFLG_DIFR;
> -
> /* Get the tuple. */
> dt_cg_arglist(dst->dn_ident, dst->dn_args, dlp, drp);
>
> @@ -6125,11 +6131,9 @@ dt_cg_node(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
> break;
> }
>
> - if (dnp->dn_ident->di_kind == DT_IDENT_ARRAY) {
> - if (dnp->dn_ident->di_id > DIF_VAR_ARRAY_MAX)
> - dt_cg_assoc_op(dnp, dlp, drp);
> - else
> - dt_cg_array_op(dnp, dlp, drp);
> + if (dnp->dn_ident->di_kind == DT_IDENT_ARRAY &&
> + dnp->dn_ident->di_id <= DIF_VAR_ARRAY_MAX) {
> + dt_cg_array_op(dnp, dlp, drp);
> break;
> }
>
> --
> 2.18.4
>
>
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel
More information about the DTrace-devel
mailing list