public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Fix PR69053
@ 2016-01-12 11:39 Richard Biener
  0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2016-01-12 11:39 UTC (permalink / raw)
  To: gcc-patches


Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2016-01-12  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/69053
	* tree-vect-loop.c (get_initial_def_for_reduction): Properly
	convert initial value for cond reductions.

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

Index: gcc/tree-vect-loop.c
===================================================================
*** gcc/tree-vect-loop.c	(revision 232261)
--- gcc/tree-vect-loop.c	(working copy)
*************** get_initial_def_for_reduction (gimple *s
*** 4075,4084 ****
    tree *elts;
    int i;
    bool nested_in_vect_loop = false;
-   tree init_value;
    REAL_VALUE_TYPE real_init_val = dconst0;
    int int_init_val = 0;
    gimple *def_stmt = NULL;
  
    gcc_assert (vectype);
    nunits = TYPE_VECTOR_SUBPARTS (vectype);
--- 4075,4084 ----
    tree *elts;
    int i;
    bool nested_in_vect_loop = false;
    REAL_VALUE_TYPE real_init_val = dconst0;
    int int_init_val = 0;
    gimple *def_stmt = NULL;
+   gimple_seq stmts = NULL;
  
    gcc_assert (vectype);
    nunits = TYPE_VECTOR_SUBPARTS (vectype);
*************** get_initial_def_for_reduction (gimple *s
*** 4107,4122 ****
        return vect_create_destination_var (init_val, vectype);
      }
  
-   if (TREE_CONSTANT (init_val))
-     {
-       if (SCALAR_FLOAT_TYPE_P (scalar_type))
-         init_value = build_real (scalar_type, TREE_REAL_CST (init_val));
-       else
-         init_value = build_int_cst (scalar_type, TREE_INT_CST_LOW (init_val));
-     }
-   else
-     init_value = init_val;
- 
    switch (code)
      {
        case WIDEN_SUM_EXPR:
--- 4107,4112 ----
*************** get_initial_def_for_reduction (gimple *s
*** 4193,4199 ****
  		break;
  	      }
  	  }
! 	init_def = build_vector_from_val (vectype, init_value);
  	break;
  
        default:
--- 4183,4192 ----
  		break;
  	      }
  	  }
! 	init_val = gimple_convert (&stmts, TREE_TYPE (vectype), init_val);
! 	if (! gimple_seq_empty_p (stmts))
! 	  gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts);
! 	init_def = build_vector_from_val (vectype, init_val);
  	break;
  
        default:
Index: gcc/testsuite/g++.dg/torture/pr69053.C
===================================================================
*** gcc/testsuite/g++.dg/torture/pr69053.C	(revision 0)
--- gcc/testsuite/g++.dg/torture/pr69053.C	(working copy)
***************
*** 0 ****
--- 1,17 ----
+ // { dg-do compile }
+ // { dg-additional-options "-march=core-avx2" { target x86_64-*-* i?86-*-* } }
+ struct A {
+     int *elem[1];
+ };
+ int a, d, e;
+ A *b;
+ int *c;
+ int main()
+ {
+   int *f = 0;
+   for (; e; e++)
+     if (b->elem[e])
+       f = c;
+   if (f)
+     a = d;
+ }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2016-01-12 11:39 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-12 11:39 [PATCH] Fix PR69053 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).