]> git.ipfire.org Git - thirdparty/gcc.git/commit
rs6000: using pli for constant splitting
authorJiufu Guo <guojiufu@linux.ibm.com>
Wed, 13 Dec 2023 00:10:25 +0000 (08:10 +0800)
committerguojiufu <guojiufu@linux.ibm.com>
Wed, 13 Dec 2023 00:53:18 +0000 (08:53 +0800)
commita9046f1979f05c1fd4e69a3bbf5a8629e2573fd3
treeaa36ceba43e86b265bd91ee23f3a1bd55f6464cb
parent97b3b38e5faec2b5486368f5a0ffb16eb4ab4190
rs6000: using pli for constant splitting

For constant building e.g. r120=0x66666666, which does not fit 'li or lis',
'pli' is used to build this constant via 'emit_move_insn'.

While for a complicated constant, e.g. 0x6666666666666666ULL, when using
'rs6000_emit_set_long_const' to split the constant recursively, it fails to
use 'pli' to build the half part constant: 0x66666666.

'rs6000_emit_set_long_const' could be updated to use 'pli' to build half
part of the constant when necessary.  For example: 0x6666666666666666ULL,
"pli 3,1717986918; rldimi 3,3,32,0" can be used.

gcc/ChangeLog:

* config/rs6000/rs6000.cc (rs6000_emit_set_long_const): Add code to use
pli for 34bit constant.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/const-build-1.c: New test.
gcc/config/rs6000/rs6000.cc
gcc/testsuite/gcc.target/powerpc/const-build-1.c [new file with mode: 0644]