diff options
author | Jozef Lawrynowicz <jozef.l@mittosystems.com> | 2019-06-06 12:10:19 +0000 |
---|---|---|
committer | Jozef Lawrynowicz <jozefl@gcc.gnu.org> | 2019-06-06 12:10:19 +0000 |
commit | ec573765e58cf9dd90e9daba3269d179582a7d24 (patch) | |
tree | a5dbffc43810cfbaf893c0631c7917581153eaa9 | |
parent | 891f31f9a45dec393e8c1919427a4f136b554863 (diff) | |
download | gcc-ec573765e58cf9dd90e9daba3269d179582a7d24.zip gcc-ec573765e58cf9dd90e9daba3269d179582a7d24.tar.gz gcc-ec573765e58cf9dd90e9daba3269d179582a7d24.tar.bz2 |
MSP430: Use minimal code size library shift functions when optimizing for size
gcc/ChangeLog
2019-06-06 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* config/msp430/msp430.md (ashlhi3): Use the const_variant of shift
library functions only when not optimizing for size.
(ashlsi3): Likewise.
(ashrhi3): Likewise.
(ashrsi3): Likewise.
(lshrhi3): Likewise.
(lshrsi3): Likewise.
gcc/testsuite/ChangeLog
2019-06-06 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* gcc.target/msp430/size-optimized-shifts.c: New test.
From-SVN: r271997
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/msp430/msp430.md | 15 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/msp430/size-optimized-shifts.c | 26 |
4 files changed, 49 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 012af38..41e0c17 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2019-06-06 Jozef Lawrynowicz <jozef.l@mittosystems.com> + + * config/msp430/msp430.md (ashlhi3): Use the const_variant of shift + library functions only when not optimizing for size. + (ashlsi3): Likewise. + (ashrhi3): Likewise. + (ashrsi3): Likewise. + (lshrhi3): Likewise. + (lshrsi3): Likewise. + 2019-06-06 Andreas Krebbel <krebbel@linux.ibm.com> PR rtl-optimization/88751 diff --git a/gcc/config/msp430/msp430.md b/gcc/config/msp430/msp430.md index 58c1f4e..76296a2 100644 --- a/gcc/config/msp430/msp430.md +++ b/gcc/config/msp430/msp430.md @@ -769,7 +769,10 @@ && INTVAL (operands[2]) == 1) emit_insn (gen_slli_1 (operands[0], operands[1])); else - msp430_expand_helper (operands, \"__mspabi_slli\", true); + /* The const variants of mspabi shifts have larger code size than the + generic version, so use the generic version if optimizing for + size. */ + msp430_expand_helper (operands, \"__mspabi_slli\", !optimize_size); DONE; } ) @@ -815,7 +818,7 @@ (ashift:SI (match_operand:SI 1 "general_operand") (match_operand:SI 2 "general_operand")))] "" - "msp430_expand_helper (operands, \"__mspabi_slll\", true); + "msp430_expand_helper (operands, \"__mspabi_slll\", !optimize_size); DONE;" ) @@ -842,7 +845,7 @@ && INTVAL (operands[2]) == 1) emit_insn (gen_srai_1 (operands[0], operands[1])); else - msp430_expand_helper (operands, \"__mspabi_srai\", true); + msp430_expand_helper (operands, \"__mspabi_srai\", !optimize_size); DONE; } ) @@ -904,7 +907,7 @@ (ashiftrt:SI (match_operand:SI 1 "general_operand") (match_operand:SI 2 "general_operand")))] "" - "msp430_expand_helper (operands, \"__mspabi_sral\", true); + "msp430_expand_helper (operands, \"__mspabi_sral\", !optimize_size); DONE;" ) @@ -931,7 +934,7 @@ && INTVAL (operands[2]) == 1) emit_insn (gen_srli_1 (operands[0], operands[1])); else - msp430_expand_helper (operands, \"__mspabi_srli\", true); + msp430_expand_helper (operands, \"__mspabi_srli\", !optimize_size); DONE; } ) @@ -983,7 +986,7 @@ (lshiftrt:SI (match_operand:SI 1 "general_operand") (match_operand:SI 2 "general_operand")))] "" - "msp430_expand_helper (operands, \"__mspabi_srll\", true); + "msp430_expand_helper (operands, \"__mspabi_srll\", !optimize_size); DONE;" ) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c08d228..cf8592a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2019-06-06 Jozef Lawrynowicz <jozef.l@mittosystems.com> + * gcc.target/msp430/size-optimized-shifts.c: New test. + +2019-06-06 Jozef Lawrynowicz <jozef.l@mittosystems.com> + * gcc.target/msp430/emulate-slli.c: New test. * gcc.target/msp430/emulate-srai.c: New test. * gcc.target/msp430/emulate-srli.c: New test. diff --git a/gcc/testsuite/gcc.target/msp430/size-optimized-shifts.c b/gcc/testsuite/gcc.target/msp430/size-optimized-shifts.c new file mode 100644 index 0000000..be9509b --- /dev/null +++ b/gcc/testsuite/gcc.target/msp430/size-optimized-shifts.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-Os" } */ +/* { dg-final { scan-assembler-not "__mspabi_sral_4" } } */ +/* { dg-final { scan-assembler-not "__mspabi_srll_4" } } */ +/* { dg-final { scan-assembler-not "__mspabi_slll_4" } } */ +/* { dg-final { scan-assembler "__mspabi_sral" } } */ +/* { dg-final { scan-assembler "__mspabi_srll" } } */ +/* { dg-final { scan-assembler "__mspabi_slll" } } */ + +/* Ensure that SImode shifts by a constant amount do not use the const_variant + of the shift library code when optimizing for size. */ + +long a; +long b; +long c; +long d; +unsigned long e; +unsigned long f; + +void +foo (void) +{ + a = b >> 4; + c = d << 4; + e = f >> 4; +} |