]> git.ipfire.org Git - thirdparty/gcc.git/commit
vect: Enhance cost evaluation in vect_transform_slp_perm_load_1
authorKewen Lin <linkw@linux.ibm.com>
Wed, 24 May 2023 05:05:01 +0000 (00:05 -0500)
committerKewen Lin <linkw@linux.ibm.com>
Wed, 24 May 2023 05:05:01 +0000 (00:05 -0500)
commite55c134ebeef2fa23ad5f4d8afa36b5949b2852c
treed76abadd94081f90e744dfb55a4128c96ade009c
parente0600a02fc3eda109d12bdfccf1408c5bf2994db
vect: Enhance cost evaluation in vect_transform_slp_perm_load_1

Following Richi's suggestion in [1], I'm working on deferring
cost evaluation next to the transformation, this patch is
to enhance function vect_transform_slp_perm_load_1 which
could under-cost for vector permutation, since the costing
doesn't try to consider nvectors_per_build, it's inconsistent
with the transformation part.

Basically it changes the below

  if (index == count)
    {
       if (!noop_p)
         {
           // A ...
           // ++*n_perms;

           if (!analyze_only)
             {
                // B1 ...
                // B2 ...
                for ...
                   // B3 building VEC_PERM_EXPR
             }
         }
       else if (!analyze_only)
         {
            // no B2 since no any further uses here.
            for ...
              // B4 building nothing
         }
        // B5 ...
    }

to:

  if (index == count)
    {
       if (!noop_p)
         {
           // A ...

           if (!analyze_only)
             // B1 ...

           // B2 ... (trivial computations during analyze_only or not)

           for ...
             {
                // now n_perms is consistent with building VEC_PERM_EXPR
                // ++*n_perms;
                if (analyze_only)
                   continue;
                // B3 building VEC_PERM_EXPR
             }
         }
       else if (!analyze_only)
         {
            // no B2 since no any further uses here.
            for ...
              // B4 building nothing
         }
        // B5 ...
    }

[1] https://gcc.gnu.org/pipermail/gcc-patches/2021-January/563624.html

gcc/ChangeLog:

* tree-vect-slp.cc (vect_transform_slp_perm_load_1): Adjust the
calculation on n_perms by considering nvectors_per_build.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/costmodel/ppc/costmodel-slp-perm.c: New test.
gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-perm.c [new file with mode: 0644]
gcc/tree-vect-slp.cc