[PATCH] D115406: [SystemZ] Improve eliminateFrameIndex() to use STDY/STEY/LDY for VR32/VR64 when possible.

Jonas Paulsson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 8 15:55:39 PST 2021


jonpa created this revision.
jonpa added a reviewer: uweigand.
Herald added subscribers: arphaman, hiraditya.
jonpa requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

When e.g. a VR64 register got spilled to a stack slot requiring a long displacement (20-bit), an LAY was emitted always.

This patch checks if the allocated phys reg is legal with an FP instruction and if so uses it instead of the separate LAY.

These were the general code differences with the patch:

  SPEC17:
  lay            :                64372                58227    -6145
  stdy           :                 1540                 4965    +3425
  std            :                64568                61143    -3425
  ldy            :                 3478                 5821    +2343
  ld             :                87066                84723    -2343
  stey           :                  267                  544     +277
  ste            :                51282                51005     -277
  ley            :                  352                  462     +110
  lde            :                64929                64827     -102
  ...

Most of the improvement happens in cactus. (Cactus only:)

  lay            :                23523                17984    -5539
  stdy           :                  683                 4036    +3353
  std            :                11327                 7974    -3353
  ldy            :                 2463                 4651    +2188
  ld             :                12831                10643    -2188

So far, I have measured (quick) this patch with both fp-contract "off" and "fast". On both z14 and z15 I saw mainly a 2% improvement on cactus, with both "off" and "fast":

Z14 "off"
Improvements:
0.979: f507.cactuBSSN_r 
0.989: f526.blender_r 
0.995: f519.lbm_r

(No regressions)

Z14 "fast"
Improvements:
0.978: f507.cactuBSSN_r

Regressions:
1.007: i500.perlbench_r

Z15 similar, except one regression with "off":
1.048: f538.imagick_r

This regression does not happen with "fast", or with default fp-flags. It disappeared nicely if I disabled LEY instructions - the partial register dependency issue most likely then... (I could be wrong as LAY+LDE -> LEY changes alignments...).

  imagick:
  lay            :                 5768                 5437     -331                    
  ldy            :                  686                  841     +155                    
  ld             :                 3823                 3668     -155 
  stey           :                   36                  138     +102                    
  ste            :                 1770                 1668     -102                    
  stdy           :                  551                  623      +72                    
  std            :                 2791                 2719      -72                    
  ley            :                   19                   25       +6                    
  lde            :                 1221                 1215       -6                    
  stg            :                20220                20216       -4                    
  lg             :                28317                28313       -4

So if removing the LEY:s like

  lde            :                 1215                 1221       +6                    
  ley            :                   25                   19       -6   
  lay            :                 5437                 5443       +6

, the regression disappears. This also happens exactly the same way with "full" runs.

Therefore, I have removed the LEYs from the patch. (I will still remeasure benchmarks one more time with w/out LEY...)


https://reviews.llvm.org/D115406

Files:
  llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp
  llvm/lib/Target/SystemZ/SystemZInstrInfo.h
  llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp
  llvm/test/CodeGen/SystemZ/elim-frame-index-VR.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D115406.392959.patch
Type: text/x-patch
Size: 4453 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211208/1cea80a2/attachment.bin>


More information about the llvm-commits mailing list