Subject: Re: [PATCH v4 1/6] xdiff/xdl_cleanup_records: delete local recs pointer

From: Junio C Hamano <[email-masked]>
Date: Mon, 30 Mar 2026 15:53:45 -0700

"Ezekiel Newren via GitGitGadget" <[email-masked]> writes:

> From: Ezekiel Newren <[email-masked]>
>
> Simplify the first 2 for loops by directly indexing the xdfile.recs.
> recs is unused in the last 2 for loops, remove it. Best viewed with
> --color-words.
>
> Signed-off-by: Ezekiel Newren <[email-masked]>
> ---
>  xdiff/xprepare.c | 17 ++++++++---------
>  1 file changed, 8 insertions(+), 9 deletions(-)

Interesting that the latter loops did not even have to have the
extra pointer variable.  Nice clean-up.

>
> diff --git a/xdiff/xprepare.c b/xdiff/xprepare.c
> index cd4fc405eb..d6e1901d2d 100644
> --- a/xdiff/xprepare.c
> +++ b/xdiff/xprepare.c
> @@ -269,7 +269,6 @@ static bool xdl_clean_mmatch(uint8_t const *action, long i, long s, long e) {
>   */
>  static int xdl_cleanup_records(xdlclassifier_t *cf, xdfile_t *xdf1, xdfile_t *xdf2) {
>  	long i, nm, mlim;
> -	xrecord_t *recs;
>  	xdlclass_t *rcrec;
>  	uint8_t *action1 = NULL, *action2 = NULL;
>  	bool need_min = !!(cf->flags & XDF_NEED_MINIMAL);
> @@ -293,16 +292,18 @@ static int xdl_cleanup_records(xdlclassifier_t *cf, xdfile_t *xdf1, xdfile_t *xd
>  	 */
>  	if ((mlim = xdl_bogosqrt((long)xdf1->nrec)) > XDL_MAX_EQLIMIT)
>  		mlim = XDL_MAX_EQLIMIT;
> -	for (i = xdf1->dstart, recs = &xdf1->recs[xdf1->dstart]; i <= xdf1->dend; i++, recs++) {
> -		rcrec = cf->rcrecs[recs->minimal_perfect_hash];
> +	for (i = xdf1->dstart; i <= xdf1->dend; i++) {
> +		size_t mph1 = xdf1->recs[i].minimal_perfect_hash;
> +		rcrec = cf->rcrecs[mph1];
>  		nm = rcrec ? rcrec->len2 : 0;
>  		action1[i] = (nm == 0) ? DISCARD: (nm >= mlim && !need_min) ? INVESTIGATE: KEEP;
>  	}
>  
>  	if ((mlim = xdl_bogosqrt((long)xdf2->nrec)) > XDL_MAX_EQLIMIT)
>  		mlim = XDL_MAX_EQLIMIT;
> -	for (i = xdf2->dstart, recs = &xdf2->recs[xdf2->dstart]; i <= xdf2->dend; i++, recs++) {
> -		rcrec = cf->rcrecs[recs->minimal_perfect_hash];
> +	for (i = xdf2->dstart; i <= xdf2->dend; i++) {
> +		size_t mph2 = xdf2->recs[i].minimal_perfect_hash;
> +		rcrec = cf->rcrecs[mph2];
>  		nm = rcrec ? rcrec->len1 : 0;
>  		action2[i] = (nm == 0) ? DISCARD: (nm >= mlim && !need_min) ? INVESTIGATE: KEEP;
>  	}
> @@ -312,8 +313,7 @@ static int xdl_cleanup_records(xdlclassifier_t *cf, xdfile_t *xdf1, xdfile_t *xd
>  	 * false, or become true.
>  	 */
>  	xdf1->nreff = 0;
> -	for (i = xdf1->dstart, recs = &xdf1->recs[xdf1->dstart];
> -	     i <= xdf1->dend; i++, recs++) {
> +	for (i = xdf1->dstart; i <= xdf1->dend; i++) {
>  		if (action1[i] == KEEP ||
>  		    (action1[i] == INVESTIGATE && !xdl_clean_mmatch(action1, i, xdf1->dstart, xdf1->dend))) {
>  			xdf1->reference_index[xdf1->nreff++] = i;
> @@ -324,8 +324,7 @@ static int xdl_cleanup_records(xdlclassifier_t *cf, xdfile_t *xdf1, xdfile_t *xd
>  	}
>  
>  	xdf2->nreff = 0;
> -	for (i = xdf2->dstart, recs = &xdf2->recs[xdf2->dstart];
> -	     i <= xdf2->dend; i++, recs++) {
> +	for (i = xdf2->dstart; i <= xdf2->dend; i++) {
>  		if (action2[i] == KEEP ||
>  		    (action2[i] == INVESTIGATE && !xdl_clean_mmatch(action2, i, xdf2->dstart, xdf2->dend))) {
>  			xdf2->reference_index[xdf2->nreff++] = i;