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

ktkachov at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |ASSIGNED
         Resolution|FIXED                       |---

--- Comment #6 from ktkachov at gcc dot gnu.org ---
There are more cases where we fail to match XAR:
#include <arm_neon.h>

uint64x2_t
func_shl_eor (uint64x2_t a, uint64x2_t b) {
  uint64x2_t c = veorq_u64 (a, b);
  return veorq_u64(vshlq_n_u64(c, 1), vshrq_n_u64(c, 63));
}

uint64x2_t
func_add_eor (uint64x2_t a, uint64x2_t b) {
  uint64x2_t c = veorq_u64 (a, b);
  return veorq_u64(vaddq_u64(c, c), vshrq_n_u64(c, 63));
}

uint64x2_t
func_shl_orr (uint64x2_t a, uint64x2_t b) {
  uint64x2_t c = veorq_u64 (a, b);
  return vorrq_u64(vshlq_n_u64(c, 1), vshrq_n_u64(c, 63));
}

uint64x2_t
func_add_orr (uint64x2_t a, uint64x2_t b) {
  uint64x2_t c = veorq_u64 (a, b);
  return vorrq_u64(vaddq_u64(c, c), vshrq_n_u64(c, 63));
}

uint64x2_t
func_shl_add (uint64x2_t a, uint64x2_t b) {
  uint64x2_t c = veorq_u64 (a, b);
  return vaddq_u64(vshlq_n_u64(c, 1), vshrq_n_u64(c, 63));
}

uint64x2_t
func_add_add (uint64x2_t a, uint64x2_t b) {
  uint64x2_t c = veorq_u64 (a, b);
  return vaddq_u64(vaddq_u64(c, c), vshrq_n_u64(c, 63));
}

I'll handle them in follow-up patches.

Reply via email to