git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] create_delta_index: simplify condition always evaluating to true

From
Philip Oakley <philipoakley@iee.org>
Date
Aug 17, 2013, 06:58 UTC
Message-ID
<E5FB18126E7F42D79E085F3924AC9E07@PhilipOakley>
In-Reply-To
<1376688157-8374-1-git-send-email-stefanbeller@googlemail.com>
From: "Stefan Beller" <stefanbeller@googlemail.com>
Show 25 quoted lines
> The code sequence  ' (1u << i) < hsize && i < 31 ' is a multi step
> process, whose first step requires that 'i' is already less that 31,
> otherwise the result (1u << i)  is undefined (and  'undef_val < hsize'
> can therefore be assumed to be 'false'), and so the later test  i < 31
> can always be optimized away as dead code ('i' is already less than 
> 31,
> or the short circuit 'and' applies).
>
> So we need to get rid of that code. One way would be to exchange the
> order of the conditions, so the expression 'i < 31 && (1u << i) < 
> hsize'
> would remove that optimized unstable code already.
>
> However when checking the previous lines in that function, we can 
> deduce
> that 'hsize' must always be smaller than (1u<<31), since 506049c7df2c6
> (fix >4GiB source delta assertion failure), because 'entries' is
> capped at an upper bound of 0xfffffffeU, so 'hsize' contains a maximum
> value of 0x3fffffff, which is smaller than (1u<<31), so the value of
> 'i' will never be larger than 31 and we can remove that condition
> entirely.
>
> Signed-off-by: Stefan Beller <stefanbeller@googlemail.com>
> Acked-by: Nicolas Pitre <nico@fluxnic.net>
> ---
Acked-by: Philip Oakley philipoakley@iee.org

If there are concens that future upgrades may make the (i < 31) test a necessity that it should be added before the &&. If the compiler is able to determine it's dead code in that case then that's OK, at least it would be future proof. Then again it's probably not likely in the near future.

Show 31 quoted lines
>
> Philip,
> thanks for the wording of your mail. I get quickly derailed from the
> warnings of the STACK tool and write the other commit messages than
> I ought to write. I think the wording of your mail nails it pretty
> good, so I put it in the commit message as well.
>
> Stefan
>
>
> diff-delta.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/diff-delta.c b/diff-delta.c
> index 93385e1..3797ce6 100644
> --- a/diff-delta.c
> +++ b/diff-delta.c
> @@ -155,7 +155,7 @@ struct delta_index * create_delta_index(const void 
> *buf, unsigned long bufsize)
>  entries = 0xfffffffeU / RABIN_WINDOW;
>  }
>  hsize = entries / 4;
> - for (i = 4; (1u << i) < hsize && i < 31; i++);
> + for (i = 4; (1u << i) < hsize; i++);
>  hsize = 1 << i;
>  hmask = hsize - 1;
>
> -- 
> 1.8.4.rc3.2.g2c2b664
>
>
Philip 
Previous: Stefan BellerNext: Philip Oakley
Message 8 of 14 in “create_delta_index: simplify condition always evaluating to true”
  1. create_delta_index: simplify condition always evaluating to trueStefan Beller, Aug 15, 2013
  2. Eric SunshineAug 15, 2013
  3. create_delta_index: simplify condition always evaluating to trueStefan Beller, Aug 15, 2013
  4. Eric SunshineAug 15, 2013
  5. Nicolas PitreAug 16, 2013
  6. Philip OakleyAug 16, 2013
  7. create_delta_index: simplify condition always evaluating to trueStefan Beller, Aug 16, 2013
  8. Philip OakleyAug 17, 2013
  9. Philip OakleyAug 15, 2013
  10. Junio C HamanoAug 15, 2013
  11. Stefan BellerAug 15, 2013
  12. Nicolas PitreAug 16, 2013
  13. brian m. carlsonAug 16, 2013
  14. Eric SunshineAug 16, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.