From 6f6e8901fbd26fe685ee5493c9a2d666596bdea6 Mon Sep 17 00:00:00 2001
From: Alan Modra <amodra@bigpond.net.au>
Date: Wed, 30 Mar 2005 03:51:12 +0000
Subject: [PATCH] re PR target/20203 (unrecognizable insn when using long long
 and memset)

	PR target/20203
	* builtins.c (get_memory_rtx): Expand address exp using EXPAND_NORMAL.
	Remove convert_memory_address call duplicating that in memory_address.

From-SVN: r97233
---
 gcc/ChangeLog                                 |  6 ++++++
 gcc/builtins.c                                |  8 ++------
 gcc/testsuite/ChangeLog                       |  4 ++++
 gcc/testsuite/gcc.c-torture/compile/pr20203.c | 16 ++++++++++++++++
 4 files changed, 28 insertions(+), 6 deletions(-)
 create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr20203.c

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fbd8351723a4..ad34f0ea119b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-03-30  Alan Modra  <amodra@bigpond.net.au>
+
+	PR target/20203
+	* builtins.c (get_memory_rtx): Expand address exp using EXPAND_NORMAL.
+	Remove convert_memory_address call duplicating that in memory_address.
+
 2005-03-29  Richard Henderson  <rth@redhat.com>
 
 	PR c/20519
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 23bb4298884a..68b91c56772b 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -979,12 +979,8 @@ expand_builtin_prefetch (tree arglist)
 static rtx
 get_memory_rtx (tree exp)
 {
-  rtx addr = expand_expr (exp, NULL_RTX, ptr_mode, EXPAND_SUM);
-  rtx mem;
-
-  addr = convert_memory_address (Pmode, addr);
-
-  mem = gen_rtx_MEM (BLKmode, memory_address (BLKmode, addr));
+  rtx addr = expand_expr (exp, NULL_RTX, ptr_mode, EXPAND_NORMAL);
+  rtx mem = gen_rtx_MEM (BLKmode, memory_address (BLKmode, addr));
 
   /* Get an expression we can use to find the attributes to assign to MEM.
      If it is an ADDR_EXPR, use the operand.  Otherwise, dereference it if
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7c7534420d7e..991873cb8abc 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2005-03-30  Alan Modra  <amodra@bigpond.net.au>
+
+	* gcc.c-torture/compile/pr20203.c: New test.
+
 2005-03-26  Steven G. Kargl  <kargls@comcast.net>
 
 	* gfortran.dg/promotion.f90:  New test.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr20203.c b/gcc/testsuite/gcc.c-torture/compile/pr20203.c
new file mode 100644
index 000000000000..1fb2a045d55a
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr20203.c
@@ -0,0 +1,16 @@
+void *memset (void *, int, unsigned long);
+
+typedef struct bfd_section
+{
+  unsigned long size;
+  unsigned char *contents;
+} asection;
+
+int
+_bfd_mips_elf_finish_dynamic_sections (asection *s)
+{
+  long long dummy_offset;
+  dummy_offset = s->size - 16;
+  memset (s->contents + dummy_offset, 0, 16);
+  return 1;
+}
-- 
GitLab