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