https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119325
--- Comment #13 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Tobias Burnus from comment #12) > BTW, I added some diagnostic to the 'if' clause showing: > > v64sf_fmod.c:147:109: warning: ‘__from’ (‘v2sf’ {aka ‘__vector(2) float’}): > size = 8, align = 64 > v64sf_fmod.c:147:198: warning: ‘__from’ (‘v2sf’ {aka ‘__vector(2) float’}): > size = 8, align = 64 > v64sf_fmod.c:147:3730: warning: ‘__from’ (‘v4sf’ {aka ‘__vector(4) float’}): > size = 16, align = 128 > v64sf_fmod.c:147:3819: warning: ‘__from’ (‘v4sf’ {aka ‘__vector(4) float’}): > size = 16, align = 128 > v64sf_fmod.c:147:7351: warning: ‘__from’ (‘v8sf’ {aka ‘__vector(8) float’}): > size = 32, align = 256 > v64sf_fmod.c:147:7440: warning: ‘__from’ (‘v8sf’ {aka ‘__vector(8) float’}): > size = 32, align = 256 > v64sf_fmod.c:147:10976: warning: ‘__from’ (‘v16sf’ {aka ‘__vector(16) > float’}): size = 64, align = 512 > v64sf_fmod.c:147:11065: warning: ‘__from’ (‘v16sf’ {aka ‘__vector(16) > float’}): size = 64, align = 512 > v64sf_fmod.c:147:14627: warning: ‘__from’ (‘v32sf’ {aka ‘__vector(32) > float’}): size = 128, align = 1024 > v64sf_fmod.c:147:14716: warning: ‘__from’ (‘v32sf’ {aka ‘__vector(32) > float’}): size = 128, align = 1024 > 147 | DEF_VARIANTS2 (fmodf, sf, sf) > > That's for the expansion of RESIZE_VECTOR: > > amdgcn_veclib.h:89:3: warning: ‘__from’ (‘v2sf’ {aka ‘__vector(2) float’}): > size = 8, align = 64 > 89 | *((to_t *) &__from); \ > | ^~~~~~~~~~~~~~~~~~~ > > i.e. > > 84 /* Cast between vectors with a different number of elements. */ > 85 > 86 #define RESIZE_VECTOR(to_t, from) \ > 87 ({ \ > 88 __auto_type __from = (from); \ > 89 *((to_t *) &__from); \ > 90 }) The if-condition should only trigger if the access (which might be a sub-access) is completely out of bounds of the target. Say, if for weird reason the above has to_t bigger than __from, and thus if we'd for some reason split the access have the "upper part" be outside of __from. What's 'offset' in these cases?