[DTrace-devel] [PATCH 4/4] clean up dt_cg_typecast(): put dst->dn_reg=src->dn_reg in dt_cg_typecast()

eugene.loh at oracle.com eugene.loh at oracle.com
Tue Aug 11 15:11:12 PDT 2020


From: Eugene Loh <eugene.loh at oracle.com>

Every call to dt_cg_typecast() first sets dst->dn_reg to src->dn_reg.
Instead of making this assignment at each call site, it's easier to
move the call into the callee dt_cg_typecast().

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 libdtrace/dt_cg.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index b3b3d3a7..3ef94247 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -1117,7 +1117,7 @@ dt_cg_store_var(dt_node_t *src, dt_irlist_t *dlp, dt_regset_t *drp,
  * using logical shift (unsigned result) or arithmetic shift (signed result).
  */
 static void
-dt_cg_typecast(const dt_node_t *src, const dt_node_t *dst,
+dt_cg_typecast(const dt_node_t *src, dt_node_t *dst,
     dt_irlist_t *dlp, dt_regset_t *drp)
 {
 	size_t srcsize;
@@ -1125,6 +1125,8 @@ dt_cg_typecast(const dt_node_t *src, const dt_node_t *dst,
 	struct bpf_insn instr;
 	int reg, n;
 
+	dst->dn_reg = src->dn_reg;
+
 	/* If the destination type is '@' (any type) we need not cast. */
 	if (dst->dn_ctfp == NULL && dst->dn_type == CTF_ERR)
 		return;
@@ -1187,7 +1189,6 @@ dt_cg_arglist(dt_ident_t *idp, dt_node_t *args,
 
 		dt_node_diftype(yypcb->pcb_hdl, dnp, &t);
 
-		isp->dis_args[i].dn_reg = dnp->dn_reg; /* re-use register */
 		dt_cg_typecast(dnp, &isp->dis_args[i], dlp, drp);
 		isp->dis_args[i].dn_reg = -1;
 
@@ -1655,7 +1656,6 @@ dt_cg_asgn_op(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
 			 * and then cast the result to the member type.
 			 */
 			dt_cg_node(mnp->dn_membexpr, dlp, drp);
-			mnp->dn_reg = mnp->dn_membexpr->dn_reg;
 			dt_cg_typecast(mnp->dn_membexpr, mnp, dlp, drp);
 
 			/*
@@ -1946,7 +1946,6 @@ dt_cg_inline(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
 	}
 
 	dt_cg_node(inp->din_root, dlp, drp);
-	dnp->dn_reg = inp->din_root->dn_reg;
 	dt_cg_typecast(inp->din_root, dnp, dlp, drp);
 
 	if (idp->di_kind == DT_IDENT_ARRAY) {
@@ -2265,7 +2264,6 @@ dt_cg_node(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
 
 	case DT_TOK_LPAR:
 		dt_cg_node(dnp->dn_right, dlp, drp);
-		dnp->dn_reg = dnp->dn_right->dn_reg;
 		dt_cg_typecast(dnp->dn_right, dnp, dlp, drp);
 		break;
 
@@ -2297,7 +2295,6 @@ dt_cg_node(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
 			dxp->dx_ident->di_id = dnp->dn_left->dn_reg;
 
 			dt_cg_node(mnp->dn_membexpr, dlp, drp);
-			dnp->dn_reg = mnp->dn_membexpr->dn_reg;
 			dt_cg_typecast(mnp->dn_membexpr, dnp, dlp, drp);
 
 			dxp->dx_ident->di_flags &= ~DT_IDFLG_CGREG;
-- 
2.18.4




More information about the DTrace-devel mailing list