From 7ed67b7abae8aaed529137bad7a3c5ec3200160c Mon Sep 17 00:00:00 2001 From: Richard Sandiford <rsandifo@nildram.co.uk> Date: Sun, 16 Sep 2007 09:45:36 +0000 Subject: [PATCH] mips.md (SHORT): Fix long line. gcc/ * config/mips/mips.md (SHORT): Fix long line. (SUBDI): New mode iterator. Extend the shift-and-truncate insns to QImode and HImoe. gcc/testsuite/ * gcc.target/mips/truncate-1.c: New test. From-SVN: r128525 --- gcc/ChangeLog | 6 ++++++ gcc/config/mips/mips.md | 20 ++++++++++++-------- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.target/mips/truncate-1.c | 20 ++++++++++++++++++++ 4 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.target/mips/truncate-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e2504810066c..ff7bed5b7914 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-09-16 Richard Sandiford <rsandifo@nildram.co.uk> + + * config/mips/mips.md (SHORT): Fix long line. + (SUBDI): New mode iterator. Extend the shift-and-truncate insns + to QImode and HImoe. + 2007-09-16 Richard Sandiford <rsandifo@nildram.co.uk> * config/mips/mips.h (POINTERS_EXTEND_UNSIGNED): Define. diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index 842fa082b34d..32a401c695f5 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -481,10 +481,13 @@ ;; conditional-move-type condition is needed. (define_mode_iterator MOVECC [SI (DI "TARGET_64BIT") (CC "TARGET_HARD_FLOAT")]) -;; This mode iterator allows the QI and HI extension patterns to be defined from -;; the same template. +;; This mode iterator allows the QI and HI extension patterns to be +;; defined from the same template. (define_mode_iterator SHORT [QI HI]) +;; Likewise the 64-bit truncate-and-shift patterns. +(define_mode_iterator SUBDI [QI HI SI]) + ;; This mode iterator allows :ANYF to be used wherever a scalar or vector ;; floating-point mode is allowed. (define_mode_iterator ANYF [(SF "TARGET_HARD_FLOAT") @@ -2314,19 +2317,20 @@ ;; Combiner patterns to optimize shift/truncate combinations. (define_insn "" - [(set (match_operand:SI 0 "register_operand" "=d") - (truncate:SI + [(set (match_operand:SUBDI 0 "register_operand" "=d") + (truncate:SUBDI (ashiftrt:DI (match_operand:DI 1 "register_operand" "d") - (match_operand:DI 2 "const_arith_operand" ""))))] + (match_operand:DI 2 "const_arith_operand" ""))))] "TARGET_64BIT && !TARGET_MIPS16 && INTVAL (operands[2]) >= 32" "dsra\t%0,%1,%2" [(set_attr "type" "shift") (set_attr "mode" "SI")]) (define_insn "" - [(set (match_operand:SI 0 "register_operand" "=d") - (truncate:SI (lshiftrt:DI (match_operand:DI 1 "register_operand" "d") - (const_int 32))))] + [(set (match_operand:SUBDI 0 "register_operand" "=d") + (truncate:SUBDI + (lshiftrt:DI (match_operand:DI 1 "register_operand" "d") + (const_int 32))))] "TARGET_64BIT && !TARGET_MIPS16" "dsra\t%0,%1,32" [(set_attr "type" "shift") diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 496c309ec4ae..0721c01858e6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2007-09-16 Richard Sandiford <rsandifo@nildram.co.uk> + + * gcc.target/mips/truncate-1.c: New test. + 2007-09-16 Paul Thomas <pault@gcc.gnu.org> PR fortran/29396 diff --git a/gcc/testsuite/gcc.target/mips/truncate-1.c b/gcc/testsuite/gcc.target/mips/truncate-1.c new file mode 100644 index 000000000000..0607a700482f --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/truncate-1.c @@ -0,0 +1,20 @@ +/* { dg-mips-options "-O -mgp64" } */ + +#define TEST(ID, TYPE, SHIFT) \ + int __attribute__((nomips16)) \ + f##ID (unsigned long long y) \ + { \ + return (TYPE) ((TYPE) (y >> SHIFT) + 1); \ + } + +TEST (1, int, 32) +TEST (2, short, 32) +TEST (3, char, 32) +TEST (4, int, 33) +TEST (5, short, 33) +TEST (6, char, 33) +TEST (7, int, 61) +TEST (8, short, 61) +TEST (9, char, 61) + +/* { dg-final { scan-assembler-not "\tsll\t\[^\n\]*,0" } } */ -- GitLab