This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/81673] Harmful SLP vectorization


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81673

Martin Jambor <jamborm at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
   Last reconfirmed|                            |2017-08-02
           Assignee|unassigned at gcc dot gnu.org      |jamborm at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #2 from Martin Jambor <jamborm at gcc dot gnu.org> ---
For the record, our plan is to address this with the following patch
from Richi (after we benchmark it some more and if there are no
issues):

2017-08-01  Richard Biener  <rguenther@suse.de>

        PR tree-optimization/81673
        * config/i386/i386.c (ix86_builtin_vectorization_cost): Increment
        vec_construct cost for non-floats.
---
 gcc/config/i386/i386.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 3caeeb0e377..1f1f4fbef72 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -46542,7 +46542,17 @@ ix86_builtin_vectorization_cost (enum
vect_cost_for_stmt type_of_cost,
         return ix86_cost->vec_stmt_cost;

       case vec_construct:
-       return ix86_cost->vec_stmt_cost * (TYPE_VECTOR_SUBPARTS (vectype) - 1);
+        {
+         int cost
+           = ix86_cost->vec_stmt_cost * (TYPE_VECTOR_SUBPARTS (vectype) -
+                                         1);
+         /* When the elements are integers the first insert isn't a move
+            that can be eliminated via RA but might even go through
+            the stack for the gpr->xmm move.  */
+         if (! FLOAT_TYPE_P (TREE_TYPE (vectype)))
+           cost += 1;
+         return cost;
+       }

       default:
         gcc_unreachable ();

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]