[llvm] [SLP]Represent externally used values as original scalars, if profitable. (PR #100904)

via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 6 09:34:23 PST 2024


dgg5503 wrote:

Hi @alexey-bataev,

Under the latest commit of LLVM 19.1.3 (`test` column - ab51eccf88f5321e7c60591c5546b254b6afab99), there is an observable ~8% drop in performance on my x86_64 6c/12t Ubuntu machine for the SPEC CPU 2017 tests `CFP2017speed/638.imagick_s/638.imagick_s.test` and `CFP2017rate/538.imagick_r/538.imagick_r.test` compared to LLVM 18.1.8 (`baseline` column - 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff):
```
Tests: 11
Metric: exec_time

Program                                                                   exec_time             
                                                                          baseline  test   diff 
             test-suite :: MultiSource/Applications/JM/ldecod/ldecod.test   0.03      0.03 27.0%
             test-suite :: MultiSource/Applications/JM/lencod/lencod.test   2.82      2.80 -0.9%
                  test-suite :: MultiSource/Benchmarks/Bullet/bullet.test   2.28      2.37  4.1%
test-suite :: MultiSource/Benchmarks/DOE-ProxyApps-C++/miniFE/miniFE.test   2.24      2.29  2.0%
          test-suite :: MultiSource/Benchmarks/FreeBench/pifft/pifft.test   0.05      0.05 -0.4%
                  test-suite :: MultiSource/Benchmarks/nbench/nbench.test   0.88      0.86 -2.7%
            test-suite :: SPEC/CFP2017rate/510.parest_r/510.parest_r.test  26.08     26.73  2.5%
            test-suite :: SPEC/CFP2017rate/511.povray_r/511.povray_r.test   3.09      3.15  1.8%
          test-suite :: SPEC/CFP2017rate/526.blender_r/526.blender_r.test  96.17     96.14 -0.0%
          test-suite :: SPEC/CFP2017rate/538.imagick_r/538.imagick_r.test  20.92     22.76  8.8%
         test-suite :: SPEC/CFP2017speed/638.imagick_s/638.imagick_s.test  20.98     22.75  8.5%
                                                       Geomean difference                   4.3%
       exec_time                      
l/r     baseline       test       diff
count  11.000000  11.000000  11.000000
mean   15.958291  16.356445  0.046005 
std    28.342679  28.424672  0.082604 
min    0.026300   0.033400  -0.026621 
25%    1.561100   1.571350  -0.002055 
50%    2.821600   2.796500   0.019570 
75%    20.950250  22.752750  0.062887 
max    96.165100  96.142500  0.269962 
```

I bisected this performance regression to the introduction of commit 32994cc0d63513f77223c64148faeeb50aebb702, however, from local testing, the regression was later fixed by this pull request.

Would it be possible to please backport this pull request (b10ecfa914dd1bc2013584917d0505ba5f15f75c) and dependent changes to LLVM 19 on the grounds of improved performance? I am requesting your help since I am personally not familiar with the SLP Vectorizer code.

In an attempt to provide motivation, I identified the following series of commits which allow this pull request to be cleanly picked into LLVM 19 at ab51eccf88f5321e7c60591c5546b254b6afab99:

* 5fc9502f19a87f7b1194cf5eadccf5f918bc50ca – NFC
* 1e1c8d16153a8b3f53b6a8797a77112ecc289551
* 197f4a90519df308d9bfddcc931f7683a5ae9cb9
* 6b1d13761ac0c9857763e5f4c0ae554f076dd9b7 – Fixed https://github.com/llvm/llvm-project/issues/101213 which is present in LLVM 19 (see https://godbolt.org/z/4Wc5Yj3eh)
* b5a7d3b6c2169d84f9da749425a38dcef914d1ce
* deb3ecf09fa30391bd22f890d2885c3d4816ca15 – NFC
* 799fd3d87bb15c37027c9c4451ab8c4dac3ca437
* 834ad102c377a4d1cdc6c601d9899b5dc0a1858b – NFC
* daf4a06e5c5531005b275b72681e04bd08e58fe4
* 441f94f4bdf6e2b9747ec12194c595098d9c3a5b
* 97743b8be86ab96afb26ba93e1876406c1f4d541
* 32c69faa6ce58333c26293a7708fa3f71991c55c
* b10ecfa914dd1bc2013584917d0505ba5f15f75c

Using the above set of commits, all LIT tests pass. Here are some results which demonstrate a measurable improvement back to LLVM 18 levels under LLVM 19 for the two `imagick` tests highlighted at least on x86_64:
```
Tests: 11
Metric: exec_time

Program                                                                   exec_time              
                                                                          baseline  test   diff  
             test-suite :: MultiSource/Applications/JM/ldecod/ldecod.test   0.03      0.02 -25.5%
             test-suite :: MultiSource/Applications/JM/lencod/lencod.test   2.82      2.79  -1.1%
                  test-suite :: MultiSource/Benchmarks/Bullet/bullet.test   2.28      2.26  -0.7%
test-suite :: MultiSource/Benchmarks/DOE-ProxyApps-C++/miniFE/miniFE.test   2.24      2.22  -1.0%
          test-suite :: MultiSource/Benchmarks/FreeBench/pifft/pifft.test   0.05      0.05  -1.6%
                  test-suite :: MultiSource/Benchmarks/nbench/nbench.test   0.88      0.85  -3.3%
            test-suite :: SPEC/CFP2017rate/510.parest_r/510.parest_r.test  26.08     26.07  -0.0%
            test-suite :: SPEC/CFP2017rate/511.povray_r/511.povray_r.test   3.09      3.09  -0.2%
          test-suite :: SPEC/CFP2017rate/526.blender_r/526.blender_r.test  96.17     95.06  -1.1%
          test-suite :: SPEC/CFP2017rate/538.imagick_r/538.imagick_r.test  20.92     20.55  -1.8%
         test-suite :: SPEC/CFP2017speed/638.imagick_s/638.imagick_s.test  20.98     20.58  -1.9%
                                                       Geomean difference                   -3.8%
       exec_time                      
l/r     baseline       test       diff
count  11.000000  11.000000  11.000000
mean   15.958291  15.777064 -0.034704 
std    28.342679  28.022843  0.073510 
min    0.026300   0.019600  -0.254753 
25%    1.561100   1.535950  -0.018355 
50%    2.821600   2.790200  -0.011454 
75%    20.950250  20.565700 -0.008460 
max    96.165100  95.063600 -0.000391 
```
* `test` column - LLVM 19.1.3 @ ab51eccf88f5321e7c60591c5546b254b6afab99 + all commits mentioned above
* `baseline` column - LLVM 18.1.8 @ 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff

If any additional information or testing is desired, please let me know. I'd be happy to provide.

Thank you,
Douglas Gliner

https://github.com/llvm/llvm-project/pull/100904


More information about the llvm-commits mailing list