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

Reply via email to