From 853ff9e23ea76554cfef2657733e6e8aa14ebbdb Mon Sep 17 00:00:00 2001
From: Joseph Myers <joseph@codesourcery.com>
Date: Fri, 15 Aug 2008 21:12:01 +0100
Subject: [PATCH] arm.c (add_minipool_backward_ref): Check for 8-byte-aligned
 entries in second case of forcing insertion after a...

	* config/arm/arm.c (add_minipool_backward_ref): Check for
	8-byte-aligned entries in second case of forcing insertion after a
	particular entry.  Change third case to avoid inserting
	non-8-byte-aligned entries before 8-byte-aligned ones.

From-SVN: r139135
---
 gcc/ChangeLog        |  7 +++++++
 gcc/config/arm/arm.c | 21 ++++++++++++---------
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d823e22a41ad..3fd1b4103926 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2008-08-15  Joseph Myers  <joseph@codesourcery.com>
+
+	* config/arm/arm.c (add_minipool_backward_ref): Check for
+	8-byte-aligned entries in second case of forcing insertion after a
+	particular entry.  Change third case to avoid inserting
+	non-8-byte-aligned entries before 8-byte-aligned ones.
+
 2008-08-15  Richard Guenther  <rguenther@suse.de>
 
 	* tree-ssa-ccp.c (maybe_fold_offset_to_reference): Do not
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index a3a49f7242b3..61b19696bab3 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -8772,17 +8772,20 @@ add_minipool_backward_ref (Mfix *fix)
 		 its maximum address (which can happen if we have
 		 re-located a forwards fix); force the new fix to come
 		 after it.  */
-	      min_mp = mp;
-	      min_address = mp->min_address + fix->fix_size;
+	      if (ARM_DOUBLEWORD_ALIGN
+		  && fix->fix_size >= 8 && mp->fix_size < 8)
+		return NULL;
+	      else
+		{
+		  min_mp = mp;
+		  min_address = mp->min_address + fix->fix_size;
+		}
 	    }
-	  /* If we are inserting an 8-bytes aligned quantity and
-	     we have not already found an insertion point, then
-	     make sure that all such 8-byte aligned quantities are
-	     placed at the start of the pool.  */
+	  /* Do not insert a non-8-byte aligned quantity before 8-byte
+	     aligned quantities.  */
 	  else if (ARM_DOUBLEWORD_ALIGN
-		   && min_mp == NULL
-		   && fix->fix_size >= 8
-		   && mp->fix_size < 8)
+		   && fix->fix_size < 8
+		   && mp->fix_size >= 8)
 	    {
 	      min_mp = mp;
 	      min_address = mp->min_address + fix->fix_size;
-- 
GitLab