rs6000.c (rs6000_cannot_force_const_mem): Match CONST high part large-toc address.
authorAlan Modra <amodra@gmail.com>
Mon, 20 Jun 2011 15:05:05 +0000 (00:35 +0930)
committerAlan Modra <amodra@gcc.gnu.org>
Mon, 20 Jun 2011 15:05:05 +0000 (00:35 +0930)
* config/rs6000/rs6000.c (rs6000_cannot_force_const_mem): Match
CONST high part large-toc address.
(rs6000_tls_referenced_p): Make static.
* config/rs6000/rs6000-protos.h (rs6000_tls_referenced_p): Delete.

From-SVN: r175219

gcc/ChangeLog
gcc/config/rs6000/rs6000-protos.h
gcc/config/rs6000/rs6000.c

index a4b5faf714ce144e8219a7ec20a8d2608bb54925..455fdcffb6bce429753a343bc14977932385d4ed 100644 (file)
@@ -1,3 +1,10 @@
+2011-06-21  Alan Modra  <amodra@gmail.com>
+
+       * config/rs6000/rs6000.c (rs6000_cannot_force_const_mem): Match
+       CONST high part large-toc address.
+       (rs6000_tls_referenced_p): Make static.
+       * config/rs6000/rs6000-protos.h (rs6000_tls_referenced_p): Delete.
+
 2011-06-20  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR middle-end/47725
index b7b60c0485f117272d0fde89d1f1bfcd88f94427..36f2a4c124a06a43497d932cd61ba1a7787faf7d 100644 (file)
@@ -171,7 +171,6 @@ extern unsigned int rs6000_dbx_register_number (unsigned int);
 extern void rs6000_emit_epilogue (int);
 extern void rs6000_emit_eh_reg_restore (rtx, rtx);
 extern const char * output_isel (rtx *);
-extern bool rs6000_tls_referenced_p (rtx);
 
 extern void rs6000_aix_asm_output_dwarf_table_ref (char *);
 
index df6e7d93a5d3d5eddb35288173992b3219cce040..cea1650ac61dd5f45b5de8e9ece864a8f84327bf 100644 (file)
@@ -6045,7 +6045,7 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model)
 
 /* Return 1 if X contains a thread-local symbol.  */
 
-bool
+static bool
 rs6000_tls_referenced_p (rtx x)
 {
   if (! TARGET_HAVE_TLS)
@@ -6059,6 +6059,11 @@ rs6000_tls_referenced_p (rtx x)
 static bool
 rs6000_cannot_force_const_mem (enum machine_mode mode ATTRIBUTE_UNUSED, rtx x)
 {
+  if (GET_CODE (x) == CONST
+      && GET_CODE (XEXP (x, 0)) == PLUS
+      && GET_CODE (XEXP (XEXP (x, 0), 1)) == HIGH)
+    return true;
+
   return rs6000_tls_referenced_p (x);
 }