On Fri, 11 Aug 2023, Richard Biener wrote:
> When we vectorize fold-left reductions with partial vectors but > no target operation available we use a vector conditional to force > excess elements to zero. But that doesn't correctly preserve > the sign of zero. The following patch disables partial vector > support in that case. > > Bootstrap and regtest running on x86_64-unknown-linux-gnu. > > Does this look OK? With -frounding-math -fno-signed-zeros we are > happily using the masking again, but that's OK, right? An additional > + 0.0 shouldn't do anything here. I think it converts SNan to QNan (when the partial vector has just one element which is SNan), so is a test for -fsignaling-nans missing? In the defaut -fno-rounding-math -fno-signaling-nans mode I think we can do the reduction by substituting negative zero for masked-off elements — maybe it's worth diagnosing that case separately (i.e. as "not yet implemented", not an incorrect transform)? (note that in avx512 it's possible to materialize negative zeroes by mask with a single vpternlog instruction, which is cheap) Alexander