[PATCH] D126485: [SystemZ] Use SystemZVectorConstantInfo for more immediate stores.
Jonas Paulsson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu May 26 09:37:22 PDT 2022
jonpa created this revision.
jonpa added a reviewer: uweigand.
Herald added subscribers: JDevlieghere, hiraditya.
Herald added a project: All.
jonpa requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
This is a follow-up patch that came up when working on the handling of stores of replicated values. This is the case that involves loading any integer constant into a register and immediately storing it. There are some cases where VGBM / VGM can be used for this.
This (at least currently) involves a new SystemZ method "isSupportedByScalarStore()" which is used to find cases where it would be worthwhile to use a vector constant instead. I have tried two variants:
1. Replace all immediate loads that would require one or two scalar instructions.
2. Only replace cases where two scalar instructions would be needed (-keep-imm-load passed).
(1) might make sense as there are more vector registers so register pressure might be improved. It seems that one time that gave less spills, and the other time it was more, and only with small differences, so that does not really seem to be a big deal.
(2) Is a bit more of a clear improvement as one immediate load is used instead of two scalar ones always.
main <> patch (1)
vsteg : 6564 9016 +2452
stg : 388272 385858 -2414
vstef : 6615 8761 +2146
st : 130605 128843 -1762
vgmf : 13125 14464 +1339
vgmg : 8152 9472 +1320
llilh : 6956 5825 -1131
llihh : 2549 1692 -857
llihl : 7114 6668 -446
stfh : 17089 16791 -298
vgbm : 11085 11288 +203
oilh : 1539 1351 -188
llihf : 11156 10978 -178
oilf : 8959 8819 -140
iilf : 5084 4965 -119
iihf : 4918 4814 -104
lay : 56028 56126 +98
llilf : 2249 2177 -72
oill : 18106 18045 -61
...
OPCDIFFS: -212
main <> patch with experimental option "-keep-imm-load" passed (2)
stg : 388272 387648 -624
vsteg : 6564 7177 +613
vgmg : 8152 8355 +203
oilh : 1539 1351 -188
llihh : 2549 2367 -182
vgmf : 13125 13304 +179
oilf : 8959 8819 -140
llihl : 7114 7003 -111
llihf : 11156 11065 -91
oill : 18106 18045 -61
lg : 1050050 1050003 -47
vgbm : 11085 11122 +37
lay : 56028 56058 +30
mvc : 59773 59755 -18
lgr : 842765 842758 -7
cgije : 142634 142629 -5
iihf : 4918 4913 -5
je : 337365 337370 +5
ldr : 51266 51270 +4
OPCDIFFS: -408
With the latest build (2) seems better, but again I am not sure how stable that is as it seems to change over time.
The patch is not quite finalized and the next step would be to decide between (1) and (2)...
Nightly performance measurements do not show any changes above 1%. Given these measurements I would take (2) as there are a few 0.25% improvements with that, but I am not sure so small differences are trustworthy...
https://reviews.llvm.org/D126485
Files:
llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp
llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp
llvm/lib/Target/SystemZ/SystemZInstrInfo.h
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D126485.432307.patch
Type: text/x-patch
Size: 6991 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220526/b47a15a4/attachment.bin>
More information about the llvm-commits
mailing list