This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

fix for execute/950511-1 failure on ppc-eabi



This patch:

Sun Sep 10 14:30:28 EDT 2000  John Wehle  (john@feith.com)

	* alias.c (find_base_term): Handle ADDRESSOF.
	(memrefs_conflict_p): An ADDRESSOF doesn't conflict.

broke gcc.c-torture/execute/950511-1.c at -O1 on powerpc, because
after the expression

(set (reg/v:SI 83) (addressof:SI (reg/v:DI 84) 82 0x30037480))

it happens that
(reg/v:SI 83)
and
(addressof:SI (reg/v:DI 84) 82 0x30037480)
do conflict.

Fixed thusly.  I'll commit when the bootstrap/test on powerpc-linux
finishes.

(On the bright side, a BLKmode access at an ADDRESSOF shouldn't go
outside the ADDRESSOF, so we can make things a little more flexible.)

-- 
- Geoffrey Keating <geoffk@cygnus.com>

===File ~/patches/cygnus/rs6000-addressofalias.patch========
Index: ChangeLog
===================================================================
RCS file: /cvs/gcc/egcs/gcc/ChangeLog,v
retrieving revision 1.7688
diff -p -u -u -p -r1.7688 ChangeLog
--- ChangeLog	2000/09/11 06:03:01	1.7688
+++ ChangeLog	2000/09/11 06:40:35
@@ -1,5 +1,7 @@
 2000-09-10  Geoff Keating  <geoffk@cygnus.com>
 
+	* alias.c (memrefs_conflict_p): An ADDRESSOF does conflict, sorry.
+
 	* config/rs6000/sysv4.h (MASK_LONG_DOUBLE_128): Define.
 	(TARGET_LONG_DOUBLE_128): Define.
 	(SUBTARGET_SWITCHES): Add -mlong-double-64 and -mlong-double-128.
Index: alias.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/alias.c,v
retrieving revision 1.97
diff -p -u -u -p -r1.97 alias.c
--- alias.c	2000/09/10 18:25:49	1.97
+++ alias.c	2000/09/11 06:40:40
@@ -1457,8 +1457,8 @@ memrefs_conflict_p (xsize, x, ysize, y, 
       return memrefs_conflict_p (xsize, x, ysize, XEXP (y, 0), c);
     }
 
-  if (GET_CODE (x) == ADDRESSOF || GET_CODE (y) == ADDRESSOF)
-    return xsize <= 0 || ysize <= 0;
+  if (GET_CODE (x) == ADDRESSOF && GET_CODE (y) == ADDRESSOF)
+    return xsize < 0 || ysize < 0;
 
   if (CONSTANT_P (x))
     {
============================================================

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]