https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94413

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|1                           |0
             Status|NEW                         |UNCONFIRMED
   Last reconfirmed|2020-03-31 00:00:00         |
                 CC|                            |jakub at gcc dot gnu.org,
                   |                            |uros at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Somewhat modified testcase:
typedef float f4 __attribute__((vector_size (16)));

f4
isfinite(f4 x) {
  union U { float f[4]; f4 v; } u, v;
  u.v = x;
  v.v = (f4) {};
  int i;
  for (i = 0; i < 4; ++i) v.f[i] = __builtin_isfinite(u.f[i]) ? 1.f : 0.f;
  return v.v;
}
aborts already since r0-82110-g0c8d3c2b0852bf0eca1413c311fc3d2a9d3c1ade.
Though, in *.optimized dump it is
  _2 = ABS_EXPR <_1>;
  if (_2 u> 3.4028234663852885981170418348451692544e+38)
for scalar version which works fine and
  vect__2.8_33 = ABS_EXPR <x_7(D)>;
  vect_iftmp.9_37 = VEC_COND_EXPR <vect__2.8_33 u> {
3.4028234663852885981170418348451692544e+38,
3.4028234663852885981170418348451692544e+38,
3.4028234663852885981170418348451692544e+38,
3.4028234663852885981170418348451692544e+38 }, { 0.0, 0.0, 0.0, 0.0 }, {
1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0 }>;
for vector which doesn't, so it looks like a backend problem.  For AVX we could
use vcmpnlt_uqps, but for < AVX there is no such insn.

Reply via email to