From 46b192aea836eeaaba513d7d3f7ab19a0271565f Mon Sep 17 00:00:00 2001
From: Richard Sandiford <rsandifo@redhat.com>
Date: Sun, 15 Dec 2002 11:34:17 +0000
Subject: [PATCH] * config/mips/mips.md: Disable the movstrsi define_split.

From-SVN: r60156
---
 gcc/ChangeLog                                 |  4 ++++
 gcc/config/mips/mips.md                       |  8 +++++++-
 gcc/testsuite/ChangeLog                       |  4 ++++
 .../gcc.c-torture/execute/20021215-1.c        | 20 +++++++++++++++++++
 4 files changed, 35 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gcc.c-torture/execute/20021215-1.c

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 71233fb10815..f1147fe2129d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2002-12-15  Richard Sandiford  <rsandifo@redhat.com>
+
+	* config/mips/mips.md: Disable the movstrsi define_split.
+
 2002-12-13  John David Anglin  <dave@hiauly1.hia.nrc.ca>
 
 	* pa.c (output_millicode_call): Correct typo.
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index cc6cda53dba0..05fdabe930f0 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -6550,6 +6550,12 @@ move\\t%0,%z4\\n\\
 ;; fill a delay slot.  This also prevents a bug in delayed branches
 ;; from showing up, which reuses one of the registers in our clobbers.
 
+;; ??? Disabled because it doesn't preserve alias information for
+;; operands 0 and 1.  Also, the rtl for the second insn doesn't mention
+;; that it uses the registers clobbered by the first.
+;;
+;; It would probably be better to split the block into individual
+;; instructions so that the scheduler can do more with it.
 (define_split
   [(set (mem:BLK (match_operand:SI 0 "register_operand" ""))
 	(mem:BLK (match_operand:SI 1 "register_operand" "")))
@@ -6561,7 +6567,7 @@ move\\t%0,%z4\\n\\
    (use (match_operand:SI 3 "small_int" ""))
    (use (const_int 0))]
 
-  "reload_completed && !TARGET_DEBUG_D_MODE && INTVAL (operands[2]) > 0"
+  "reload_completed && 0 && INTVAL (operands[2]) > 0"
 
   ;; All but the last move
   [(parallel [(set (mem:BLK (match_dup 0))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7fc603cc3788..e6f322f1bf94 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2002-12-15  Richard Sandiford  <rsandifo@redhat.com>
+
+	* gcc.c-torture/execute/20021215-1.c: New test.
+
 2002-12-12  Devang Patel <dpatel@apple.com>
 	* gcc.dg/darwin-ld-1.c: New test.
 	* gcc.dg/darwin-ld-2.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/execute/20021215-1.c b/gcc/testsuite/gcc.c-torture/execute/20021215-1.c
new file mode 100644
index 000000000000..19f3b2ddb126
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20021215-1.c
@@ -0,0 +1,20 @@
+int __attribute__ ((noinline))
+foo ()
+{
+  const int a[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
+  int i, sum;
+
+  sum = 0;
+  for (i = 0; i < sizeof (a) / sizeof (*a); i++)
+    sum += a[i];
+
+  return sum;
+}
+
+int
+main ()
+{
+  if (foo () != 28)
+    abort ();
+  exit (0);
+}
-- 
GitLab