svn commit: r259944 - head/contrib/gcc

Pedro F. Giffuni pfg at FreeBSD.org
Fri Dec 27 15:15:50 UTC 2013


Author: pfg
Date: Fri Dec 27 15:15:49 2013
New Revision: 259944
URL: http://svnweb.freebsd.org/changeset/base/259944

Log:
  gcc: merge small upstream change.
  
  Backport from mainline:
  2007-04-24  Hui-May Chang <hm.chang at apple.com>
  
  * reload1.c (merge_assigned_reloads) : Do not merge a RELOAD_OTHER
  instruction with a RELOAD_FOR_OPERAND_ADDRESS instruction.
  
  Obtained from:	gcc 4.3 (rev. r124115: GPLv2)
  MFC after:	1 week

Modified:
  head/contrib/gcc/ChangeLog.gcc43
  head/contrib/gcc/reload1.c

Modified: head/contrib/gcc/ChangeLog.gcc43
==============================================================================
--- head/contrib/gcc/ChangeLog.gcc43	Fri Dec 27 13:07:00 2013	(r259943)
+++ head/contrib/gcc/ChangeLog.gcc43	Fri Dec 27 15:15:49 2013	(r259944)
@@ -151,6 +151,11 @@
 	alignment for amdfam10 architecture. Increasing the max loop
 	alignment to 24 bytes.
 
+2007-04-24  Hui-May Chang <hm.chang at apple.com> (r124115)
+
+	* reload1.c (merge_assigned_reloads) : Do not merge a RELOAD_OTHER
+	instruction with a RELOAD_FOR_OPERAND_ADDRESS instruction.
+
 2007-04-16  Lawrence Crowl  <crowl at google.com> (r123909)
 
 	* doc/invoke.texi (Debugging Options): Add documentation for the

Modified: head/contrib/gcc/reload1.c
==============================================================================
--- head/contrib/gcc/reload1.c	Fri Dec 27 13:07:00 2013	(r259943)
+++ head/contrib/gcc/reload1.c	Fri Dec 27 15:15:49 2013	(r259944)
@@ -6238,15 +6238,23 @@ merge_assigned_reloads (rtx insn)
 		transfer_replacements (i, j);
 	      }
 
-	  /* If this is now RELOAD_OTHER, look for any reloads that load
-	     parts of this operand and set them to RELOAD_FOR_OTHER_ADDRESS
-	     if they were for inputs, RELOAD_OTHER for outputs.  Note that
-	     this test is equivalent to looking for reloads for this operand
-	     number.  */
-	  /* We must take special care with RELOAD_FOR_OUTPUT_ADDRESS; it may
-	     share registers with a RELOAD_FOR_INPUT, so we can not change it
-	     to RELOAD_FOR_OTHER_ADDRESS.  We should never need to, since we
-	     do not modify RELOAD_FOR_OUTPUT.  */
+	  /* If this is now RELOAD_OTHER, look for any reloads that
+	     load parts of this operand and set them to
+	     RELOAD_FOR_OTHER_ADDRESS if they were for inputs,
+	     RELOAD_OTHER for outputs.  Note that this test is
+	     equivalent to looking for reloads for this operand
+	     number.
+
+	     We must take special care with RELOAD_FOR_OUTPUT_ADDRESS;
+	     it may share registers with a RELOAD_FOR_INPUT, so we can
+	     not change it to RELOAD_FOR_OTHER_ADDRESS.  We should
+	     never need to, since we do not modify RELOAD_FOR_OUTPUT.
+
+	     It is possible that the RELOAD_FOR_OPERAND_ADDRESS
+	     instruction is assigned the same register as the earlier
+	     RELOAD_FOR_OTHER_ADDRESS instruction.  Merging these two
+	     instructions will cause the RELOAD_FOR_OTHER_ADDRESS
+	     instruction to be deleted later on.  */
 
 	  if (rld[i].when_needed == RELOAD_OTHER)
 	    for (j = 0; j < n_reloads; j++)
@@ -6254,6 +6262,7 @@ merge_assigned_reloads (rtx insn)
 		  && rld[j].when_needed != RELOAD_OTHER
 		  && rld[j].when_needed != RELOAD_FOR_OTHER_ADDRESS
 		  && rld[j].when_needed != RELOAD_FOR_OUTPUT_ADDRESS
+		  && rld[j].when_needed != RELOAD_FOR_OPERAND_ADDRESS
 		  && (! conflicting_input
 		      || rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
 		      || rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS)


More information about the svn-src-all mailing list