On January 3, 2018 9:46:14 PM GMT+01:00, Jakub Jelinek <ja...@redhat.com> wrote: >Hi! > >The ICE here is when calling multiple_p with GET_MODE_BITSIZE >(BLKmode), >so SIGFPE because it is 0. BLKmode can leak into the debug stmts >through >generic vectors without HW support, but doing say (plus:BLK ...) etc. >just doesn't look like a valid RTL, so instead of just not trying to >subreg >it and not call multiple_p, this patch punts when unary/binary/ternary >ops have BLKmode. > >Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
OK. Richard. >2018-01-03 Jakub Jelinek <ja...@redhat.com> > > PR debug/83621 > * cfgexpand.c (expand_debug_expr): Return NULL if mode is > BLKmode for ternary, binary or unary expressions. > > * gcc.dg/pr83621.c: New test. > >--- gcc/cfgexpand.c.jj 2018-01-03 10:19:54.000000000 +0100 >+++ gcc/cfgexpand.c 2018-01-03 16:56:28.375179714 +0100 >@@ -4208,6 +4208,8 @@ expand_debug_expr (tree exp) > > binary: > case tcc_binary: >+ if (mode == BLKmode) >+ return NULL_RTX; > op1 = expand_debug_expr (TREE_OPERAND (exp, 1)); > if (!op1) > return NULL_RTX; >@@ -4232,6 +4234,8 @@ expand_debug_expr (tree exp) > > unary: > case tcc_unary: >+ if (mode == BLKmode) >+ return NULL_RTX; > inner_mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))); > op0 = expand_debug_expr (TREE_OPERAND (exp, 0)); > if (!op0) >--- gcc/testsuite/gcc.dg/pr83621.c.jj 2018-01-03 17:01:21.244249712 >+0100 >+++ gcc/testsuite/gcc.dg/pr83621.c 2018-01-03 17:00:56.414243769 +0100 >@@ -0,0 +1,12 @@ >+/* PR debug/83621 */ >+/* { dg-do compile } */ >+/* { dg-options "-O -g" } */ >+ >+typedef int __attribute__ ((__vector_size__ (64))) V; >+V v; >+ >+void >+foo () >+{ >+ V u = v >> 1; >+} > > Jakub