From: Richard Biener Date: Thu, 23 Feb 2017 11:43:51 +0000 (+0000) Subject: re PR tree-optimization/79683 (SLP vectorizer drops gs: prefix) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=45f7faf0b5bfab05293808a03e76938572475037;p=gcc.git re PR tree-optimization/79683 (SLP vectorizer drops gs: prefix) 2017-02-23 Richard Biener PR tree-optimization/79683 * tree-vect-stmts.c (vect_analyze_stmt): Do not overwrite vector types for data-refs. * gcc.target/i386/pr79683.c: New testcase. From-SVN: r245679 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6c4201162b2..820f673ec32 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-02-23 Richard Biener + + PR tree-optimization/79683 + * tree-vect-stmts.c (vect_analyze_stmt): Do not overwrite + vector types for data-refs. + 2017-02-23 Martin Liska * params.def (PARAM_MIN_NONDEBUG_INSN_UID): Change default to 0. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d900cc3496b..95cc1d5a318 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-02-23 Richard Biener + + PR tree-optimization/79683 + * gcc.target/i386/pr79683.c: New testcase. + 2017-02-22 Jeff Law PR tree-optimization/79578 diff --git a/gcc/testsuite/gcc.target/i386/pr79683.c b/gcc/testsuite/gcc.target/i386/pr79683.c new file mode 100644 index 00000000000..cbd43fd2af0 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr79683.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -msse2" } */ + +struct s { + __INT64_TYPE__ a; + __INT64_TYPE__ b; +}; +void test(struct s __seg_gs *x) { + x->a += 1; + x->b -= 1; +} + +/* We get the function vectorized, verify the load and store are + address-space qualified. */ +/* { dg-final { scan-assembler-times "padd" 1 } } */ +/* { dg-final { scan-assembler-times "%gs" 2 } } */ diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index bf07efda935..59768824c0f 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -8486,37 +8486,42 @@ vect_analyze_stmt (gimple *stmt, bool *need_to_vectorize, slp_tree node) { gcc_assert (PURE_SLP_STMT (stmt_info)); - scalar_type = TREE_TYPE (gimple_get_lhs (stmt)); - if (dump_enabled_p ()) - { - dump_printf_loc (MSG_NOTE, vect_location, - "get vectype for scalar type: "); - dump_generic_expr (MSG_NOTE, TDF_SLIM, scalar_type); - dump_printf (MSG_NOTE, "\n"); - } + /* Memory accesses already got their vector type assigned + in vect_analyze_data_refs. */ + if (! STMT_VINFO_DATA_REF (stmt_info)) + { + scalar_type = TREE_TYPE (gimple_get_lhs (stmt)); + if (dump_enabled_p ()) + { + dump_printf_loc (MSG_NOTE, vect_location, + "get vectype for scalar type: "); + dump_generic_expr (MSG_NOTE, TDF_SLIM, scalar_type); + dump_printf (MSG_NOTE, "\n"); + } - vectype = get_vectype_for_scalar_type (scalar_type); - if (!vectype) - { - if (dump_enabled_p ()) - { - dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, - "not SLPed: unsupported data-type "); - dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM, - scalar_type); - dump_printf (MSG_MISSED_OPTIMIZATION, "\n"); - } - return false; - } + vectype = get_vectype_for_scalar_type (scalar_type); + if (!vectype) + { + if (dump_enabled_p ()) + { + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "not SLPed: unsupported data-type "); + dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM, + scalar_type); + dump_printf (MSG_MISSED_OPTIMIZATION, "\n"); + } + return false; + } - if (dump_enabled_p ()) - { - dump_printf_loc (MSG_NOTE, vect_location, "vectype: "); - dump_generic_expr (MSG_NOTE, TDF_SLIM, vectype); - dump_printf (MSG_NOTE, "\n"); - } + if (dump_enabled_p ()) + { + dump_printf_loc (MSG_NOTE, vect_location, "vectype: "); + dump_generic_expr (MSG_NOTE, TDF_SLIM, vectype); + dump_printf (MSG_NOTE, "\n"); + } - STMT_VINFO_VECTYPE (stmt_info) = vectype; + STMT_VINFO_VECTYPE (stmt_info) = vectype; + } } if (STMT_VINFO_RELEVANT_P (stmt_info))