]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix a problem with complex numbers on rs6000.
authorBernd Schmidt <bernds@redhat.com>
Fri, 6 Apr 2001 11:37:52 +0000 (11:37 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Fri, 6 Apr 2001 11:37:52 +0000 (11:37 +0000)
From-SVN: r41151

gcc/ChangeLog
gcc/config/rs6000/rs6000.md
gcc/cse.c
gcc/rtl.h
gcc/toplev.c

index cf9174ea0e5a43837684a2180e7d5c463a6526f2..94272ff9502a07367c08b9f78adc54df6a915fe6 100644 (file)
@@ -1,3 +1,10 @@
+2001-04-06  Bernd Schmidt  <bernds@redhat.com>
+
+       Thu Oct 28 10:20:02 1999  Geoffrey Keating  <geoffk@cygnus.com>
+       * config/rs6000/rs6000.md (movsf): Don't convert a SUBREG
+       of the function return register into a plain REG until
+       after function inlining is done.
+
 2001-04-04  Bernd Schmidt  <bernds@redhat.com>
 
        Fri Nov  5 10:07:25 1999  Nick Clifton  <nickc@cygnus.com>
index 23a9715f9be991db47fe5f630dcb9e6188ee764c..343171de739c16a0eec78af6139a35a529d3c4ca 100644 (file)
      reg.  So expand it.  */
   if (GET_CODE (operands[0]) == SUBREG
       && GET_CODE (SUBREG_REG (operands[0])) == REG
-      && REGNO (SUBREG_REG (operands[0])) < FIRST_PSEUDO_REGISTER)
+      && REGNO (SUBREG_REG (operands[0])) < FIRST_PSEUDO_REGISTER
+      && (! REG_FUNCTION_VALUE_P (SUBREG_REG (operands[0]))
+         || ! rtx_equal_function_value_matters))
     operands[0] = alter_subreg (operands[0]);
   if (GET_CODE (operands[1]) == SUBREG
       && GET_CODE (SUBREG_REG (operands[1])) == REG
index ca40ab36e418d926e9b915e9196a3185f77b0e8a..ff4d00f326e950adec12cb27194437886892d03e 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -695,8 +695,6 @@ static void check_fold_consts       PROTO((PTR));
 static struct cse_reg_info* get_cse_reg_info PROTO((int));
 static void free_cse_reg_info   PROTO((splay_tree_value));
 static void flush_hash_table   PROTO((void));
-
-extern int rtx_equal_function_value_matters;
 \f
 /* Dump the expressions in the equivalence class indicated by CLASSP.
    This function is used only for debugging.  */
index efbf588d769109620314eaba18c5e48bff127102..754228f6d5d1870f321aa3ffcb45ecc1fa71c50d 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -888,6 +888,12 @@ extern char *note_insn_name[];
 /* For a NOTE_INSN_LIVE note, the original basic block number.  */
 #define RANGE_LIVE_ORIG_BLOCK(INSN) (XINT (INSN, 1))
 \f
+/* Nonzero if we need to distinguish between the return value of this function
+   and the return value of a function called by this function.  This helps
+   integrate.c.
+   This is 1 until after the rtl generation pass.  */
+extern int rtx_equal_function_value_matters;
+
 /* Generally useful functions.  */
 
 /* The following functions accept a wide integer argument.  Rather than
index 5f8913fa3e58e86a5d65bac63aaf2b696ee7113a..a575dc6b6b8ce1abd49d6808a178b09a786c68a8 100644 (file)
@@ -137,8 +137,6 @@ You Lose!  You must define PREFERRED_DEBUGGING_TYPE!
 #define DIR_SEPARATOR '/'
 #endif
 
-extern int rtx_equal_function_value_matters;
-
 #if ! (defined (VMS) || defined (OS2))
 extern char **environ;
 #endif