https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71240
--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> --- I think the main issue is that init_symbolic_number doesn't constrain 'src's type in any way (but blindly uses TYPE_PRECISION for example). That's not going to work for vector types for example. It should work for pointer types but I don't see us generating pointer typed BIT_IORs (we do BIT_ANDs). The following fixes the ICE (not all missed optimizations). Index: tree-ssa-math-opts.c =================================================================== --- tree-ssa-math-opts.c (revision 236630) +++ tree-ssa-math-opts.c (working copy) @@ -2051,6 +2051,9 @@ init_symbolic_number (struct symbolic_nu { int size; + if (! INTEGRAL_TYPE_P (TREE_TYPE (src))) + return false; + n->base_addr = n->offset = n->alias_set = n->vuse = NULL_TREE; /* Set up the symbolic number N by setting each byte to a value between 1 and