diff options
author | Haochen Gui <guihaoc@gcc.gnu.org> | 2021-06-04 14:38:53 +0800 |
---|---|---|
committer | Haochen Gui <guihaoc@gcc.gnu.org> | 2021-06-04 14:51:49 +0800 |
commit | 9080a3bf23297885fdc47221da37a71d6dec93c5 (patch) | |
tree | 0cf6e9a10fb45cc7b7df4015608a397618199055 /gcc | |
parent | a3f6bd7891495a0ed65f7da7a55d36c730328692 (diff) | |
download | gcc-9080a3bf23297885fdc47221da37a71d6dec93c5.zip gcc-9080a3bf23297885fdc47221da37a71d6dec93c5.tar.gz gcc-9080a3bf23297885fdc47221da37a71d6dec93c5.tar.bz2 |
rs6000: Disable mode promotion for pseudos
rs6000 has instructions that can do almost everything 32 bit
at least as efficiently as corresponding 64 bit things. The
mode promotion can be defered to when a wide mode is necessary.
So it helps a lot not promote mode for pseudos. SPECint test
shows that the overall performance improvement (by geomean) is
more than 2% with this patch.
testsuite/gcc.target/powerpc/not-promote-mode.c illustrates how
the patch eliminates the redundant extensions and do further
optimization by disabling mode promotion for pseduos.
gcc/ChangeLog
* config/rs6000/rs6000.h (PROMOTE_MODE): Remove.
gcc/testsuite/ChangeLog:
* gcc.target/powerpc/not-promote-mode.c: New.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/rs6000/rs6000.h | 11 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/not-promote-mode.c | 13 |
2 files changed, 13 insertions, 11 deletions
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 164d359..a5f7b1d 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -667,17 +667,6 @@ extern unsigned char rs6000_recip_bits[]; /* Target machine storage layout. */ -/* Define this macro if it is advisable to hold scalars in registers - in a wider mode than that declared by the program. In such cases, - the value is constrained to be within the bounds of the declared - type, but kept valid in the wider mode. The signedness of the - extension may differ from that of the type. */ - -#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \ - if (GET_MODE_CLASS (MODE) == MODE_INT \ - && GET_MODE_SIZE (MODE) < (TARGET_32BIT ? 4 : 8)) \ - (MODE) = TARGET_32BIT ? SImode : DImode; - /* Define this if most significant bit is lowest numbered in instructions that operate on numbered bit-fields. */ /* That is true on RS/6000. */ diff --git a/gcc/testsuite/gcc.target/powerpc/not-promote-mode.c b/gcc/testsuite/gcc.target/powerpc/not-promote-mode.c new file mode 100644 index 0000000..29af1f8 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/not-promote-mode.c @@ -0,0 +1,13 @@ +/* { dg-do compile { target { lp64 } } } */ +/* { dg-options "-O2" } */ + +extern void bar (); + +void foo () +{ + int i; + for (i = 0; i < 10000; i++) + bar (); +} + +/* { dg-final { scan-assembler-not {\mrldicl\M} } } */ |