On Mon, Nov 25, 2019 at 5:53 PM GT <tng...@protonmail.com> wrote: > > > > > > > i wonder if gcc can auto-vectorize scalar sincos > > > calls, the vectorizer seems to want the calls to > > > have no side-effect, but attribute pure or const > > > is not appropriate for sincos (which has no return > > > value but takes writable pointer args) > > > > We have __builtin_cexpi for that but not sure if any of the mechanisms can > > provide a mapping to a vectorized variant. > > > > 1. Using flags -fopt-info-all and -fopt-info-internals, the failure to > vectorize sincos > is reported as "unsupported data-type: complex double". The default GCC > behavior is to > replace sincos calls with calls to __builtin_cexpi. > > 2. Using flags -fno-builtin-sincos and -fno-builtin-cexpi, the failure to > vectorize > sincos is different. In this case, the failure to vectorize is due to "number > of iterations > could not be computed". No calls to __builtin_cexpi; sincos calls retained. > > Questions: > 1. Should we aim to provide a vectorized version of __builtin_cexpi? If so, > it would have > to be a PPC64-only vector __builtin-cexpi, right? > > 2. Or should we require that vectorized sincos be available only when > -fno-builtin-sincos flag > is used in compilation? > > I don't think we need to fix both types of vectorization failures in order to > obtain sincos > vectorization.
I think we should have a vectorized cexpi since that's having a sane ABI. The complex return type of cexpi makes it a little awkward for the vectorizer but handling this should be manageable. It's a bit difficult to expose complex types to the vectorizer since most cases are lowered early. Richard. > Thanks. > Bert.