On Thursday, 1 June 2023 20:25:14 CEST Alexander Monakov wrote: > On Wed, 31 May 2023, Richard Biener wrote: > > So yes, we probably should clarify the semantics to match the > > implementation (since we have two targets doing things differently > > since forever we can only document it as UB) and also note the > > difference from OpenCL (in case OpenCL is still relevant these > > days we might want to offer a -fopencl-vectors to emit the required > > AND). > > It doesn't have to be UB, in principle we could say that shift amount > is taken modulo some power of two depending on the target without UB. > But since LLVM already treats that as UB, we might as well follow.
I prefer UB (as your patch states π). If a user requires the AND, let them state it explicitly. Don't let everybody pay in performance. > I think for addition/multiplication of signed vectors everybody > expects them to have wrapping semantics without UB on overflow though? simd<int> x = ...; bool t = all_of(x < x + 1); // unconditionally true or not? I'd expect t to be unconditionally true. Because simd<int> simply is a data- parallel version of int. > Revised patch below. This can be considered a breaking change. Does it need a mention in the release notes? - Matthias -- ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Dr. Matthias Kretz https://mattkretz.github.io GSI Helmholtz Centre for Heavy Ion Research https://gsi.de stdβ::simd ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ