From ec573765e58cf9dd90e9daba3269d179582a7d24 Mon Sep 17 00:00:00 2001 From: Jozef Lawrynowicz Date: Thu, 6 Jun 2019 12:10:19 +0000 Subject: [PATCH] MSP430: Use minimal code size library shift functions when optimizing for size gcc/ChangeLog 2019-06-06 Jozef Lawrynowicz * 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 * gcc.target/msp430/size-optimized-shifts.c: New test. From-SVN: r271997 --- gcc/ChangeLog | 10 +++++++ gcc/config/msp430/msp430.md | 15 ++++++----- gcc/testsuite/ChangeLog | 4 +++ .../gcc.target/msp430/size-optimized-shifts.c | 26 +++++++++++++++++++ 4 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.target/msp430/size-optimized-shifts.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 012af38d631..41e0c17f33c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2019-06-06 Jozef Lawrynowicz + + * 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 PR rtl-optimization/88751 diff --git a/gcc/config/msp430/msp430.md b/gcc/config/msp430/msp430.md index 58c1f4edc9c..76296a2f317 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 c08d228b613..cf8592ae66d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-06-06 Jozef Lawrynowicz + + * gcc.target/msp430/size-optimized-shifts.c: New test. + 2019-06-06 Jozef Lawrynowicz * gcc.target/msp430/emulate-slli.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 00000000000..be9509b86cc --- /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; +} -- 2.30.2