https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100672
--- Comment #9 from Zdenek Sojka <zsojka at seznam dot cz> --- (In reply to Richard Biener from comment #8) > (In reply to Zdenek Sojka from comment #7) > > (In reply to Richard Biener from comment #2) > > > Maybe sth is wrong with the testcase? clang also results in an abort. > > > Isn't > > > right-shift of negative values undefined? > > > > > > > Thank you for having a look. > > > > I believe the behavior is fully defined. The vectors are unsigned, and the > > conversion to unsigned is done by adding 2**64; this behaves the same: > > > > $ cat testcase.c > > typedef unsigned long long __attribute__((__vector_size__ (32))) V; > > > > V > > foo (V v) > > { > > return -(v >> 1); > > but this is a logical right shift, thus gives 0x7ff...e, ... > and negating that doesn't yield 1. > Shame on me. You are very right.