> I think it's better to use 'sizetype' here, vect_check_gather_scatter matches > up the precision of the base pointer, but that's not readily available here. > The concern is address-spaces, but the optabs do not have the pointer mode > as discriminator anyway. I also wonder why you check !TYPE_OVERFLOW_WRAPS, > the comment suggests to check !TYPE_UNSIGNED? There's no check > that the pointer-sized type is actually larger - you possibly rely on > what vect_check_gather_scatter does here but an explicit test would be nice to > have.
In case I'm not missing the point now, my assumption was that once we reach pointer size overflow doesn't matter any more (and original offset == new offset == sizetype is OK). I guess that's equivalent to relying on two's complement arithmetic which not all targets have? Or can we rely on that nowadays? What I didn't consider, though, is stuff like i386 x32 where pointer size is 32 bit but registers are 64 bit. > The patch otherwise looks OK. With all the checking we do I now wonder > whether it's possible to do this the other way around - get all supported > offset vector types for a data vector types by walking the optabs? It > seems the only way is to basically iterate over all (reasonable) > vector integer modes > for the offset part and then poke the operand predicate for the sign. > I'm not sure > doing this will make the code much simpler. It might be sth to keep in mind. Yes, I'll see if something can be done. -- Regards Robin
