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

--- Comment #4 from Gabriel Ravier <gabravier at gmail dot com> ---
This code :

typedef int64_t v2di __attribute__((vector_size(16)));

v2di f(__m128 val) 
{
    return (~(v2di)_mm_set_ps1(0.0f) & (v2di)val);
}

is optimized better (and is equivalent, if I understand the semantics of andnps
right). Maybe the builtin for andnot should be thrown out as soon as possible
(i.e. transformed into ~a & b`) ? From what I can see, `~a & b` for vectors in
general is optimized to an andnot operation too.

Reply via email to