public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Fix PR81249
@ 2017-06-29 12:53 Richard Biener
  2017-06-30 14:18 ` Christophe Lyon
  0 siblings, 1 reply; 3+ messages in thread
From: Richard Biener @ 2017-06-29 12:53 UTC (permalink / raw)
  To: gcc-patches


Bootstrap and regtest running on x86_64-unknown-linux-gnu.

Richard.

2017-06-29  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/81249
	* tree-vect-loop.c (vect_create_epilog_for_reduction): Convert
	condition reduction result to original scalar type.

	* g++.dg/torture/pr81249.C: New testcase.

Index: gcc/tree-vect-loop.c
===================================================================
--- gcc/tree-vect-loop.c	(revision 249780)
+++ gcc/tree-vect-loop.c	(working copy)
@@ -4833,12 +4858,9 @@ vect_create_epilog_for_reduction (vec<tr
 
       /* Convert the reduced value back to the result type and set as the
 	 result.  */
-      tree data_reduc_cast = build1 (VIEW_CONVERT_EXPR, scalar_type,
-				     data_reduc);
-      epilog_stmt = gimple_build_assign (new_scalar_dest, data_reduc_cast);
-      new_temp = make_ssa_name (new_scalar_dest, epilog_stmt);
-      gimple_assign_set_lhs (epilog_stmt, new_temp);
-      gsi_insert_before (&exit_gsi, epilog_stmt, GSI_SAME_STMT);
+      gimple_seq stmts = NULL;
+      new_temp = gimple_convert (&stmts, scalar_type, data_reduc);
+      gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT);
       scalar_results.safe_push (new_temp);
     }
   else if (STMT_VINFO_VEC_REDUCTION_TYPE (stmt_info) == COND_REDUCTION
@@ -4903,6 +4925,11 @@ vect_create_epilog_for_reduction (vec<tr
 	      val = new_val;
 	    }
 	}
+      /* Convert the reduced value back to the result type and set as the
+	 result.  */
+      gimple_seq stmts = NULL;
+      val = gimple_convert (&stmts, scalar_type, val);
+      gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT);
       scalar_results.safe_push (val);
     }
 

Index: gcc/testsuite/g++.dg/torture/pr81249.C
===================================================================
--- gcc/testsuite/g++.dg/torture/pr81249.C	(nonexistent)
+++ gcc/testsuite/g++.dg/torture/pr81249.C	(working copy)
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-mavx2 -mprefer-avx128" { target x86_64-*-* i?86-*-* } } */
+
+typedef struct rtx_def *rtx;
+union rtunion {
+    rtx rt_rtx;
+};
+struct rtx_def {
+    struct {
+	rtunion fld[0];
+    } u;
+    rtx elem[];
+} a;
+int b, c, d;
+rtx e;
+int main() {
+    for (;;) {
+	d = 0;
+	for (; d < b; d++)
+	  if (a.elem[d])
+	    e = a.elem[d]->u.fld[1].rt_rtx;
+	if (e)
+	  c = 0;
+    }
+}

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Fix PR81249
  2017-06-29 12:53 [PATCH] Fix PR81249 Richard Biener
@ 2017-06-30 14:18 ` Christophe Lyon
  2017-07-03  7:32   ` Richard Biener
  0 siblings, 1 reply; 3+ messages in thread
From: Christophe Lyon @ 2017-06-30 14:18 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches

Hi Richard,


On 29 June 2017 at 14:53, Richard Biener <rguenther@suse.de> wrote:
>
> Bootstrap and regtest running on x86_64-unknown-linux-gnu.
>
> Richard.
>
> 2017-06-29  Richard Biener  <rguenther@suse.de>
>
>         PR tree-optimization/81249
>         * tree-vect-loop.c (vect_create_epilog_for_reduction): Convert
>         condition reduction result to original scalar type.
>
>         * g++.dg/torture/pr81249.C: New testcase.
>

I think this patch (r249831) causes a regression on arm / aarch64:
    gcc.dg/vect/pr65947-10.c (internal compiler error)
    gcc.dg/vect/pr65947-10.c -flto -ffat-lto-objects (internal compiler error)

The regression appears between r249828 and 249831, which seems the
most likely guilty?

The log says:

/testsuite/gcc.dg/vect/pr65947-10.c: In function 'condition_reduction':
/testsuite/gcc.dg/vect/pr65947-10.c:12:1: error: invalid types in nop conversion
float
unsigned int
_47 = (float) _46;
during GIMPLE pass: vect
dump file: pr65947-10.c.159t.vect
/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/testsuite/gcc.dg/vect/pr65947-10.c:12:1:
internal compiler error: verify_gimple failed
0xbb9107 verify_gimple_in_cfg(function*, bool)
        /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/tree-cfg.c:5308
0xa7735c execute_function_todo
        /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/passes.c:1989
0xa770f5 execute_todo
        /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/passes.c:2043
Please submit a full bug report,

Christophe


> Index: gcc/tree-vect-loop.c
> ===================================================================
> --- gcc/tree-vect-loop.c        (revision 249780)
> +++ gcc/tree-vect-loop.c        (working copy)
> @@ -4833,12 +4858,9 @@ vect_create_epilog_for_reduction (vec<tr
>
>        /* Convert the reduced value back to the result type and set as the
>          result.  */
> -      tree data_reduc_cast = build1 (VIEW_CONVERT_EXPR, scalar_type,
> -                                    data_reduc);
> -      epilog_stmt = gimple_build_assign (new_scalar_dest, data_reduc_cast);
> -      new_temp = make_ssa_name (new_scalar_dest, epilog_stmt);
> -      gimple_assign_set_lhs (epilog_stmt, new_temp);
> -      gsi_insert_before (&exit_gsi, epilog_stmt, GSI_SAME_STMT);
> +      gimple_seq stmts = NULL;
> +      new_temp = gimple_convert (&stmts, scalar_type, data_reduc);
> +      gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT);
>        scalar_results.safe_push (new_temp);
>      }
>    else if (STMT_VINFO_VEC_REDUCTION_TYPE (stmt_info) == COND_REDUCTION
> @@ -4903,6 +4925,11 @@ vect_create_epilog_for_reduction (vec<tr
>               val = new_val;
>             }
>         }
> +      /* Convert the reduced value back to the result type and set as the
> +        result.  */
> +      gimple_seq stmts = NULL;
> +      val = gimple_convert (&stmts, scalar_type, val);
> +      gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT);
>        scalar_results.safe_push (val);
>      }
>
>
> Index: gcc/testsuite/g++.dg/torture/pr81249.C
> ===================================================================
> --- gcc/testsuite/g++.dg/torture/pr81249.C      (nonexistent)
> +++ gcc/testsuite/g++.dg/torture/pr81249.C      (working copy)
> @@ -0,0 +1,25 @@
> +/* { dg-do compile } */
> +/* { dg-additional-options "-mavx2 -mprefer-avx128" { target x86_64-*-* i?86-*-* } } */
> +
> +typedef struct rtx_def *rtx;
> +union rtunion {
> +    rtx rt_rtx;
> +};
> +struct rtx_def {
> +    struct {
> +       rtunion fld[0];
> +    } u;
> +    rtx elem[];
> +} a;
> +int b, c, d;
> +rtx e;
> +int main() {
> +    for (;;) {
> +       d = 0;
> +       for (; d < b; d++)
> +         if (a.elem[d])
> +           e = a.elem[d]->u.fld[1].rt_rtx;
> +       if (e)
> +         c = 0;
> +    }
> +}

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Fix PR81249
  2017-06-30 14:18 ` Christophe Lyon
@ 2017-07-03  7:32   ` Richard Biener
  0 siblings, 0 replies; 3+ messages in thread
From: Richard Biener @ 2017-07-03  7:32 UTC (permalink / raw)
  To: Christophe Lyon; +Cc: gcc-patches

On Fri, 30 Jun 2017, Christophe Lyon wrote:

> Hi Richard,
> 
> 
> On 29 June 2017 at 14:53, Richard Biener <rguenther@suse.de> wrote:
> >
> > Bootstrap and regtest running on x86_64-unknown-linux-gnu.
> >
> > Richard.
> >
> > 2017-06-29  Richard Biener  <rguenther@suse.de>
> >
> >         PR tree-optimization/81249
> >         * tree-vect-loop.c (vect_create_epilog_for_reduction): Convert
> >         condition reduction result to original scalar type.
> >
> >         * g++.dg/torture/pr81249.C: New testcase.
> >
> 
> I think this patch (r249831) causes a regression on arm / aarch64:
>     gcc.dg/vect/pr65947-10.c (internal compiler error)
>     gcc.dg/vect/pr65947-10.c -flto -ffat-lto-objects (internal compiler error)
> 
> The regression appears between r249828 and 249831, which seems the
> most likely guilty?

Whoops - sorry.  Testing the following.

Richard.

2017-07-03  Richard Biener  <rguenther@suse.de>

	* tree-vect-loop.c (vect_create_epilog_for_reduction): Revert
	back to using VIEW_CONVERT_EXPR.

Index: gcc/tree-vect-loop.c
===================================================================
--- gcc/tree-vect-loop.c	(revision 249897)
+++ gcc/tree-vect-loop.c	(working copy)
@@ -4842,7 +4842,8 @@ vect_create_epilog_for_reduction (vec<tr
       /* Convert the reduced value back to the result type and set as the
 	 result.  */
       gimple_seq stmts = NULL;
-      new_temp = gimple_convert (&stmts, scalar_type, data_reduc);
+      new_temp = gimple_build (&stmts, VIEW_CONVERT_EXPR, scalar_type,
+			       data_reduc);
       gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT);
       scalar_results.safe_push (new_temp);
     }

> The log says:
> 
> /testsuite/gcc.dg/vect/pr65947-10.c: In function 'condition_reduction':
> /testsuite/gcc.dg/vect/pr65947-10.c:12:1: error: invalid types in nop conversion
> float
> unsigned int
> _47 = (float) _46;
> during GIMPLE pass: vect
> dump file: pr65947-10.c.159t.vect
> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/testsuite/gcc.dg/vect/pr65947-10.c:12:1:
> internal compiler error: verify_gimple failed
> 0xbb9107 verify_gimple_in_cfg(function*, bool)
>         /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/tree-cfg.c:5308
> 0xa7735c execute_function_todo
>         /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/passes.c:1989
> 0xa770f5 execute_todo
>         /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/passes.c:2043
> Please submit a full bug report,
> 
> Christophe
> 
> 
> > Index: gcc/tree-vect-loop.c
> > ===================================================================
> > --- gcc/tree-vect-loop.c        (revision 249780)
> > +++ gcc/tree-vect-loop.c        (working copy)
> > @@ -4833,12 +4858,9 @@ vect_create_epilog_for_reduction (vec<tr
> >
> >        /* Convert the reduced value back to the result type and set as the
> >          result.  */
> > -      tree data_reduc_cast = build1 (VIEW_CONVERT_EXPR, scalar_type,
> > -                                    data_reduc);
> > -      epilog_stmt = gimple_build_assign (new_scalar_dest, data_reduc_cast);
> > -      new_temp = make_ssa_name (new_scalar_dest, epilog_stmt);
> > -      gimple_assign_set_lhs (epilog_stmt, new_temp);
> > -      gsi_insert_before (&exit_gsi, epilog_stmt, GSI_SAME_STMT);
> > +      gimple_seq stmts = NULL;
> > +      new_temp = gimple_convert (&stmts, scalar_type, data_reduc);
> > +      gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT);
> >        scalar_results.safe_push (new_temp);
> >      }
> >    else if (STMT_VINFO_VEC_REDUCTION_TYPE (stmt_info) == COND_REDUCTION
> > @@ -4903,6 +4925,11 @@ vect_create_epilog_for_reduction (vec<tr
> >               val = new_val;
> >             }
> >         }
> > +      /* Convert the reduced value back to the result type and set as the
> > +        result.  */
> > +      gimple_seq stmts = NULL;
> > +      val = gimple_convert (&stmts, scalar_type, val);
> > +      gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT);
> >        scalar_results.safe_push (val);
> >      }
> >
> >
> > Index: gcc/testsuite/g++.dg/torture/pr81249.C
> > ===================================================================
> > --- gcc/testsuite/g++.dg/torture/pr81249.C      (nonexistent)
> > +++ gcc/testsuite/g++.dg/torture/pr81249.C      (working copy)
> > @@ -0,0 +1,25 @@
> > +/* { dg-do compile } */
> > +/* { dg-additional-options "-mavx2 -mprefer-avx128" { target x86_64-*-* i?86-*-* } } */
> > +
> > +typedef struct rtx_def *rtx;
> > +union rtunion {
> > +    rtx rt_rtx;
> > +};
> > +struct rtx_def {
> > +    struct {
> > +       rtunion fld[0];
> > +    } u;
> > +    rtx elem[];
> > +} a;
> > +int b, c, d;
> > +rtx e;
> > +int main() {
> > +    for (;;) {
> > +       d = 0;
> > +       for (; d < b; d++)
> > +         if (a.elem[d])
> > +           e = a.elem[d]->u.fld[1].rt_rtx;
> > +       if (e)
> > +         c = 0;
> > +    }
> > +}
> 
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-07-03  7:32 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-29 12:53 [PATCH] Fix PR81249 Richard Biener
2017-06-30 14:18 ` Christophe Lyon
2017-07-03  7:32   ` Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).