> This optimizes byte_from_pos and pos_from_bit by noting that we operate
> on sizes whose computations have no intermediate (or final) overflow.
> This is the single patch necessary to get Ada to bootstrap and test
> with TYPE_IS_SIZETYPE removed.  Rather than amending size_binop
> (my original plan) I chose to optimize the above two commonly used
> accessors.
>
> Conveniently normalize_offset can be re-written to use pos_from_bit
> instead of inlinig it.  I also took the liberty to document the
> functions (sic).

Nice, thanks.  Could you add a blurb, in the head comment of the first function 
in which you operate under the no-overflow assumption, stating this fact and 
why this is necessary (an explicit mention of Ada isn't forbidden ;-), as well 
as a cross-reference to it in the head comment of the other function(s).

> Any comments?  Would you like different factoring of the optimization
> (I considered adding a byte_from_bitpos)?  Any idea why
> byte_from_pos is using TRUNC_DIV_EXPR (only positive offsets?) and
> pos_from_bit FLOOR_DIV_EXPR (also negative offsets?) - that seems
> inconsistent, and we fold FLOOR_DIV_EXPR of unsigned types (sizetype)
> to TRUNC_DIV_EXPR anyways.

I think that a bit position is treated as non-negative, so bitpos can use 
TRUNC_DIV_EXPR in byte_from_pos and you need to use FLOOR_MOD_EXPR to get a 
non-negative *pbitpos in pos_from_bit.  Very likely obsolete now indeed.

-- 
Eric Botcazou

Reply via email to