From 3684b02efb8df49a5795034657353d875333c86e Mon Sep 17 00:00:00 2001 From: Oleg Endo Date: Fri, 6 May 2016 09:41:57 +0000 Subject: [PATCH] re PR target/54089 ([SH] Refactor shift patterns) gcc/ PR target/54089 * config/sh/sh.md (*rotcr): Add another variant. gcc/testsuite/ PR target/54089 * gcc.target/sh/pr54089-1.c (test_24): Add new sub-test. From-SVN: r235950 --- gcc/ChangeLog | 5 +++++ gcc/config/sh/sh.md | 16 ++++++++++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/sh/pr54089-1.c | 9 ++++++++- 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3bf441a48f0..951ae2cc5dc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-05-06 Oleg Endo + + PR target/54089 + * config/sh/sh.md (*rotcr): Add another variant. + 2016-05-06 Richard Biener PR middle-end/70931 diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 2a8fbc8df9b..0ab76b562b9 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -3359,6 +3359,22 @@ DONE; }) +(define_insn_and_split "*rotcr" + [(set (match_operand:SI 0 "arith_reg_dest") + (ior:SI (lshiftrt:SI (match_operand:SI 1 "arith_reg_operand") + (const_int 1)) + (const_int -2147483648))) ;; 0xffffffff80000000 + (clobber (reg:SI T_REG))] + "TARGET_SH1" + "#" + "&& can_create_pseudo_p ()" + [(const_int 0)] +{ + emit_insn (gen_sett ()); + emit_insn (gen_rotcr (operands[0], operands[1], get_t_reg_rtx ())); + DONE; +}) + ;; rotcr combine patterns for rotating in the negated T_REG value. (define_insn_and_split "*rotcr_neg_t" [(set (match_operand:SI 0 "arith_reg_dest") diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 13f71217ced..17773ced6cf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-05-06 Oleg Endo + + PR target/54089 + * gcc.target/sh/pr54089-1.c (test_24): Add new sub-test. + 2016-05-06 Richard Biener PR middle-end/70931 diff --git a/gcc/testsuite/gcc.target/sh/pr54089-1.c b/gcc/testsuite/gcc.target/sh/pr54089-1.c index 64f79ebc737..8b6a729f64c 100644 --- a/gcc/testsuite/gcc.target/sh/pr54089-1.c +++ b/gcc/testsuite/gcc.target/sh/pr54089-1.c @@ -1,7 +1,8 @@ /* Check that the rotcr instruction is generated. */ /* { dg-do compile } */ /* { dg-options "-O2" } */ -/* { dg-final { scan-assembler-times "rotcr" 24 } } */ +/* { dg-final { scan-assembler-times "rotcr" 25 } } */ +/* { dg-final { scan-assembler-times "sett" 1 } } */ /* { dg-final { scan-assembler-times "shll\t" 1 } } */ /* { dg-final { scan-assembler-not "and\t#1" } } */ /* { dg-final { scan-assembler-not "cmp/pl" } } */ @@ -173,3 +174,9 @@ test_23 (unsigned int a, int b, int c) bool r = b != c; return ((a >> 31) | (r << 31)); } + +unsigned int +test_24 (unsigned int a) +{ + return (a >> 1) | (1 << 31); +} -- 2.30.2