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.