https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103523
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2021-12-02 Status|UNCONFIRMED |NEW Component|target |tree-optimization Ever confirmed|0 |1 Target Milestone|--- |11.3 --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Tamar Christina from comment #1) > An additional ICE seen on a month old tree is > unsure if this was fixed or just hidden... It is extra checking (that is --enable-checking vs --enable-checking=release): 504 gcc_checking_assert (is_constant ()); #7 0x000000000189d858 in nunits_for_known_piecewise_op (type=0xfffff5bc91b0) at /home/ubuntu/src/upstream-gcc-aarch64/gcc/gcc/tree-vect-generic.c:101 101 return TYPE_VECTOR_SUBPARTS (type).to_constant (); (gdb) p type $1 = (const_tree) 0xfffff5bc91b0 (gdb) p debug_generic_expr(type) vector([2,2]) float #10 0x00000000018a97a8 in expand_vector_operations_1 (gsi=0xfffffffff570, dce_ssa_names=0xfffffffff588) at /home/ubuntu/src/upstream-gcc-aarch64/gcc/gcc/tree-vect-generic.c:2331 (gdb) p code $9 = MULT_EXPR (gdb) p type $10 = (tree) 0xfffff5bc91b0 (gdb) p debug_generic_expr(type) vector([2,2]) float //E_VNx2SFmode (gdb) p op $12 = smul_optab (gdb) p debug_generic_expr(compute_type) float (gdb) p debug_generic_expr(get_compute_type(code, op, type)) float (gdb) p optab_handler(op, E_VNx2SFmode) $23 = CODE_FOR_nothing (gdb) p op $24 = smul_optab I don't know enough of the SVE backend to understand VNx2SF vs VNx4SF really and why the vectorizer is chosing VNx2SF mode here which does not support half of the instructions (according to the backend).