From: rguenth Date: Tue, 10 Nov 2015 09:43:54 +0000 (+0000) Subject: 2015-11-10 Richard Biener X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b873d7f7eba25120074b3d74add21224e860df43;p=thirdparty%2Fgcc.git 2015-11-10 Richard Biener PR tree-optimization/56118 * tree-vect-slp.c (vect_bb_vectorization_profitable_p): Make equal cost favor vectorized version. * gcc.target/i386/pr56118.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230091 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5a7e44cf2920..68163747ca15 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-11-10 Richard Biener + + PR tree-optimization/56118 + * tree-vect-slp.c (vect_bb_vectorization_profitable_p): Make equal + cost favor vectorized version. + 2015-11-10 Kyrylo Tkachov * config/aarch64/aarch64.md (cc): New define_expand. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5c258f4404ef..bbaf9a347c8e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-11-10 Richard Biener + + PR tree-optimization/56118 + * gcc.target/i386/pr56118.c: New testcase. + 2015-11-10 Kyrylo Tkachov * gcc.target/aarch64/cond_op_imm_1.c: New test. diff --git a/gcc/testsuite/gcc.target/i386/pr56118.c b/gcc/testsuite/gcc.target/i386/pr56118.c new file mode 100644 index 000000000000..11a543cafe83 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr56118.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -msse2" } */ + +#include + +__m128d f() +{ + __m128d r={3,4}; + r[0]=1; + r[1]=2; + return r; +} + +/* We want to "vectorize" this to a aligned vector load from the + constant pool. */ + +/* { dg-final { scan-assembler "movapd" } } */ diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index 954b85ef8bce..6dda2ec9eae1 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -2317,9 +2317,12 @@ vect_bb_vectorization_profitable_p (bb_vec_info bb_vinfo) dump_printf (MSG_NOTE, " Scalar cost of basic block: %d\n", scalar_cost); } - /* Vectorization is profitable if its cost is less than the cost of scalar - version. */ - if (vec_outside_cost + vec_inside_cost >= scalar_cost) + /* Vectorization is profitable if its cost is more than the cost of scalar + version. Note that we err on the vector side for equal cost because + the cost estimate is otherwise quite pessimistic (constant uses are + free on the scalar side but cost a load on the vector side for + example). */ + if (vec_outside_cost + vec_inside_cost > scalar_cost) return false; return true;