On Fri, 12 Jan 2024, Jakub Jelinek wrote:

> Hi!
> 
> When build_array_ref doesn't use ARRAY_REF, it casts the index to sizetype
> already, performs POINTER_PLUS_EXPR and then dereferences.
> While when emitting ARRAY_REF, we try to keep index expression as is in
> whatever type it had, which is reasonable e.g. for signed or unsigned types
> narrower than sizetype for loop optimizations etc.
> But if the index is wider than sizetype, we are unnecessarily computing
> bits beyond what is needed.  For {,unsigned }__int128 on 64-bit arches
> or {,unsigned }long long on 32-bit arches we've been doing that for decades,
> so the following patch doesn't propose to change that (might be stage1
> material), but for _BitInt at least the _BitInt lowering code doesn't expect
> to see large/huge _BitInt in the ARRAY_REF indexes, I was expecting one
> would see just casts of those to sizetype.
> 
> So, the following patch makes sure that large/huge _BitInt indexes don't
> appear in ARRAY_REFs.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK.

-- 
Joseph S. Myers
josmy...@redhat.com

Reply via email to