This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Yet another expand_debug_expr BLKmode fix (PR debug/83666)
- From: Richard Biener <rguenther at suse dot de>
- To: Jakub Jelinek <jakub at redhat dot com>,Jeff Law <law at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Thu, 04 Jan 2018 11:47:58 +0100
- Subject: Re: [PATCH] Yet another expand_debug_expr BLKmode fix (PR debug/83666)
- Authentication-results: sourceware.org; auth=none
- References: <20180104083633.GR1833@tucnak>
On January 4, 2018 9:36:33 AM GMT+01:00, Jakub Jelinek <jakub@redhat.com> wrote:
>Hi!
>
>Another spot where we need to punt on BLKmode, otherwise we try to
>create
>a subreg with BLKmode, or ZERO/SIGN_EXTEND with BLKmode.
>
>Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
OK.
Richard.
>Eventually, we should try to handle both hw and generic vectors in the
>debug
>info better, but we'd need to discuss that with the GDB folks. E.g.
>we could lower debuginfo for the generic vectors during the vector
>lowering
>pass into DEBUG_EXPRs representing individual elements kind like how
>SRA
>splits arrays.
>
>2018-01-04 Jakub Jelinek <jakub@redhat.com>
>
> PR debug/83666
> * cfgexpand.c (expand_dbeug_expr) <case BIT_FIELD_REF>: Punt if mode
> is BLKmode and bitpos not zero or mode change is needed.
>
> * gcc.dg/pr83666.c: New test.
>
>--- gcc/cfgexpand.c.jj 2018-01-03 16:56:28.375179714 +0100
>+++ gcc/cfgexpand.c 2018-01-03 19:45:43.807687499 +0100
>@@ -4560,7 +4560,7 @@ expand_debug_expr (tree exp)
> if (maybe_lt (bitpos, 0))
> return NULL;
>
>- if (GET_MODE (op0) == BLKmode)
>+ if (GET_MODE (op0) == BLKmode || mode == BLKmode)
> return NULL;
>
> poly_int64 bytepos;
>--- gcc/testsuite/gcc.dg/pr83666.c.jj 2018-01-03 19:47:46.370733409
>+0100
>+++ gcc/testsuite/gcc.dg/pr83666.c 2018-01-03 19:47:26.106725818 +0100
>@@ -0,0 +1,28 @@
>+/* PR debug/83666 */
>+/* { dg-do compile } */
>+/* { dg-options "-O2 -g --param=sccvn-max-scc-size=10 -Wno-psabi" } */
>+
>+typedef int __attribute__ ((vector_size (64))) V;
>+
>+int c, d;
>+short e;
>+V g;
>+
>+V
>+bar (void)
>+{
>+ g[1] = d;
>+ do
>+ {
>+ e += c;
>+ g = g > 0;
>+ }
>+ while (g[1]);
>+ return g;
>+}
>+
>+void
>+foo (void)
>+{
>+ int x = bar ()[3];
>+}
>
> Jakub