* [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).