diff options
author | Sandra Loosemore <sandra@codesourcery.com> | 2007-07-16 14:12:01 -0400 |
---|---|---|
committer | Sandra Loosemore <sandra@gcc.gnu.org> | 2007-07-16 14:12:01 -0400 |
commit | d56b9f12225da2bdee2c3b2b5da3a1482784ce36 (patch) | |
tree | cf3417c7321ebd6b0afef62d1f1999bb37cb5aff /gcc | |
parent | 0015c873f4b96d1c12632dd509da8472c8001a23 (diff) | |
download | gcc-d56b9f12225da2bdee2c3b2b5da3a1482784ce36.zip gcc-d56b9f12225da2bdee2c3b2b5da3a1482784ce36.tar.gz gcc-d56b9f12225da2bdee2c3b2b5da3a1482784ce36.tar.bz2 |
mips.h (TUNE_24K): Define.
2007-07-16 Sandra Loosemore <sandra@codesourcery.com>
David Ung <davidu@mips.com>
gcc/
* config/mips/mips.h (TUNE_24K): Define.
(TUNE_MACC_CHAINS): Add TUNE_24K.
* config/mips/mips.md: (*mul_acc_si, *mul_sub_si): Change type to
imadd.
* config/mips/74k.md (r74k_int_mult): Split madd/msub to ..
(r74k_int_madd): .. this new reservation.
(define_bypass): Fixed bypasses for r74k_int_madd to use
mips_linked_madd_p.
* config/mips/24k.md (define_bypass): Define new
r24k_int_mul3->r24k_int_madd bypass using mips_linked_madd_p.
gcc/testsuite/
* gcc.target/mips/mips-sched-madd.c: New test case.
Co-Authored-By: David Ung <davidu@mips.com>
From-SVN: r126688
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/config/mips/24k.md | 3 | ||||
-rw-r--r-- | gcc/config/mips/74k.md | 20 | ||||
-rw-r--r-- | gcc/config/mips/mips.h | 6 | ||||
-rw-r--r-- | gcc/config/mips/mips.md | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/mips/mips-sched-madd.c | 19 |
7 files changed, 63 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 31ae6a1..2d99d1f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,18 @@ 2007-07-16 Sandra Loosemore <sandra@codesourcery.com> + David Ung <davidu@mips.com> + + * config/mips/mips.h (TUNE_24K): Define. + (TUNE_MACC_CHAINS): Add TUNE_24K. + * config/mips/mips.md: (*mul_acc_si, *mul_sub_si): Change type to + imadd. + * config/mips/74k.md (r74k_int_mult): Split madd/msub to .. + (r74k_int_madd): .. this new reservation. + (define_bypass): Fixed bypasses for r74k_int_madd to use + mips_linked_madd_p. + * config/mips/24k.md (define_bypass): Define new + r24k_int_mul3->r24k_int_madd bypass using mips_linked_madd_p. + +2007-07-16 Sandra Loosemore <sandra@codesourcery.com> Nigel Stephens <nigel@mips.com> * config/mips/mips.md: Include 20kc.md. diff --git a/gcc/config/mips/24k.md b/gcc/config/mips/24k.md index 7de816f..10fd79c 100644 --- a/gcc/config/mips/24k.md +++ b/gcc/config/mips/24k.md @@ -188,6 +188,9 @@ (define_bypass 6 "r24k_int_mul3" "r24k_int_store" "!store_data_bypass_p") (define_bypass 6 "r24k_int_mul3" "r24k_int_prefetch") +;; mul3->madd/msub : 1 cycle +(define_bypass 1 "r24k_int_mul3" "r24k_int_madd" "mips_linked_madd_p") + ;; mfhilo->next use : 5 cycles (default) ;; mfhilo->l/s base : 6 cycles ;; mfhilo->prefetch : 6 cycles diff --git a/gcc/config/mips/74k.md b/gcc/config/mips/74k.md index e4d1e41..23597ca 100644 --- a/gcc/config/mips/74k.md +++ b/gcc/config/mips/74k.md @@ -60,10 +60,16 @@ "r74k_agen*2") ;; MDU: fully pipelined multiplier -;; mult, madd, msub - delivers result to hi/lo in 4 cycle (pipelined) +;; mult - delivers result to hi/lo in 4 cycle (pipelined) (define_insn_reservation "r74k_int_mult" 4 (and (eq_attr "cpu" "74kc,74kf2_1,74kf1_1,74kf3_2") - (eq_attr "type" "imul,imadd")) + (eq_attr "type" "imul")) + "r74k_alu+r74k_mul") + +;; madd, msub - delivers result to hi/lo in 4 cycle (pipelined) +(define_insn_reservation "r74k_int_madd" 4 + (and (eq_attr "cpu" "74kc,74kf2_1,74kf1_1,74kf3_2") + (eq_attr "type" "imadd")) "r74k_alu+r74k_mul") ;; mul - delivers result to general register in 7 cycles @@ -160,9 +166,13 @@ (define_bypass 5 "r74k_int_cmove" "r74k_int_load") (define_bypass 5 "r74k_int_cmove" "r74k_int_store" "!store_data_bypass_p") -;; mult/madd->int_mfhilo : 4 cycles (default) -;; mult/madd->mult/madd : 1 cycles -(define_bypass 1 "r74k_int_mult" "r74k_int_mult") +;; mult/madd/msub->int_mfhilo : 4 cycles (default) +;; mult->madd/msub : 1 cycles +;; madd/msub->madd/msub : 1 cycles +(define_bypass 1 "r74k_int_mult,r74k_int_mul3" "r74k_int_madd" + "mips_linked_madd_p") +(define_bypass 1 "r74k_int_madd" "r74k_int_madd" + "mips_linked_madd_p") ;; -------------------------------------------------------------- ;; Floating Point Instructions diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 0539221..3696ce7 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -250,6 +250,9 @@ extern const struct mips_rtx_cost_data *mips_cost; #define TUNE_MIPS9000 (mips_tune == PROCESSOR_R9000) #define TUNE_SB1 (mips_tune == PROCESSOR_SB1 \ || mips_tune == PROCESSOR_SB1A) +#define TUNE_24K (mips_tune == PROCESSOR_24KC \ + || mips_tune == PROCESSOR_24KF2_1 \ + || mips_tune == PROCESSOR_24KF1_1) #define TUNE_74K (mips_tune == PROCESSOR_74KC \ || mips_tune == PROCESSOR_74KF2_1 \ || mips_tune == PROCESSOR_74KF1_1 \ @@ -289,7 +292,8 @@ extern const struct mips_rtx_cost_data *mips_cost; than others, so this macro is defined on an opt-in basis. */ #define TUNE_MACC_CHAINS (TUNE_MIPS5500 \ || TUNE_MIPS4120 \ - || TUNE_MIPS4130) + || TUNE_MIPS4130 \ + || TUNE_24K) #define TARGET_OLDABI (mips_abi == ABI_32 || mips_abi == ABI_O64) #define TARGET_NEWABI (mips_abi == ABI_N32 || mips_abi == ABI_64) diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index 5d67908..84347d7 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -1228,7 +1228,7 @@ return "#"; return madd[which_alternative]; } - [(set_attr "type" "imadd,imadd,multi") + [(set_attr "type" "imadd") (set_attr "mode" "SI") (set_attr "length" "4,4,8")]) @@ -1483,7 +1483,7 @@ msub\t%2,%3 # #" - [(set_attr "type" "imadd,multi,multi") + [(set_attr "type" "imadd") (set_attr "mode" "SI") (set_attr "length" "4,8,8")]) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ae67bd0..70a9296 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-07-16 Sandra Loosemore <sandra@codesourcery.com> + David Ung <davidu@mips.com> + + * gcc.target/mips/mips-sched-madd.c: New test case. + 2007-07-15 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/32611 diff --git a/gcc/testsuite/gcc.target/mips/mips-sched-madd.c b/gcc/testsuite/gcc.target/mips/mips-sched-madd.c new file mode 100644 index 0000000..40e1fc2 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/mips-sched-madd.c @@ -0,0 +1,19 @@ +/* Test for case where another independent multiply insn may interfere + with a macc chain. */ +/* { dg-do compile } */ +/* { dg-mips-options "-Os -march=24kf -mno-mips16" } */ + +int foo (int a, int b, int c, int d, int e, int f, int g) +{ + int temp; + int acc; + + acc = a * b; + temp = a * c; + acc = d * e + acc; + acc = f * g + acc; + return acc > temp ? acc : temp; +} + +/* { dg-final { scan-assembler "\tmult\t" } } */ +/* { dg-final { scan-assembler "\tmadd\t" } } */ |