public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-6476] rs6000: using pli for constant splitting
@ 2023-12-13 0:54 Jiu Fu Guo
0 siblings, 0 replies; only message in thread
From: Jiu Fu Guo @ 2023-12-13 0:54 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:a9046f1979f05c1fd4e69a3bbf5a8629e2573fd3
commit r14-6476-ga9046f1979f05c1fd4e69a3bbf5a8629e2573fd3
Author: Jiufu Guo <guojiufu@linux.ibm.com>
Date: Wed Dec 13 08:10:25 2023 +0800
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.
Diff:
---
gcc/config/rs6000/rs6000.cc | 7 +++++++
gcc/testsuite/gcc.target/powerpc/const-build-1.c | 9 +++++++++
2 files changed, 16 insertions(+)
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 5cb94f6c0d6..09a5d29ec8c 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -10521,6 +10521,13 @@ rs6000_emit_set_long_const (rtx dest, HOST_WIDE_INT c, int *num_insns)
emit_insn (dest_or_insn);
};
+ if (TARGET_PREFIXED && SIGNED_INTEGER_34BIT_P (c))
+ {
+ /* li/lis/pli */
+ count_or_emit_insn (dest, GEN_INT (c));
+ return;
+ }
+
if ((ud4 == 0xffff && ud3 == 0xffff && ud2 == 0xffff && (ud1 & 0x8000))
|| (ud4 == 0 && ud3 == 0 && ud2 == 0 && !(ud1 & 0x8000)))
{
diff --git a/gcc/testsuite/gcc.target/powerpc/const-build-1.c b/gcc/testsuite/gcc.target/powerpc/const-build-1.c
new file mode 100644
index 00000000000..7e35f8c507f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/const-build-1.c
@@ -0,0 +1,9 @@
+/* { dg-do compile { target lp64 } } */
+/* { dg-options "-O2 -mdejagnu-cpu=power10" } */
+/* { dg-require-effective-target power10_ok } */
+
+unsigned long long msk66() { return 0x6666666666666666ULL; }
+
+/* { dg-final { scan-assembler-times {\mpli\M} 1 } } */
+/* { dg-final { scan-assembler-not {\mli\M} } } */
+/* { dg-final { scan-assembler-not {\mlis\M} } } */
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-12-13 0:54 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-13 0:54 [gcc r14-6476] rs6000: using pli for constant splitting Jiu Fu Guo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).