[rs6000] Make load cost a bit more in vectorization cost
authorKewen Lin <linkw@gcc.gnu.org>
Mon, 11 Nov 2019 05:08:20 +0000 (05:08 +0000)
committerKewen Lin <linkw@gcc.gnu.org>
Mon, 11 Nov 2019 05:08:20 +0000 (05:08 +0000)
commit103cba80bd84f0f3c7e644783e1fb7154d07f522
treecbaf9f47ba01498059274f3c5abc89e0e54791c8
parent4b41bff2977ffb88bf447111b7c2463d4122cb96
[rs6000] Make load cost a bit more in vectorization cost

To align with rs6000_insn_cost costing more for load type insns,
this patch is to make load insns cost more in vectorization cost
function.  The latency of load insns is about twice that of
"simple" instructions; 2 vs. 1 on older cores, and 4 (or so) vs.
2 on newer cores.  Considering that the result of load usually
is used somehow later (true-dep) but store won't, we keep the
store as before.

The SPEC2017 performance evaluation on Power8 shows 525.x264_r
+9.56%, 511.povray_r +2.08%, 527.cam4_r 1.16% gains, no
significant degradation, SPECINT geomean +0.88%, SPECFP geomean
+0.26%.

The SPEC2017 performance evaluation on Power9 shows no significant
improvement or degradation, SPECINT geomean +0.04%, SPECFP geomean
+0.04%.

The SPEC2006 performance evaluation on Power8 shows 454.calculix
+4.41% gain but 416.gamess -1.19% and 453.povray -3.83% degradation.
I looked into the two degradation bmks, the degradation were NOT
due to hotspot changes by vectorization, were all side effects.
SPECINT geomean +0.10%, SPECFP geomean no changed considering
the degradation.

gcc/ChangeLog

2019-11-11  Kewen Lin  <linkw@gcc.gnu.org>

    * config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost): Make
    scalar_load, vector_load, unaligned_load and vector_gather_load cost
    more to conform hardware latency and insn cost settings.

From-SVN: r278033
gcc/ChangeLog
gcc/config/rs6000/rs6000.c