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.