https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95900
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rsandifo at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- /space/rguenther/src/gcc/gcc/testsuite/gcc.dg/vect/bb-slp-pr95866.c:13:1: note: vector/vector shift/rotate found. Indeed it uses a vector-vector shift ... The odd thing is we have # Return 1 if the target supports hardware vector shift by register operation. proc check_effective_target_vect_var_shift { } { return [check_cached_effective_target_indexed vect_var_shift { expr {(([istarget i?86-*-*] || [istarget x86_64-*-*]) && [check_avx2_available]) and # Return 1 if the target supports hardware vector shift operation. proc check_effective_target_vect_shift { } { return [check_cached_effective_target_indexed vect_shift { expr {([istarget powerpc*-*-*] && ![istarget powerpc-*-linux*paired*]) || [istarget ia64-*-*] || [istarget i?86-*-*] || [istarget x86_64-*-*] || [istarget aarch64*-*-*] || [is-effective-target arm_neon] || ([istarget mips*-*-*] && ([et-is-effective-target mips_msa] || [et-is-effective-target mips_loongson_mmi])) || ([istarget s390*-*-*] && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] }}] vect_var_shift is only used by g++.dg/vect/pr87914.cc: // { dg-final { scan-tree-dump "OUTER LOOP VECTORIZED" "vect" { target { vect_var_shift && vect_int } } } } but that would also have passed with powerpc vect_shift. Looks like aarch64 has ashl expanders in aarch64-simd.md. And the target selectors as usual are a bit of a mess ... :/ And looks like I added vect_var_shift. Not sure if it is now time to add vect_scalar_shift (and maybe rename vect_var_shift to vect_vect_shift) and leave it to others to sort out vect_shift (meaning then whether a target supports either variant). Easiest would be to change the target selector on the new testcase to { x86_64-*-* i?86-*-* } ...