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